接口自动化 - 多环境统一文件配置 +多响应统一转换处理


文章目录

  • [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

总结

✨✨✨各位读友,本篇分享到内容如果对你有帮助给个👍赞鼓励一下吧!!
感谢每一位一起走到这的伙伴,我们可以一起交流进步!!!一起加油吧!!!

相关推荐
Leinwin8 小时前
OpenClaw 多 Agent 协作框架的并发限制与企业化规避方案痛点直击
java·运维·数据库
2401_865382508 小时前
信息化项目运维与运营的区别
运维·运营·信息化项目·政务信息化
漠北的哈士奇8 小时前
VMware Workstation导入ova文件时出现闪退但是没有报错信息
运维·vmware·虚拟机·闪退·ova
如意.7598 小时前
【Linux开发工具实战】Git、GDB与CGDB从入门到精通
linux·运维·git
运维小欣9 小时前
智能体选型实战指南
运维·人工智能
yy55279 小时前
Nginx 性能优化与监控
运维·nginx·性能优化
爱吃土豆的马铃薯ㅤㅤㅤㅤㅤㅤㅤㅤㅤ10 小时前
Linux 查询某进程文件所在路径 命令
linux·运维·服务器
05大叔11 小时前
网络基础知识 域名,JSON格式,AI基础
运维·服务器·网络
安当加密11 小时前
无需改 PAM!轻量级 RADIUS + ASP身份认证系统 实现 Linux 登录双因子认证
linux·运维·服务器
dashizhi201511 小时前
服务器共享禁止保存到本地磁盘、共享文件禁止另存为本地磁盘、移动硬盘等
运维·网络·stm32·安全·电脑