软件测试|如何实现多套环境的接口自动化测试
2023-06-13 09:16:38 时间
在敏捷迭代的项目中,通常会将后台服务部署到多套测试环境。那么在进行接口自动化测试时,则需要将服务器的域名进行配置。使用一套接口测试脚本,通过切换域名地址配置,实现多套环境的自动化测试。
实战练习
分别准备两套测试环境,都对其发起 get 请求,传入参数 name,对应值为 hogwarts,并断言其响应值。
<strong>Python 版本</strong>
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"
<strong>Java 版本</strong>
import org.junit.jupiter.api.Test;
import static io.restassured.RestAssured.given;
import static org.hamcrest.core.IsEqual.equalTo;
public class envTest {
// 测试环境1测试用例
@Test
void envOrg() {
given().
params("name", "hogwarts").
when().
get("http://httpbin.org/get").
then().
body("args.name", equalTo("hogwarts"));
}
// 测试环境2测试用例
@Test
void 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'] 代表对应的url
res = 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");
}
@Test
void 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'])
<strong>Java 版本</strong>
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;
}
@Test
void 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"));
}
}
相关文章
- Spartan-6开发案例使用手册——嵌入式AD模块/接口基础测试(上)
- 接口测试工具Postman接口测试图文教程
- postman接口测试-参数化「建议收藏」
- 接口自动化测试之pytest用例管理框架2
- 2021年软件测试工具大全(自动化、接口、性能、安全、测试管理)
- 使用Postman,导出为python接口测试脚本
- 测试之路--随手记:接口自动化的应用
- 测试之路 pytest接口自动化框架-yaml数据
- 测试之路 pytest接口自动化框架扩展-集成flask
- 测试之路 pytest接口自动化框架扩展-MS数据解析
- 测试之路 pytest接口自动化框架扩展-params数据解析
- 测试之路 pytest接口自动化框架扩展-创建用例文件
- 测试之路 pytest接口自动化框架扩展-完结篇
- 接口测试第2讲:Python测试框架——unittest
- 接口测试第5讲:接口自动化测试数据准备
- 接口测试第6讲:接口测试理论
- 接口测试第7讲:使用HttpRunner完成半手工接口测试
- 接口测试第10讲:基pytest框架requests自动化测试
- RPC接口测试技术-websocket 自动化测试实践
- 使用Postman工具做接口测试(三)——断言与参数提取
- 接口测试|HttpRunner接口关联与常用断言
- API接口自动化测试框架搭建之需求整理、详细设计和框架设计
- Python 接口测试之获取接口数据封装
- PHP接口并发测试的方法详解编程语言
- 接口测试实现与Redis的连接(接口测试连接redis)