文章目录
- [1. 多套环境测试配置](#1. 多套环境测试配置)
-
- [1.1. 创建yml文件-配置多套环境](#1.1. 创建yml文件-配置多套环境)
- [1.2. java中配置依赖](#1.2. java中配置依赖)
- [1.3 读取配置信息-读取yaml文件中环境配置](#1.3 读取配置信息-读取yaml文件中环境配置)
- [2. 多响应类型封装设计](#2. 多响应类型封装设计)
-
- [2.1 java中配置依赖](#2.1 java中配置依赖)
- [2.2 封装公共方法-响应的二次封装](#2.2 封装公共方法-响应的二次封装)
- [2.3 使用封装的转换响应的方法](#2.3 使用封装的转换响应的方法)
- 总结
本文开始
1. 多套环境测试配置
根据不同域名配置到配置文件即可
多套环境测试部署:配置文件,可以用例与配置进行解耦;
1.1. 创建yml文件-配置多套环境
java中resoures文件夹下创建yaml文件
yaml文件:存储域名配置信息
创建文件env.yaml文件
yaml
default: test
dev: http://httpbin.dev.com
test: http://httpbin.test.com
1.2. java中配置依赖
自动化脚本-测试用例中使用yaml中配置
读取Yaml文件配置依赖
xml
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.13.0</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.dataformat</groupId>
<artifactId>jackson-dataformat-yaml</artifactId>
<version>2.13.0</version>
</dependency>
1.3 读取配置信息-读取yaml文件中环境配置
使用方法:objectMapper.readValue(yml文件,目标对象结构)方法读取yaml文件
java
@BeforeAll
//使用Jackson读取yaml文件
static void setupClass() throws IOException {
// 实例化一个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>> typeReference = new TypeReference<HashMap<String, String>>() {};
// 解析envs.yaml文件内容
HashMap<String, String> envs = objectMapper.readValue(yamlFile, typeReference);
// 设置基路径,值为选定的域名地址
RestAssured.baseURI = envs.get(envs.get("default"));
//RestAssured.baseURI = env.get("dev");
System.out.println(baseURI);
}
//使用
//测试用例
@Test
void testEnvs() {
System.out.println(baseURI);
//发起请求
given()
.when()
.get("/get")
.then()
.statusCode(200);
}
2. 多响应类型封装设计
应用场景:响应值不统一,导致断言比较困难的情况
解决方案:获得的响应信息全部转换为统一的结构化的数据进行处理;
如:获取xml响应,json响应等统一转换为Json格式,在根据Json提取完成断言;
使用方式:对获取响应值进行二次封装,使用统一提取方式完成断言;
通用转为Json格式,方式如下:
2.1 java中配置依赖
xml
<!-- pom中的依赖 -->
<!-- 直接将xml转换成字符串json -->
<dependency>
<groupId>com.fasterxml.jackson.dataformat</groupId>
<artifactId>jackson-dataformat-xml</artifactId>
<version>2.13.1</version>
</dependency>
<!--断言使用-->
<dependency>
<groupId>com.jayway.jsonpath</groupId>
<artifactId>json-path</artifactId>
<version>2.6.0</version>
<scope>test</scope>
</dependency>
2.2 封装公共方法-响应的二次封装
配置公共方法 / 配置工具类去使用
主要使用了
xmlMapper.readTree()方法
objectMapper.writeValueAsString()方法
【注】当不知道响应返回格式是什么类型,可以都调用转换方法解决这个问题;
java
// xml 转换 json
public String resToJsonConvert(String originRes) throws IOException {
//先判断开头是否xml格式,是再转换
if(originRes.startsWith("<?xml")){
XmlMapper xmlMapper = new XmlMapper();
JsonNode jsonNode = xmlMapper.readTree(originRes.getBytes());
ObjectMapper objectMapper = new ObjectMapper();
originRes = objectMapper.writeValueAsString(jsonNode);
}
return originRes;
}
2.3 使用封装的转换响应的方法
自动化测试用例中使用响应转换,可以忽略响应是什么,直接提取参数即可;
java
//xml响应转JSON
@Test
void xmlResToJson() throws IOException {
String result = given()
.when()
.get("https://www.nasa.gov/rss/dyn/lg_image_of_the_day.rss")
.then()
.extract().body().asString();
// 调用转换成json的方法
String res = resToJsonConvert(result);
System.out.println(res);
//获取响应中信息用于断言
List<String> title = JsonPath.read(res, "$..title");
assertEquals("NASA Image of the Day", title.get(0));
}
【扩展】
pyhotn中使用xml转为dict-字典类型
python
# 准备环境
pip install xmltodict
总结
✨✨✨各位读友,本篇分享到内容如果对你有帮助给个👍赞鼓励一下吧!!
感谢每一位一起走到这的伙伴,我们可以一起交流进步!!!一起加油吧!!!