Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Ujian aplikasi web pembelajaran Golang

Ujian aplikasi web pembelajaran Golang

王林
王林asal
2023-06-24 10:58:401181semak imbas

Dengan perkembangan pesat teknologi Internet, kepentingan aplikasi Web menjadi semakin penting. Untuk memastikan kualiti dan kebolehpercayaan aplikasi web, ujian tidak dapat dielakkan. Dalam pembelajaran Golang, pengujian aplikasi web juga merupakan bahagian yang perlu diberi tumpuan dan dipelajari. Artikel ini akan menerangkan ujian aplikasi web dalam pembelajaran Golang, termasuk ujian unit, ujian integrasi dan ujian hujung ke hujung.

  1. Ujian unit

Ujian unit merujuk kepada ujian unit terkecil yang boleh diuji dalam atur cara untuk memastikan setiap unit atur cara boleh berjalan seperti biasa. Dalam aplikasi web, ujian unit secara amnya menyasarkan unit logik seperti penghalaan dan pemproses.

Berikut ialah contoh mudah yang menunjukkan cara menggunakan pakej ujian bahasa Go untuk ujian unit:

package main

import (
    "net/http"
    "net/http/httptest"
    "testing"
)

func TestHelloHandler(t *testing.T) {
    req, err := http.NewRequest("GET", "/hello", nil)
    if err != nil {
        t.Fatal(err)
    }

    rr := httptest.NewRecorder()
    handler := http.HandlerFunc(helloHandler)

    handler.ServeHTTP(rr, req)

    if status := rr.Code; status != http.StatusOK {
        t.Errorf("handler returned wrong status code: got %v want %v",
            status, http.StatusOK)
    }

    if rr.Body.String() != "Hello, World!" {
        t.Errorf("handler returned unexpected body: got %v want %v",
            rr.Body.String(), "Hello, World!")
    }
}

func helloHandler(w http.ResponseWriter, r *http.Request) {
    w.Write([]byte("Hello, World!"))
}

Di atas kami mencipta fungsi ujian TestHelloHandler menggunakan jenis struktur testing.T bagi pakej ujian. Fungsi ini akan memulakan permintaan GET ke laluan "/hello" aplikasi dan menyemak sama ada kod status respons dan badan respons adalah betul.

  1. Ujian integrasi

Ujian integrasi merujuk kepada penyepaduan kebergantungan antara ujian unit untuk memastikan keseluruhan program boleh berjalan seperti biasa. Dalam aplikasi web, ujian integrasi biasanya menguji pernyataan SQL, prosedur tersimpan, dsb.

Berikut ialah contoh mudah yang menunjukkan cara menggunakan pakej net/http dan pangkalan data/sql bahasa Go untuk ujian integrasi:

package main

import (
    "database/sql"
    "log"
    "net/http"
    "net/http/httptest"
    "os"
    "testing"

    _ "github.com/lib/pq"
)

var (
    db *sql.DB
    ts *httptest.Server
)

func TestMain(m *testing.M) {
    db, _ = sql.Open("postgres", "user=postgres password=postgres host=localhost port=5432 dbname=test sslmode=disable")
    defer db.Close()

    if err := db.Ping(); err != nil {
        log.Fatalf("Could not connect to database: %v", err)
    }
    log.Println("Database connected")

    ts = httptest.NewServer(http.HandlerFunc(helloHandler))
    defer ts.Close()

    code := m.Run()

    os.Exit(code)
}

func TestDatabase(t *testing.T) {
    if err := db.Ping(); err != nil {
        t.Errorf("failed to ping database: %v", err)
    }
}

func TestHelloHandler(t *testing.T) {
    resp, err := http.Get(ts.URL + "/hello")
    if err != nil {
        t.Errorf("failed to send GET request to server: %v", err)
    }

    if resp.StatusCode != http.StatusOK {
        t.Fatalf("expected status code %d but got %d", http.StatusOK, resp.StatusCode)
    }

    if resp.Header.Get("Content-Type") != "text/plain; charset=utf-8" {
        t.Errorf("unexpected response content type")
    }
}

Di atas kami menggunakan pakej pangkalan data/sql bahasa Go untuk menyambung dan Sambungan ke pangkalan data PostgreSQL telah diuji pada masa yang sama, kami juga menggunakan pakej net/http untuk mensimulasikan pelayan web dan menghantar permintaan GET, dan menguji sama ada respons kepada permintaan itu betul. Sebelum menguji fungsi, kami memulakan pangkalan data dan menjalankan pelayan ujian menggunakan fungsi TestMain.

  1. Ujian hujung ke hujung

Ujian hujung ke hujung merujuk kepada menguji keseluruhan aplikasi, mensimulasikan operasi pengguna untuk memastikan program berfungsi seperti yang diharapkan pengguna. Dalam aplikasi web, ujian hujung ke hujung biasanya menguji antara muka dan interaksi aplikasi melalui alatan automatik.

Berikut ialah contoh mudah yang menunjukkan cara menggunakan pakej selenium bagi bahasa Go dan pemacu krom untuk ujian hujung ke hujung:

package main

import (
    "testing"

    "github.com/tebeka/selenium"
)

func TestWebInterface(t *testing.T) {
    caps := selenium.Capabilities{"browserName": "chrome"}
    wd, err := selenium.NewRemote(caps, "")
    if err != nil {
        t.Fatalf("failed to create WebDriver: %v", err)
    }
    defer wd.Quit()

    if err := wd.Get("http://localhost:8080"); err != nil {
        t.Errorf("failed to visit homepage: %v", err)
    }

    elem, err := wd.FindElement(selenium.ByCSSSelector, "h1")
    if err != nil {
        t.Errorf("failed to find header element: %v", err)
    }

    txt, err := elem.Text()
    if err != nil {
        t.Errorf("failed to get header text: %v", err)
    }

    if txt != "Welcome to my website!" {
        t.Errorf("unexpected header text")
    }
}

Di atas kami menggunakan pakej selenium bagi Bahasa Go dan pemacu krom Antara muka Web telah disimulasikan, antara muka dan interaksi aplikasi telah diuji, dan elemen h1 dalam halaman telah diperiksa untuk melihat sama ada ia memenuhi keperluan.

Ringkasan

Apabila menguji aplikasi web, ujian unit, ujian integrasi dan ujian hujung ke hujung semuanya amat diperlukan. Antaranya, ujian unit digunakan terutamanya untuk menguji unit logik terkecil dalam program ujian integrasi digunakan untuk menguji kebergantungan dan operasi keseluruhan program dan ujian hujung ke hujung digunakan untuk menguji antara muka pengguna dan interaksi; permohonan itu. Tiga kaedah ujian di atas boleh dilaksanakan menggunakan pakej ujian bahasa Go.

Atas ialah kandungan terperinci Ujian aplikasi web pembelajaran Golang. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn