"إذا أراد العامل أن يؤدي عمله بشكل جيد، فعليه أولاً أن يشحذ أدواته." - كونفوشيوس، "مختارات كونفوشيوس. لو لينجونج"
الصفحة الأمامية > برمجة > كيفية اختبار خوادم HTTP مع الطلبات المباشرة في Go؟

كيفية اختبار خوادم HTTP مع الطلبات المباشرة في Go؟

تم النشر بتاريخ 2024-11-09
تصفح:754

How to Test HTTP Servers with Live Requests in Go?

اختبار خوادم HTTP مع الطلبات المباشرة في Go

يعد اختبار معالجات الوحدة بشكل منفصل أمرًا ضروريًا، ولكن يمكن أن يتجاهل تأثيرات التوجيه والبرامج الوسيطة الأخرى . لإجراء اختبار شامل، فكر في استخدام أسلوب "الخادم المباشر".

اختبار الخادم المباشر باستخدام httptest.Server

يسهل نوع net/http/httptest.Server البث المباشر اختبار الخادم. يقوم بإنشاء خادم باستخدام المعالج المقدم (في هذه الحالة، جهاز توجيه Gorilla mux). إليك مثال:

func TestIndex(t *testing.T) {
  // Create server using the router initialized elsewhere.
  ts := httptest.NewServer(router)
  defer ts.Close()

  newreq := func(method, url string, body io.Reader) *http.Request {
    r, err := http.NewRequest(method, url, body)
    if err != nil {
        t.Fatal(err)
    }
    return r
  }

  tests := []struct {
    name string
    r    *http.Request
  }{
    // Test GET and POST requests.
    {name: "1: testing get", r: newreq("GET", ts.URL "/", nil)},
    {name: "2: testing post", r: newreq("POST", ts.URL "/", nil)}, // reader argument required for POST
  }
  for _, tt := range tests {
    t.Run(tt.name, func(t *testing.T) {
        resp, err := http.DefaultClient.Do(tt.r)
        defer resp.Body.Close()
        if err != nil {
            t.Fatal(err)
        }
        // check for expected response here.
    })
  }
}

لاحظ أنه يمكن استخدام httptest.Server لاختبار أي معالج يرضي واجهة http.Handler، وليس فقط Gorilla mux.

الاعتبارات

على الرغم من أن اختبار الخادم المباشر يوفر اختبارًا أكثر واقعية، إلا أنه قد يكون أيضًا أبطأ وأكثر استهلاكًا للموارد من اختبار الوحدة. فكر في الجمع بين اختبار الوحدة والتكامل للحصول على استراتيجية اختبار شاملة.

أحدث البرنامج التعليمي أكثر>

تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.

Copyright© 2022 湘ICP备2022001581号-3