実践的な演習
それぞれ 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の実践的なプロジェクトを完了し、プロセス全体を通して実践的な情報を提供します。【自動テスト/インターフェーステスト/パフォーマンステスト/ソフトウェアテスト】
最後に、私の記事を注意深く読んでくださった皆さんに感謝します。互恵性は常に必要です。それほど価値のあるものではありませんが、使用できる場合は、直接受け取ることができます。
この情報は、[ソフトウェア テスト] の友人にとって最も包括的かつ完全な準備倉庫となるはずです。この倉庫は、最も困難な旅を乗り越える何万人ものテスト エンジニアにも同行してきました。また、皆さんのお役に立てれば幸いです。