ホームページ  >  記事  >  バックエンド開発  >  go-zeroの統合テスト:APIサービスの非破壊テストの自動化を実現

go-zeroの統合テスト:APIサービスの非破壊テストの自動化を実現

王林
王林オリジナル
2023-06-22 14:06:291006ブラウズ

インターネット企業が成長を続けるにつれて、ソフトウェア開発はますます複雑になり、テストの重要性がますます高まっています。プログラムの正確性と安定性を確保するには、さまざまな種類のテストを実行する必要があります。中でも自動テストは、テスト作業の効率化やエラー率の低減、テストケースの繰り返し実行による問題の早期発見などを実現する非常に重要な手段ですが、実際の運用プロセスではさまざまな問題も発生します。 、テストツールの選択、テストケースの作成、テスト環境のセットアップなどの問題。

go-zero は、オープンソースの Go 言語フレームワークです。Go 言語のネイティブ標準ライブラリに基づいて開発されており、高パフォーマンスの分散 API サービスの迅速な構築をサポートします。 -zero は非常に豊富な機能も提供します。テスト サポート機能は、API サービスの自動非破壊テストを実現し、自動テスト プロセスにおける多くの困難を克服するのに役立ちます。

この記事では、go-zeroのテスト支援機能から始まり、go-zeroを使ってAPIサービスの非破壊テストの自動化を実現する方法を詳しく紹介します。

1. go-zeroのテスト支援機能

go-zeroは、単体テスト、HTTPテスト、結合テスト、パフォーマンステスト、サーバーサイドテストなど、豊富なテスト支援機能を提供しています。など。中でも結合テストはgo-zeroのテスト支援機能の中でも非常に重要な部分です。

go-zero の統合テストはプラグイン可能な手法を採用しており、さまざまなテスト ツールをサポートしているため、ニーズに応じてさまざまなテスト フレームワークを選択してテストできます。現在サポートされているテスト ツールには、webtest、postman、resty などが含まれます。

2. API サービスの自動非破壊テストに go-zero を使用する

次に、例を使用して、go-zero の統合テストを使用して自動非破壊テストを実行する方法を示します。 API サービスの。

  1. テスト環境の構成

統合テストを実行する前に、まずテスト環境を構成する必要があります。この例では、docker-compose を使用して環境を構築します。設定ファイルは次のとおりです。

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

上記の設定ファイルでは、API サービス、MySQL データベース、Redis キャッシュの 3 つのサービスが定義されています。 API サービスはポート 8888 を公開する必要があり、MySQL データベースと Redis キャッシュに依存します。

  1. テスト ケースの作成

テスト環境を構成した後、テスト ケースを作成する必要があります。この例では、テストに webtest を使用します。 Webtest は、HTTP プロトコルと WebSocket プロトコルをサポートする Web アプリケーション用のテスト フレームワークです。これは、HTTP リクエストとレスポンスをシミュレートし、リクエストとレスポンスの内容が期待を満たしているかどうかを検証できる豊富な API を提供します。

次は、webtest を使用してテスト ケースを作成する例です:

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)
        }
    }
}

上記のコードでは、アサーションに testify フレームワークを使用します。テスト ケースの for ループでは、2 つのテスト ケースをそれぞれテストします。期待される結果は、最初のユース ケースはユーザーを正常に作成できますが、2 番目のユース ケースは不正なパラメータにより失敗することです。テスト ケースが期待と一致する場合、アサーションは合格します。テスト ケースが期待と一致しない場合、アサーションは失敗します。

  1. テスト ケースを実行する

テスト ケースを作成した後、 go test コマンドを使用してテスト ケースを実行できます:

go test -v ./tests/users_test.go

実行後テストケースでは、ターミナルで実行結果を確認できます。テストケースの実行が成功した場合はOK結果が出力され、テストケースが失敗した場合は詳細なエラー情報が出力されます。

このようにして、go-zeroの強力なテスト支援機能とWebテストの使いやすさと柔軟性を最大限に活用し、APIサービスの自動非破壊テストが完了しました。 APIを提供するためのテストフレームワーク サービスの正確性と安定性を確実に保証します。

以上がgo-zeroの統合テスト:APIサービスの非破壊テストの自動化を実現の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。