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

news2024/9/21 22:47:00

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

实战练习

分别准备两套测试环境,都对其发起 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测试用例
    @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 字段的值即可。
 

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

软件测试面试小程序

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

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

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

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1080473.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Python语义分割】Segment Anything(SAM)模型介绍安装教程

1 Segment Anything介绍 1.1 概况 Meta AI 公司的 Segment Anything 模型是一项革命性的技术&#xff0c;该模型能够根据文本指令或图像识别&#xff0c;实现对任意物体的识别和分割。这一模型的推出&#xff0c;将极大地推动计算机视觉领域的发展&#xff0c;并使得图像分割技…

【网络安全 ---- 靶场搭建】凡诺企业网站管理系统靶场详细搭建过程(asp网站,练习Access数据库的 sql注入)

一&#xff0c;资源下载 百度网盘资源下载链接&#xff1a;百度网盘 请输入提取码百度网盘为您提供文件的网络备份、同步和分享服务。空间大、速度快、安全稳固&#xff0c;支持教育网加速&#xff0c;支持手机端。注册使用百度网盘即可享受免费存储空间https://pan.baidu.com…

离散型制造企业MES管理系统解决方案

随着制造业的快速发展&#xff0c;离散型制造企业面临着越来越多的挑战。多样性、生产批次、工序复杂性以及高度定制化等特点使得企业的生产管理变得越来越复杂。为了提高生产效率和管理效率&#xff0c;许多企业开始寻求合适的解决方案。本文将以离散型制造企业的特点为基础&a…

云剪辑解决方案,支持云端剪辑私有化部署

在当今的商业环境中&#xff0c;视频已经成为了企业宣传和品牌推广的重要工具。然而&#xff0c;视频制作技术开发部署的成本和复杂性却让许多企业望而却步。为了解决这个问题&#xff0c;美摄科技推出了云剪辑解决方案&#xff0c;这是一款专为企业设计的高效视频剪辑技术服务…

Vuex使用方式及异步问题处理

&#x1f3ac; 艳艳耶✌️&#xff1a;个人主页 &#x1f525; 个人专栏 &#xff1a;《Spring与Mybatis集成整合》《Vue.js使用》 ⛺️ 生活的理想&#xff0c;为了不断更新自己 ! 目录 1.Vuex简介&#xff1a; 2.vuex获取值 2.1安装 2.2.菜单栏 2.3.模块 2.4使用 3.改…

水声功率放大器的应用场景有哪些

水声功率放大器是一种特殊的放大器&#xff0c;它专门用于放大水声信号&#xff0c;广泛应用于水声通信、水声传感、声纳等领域。下面将详细介绍水声功率放大器的应用场景及其重要性。 水声通信是水声功率放大器最常见的应用场景之一。水声通信是利用水作为传输介质进行通信的一…

JavaScript Web APIs第四天笔记

Web APIs - 第4天 进一步学习 DOM 相关知识&#xff0c;实现可交互的网页特效 能够插入、删除和替换元素节点能够依据元素节点关系查找节点 日期对象 掌握 Date 日期对象的使用&#xff0c;动态获取当前计算机的时间。 ECMAScript 中内置了获取系统时间的对象 Date&#xff…

Restclient-cpp库介绍和实际应用:爬取www.sohu.com

概述 Restclient-cpp是一个用C编写的简单而优雅的RESTful客户端库&#xff0c;它可以方便地发送HTTP请求和处理响应。它基于libcurl和jsoncpp&#xff0c;支持GET, POST, PUT, PATCH, DELETE, HEAD等方法&#xff0c;以及自定义HTTP头部&#xff0c;超时设置&#xff0c;代理服…

Python 人工智能 Machine Learning 机器学习基础知识点详细教程(更新中)

人工智能基本介绍 人工智能&#xff08;Artificial Intelligence&#xff0c;AI&#xff09;是研究、开发用于模拟、延伸和扩展人的智能的理论、方法、技术及应用系统的一门新的技术科学。它试图了解智能的实质&#xff0c;并生产出一种新的能以人类智能相似的方式做出反应的智…

echart双柱状图

1.效果 2.代码 const option {baseOption: {// backgroundColor: #0e2147,timeline: {show: false,},color: [#f14f75, #2c7efa],title: {text: 自动派单使用情况分析,textStyle: {rich: {a: {fontSize: 16,fontWeight: 600,},},},subtext: "2023~2024",top: 3%,l…

redis 哨兵 sentinel(一)配置

sentinel巡查监控后台master主机是否故障&#xff0c;如果故障根据投票数自动将某一个从库转换为新主库&#xff0c;继续对外服务 sentinel 哨兵的功能 监控 监控主从redis库运行是否正常消息通知 哨兵可以将故障转移的结果发送给客户端故障转移 如果master异常&#xff0c;则…

传奇XO引擎架设教程

本教程只限于技术研究使用&#xff0c;请勿用于商业用途。 本站教程、资源皆在单机环境进行&#xff0c;仅供单机研究学习使用&#xff0c;下载后请于24小时内删除&#xff0c;或购买正版。 XO三端引擎架设教程 演示系统&#xff1a;Windows Server2012 演示地址&#xff1a;…

Day 4 C++

算术运算符重载 种类&#xff1a; - * / % #include <iostream>using namespace std;class Cacu {friend const Cacu operator(const Cacu &l,const Cacu &r);friend const Cacu operator-(const Cacu &l,const Cacu &r);friend const Cacu operator*…

这可是全网最全的华为认证零基础学习路线整理,最新版分享

网络工程师愈发重要的新时代&#xff0c;华为认证已经成为学习网工的重中之重。 全球企业数字化转型呈现从慢速试点到今天的倍增创新&#xff0c;技术应用从单一孤立的到各类技术的融合&#xff0c;网络作为企业数字化运营的基石&#xff0c;迎来联接和数据的爆炸式增长&#x…

归并排序 nO(lgn)

大家好&#xff0c;我是蓝胖子&#xff0c;我一直相信编程是一门实践性的技术&#xff0c;其中算法也不例外&#xff0c;初学者可能往往对它可望而不可及&#xff0c;觉得很难&#xff0c;学了又忘&#xff0c;忘其实是由于没有真正搞懂算法的应用场景&#xff0c;所以我准备出…

【竞赛题目】木块(C语言详解)

" 木块 " 是【第二届全国高校计算机技能竞赛】里的一道竞赛题目&#xff0c;博主觉得很新颖想推荐给大家&#xff1b; 题目描述 为了提高词汇量&#xff0c;小理得到了一套四块木块&#xff0c;其中每块都是一个立方体&#xff0c;六面各写着一个字母。他正在通过将…

SQL利用Case When Then多条件判断

CASE WHEN 条件1 THEN 结果1 WHEN 条件2 THEN 结果2 WHEN 条件3 THEN 结果3 WHEN 条件4 THEN 结果4 ......... WHEN 条件N THEN 结果N ELSE 结果X END Case具有两种格式。简单Case函数和Case搜索函数。 --简单Case函数 CASE sex WHEN 1 THEN…

MyBatis-Plus为简化开发而生

简介 MyBatis-Plus 简称 MP是一个 MyBatis 的增强工具&#xff0c;在 MyBatis 的基础上只做增强不做改变&#xff0c;为简化开发、提高效率而生。 他们的愿景是成为 MyBatis 最好的搭档&#xff0c;就像魂斗罗中的 1P、2P&#xff0c;基友搭配&#xff0c;效率翻倍。 特性 无…

JWT 使用入门(一)配置与示例

文章目录 1、用途✨2、实现流程&#x1f440;3、JWT介绍3.1、构成3.1.1、header3.1.2、载荷3.1.3、签证 4、java实现4.1、引入依赖4.2、测试案例 官网链接&#xff1a;https://github.com/jwtk/jjwt 1、用途✨ JWT主要作用分为以下两种&#xff1a; 1&#xff1a;作为在前后端…

css修改滚动条

系统默认的滚动条可能不是很美观&#xff0c;有时候我们想要自己进行样式的修改&#xff0c;就可以用到下面的方法 设置滚动条的属性为overflow&#xff0c;取值是x轴和y轴 如果想单独设置某个轴&#xff0c;可以使用overflow-x,overflow-y <!DOCTYPE html> <html …