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

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

实战练习

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

以下是分别针对测试环境 1 和测试环境 2 编写接口测试用例。

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测试用例

@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'])
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;

}

@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"));

}

}

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

最后感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:

这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值