Maison > développement back-end > Golang > Comment tester les gestionnaires de serveur HTTP avec des requêtes en direct dans Go ?

Comment tester les gestionnaires de serveur HTTP avec des requêtes en direct dans Go ?

Barbara Streisand
Libérer: 2024-11-02 18:37:03
original
601 Les gens l'ont consulté

How to Test HTTP Server Handlers with Live Requests in Go?

Test des serveurs HTTP avec des requêtes en direct dans Go

Le problème en question consiste à s'assurer qu'une fonction de gestionnaire HTTP répond correctement aux diverses méthodes de requête HTTP (GET et POST) dans un scénario de serveur en direct. Cela nécessite de tester le gestionnaire dans le contexte d'un serveur réel, plutôt que de s'appuyer uniquement sur des tests unitaires.

Pour y parvenir, le type net/http/httptest.Server fournit une solution. Il permet de créer un serveur live utilisant un routeur spécifique. Le routeur peut être basé sur Gorilla mux (comme mentionné dans la question), ServeMux de net/http ou toute autre implémentation satisfaisant l'interface net/http Handler.

Voici un exemple de configuration d'un serveur en direct. using httptest.Server :

<code class="go">import (
    "io"
    "net/http"
    "net/http/httptest"
    "testing"
)

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

    // Create a function to generate a request with the desired method and URL.
    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
    }

    // Define test cases with various requests.
    tests := []struct {
        name string
        r    *http.Request
    }{
        {name: "1: testing get", r: newreq("GET", ts.URL+"/", nil)},
        {name: "2: testing post", r: newreq("POST", ts.URL+"/", nil)}, // Note: POST requests require a reader in the body
    }

    // Run tests with live requests to the server.
    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 in the live server's response here.
        })
    }
}</code>
Copier après la connexion

Dans cet exemple, le routeur est supposé être initialisé en dehors de la fonction de test. Le httptest.Server est ensuite créé à l'aide du routeur et fermé une fois le test terminé. La fonction newreq est utilisée pour générer des requêtes avec des méthodes et des URL spécifiques. Les cas de test sont définis comme une tranche de structures pour faciliter les itérations.

En envoyant des requêtes en direct au serveur à l'aide de http.DefaultClient.Do(), nous pouvons valider le comportement de la fonction de gestionnaire dans le contexte de un serveur en direct. Cela fournit une approche de test plus complète par rapport aux tests unitaires isolés.

Notez que l'approche et les détails de cette réponse sont applicables à tout routeur qui implémente l'interface http.Handler, pas seulement Gorilla mux.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal