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


文章目录

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

总结

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

相关推荐
懂软件的胡子个哥7 分钟前
微信群运营怎么通过微信 API 做问题提醒和活动管理
微信·自动化·wechatapi·个人微信号二次开发
迪康coolmu10 分钟前
企业文件外发管控落地实践 —— 基于迪康端点安全一体化管理系统
运维·网络·经验分享·安全
小此方33 分钟前
Linux网络(十二):HTTP短连接与长连接:从Connection机制到Cookie、Session,彻底理解HTTP的无状态
服务器·网络·http
本人手速666+42 分钟前
WeComApi 如何支撑企业微信自动回复系统:从消息回调到人工接管
自动化·企业微信·企微·企微外部群开发·wecomapi·企业微信二次开发·企微api
见闻小天地1 小时前
四方电气DL300变频器面向雕铣机多工况的技术参数与适配验证
运维·人工智能·业界资讯
PhotonixBay1 小时前
增材制造表面粗糙度测量:3D共聚焦多尺度方法
功能测试·测试工具·共聚焦显微镜·增材制造·测试标准
千舟软件2 小时前
【宿舍管理小程序】新生入住不靠纸质表
大数据·运维·服务器·科技·业界资讯
VisionDataLab2 小时前
机器视觉量产参数漂移成因与根治方案:调试稳定量产翻车的工程级锁参策略
自动化·视觉检测
j7~2 小时前
【Linux网络加餐课】(篇八)网络版计算器(终篇):守护进程、标准 IO 重定向与部署打包
linux·运维·网络编程·tcp·守护进程·io重定向·部署打包
海宇服务3 小时前
零信任架构实战:基于海宇公安二要素认证即时版构建自动化号码发卡网关
运维·人工智能·架构·自动化