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


文章目录

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

总结

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

相关推荐
大树8817 小时前
金刚石散热越强,管路越先见顶
大数据·运维·服务器·人工智能·ai
摇滚侠17 小时前
Linux CentOS7 rpm 安装 MySQL 5.7
linux·运维·mysql
霸道流氓气质18 小时前
领域驱动设计(DDD)在 Spring Boot 微服务中的实践指南
运维·spring boot·微服务
小宇宙Zz18 小时前
Maven依赖冲突
java·服务器·maven
Inhand陈工19 小时前
基于台达PLC与映翰通IG502的智慧水产养殖精准投喂与远程运维解决方案
运维·人工智能·物联网·阿里云·信息与通信
酣大智19 小时前
ARP代理--工作原理
运维·网络·arp·arp代理
shushangyun_19 小时前
2026年快消品B2B系统推荐:支持终端门店订货、促销政策自动化的工具?
java·运维·网络·数据库·人工智能·spring·自动化
古城小栈19 小时前
Unix 与 Linux 异同小叙
linux·服务器·unix
施努卡机器视觉20 小时前
SNK施努卡侧滑门锁上滑轮总成自动化装配线,从零件到组件,全流程精密制造方案
运维·自动化·制造
程序猿阿伟20 小时前
《Chrome离线扩展安装的底层逻辑与场景落地指南》
服务器·网络·chrome