接口自动化测试,如何实现多套环境的自动化测试?

2023-10-11 16:36

本文主要是介绍接口自动化测试,如何实现多套环境的自动化测试?,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

在敏捷迭代的项目中,通常会将后台服务部署到多套测试环境。那么在进行接口自动化测试时,则需要将服务器的域名进行配置。使用一套接口测试脚本,通过切换域名地址配置,实现多套环境的自动化测试。

实战练习

分别准备两套测试环境,都对其发起 get 请求,传入参数 name,对应值为 hogwarts,并断言其响应值。

  • 测试环境1:http://httpbin.org/get
  • 测试环境2:https://httpbin.ceshiren.com/get

Python 版本

import requests# 测试环境1测试用例
def test_org():res = requests.get(url="http://httpbin.org/get", params={"name": "hogwarts"})assert res.json()["args"]["name"] == "hogwarts"# 测试环境2测试用例
def test_ceshiren():res = requests.get("https://httpbin.ceshiren.com/get", \params={"name": "hogwarts"})assert res.json()["args"]["name"] == "hogwarts"

Java 版本

import org.junit.jupiter.api.Test;
import static io.restassured.RestAssured.given;
import static org.hamcrest.core.IsEqual.equalTo;
public class envTest {// 测试环境1测试用例@Testvoid envOrg() {given().params("name", "hogwarts").when().get("http://httpbin.org/get").then().body("args.name", equalTo("hogwarts"));}// 测试环境2测试用例@Testvoid envCeshiren() {given().params("name", "hogwarts").when().get("https://httpbin.ceshiren.com/get").then().body("args.name", equalTo("hogwarts"));}
}

以上虽然实现了多环境的测试,但是每条测试用例都对应一个测试环境,一旦用例发生变化,那么则每条用例都需要进行修改。

针对以上的问题,可以把域名统一放在 env 配置信息中进行管理,然后将请求结构中的 url 地址替换成 env 配置文件中对应环境的 url 地址。

还可以添加默认配置信息,如 default 字段,default 用来配置默认使用的环境。当 default 的值改成 org,执行用例就会发起对 org 环境的请求;当 default 的值改成 ceshiren,执行用例就会发起对 ceshiren 环境的请求。

优化后的测试用例

Python 版本

import requests
envs = {"default": "ceshiren","org": "http://httpbin.org/get","ceshiren": "http://httpbin.ceshiren.com/get"
}
# 测试用例
def test_envs():
# envs['default'] 代表 ceshiren, envs['ceshiren'] 代表对应的urlres = requests.get(url= envs[envs['default']])assert res.status_code == 200

Java版本

import org.junit.jupiter.api.Test;
import java.util.HashMap;
import java.util.Map;
import static io.restassured.RestAssured.given;
import static org.hamcrest.core.IsEqual.equalTo;public class envTest {public final static  Map<String, String> envs = new HashMap();static {envs.put("default", "ceshiren");envs.put("org", "http://httpbin.org/get");envs.put("ceshiren", "http://httpbin.ceshiren.com/get");}@Testvoid envs() {given().params("name", "hogwarts").when().get(envs.get(envs.get("default"))).then().body("args.name", equalTo("hogwarts"));}}

上面的方案虽然将 url 参数与用例实现了解耦,但是随着项目版本的快速迭代,接口会越来越多,在多个测试脚本文件中都要设置这个 envs 环境配置。每次切换环境时,都要逐个修改配置,维护成本非常高。

因此,就需要将环境配置信息 envs 存储到 envs.yaml 文件中,然后在测试脚本中定义读取 yaml 信息的函数,在需要的地方调用即可。

配置文件 envs.yaml 内容:

default: org
org: http://httpbin.org
ceshiren: http://httpbin.ceshiren.com

优化后的测试用例

Python 版本

import requests
import yaml# 读取本地yaml配置文件
def get_envs():with open('envs.yaml', 'r') as file:return yaml.safe_load(file)# 测试用例
def test_envs():# 获取环境配置信息envs = get_envs()# 发送请求res = requests.get(url= envs[envs['default']] + "/get")print(res.json()['headers']['Host'])

Java 版本

import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.dataformat.yaml.YAMLFactory;
import org.junit.jupiter.api.Test;
import java.io.File;
import java.io.IOException;
import java.util.HashMap;
import static io.restassured.RestAssured.given;
import static org.hamcrest.core.IsEqual.equalTo;
public class envTest {//读取yaml本地的配置文件public HashMap<String, String> getEnvs() throws IOException {ObjectMapper objectMapper = new ObjectMapper(new YAMLFactory());TypeReference<HashMap<String, String>> typeReference = new TypeReference<HashMap<String, String>>() {};HashMap<String, String> envs = null;String filePath = this.getClass().getResource("env.yaml").getPath();envs = objectMapper.readValue(new File(filePath), typeReference);return envs;}@Testvoid envs() throws IOException {// 获取环境配置HashMap<String, String> envs =  this.getEnvs();given().params("name", "hogwarts").when().//发送请求get(envs.get(envs.get("default"))).then().body("args.name", equalTo("hogwarts"));}
}

当需要切换测试环境时,只需要改动配置文件 envs.yaml 中的 default 字段的值即可。
 

最后:下面是配套学习资料,对于做【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!【100%无套路免费领取】

软件测试面试小程序

被百万人刷爆的软件测试题库!!!谁用谁知道!!!全网最全面试刷题小程序,手机就可以刷题,地铁上公交上,卷起来!

涵盖以下这些面试题板块:

1、软件测试基础理论 ,2、web,app,接口功能测试 ,3、网络 ,4、数据库 ,5、linux

6、web,app,接口自动化 ,7、性能测试 ,8、编程基础,9、hr面试题 ,10、开放性测试题,11、安全测试,12、计算机基础

  全套资料获取方式:点击下方小卡片自行领取即可

这篇关于接口自动化测试,如何实现多套环境的自动化测试?的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/189385

相关文章

SpringBoot3实现Gzip压缩优化的技术指南

《SpringBoot3实现Gzip压缩优化的技术指南》随着Web应用的用户量和数据量增加,网络带宽和页面加载速度逐渐成为瓶颈,为了减少数据传输量,提高用户体验,我们可以使用Gzip压缩HTTP响应,... 目录1、简述2、配置2.1 添加依赖2.2 配置 Gzip 压缩3、服务端应用4、前端应用4.1 N

SpringBoot实现数据库读写分离的3种方法小结

《SpringBoot实现数据库读写分离的3种方法小结》为了提高系统的读写性能和可用性,读写分离是一种经典的数据库架构模式,在SpringBoot应用中,有多种方式可以实现数据库读写分离,本文将介绍三... 目录一、数据库读写分离概述二、方案一:基于AbstractRoutingDataSource实现动态

Python FastAPI+Celery+RabbitMQ实现分布式图片水印处理系统

《PythonFastAPI+Celery+RabbitMQ实现分布式图片水印处理系统》这篇文章主要为大家详细介绍了PythonFastAPI如何结合Celery以及RabbitMQ实现简单的分布式... 实现思路FastAPI 服务器Celery 任务队列RabbitMQ 作为消息代理定时任务处理完整

Java枚举类实现Key-Value映射的多种实现方式

《Java枚举类实现Key-Value映射的多种实现方式》在Java开发中,枚举(Enum)是一种特殊的类,本文将详细介绍Java枚举类实现key-value映射的多种方式,有需要的小伙伴可以根据需要... 目录前言一、基础实现方式1.1 为枚举添加属性和构造方法二、http://www.cppcns.co

使用Python实现快速搭建本地HTTP服务器

《使用Python实现快速搭建本地HTTP服务器》:本文主要介绍如何使用Python快速搭建本地HTTP服务器,轻松实现一键HTTP文件共享,同时结合二维码技术,让访问更简单,感兴趣的小伙伴可以了... 目录1. 概述2. 快速搭建 HTTP 文件共享服务2.1 核心思路2.2 代码实现2.3 代码解读3.

MySQL双主搭建+keepalived高可用的实现

《MySQL双主搭建+keepalived高可用的实现》本文主要介绍了MySQL双主搭建+keepalived高可用的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,... 目录一、测试环境准备二、主从搭建1.创建复制用户2.创建复制关系3.开启复制,确认复制是否成功4.同

Java实现文件图片的预览和下载功能

《Java实现文件图片的预览和下载功能》这篇文章主要为大家详细介绍了如何使用Java实现文件图片的预览和下载功能,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... Java实现文件(图片)的预览和下载 @ApiOperation("访问文件") @GetMapping("

使用Sentinel自定义返回和实现区分来源方式

《使用Sentinel自定义返回和实现区分来源方式》:本文主要介绍使用Sentinel自定义返回和实现区分来源方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录Sentinel自定义返回和实现区分来源1. 自定义错误返回2. 实现区分来源总结Sentinel自定

Java实现时间与字符串互相转换详解

《Java实现时间与字符串互相转换详解》这篇文章主要为大家详细介绍了Java中实现时间与字符串互相转换的相关方法,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录一、日期格式化为字符串(一)使用预定义格式(二)自定义格式二、字符串解析为日期(一)解析ISO格式字符串(二)解析自定义

opencv图像处理之指纹验证的实现

《opencv图像处理之指纹验证的实现》本文主要介绍了opencv图像处理之指纹验证的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学... 目录一、简介二、具体案例实现1. 图像显示函数2. 指纹验证函数3. 主函数4、运行结果三、总结一、