目录
- 多套环境测试背景
- 多套环境测试解决方案
多套环境测试背景
- 集成测试环境
- 验收测试环境
- 灰度测试环境
多套环境测试解决方案
- 测试环境 1
- 域名:http://httpbin.org
- 接口:
/get
- 测试环境 2
- 域名:https://httpbin.ceshiren.com
- 接口:
/get
多套环境测试方案(一)
- 痛点
- 硬编码耦合
- 维护成本高
import org.junit.jupiter.api.Test;
import static io.restassured.RestAssured.given;
public class TestEnv {
@Test
void testOrg(){
// 测试org环境接口
given()
.when()
.get("http://httpbin.org/get") // 发送GET请求
.then()
.statusCode(200);
}
@Test
void testCeshiren(){
// 测试ceshiren环境接口
given()
.when()
.get("https://httpbin.ceshiren.com/get") // 发送GET请求
.then()
.statusCode(200);
}
}
多套环境测试方案(二)
优点
通过配置信息管理环境
痛点
多个测试文件维护成本高
import io.restassured.RestAssured;
import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.Test;
import java.util.HashMap;
import static io.restassured.RestAssured.given;
public class TestEnvConf {
@BeforeAll
static void setupClass(){
// 实例化环境配置对象
HashMap<String, String> envs = new HashMap<>();
// 测试环境1的域名配置
envs.put("org", "http://httpbin.org/get");
// 测试环境1的域名配置
envs.put("ceshiren", "http://httpbin.ceshiren.com/get");
// 选定默认环境名称,方便灵活切换
envs.put("default", "org");
// 设置基路径,值为选定的域名地址
RestAssured.baseURI = envs.get(envs.get("default"));
}
@Test
void testEnvs(){
given()
.when()
.get("/get") // 发送GET请求
.then();
}
}
多套环境测试方案(三)
最佳实践:配置文件
import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.dataformat.yaml.YAMLFactory;
import io.restassured.RestAssured;
import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.Test;
import java.io.File;
import java.io.IOException;
import java.util.HashMap;
import static io.restassured.RestAssured.given;
public class TestEnvYaml {
@BeforeAll
static void setupClass() throws IOException {
/*
使用Jackson读取yaml文件
*/
// 实例化一个ObjectMapper 对象
ObjectMapper objectMapper = new ObjectMapper(new YAMLFactory());
// 读取 resources 目录中的envs.yaml文件
ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
File yamlFile = new File(classLoader.getResource("envs.yaml").getFile());
// 定义序列化的结构 TypeReference
TypeReference<HashMap<String, String>> typeRef = new
TypeReference<HashMap<String, String>>() {};
// 解析envs.yaml文件内容
HashMap<String, String> envs = objectMapper.readValue(yamlFile, typeRef);
// 设置基路径,值为选定的域名地址
RestAssured.baseURI = envs.get(envs.get("default"));
}
@Test
void testEnvs() {
//发起请求
given()
.when()
.get("/get")
.then()
.statusCode(200);
}
}
附录:Jackson 依赖
jackson-databind
jackson-dataformat-yaml
com.fasterxml.jackson.core
jackson-databind
2.13.0
test
com.fasterxml.jackson.dataformat
jackson-dataformat-yaml
2.13.0