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


文章目录

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

总结

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

相关推荐
java_logo4 小时前
5 分钟共享打印机:用 Docker 一键部署 CUPS
运维·docker·容器·cups·网络打印机·共享打印机·docker部署cups
曦尧4 小时前
Argo CD:面向 Kubernetes 的声明式 GitOps 持续交付工具
ai·自动化
Macbethad4 小时前
基于TwinCAT的半导体刻蚀设备SCADA管理程序技术方案
运维·网络·数据库
ai_coder_ai5 小时前
编写自动化脚本,在自己后端服务中使用云原生Baas服务进行设备相关操作
数据库·云原生·自动化
刘马想放假5 小时前
生成树协议 STP、RSTP、MSTP 分析:二层环网如何既冗余又不环路
运维·网络协议
zhz52145 小时前
Nginx + OpenSSL 自签名证书配置:优劣总结
运维·nginx
jsons15 小时前
rocky8内网离线批量补丁(你之前搭建的架构,多台服务器首选,无订阅)
linux·运维·服务器
进击切图仔5 小时前
SAM3 微调标注流水线和 Label Studio
java·服务器·前端
Bomangedd5 小时前
NSK RA25BN 滚子直线导轨技术详解
运维·服务器·经验分享·规格说明书
2301_780303906 小时前
DevSecOps建设之自动化集成与部署 Jenkins教程和使用案例
运维·自动化·jenkins