複数の環境で自動テストを実装するにはどうすればよいですか?

実践的な演習

それぞれ 2 セットのテスト環境を準備し、それらに対する get リクエストを開始し、パラメーター名 (対応する値は hogwarts) を渡し、その応答値をアサートします。

テスト環境 1: http://httpbin.org/get
テスト環境 2: https://httpbin.ceshiren.com/get

<strong>Python のバージョン</strong>

import requests
 
# 测试环境1测试用例
def test_org():
    res = requests.get(url="http://httpbin.org/get", params={"name": "hogwarts"})
    assert res.json()["args"]["name"] == "hogwarts"
 
# 测试环境2测试用例
def test_ceshiren():
    res = requests.get("https://httpbin.ceshiren.com/get", \
    params={"name": "hogwarts"})
    assert res.json()["args"]["name"] == "hogwarts"

<strong>Java バージョン</strong>

import org.junit.jupiter.api.Test;
import static io.restassured.RestAssured.given;
import static org.hamcrest.core.IsEqual.equalTo;
public class envTest {
    // 测试环境1测试用例
    @Test
    void envOrg() {
        given().
                params("name", "hogwarts").
                when().
                get("http://httpbin.org/get").
                then().
                body("args.name", equalTo("hogwarts"));
    }
    // 测试环境2测试用例
    @Test
    void envCeshiren() {
        given().
                params("name", "hogwarts").
                when().
                get("https://httpbin.ceshiren.com/get").
                then().
                body("args.name", equalTo("hogwarts"));
    }
}

上記ではマルチ環境テストを実現していますが、各テストケースはテスト環境に対応しており、ユースケースが変わると、それぞれのユースケースを変更する必要があります。

上記の問題を解決するには、管理用の env 構成情報にドメイン名を含めて、リクエスト構造内の URL アドレスを、env 構成ファイル内の対応する環境の URL アドレスに置き換えます。

デフォルト環境の構成に使用されるデフォルトフィールドなどのデフォルト構成情報を追加することもできます。default の値が org に変更されると、実行ユース ケースは org 環境に対するリクエストを開始し、default の値が ceshiren に変更されると、実行ユース ケースは ceshiren 環境に対するリクエストを開始します。

最適化されたテストケース

Pythonのバージョン

import requests
envs = {
    "default": "ceshiren",
    "org": "http://httpbin.org/get",
    "ceshiren": "http://httpbin.ceshiren.com/get"
}
# 测试用例
def test_envs():
# envs['default'] 代表 ceshiren, envs['ceshiren'] 代表对应的url
    res = requests.get(url= envs[envs['default']])
    assert res.status_code == 200

Javaのバージョン

import org.junit.jupiter.api.Test;
import java.util.HashMap;
import java.util.Map;
import static io.restassured.RestAssured.given;
import static org.hamcrest.core.IsEqual.equalTo;
 
public class envTest {
    public final static  Map<String, String> envs = new HashMap();
    static {
        envs.put("default", "ceshiren");
        envs.put("org", "http://httpbin.org/get");
        envs.put("ceshiren", "http://httpbin.ceshiren.com/get");
    }
 
    @Test
    void envs() {
        given().
                params("name", "hogwarts").
                when().
                get(envs.get(envs.get("default"))).
                then().
                body("args.name", equalTo("hogwarts"));
    }
 
}

上記のソリューションでは URL パラメーターをユースケースから切り離していますが、プロジェクトのバージョンが急速に反復されると、インターフェイスがますます増え、この envs 環境構成を複数のテスト スクリプト ファイルで設定する必要があります。環境を切り替えるたびにいちいち設定を変更する必要があり、メンテナンスコストが非常に高くつきます。

したがって、環境構成情報 envs を envs.yaml ファイルに保存し、テスト スクリプトで yaml 情報を読み取る関数を定義し、必要に応じて呼び出す必要があります。

構成ファイル envs.yaml の内容:

default: org
org: http://httpbin.org
ceshiren: http://httpbin.ceshiren.com

最適化されたテストケース

Pythonのバージョン

import requests
import yaml
 
# 读取本地yaml配置文件
def get_envs():
    with open('envs.yaml', 'r') as file:
        return yaml.safe_load(file)
 
# 测试用例
def test_envs():
    # 获取环境配置信息
    envs = get_envs()
    # 发送请求
    res = requests.get(url= envs[envs['default']] + "/get")
    print(res.json()['headers']['Host'])

<strong>Java バージョン</strong>

import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.dataformat.yaml.YAMLFactory;
import org.junit.jupiter.api.Test;
import java.io.File;
import java.io.IOException;
import java.util.HashMap;
import static io.restassured.RestAssured.given;
import static org.hamcrest.core.IsEqual.equalTo;
public class envTest {
    //读取yaml本地的配置文件
    public HashMap<String, String> getEnvs() throws IOException {
        ObjectMapper objectMapper = new ObjectMapper(new YAMLFactory());
        TypeReference<HashMap<String, String>> typeReference = new TypeReference<HashMap<String, String>>() {
        };
        HashMap<String, String> envs = null;
        String filePath = this.getClass().getResource("env.yaml").getPath();
        envs = objectMapper.readValue(new File(filePath), typeReference);
        return envs;
        }
    @Test
    void envs() throws IOException {
        // 获取环境配置
        HashMap<String, String> envs =  this.getEnvs();
        given().
                params("name", "hogwarts").
                when().
                //发送请求
                get(envs.get(envs.get("default"))).
                then().
                body("args.name", equalTo("hogwarts"));
    }
}

テスト環境を切り替える必要がある場合は、構成ファイル envs.yaml のデフォルト フィールドの値を変更するだけで済みます。

【2023年最新】Python自動テスト、7日間で60の実践的なプロジェクトを完了し、プロセス全体を通して実践的な情報を提供します。【自動テスト/インターフェーステスト/パフォーマンステスト/ソフトウェアテスト】

最後に、私の記事を注意深く読んでくださった皆さんに感謝します。互恵性は常に必要です。それほど価値のあるものではありませんが、使用できる場合は、直接受け取ることができます。

ここに画像の説明を挿入します

この情報は、[ソフトウェア テスト] の友人にとって最も包括的かつ完全な準備倉庫となるはずです。この倉庫は、最も困難な旅を乗り越える何万人ものテスト エンジニアにも同行してきました。また、皆さんのお役に立てれば幸いです。   

おすすめ

転載: blog.csdn.net/nhb687096/article/details/133205822