Ujian integrasi go-zero: merealisasikan ujian automatik tidak merosakkan perkhidmatan API

王林
Lepaskan: 2023-06-22 14:06:29
asal
1011 orang telah melayarinya

Apabila syarikat Internet terus berkembang, pembangunan perisian menjadi lebih dan lebih kompleks, dan ujian menjadi lebih penting. Untuk memastikan ketepatan dan kestabilan program, pelbagai jenis ujian mesti dilakukan. Antaranya, ujian automatik adalah cara yang sangat penting Ia boleh meningkatkan kecekapan kerja ujian, mengurangkan kadar ralat, dan membolehkan pelaksanaan berulang kes ujian untuk mengesan masalah lebih awal, bagaimanapun, dalam proses operasi sebenar, kami juga akan menghadapi pelbagai masalah , seperti Isu seperti pemilihan alat ujian, penulisan kes ujian dan penyediaan persekitaran ujian.

go-zero ialah rangka kerja bahasa Go sumber terbuka Ia dibangunkan berdasarkan pustaka standard asli bahasa Go dan menyokong pembinaan pantas perkhidmatan API teragih yang berprestasi tinggi Pada masa yang sama, go -zero juga menyediakan yang sangat kaya Fungsi sokongan ujian boleh membantu kami merealisasikan ujian automatik tidak merosakkan perkhidmatan API dan mengatasi banyak kesukaran dalam proses ujian automatik.

Artikel ini akan bermula dengan fungsi sokongan ujian go-zero dan memperkenalkan secara terperinci cara menggunakan go-zero untuk melaksanakan ujian automatik tidak merosakkan perkhidmatan API.

1. Fungsi sokongan ujian Go-zero

go-zero menyediakan pelbagai fungsi sokongan ujian, termasuk ujian unit, ujian HTTP, ujian integrasi, ujian prestasi dan ujian sisi pelayan, dsb. . Antaranya, ujian integrasi adalah bahagian yang sangat penting dalam fungsi sokongan ujian go-zero.

Pengujian penyepaduan go-zero menggunakan kaedah boleh pasang dan menyokong pelbagai alat ujian Anda boleh memilih rangka kerja ujian yang berbeza untuk ujian mengikut keperluan khusus. Alat ujian yang disokong pada masa ini termasuk webtest, posmen, resty, dsb.

2. Gunakan go-zero untuk ujian automatik tidak merosakkan perkhidmatan API

Seterusnya, kami akan menggunakan contoh untuk menunjukkan cara menggunakan ujian penyepaduan go-zero untuk melaksanakan ujian tidak merosakkan automatik perkhidmatan API.

  1. Konfigurasikan persekitaran ujian

Sebelum menjalankan ujian penyepaduan, kita perlu mengkonfigurasi persekitaran ujian terlebih dahulu. Dalam contoh ini, kami akan menggunakan docker-compose untuk membina persekitaran. Fail konfigurasi adalah seperti berikut:

version: '3'

services:
  api:
    image: your-api-image:latest
    ports:
      - "8888:8888"
    environment:
      - MYSQL_DSN=root:@tcp(mysql:3306)/test
      - REDIS_DSN=redis:6379
      - REDIS_KEY_PREFIX=test
      - SERVICE_PORT=8888
    depends_on:
      - mysql
      - redis

  mysql:
    image: mysql:5.7
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: ''
    volumes:
      - ./docker/mysql:/docker-entrypoint-initdb.d
      - ./docker/mysql/data:/var/lib/mysql

  redis:
    image: redis:3.2
    restart: always
    volumes:
      - ./docker/redis:/data
    command: redis-server --appendonly yes
Salin selepas log masuk

Dalam fail konfigurasi di atas, tiga perkhidmatan ditakrifkan, iaitu perkhidmatan API, pangkalan data MySQL dan cache Redis. Perkhidmatan API perlu mendedahkan port 8888 dan bergantung pada pangkalan data MySQL dan cache Redis.

  1. Menulis kes ujian

Selepas mengkonfigurasi persekitaran ujian, kita perlu menulis kes ujian. Dalam contoh ini, kami akan menggunakan webtest untuk ujian. Webtest ialah rangka kerja ujian untuk aplikasi web, menyokong protokol HTTP dan protokol WebSocket. Ia menyediakan API yang kaya yang membolehkan kami mensimulasikan permintaan dan respons HTTP serta mengesahkan sama ada kandungan permintaan dan respons itu memenuhi jangkaan.

Berikut ialah contoh penggunaan webtest untuk menulis kes ujian:

import (
    "testing"
    "github.com/stretchr/testify/assert"
    "github.com/franktrue/grpc-demo/api"
    "github.com/franktrue/grpc-demo/internal/config"
    "github.com/franktrue/grpc-demo/internal/server"
    "github.com/franktrue/grpc-demo/internal/svc"
)

func TestCreateUser(t *testing.T) {
    cfg := config.TestConfig()
    s := server.NewServer(cfg)
    defer s.Stop()

    testCases := []struct {
        name      string
        req       *api.CreateUserRequest
        expectErr bool
    }{
        {
            name: "test createUser success",
            req: &api.CreateUserRequest{
                Name: "testUser",
                Age:  20,
            },
            expectErr: false,
        }, 
        {
            name: "test createUser failed",
            req: &api.CreateUserRequest{
                Name: "",
                Age:  20,
            },
            expectErr: true,
        },
    }

    for _, tc := range testCases {
        resp, err := s.CreateUser(nil, tc.req)
        if tc.expectErr {
            assert.NotNil(t, err, tc.name)
        } else {
            assert.Nil(t, err, tc.name)
            assert.NotNil(t, resp, tc.name)
        }
    }
}
Salin selepas log masuk

Dalam kod di atas, kami menggunakan rangka kerja testimoni untuk penegasan. Dalam gelung untuk kes ujian, kami menguji dua kes ujian masing-masing Hasil yang dijangkakan ialah kes penggunaan pertama boleh berjaya mencipta pengguna, manakala kes penggunaan kedua akan gagal disebabkan oleh parameter yang menyalahi undang-undang. Jika kes ujian konsisten dengan jangkaan, penegasan lulus jika kes ujian tidak konsisten dengan jangkaan, penegasan itu gagal.

  1. Jalankan kes ujian

Selepas menulis kes ujian, kita boleh menggunakan arahan ujian go untuk menjalankan kes ujian:

go test -v ./tests/users_test.go
Salin selepas log masuk

Selepas berjalan kes ujian, kita boleh melihat keputusan pelaksanaan dalam terminal. Jika kes ujian berjaya dilaksanakan, keputusan OK akan dikeluarkan jika kes ujian gagal, maklumat ralat terperinci akan dikeluarkan.

Dengan cara ini, kami telah menyelesaikan ujian automatik tidak merosakkan perkhidmatan API Dalam proses ini, kami telah menggunakan sepenuhnya fungsi sokongan ujian go-zero yang berkuasa dan kemudahan penggunaan serta fleksibiliti. rangka kerja ujian webtest untuk menyediakan API Ketepatan dan kestabilan perkhidmatan memberikan jaminan yang kukuh.

Atas ialah kandungan terperinci Ujian integrasi go-zero: merealisasikan ujian automatik tidak merosakkan perkhidmatan API. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Label berkaitan:
sumber:php.cn
Kenyataan Laman Web ini
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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan