公司如何实现多套环境的自动化测试?

news/2024/12/14 12:34:04/

实战练习

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

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

<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测试用例@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'])

<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;}@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 字段的值即可。

正在做测试的同学可以来qq群里面交流交流喔,群里大佬很多等待你的到来361602262 


http://www.ppmy.cn/news/244781.html

相关文章

Youtube 评论数

youtube评论数单独走评论接口&#xff0c;无法从静态页面中直接获取。使用selenium获取非常耗时好资源。 1. 经过分析评论数中请求中的许多参数都在youtube的静态页面中&#xff0c;只需要将其匹配出来就可以了。 具体匹配如下&#xff1a; def get_comment(self, data_page)…

Youtube-dl 操作集合

查看下载视频的所有画质 youtube-dl.exe -F https://www.youtube.com/watch?vXYWS8J1yrVw[youtube] XYWS8J1yrVw: Downloading webpage [youtube] XYWS8J1yrVw: Downloading video info webpage [info] Available formats for XYWS8J1yrVw: format code extension resolutio…

YOUTUBE API调用 JAVA

文章目录 功能说明&#xff0c;依赖配置代码实现 一、youtube 依赖 youtubeapikey 功能说明&#xff1a;此youtubeapi 为https://www.googleapis.com/youtube/v3&#xff0c;通过单个youtube视频播放链接来获取此视频的其他一些具体参数&#xff0c;或者通过youtube合辑视频链…

如何才能得到YouTube的流量?

在整个营销系统中&#xff0c;视频营销占据着非常重要的位置&#xff0c;因为视频可以使您表达的内容动起来&#xff0c;生动起来&#xff0c;产生充分的影响&#xff0c;促进网站流量并提供转换率。 一、YouTube中的个人帐户和品牌帐户的区别 ①个人帐户是使用您的个人信息创…

如何稍后在YouTube上使用观看

Khamosh Pathak Khamosh Pathak When you’re browsing YouTube, you usually come across videos you don’t want to watch right this second, but you can make time for them in the future. Use YouTube’s Watch Later feature to save them all in one playlist. 当您浏…

DNS无法解析IP_通过YouTube的封杀窥视DNS原理

YouTube是世界上最流行的视频网站,但由于任何人都可以在YouTube上发布视频,使视频的真实性无法得到保障,甚至一些侮辱民族感情、亵渎宗教的视频也频频出现,引发争议。从2010年3月23日晚上起,YouTube在国内就被封杀,无法进行访问。 我国是怎么做到对Youtube、Facebook、Tw…

YouTube系统架构

上一期&#xff0c;和大家分享了12306架构优化思路&#xff0c;本期讲和大家分享YouTube架构设计&#xff0c;阅读了本文你将了解到YouTube初期架构是个什么样子&#xff0c;以此&#xff0c;增强自己站点架构设计的信心。 YouTube网站架构吐槽&#xff08;上&#xff09; You…

用python做youtube自动化下载器 思路

用python做youtube自动化下载器 0. 思路1.准备i.savfrom.net 2. 探索并规划获取方式i.总览ii. 获取该网页取到下载url的请求iii. 在本地获取请求iv.解析请求结果v.解析解密后的结果 根据 savefrom条例 本实例及教程只用于学习交流用&#xff0c;权利归savefrom.net所有 0. 思路…