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


文章目录

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

总结

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

相关推荐
Lsetea2 分钟前
OpenSSL报certificate is not yet valid:error 9与notBefore时间排查
linux·运维·https·ssl证书·openssl
魔法阵维护师2 分钟前
Linux 命令行入门踩坑记录:从 VMware 装系统到文件管理
linux·运维·服务器
飞飞传输7 分钟前
业务系统文件安全检测怎么做?生物医药企业选型与建设指南
大数据·运维·安全
姜鱼问生17 分钟前
docker exec 排查容器问题:从日志到进程
运维·网络·数据库·docker·容器
qq_5434478228 分钟前
DNS解析怎么排查?故障处理与运维实用手册
运维·服务器·网络·php
DeviceHub29 分钟前
AI服务器电源设计进阶:TLVR电感的应用解析与选型验证指南
运维·服务器·人工智能
Apipi*30 分钟前
30天速通Linux 第七章进程间通信
linux·运维·服务器
smile00239 分钟前
Modbus RTU/TCP通信测试怎么做?从协议要点到自动化回归的完整实践
tcp/ip·回归·自动化
迪康软件zz1 小时前
终端审批体系怎么搭?从模板配置到业务连续性
运维·安全·自动化运维
科技研学社1 小时前
中小服装工装厂自动化改造:产线节拍平衡与工位减负实施方案
运维·自动化