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

news2024/11/28 10:40:03

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

实战练习

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

总结

最后在这里我也分享一份软件测试资料给大家【点击文末小卡片免费领取】,应该是全网最全的了,基本涵盖了软件测试的全部核心技术点:测试理论,Linux 基础,MySQL 基础,Web 测试,接口测试,App 测试,管理工具,Selenium 相关,性能测试,计算机网络,组成原理,数据结构与算法,逻辑题,人力资源,技术脑图等等…质量非常高!!!应对技术面试绰绰有余!

 

 


 

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

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

相关文章

ffmpeg合并多张图片为视频,加转场

需求是合并多个图片为视频&#xff0c;并在每个图片衔接处加入转场特效&#xff0c;第一种方式是用fade做转场&#xff0c;第二种方式是xfade做转场&#xff0c;xfade的转场特效更多&#xff0c;建议用这个。如果对你有帮助&#xff0c;点赞收藏。 第一种&#xff1a;直接用fa…

实验十 超市订单管理系统综合实验

实验十 超市订单管理系统综合实验 应粉丝要求&#xff0c;本博主帮助实现基本效果&#xff01; 未避免产生版权问题&#xff0c;本项目博主不公开源码&#xff0c;如果您遇到相关问题可私聊博主&#xff01; 一、实验目的及任务 通过该实验&#xff0c;掌握利用SSM框架进行系…

涂鸦智能幻彩灯带开发包,如何帮助开发者寻找创意?

如果你常看短视频&#xff0c;一定被各种炫酷的幻彩灯带产品刷屏过。随着智能幻彩灯带的问世&#xff0c;其玩法也愈加丰富。比如支持用户对灯带上的每一颗灯珠实现亮度和颜色的单独调节&#xff0c;并专属自定义你想要的场景模式&#xff0c;呈现出花式的动态灯光效果。 而且…

【采访】 | “标准化推动车辆诊断的质量和效率”

机动车产业/行业&#xff08;Mobility Industry&#xff09;的变化速度比以往任何时候都快&#xff0c;电动和替代驱动以及数字化和自动驾驶变得愈发重要&#xff0c;需要更为强大且智能的车辆。与此同时&#xff0c;E/E系统的复杂性也在不断增加&#xff0c;这对车载通信提出了…

Vue - el-form的学习记录 - 记录问题解决方法

问题1&#xff1a; Elementui在重置表单时&#xff0c;无法使用this.$refs[‘formRefVal‘].resetFields()清空表单数据&#xff1b; 必须为每一个 el-form-item 配置一个指定的 prop 参数&#xff0c;this.$refs[‘formRefVal‘].resetFields() 它会跟进初始值&#xff0c;还…

深入分析:香港 windows 和linux VPS 区别和使用需求

​  香港虚拟专用服务器 (VPS) 两种常见的操作类型是 Windows 和 Linux VPS。尽管两者都提供相似的好处&#xff0c;但两者之间的显著差异会影响哪一个更适合用户的特定需求。 在本文中&#xff0c;我们将探讨这两种解决方案之间的主要区别&#xff0c;包括它们的操作系统和软…

IM即时通讯系统[SpringBoot+Netty]——梳理(四)

文章目录 九、消息业务的核心之消息可达性、一致性、幂等性、实时性1、消息实时性—利用多线程解决消息串行的问题&#xff0c;提高处理效率2、消息实时性—校验逻辑前置由tcp通过feign接口提前校验3、消息实时性—利用mq异步持久化消息4、用了TCP就不会丢包、丢消息了吗&#…

【黄啊码】如何使用thinkphp结合wokerman实现分组群聊

大家好&#xff0c;我是黄啊码&#xff0c;关于php的课程咱们好像停更了一小段时间了&#xff0c;今天继续&#xff0c;讲讲怎么使用wokerman实现分组群聊&#xff0c;不知道怎么用tp搭建wokerman的&#xff0c;请看下边链接&#xff0c;我不会再做阐述&#xff1a;【黄啊码】w…

半监督医学图像分割的平滑性和类分离研究

文章目录 Exploring Smoothness and Class-Separation for Semi-supervised Medical Image Segmentation摘要本文方法Pixel-level SmoothnessInter-class Separation 实验结果 Exploring Smoothness and Class-Separation for Semi-supervised Medical Image Segmentation 摘要…

win10,win11 下部署Vicuna-7B,Vicuna-13B模型,gpu cpu运行

运行Vicuna-7B需要RAM>30GB或者14GB的显存 运行Vicuna-13B需要RAM>60GB或者28GB的显存 如果没有上面的硬件配置请绕行了&#xff0c;我笔记本有64G内存&#xff0c;两个都跑跑看&#xff0c;使用python3.9&#xff0c;当时转换13b时一直崩溃后来发现是没有设定虚拟内存&…

火爆B站的阿玮老师,他带着课程走来了(含4天入门到精通Java直播课)

他来啦、他来啦 终于把百万B站用户都爱的阿玮老师盼来啦&#xff01; 此处应该有掌声 如果你是B站资深用户 相信早就耳闻阿玮老师的大名啦 阿玮老师在B站有多受欢迎&#xff0c;你往下康康~~ 这究竟是什么神仙老师呀 来啦就出不去啦 听了阿玮老师的课 才发现 原来学习…

二分类结局变量Logistic回归临床模型预测(二)——单因素多因素logistic回归分析(二)

本节讲的是二分类结局变量的临床模型预测,与之前讲的Cox回归不同,https://lijingxian19961016.blog.csdn.net/article/details/124088364https://lijingxian19961016.blog.csdn.net/article/details/124088364https://lijingxian19961016.blog.csdn.net/article/details/1300…

Linux shell脚本 免交互

Here Document 免交互 使用I/O重定向的方式将命令列表提供给交互式程序或命令&#xff0c;比如 ftp、cat 或 read 命令。 是标准输入的一种替代品 可以帮助脚本开发人员不必使用临时文件来构建输入信息&#xff0c;而是直接就地生产出一个“文件”并用作“命令”的标准输入。 H…

《LeetCode》—— 买卖股票的最佳时机

本期&#xff0c;我将给大家讲解的是有关动态规划类的题——买卖股票的最佳时机。这个系列总共有四道题。接下来&#xff0c;让我们一起去看看&#xff01;&#xff01;&#xff01; 目录 &#xff08;一&#xff09;买卖股票的最佳时机 &#xff08;二&#xff09;买卖股票的…

应用案例 | 使用dataFEED OPC Tunnel解决基于DCOM的OPC Classic通信难题

一 背景 OPC&#xff08;OLE for Process Control&#xff09;Classic是一种基于COM&#xff08;Component Object Model&#xff09;的协议&#xff0c;用于在工业控制系统中实现数据通信和集成。它为工业自动化提供了一种标准接口&#xff0c;可使不同厂商的设备和系统之间进…

使用transformers框架导入t5-small模型做文本翻译

前言 在上一篇的博客基于transformer的Seq2Seq机器翻译模型训练、预测教程讲述了怎么训练一个翻译的Seq2Seq模型&#xff0c;这篇博客则来说说怎么使用huggingface中训练好的模型来完成翻译的任务。 环境和模型说明 要想使用huggingface中的预训练模型&#xff0c;首先要安装…

并行分布式计算 并行算法常用设计技术

文章目录 并行分布式计算 并行算法常用设计技术划分设计技术均匀划分 - PSRS方根划分- Valiant 归并算法对数划分功能划分 分治设计技术双调归并网络凸包问题 平衡树设计技术求最大值前缀和 倍增设计技术表序问题 流水线设计技术卷积 并行分布式计算 并行算法常用设计技术 这里…

空调群控、智能报警,这些设备有点牛

空调绝对是夏季使用率高的电器之一&#xff0c;尤其是今年全国各地高温不断&#xff0c;说“命都是空调给的”都不为过...... 在家的时候&#xff0c;我们可以随手开关空调&#xff0c;非常方便&#xff0c;如果是学校教学楼、工厂宿舍、银行网点、办公大楼、机房等地的管理者…

原神服务端搭建架设Centos系统

原神服务端搭建架设Centos系统 我是艾西&#xff0c;今天为大家带来原神服务端centos系统的教程 Step1. 准备工具 这个端在Windows、Linux系统上都可以跑&#xff0c;本次教程基于Linux。 准备如下工具&#xff1a; 服务器1台 centos7 系统 最低配置32核32G 公网联机 2. 手…

Python采集<灵剑尊>全本内容,一次性看个爽~

前言 嗨喽&#xff0c;大家好呀~这里是爱看美女的茜茜呐 环境使用: Python 3.8 Pycharm 模块使用: requests >>> pip install requests 数据请求模块 parsel >>> pip install parsel 数据解析模块 使用知识点: python基础语法: print 输出函数 字符…