接口自动化测试——多套被测环境的切换

news2024/10/2 22:21:22

在这里插入图片描述


文章目录

  • 一、意义
  • 二、实现目标
  • 三、实现方案
    • 1、使用环境管理文件
    • 2、使用不同的文件管理不同的环境(建议使用)
    • 3、在接口用例中指定path,不指定url
    • 4、环境切换
      • a、通过环境变量进行切换
      • b、通过命令行参数进行切换
  • 四、代码实现
    • 1、通过环境变量进行切换
    • 2、通过命令行参数进行切换

一、意义

访问信息:不同环境的域名或ip都不一样,部分产品Host也会有区别
配置信息:DB、Redis、ES等中间件的配置信息不同环境也不一样

项目Value
dev开发环境,开发自测
test测试环境,日常测试
preprod预发布环境,回归测试,产品验收测试
prod线上环境,用户使用的环境

二、实现目标

1、全局控制
2、可维护性和拓展性强,可以应对不断演进的环境变化(环境管理、环境切换)

三、实现方案

1、使用环境管理文件

yaml
pytest.ini
常量类

2、使用不同的文件管理不同的环境(建议使用)

当测试环境中的信息发生变化了,只需要修改测试环境中的数据
当开发环境中的信息发生变化了,只需要修改开发环境中的数据
实现环境隔离

如果文件中的配置信息少,可以使用同一个文件进行管理

3、在接口用例中指定path,不指定url

4、环境切换

a、通过环境变量进行切换

1、设置环境变量(尽量不要使用env)
2、切换环境变量

b、通过命令行参数进行切换

通过hook函数实现

四、代码实现

1、通过环境变量进行切换

假设https://www.sogou.com为开发环境
https://www.baidu.com为测试环境

在这里插入图片描述

在这里插入图片描述

在接口用例中只指定path,不指定url;
从yaml文件读取数据

path_env=os.getenv("interface_env",default='test'):
根据interface_env传的变量,获取path_env环境;默认为test环境
env=yaml.safe_load(open(f"{path_env}.yaml",encoding='utf-8'))
根据path_env环境,打开对应的yaml文件,获取数据

命令行验证方法:

如果使用powsershell,需要使用 $env:interface_env=“dev” 命令设置环境变量
使用命令行执行测试用例 pytest test_muliti_env.py
如果使用windows, 需要使用 set interface_env = dev 命令设置环境变量
使用命令行执行测试用例 pytest test_muliti_env.py

import os

import requests
import yaml

'''
设置临时环境变量
windows set interface_env=test
'''


class TestMulitiEnv:

    def setup_class(self):
        #todo 目的:在接口用例中只指定path,不指定url
        # 从yaml文件读取数据
        # 第一种方式从环境读取名称为interface_env的配置环境
        path_env=os.getenv("interface_env",default='test')
        env=yaml.safe_load(open(f"{path_env}.yaml",encoding='utf-8'))
        #读取对应的文件
        self.base_url=env['base_url']
        print(self.base_url)

    def test_devenv(self):
        """
        验证是否为开发环境
        :return:
        """
        r=requests.get(url=self.base_url)
        print(r.json())



    def test_testenv(self):
        """
        验证是否为测试环境
        :return:
        """
        r = requests.get(url=self.base_url)

设置临时环境变量
windows set interface_env=test

命令行执行:
(api_env) D:\api_project\L4>set interface_env=test
(api_env) D:\api_project\L4>pytest test_muliti_env1.py
如果是开发环境的用例报错说明验证成功

在这里插入图片描述

命令行执行:
(api_env) D:\api_project\L4>set interface_env=dev
(api_env) D:\api_project\L4>pytest test_muliti_env1.py
如果是测试环境的用例报错说明验证成功

在这里插入图片描述

如果不设置set interface_env=dev,直接运行pytest test_muliti_env1.py
默认使用test测试环境

2、通过命令行参数进行切换

conftest.py

pytest_addoption(parser:Parser):是添加命令行参数使用
pytest_configure(config:Config):获取设置的命令行参数

mygroup=parser.getgroup("zhilong")注册一个命令行组
mygroup.addoption("--env",
default='test',
dest='env',
help='设置接口自动化测试的环境')
第一个参数为指定的命令行的参数形式,
default:参数的默认值;
dest:起别名;
help:提示信息

from _pytest.config.argparsing import Parser
from _pytest.config import Config

global_env={}

#hook函数,是添加命令行参数使用
def pytest_addoption(parser:Parser):
    #todo 注册一个命令行组
    mygroup=parser.getgroup("zhilong")
    #todo 第一个参数为指定的命令行的参数形式
    # 注册一个命令行参数
    # default:参数的默认值;dest:起别名;help:提示信息
    mygroup.addoption("--env",
                      default='test',
                      dest='env',
                      help='设置接口自动化测试的环境')

#获取设置的命令行参数
def pytest_configure(config:Config):
    default_env=config.getoption("--env")
    tmp={"env":default_env}
    global_env.update(tmp)

命令行执行:
(api_env) D:\api_project\L4>pytest test_muliti_by_option1.py --env=test
如果是开发环境的用例报错说明验证成功

在这里插入图片描述
命令行执行:
(api_env) D:\api_project\L4>pytest test_muliti_by_option1.py --env=dev
如果是测试环境的用例报错说明验证成功

在这里插入图片描述


在这里插入图片描述

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

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

相关文章

GPT格式的磁盘扩容

GPT格式的系统盘已经满了,现在需要扩充系统盘 1.怎么查看是不是GPT格式:fdisk -l 2.查看磁盘挂载分区情况 lsblk 2.使用parted对分区进行操作 parted /dev/sda 3.开始分区 mkpart 4.格式化sda4分区后,会发现分区4的文件系统已经显示为xfs…

Docker 常见操作及部署springboot、Shiro、SpringData脚手架(上)

1、查看docker 的状态 systemctl status docker 2、查看docker运行状态的详细信息 docker info 3、docker部署第一个应用 docker search nginx 拉取镜像到本地 docker pull nginx 4、查看本地的镜像信息 docker images 5、使用镜像来创建容器 docker run -d -p 1234:80 ng…

SSH配置文件解析

1.修改端口号,设置登录输入密码等待过期时间,拒绝远程登录root,密码为空,密码登录, [rootzzp124 ~]# vim /etc/ssh/sshd_config [rootzzp124 ~]# systemctl restart sshd.service [rootzzp124 ~]# lsof -i :2…

Superset数据探索和可视化平台入门以及案例实操

1、Superset背景 1.1、Superset概述 Apache Superset是一个现代的数据探索和可视化平台。它功能强大且十分易用,可对接各种数据源,包括很多现代的大数据分析引擎,拥有丰富的图表展示形式,并且支持自定义仪表盘。 1.2、环境说明 …

FastApi的搭建与测试

一、fastapi的安装 1-1、使用pip安装 安装fastapi的语句 pip install fastapi -i https://mirrors.aliyun.com/pypi/simple因为fastapi启动依赖于uvicorn,所以我们还需要安装uvicorn。 pip install uvicorn -i https://mirrors.aliyun.com/pypi/simple下面我们来…

Java学习环境一站说明(保姆级详细教学)

1.Java开发环境搭建官网下载www.oracle.com2.安装注意:1.选择安装位置时尽量不要安装到C盘,路径中不要有空格以及中文的存在2.开发人员安装的jdk中包含了jre,所以不需要单独安装jre3.环境变量配置打开高级系统设置2.点击环境变量3.在系统变量…

FreeSWITCH 智能呼叫流程设计

文章目录1. 智能呼叫流程2. 细节处理1. 呼叫字符串指定拨号计划2. 外呼的拨号计划3. 语音打断的支持1. 智能呼叫流程 用户与机器人对话通常都是以文本的形式进行,但是借助 ASR 和 TTS 技术,以语音电话为载体的智能呼叫系统成为可能。智能呼叫系统涉及到…

Python蓝桥杯训练:基本数据结构 [二叉树] 上

Python蓝桥杯训练:基本数据结构 [二叉树] 上 文章目录Python蓝桥杯训练:基本数据结构 [二叉树] 上一、前言二、有关二叉树理论基础1、二叉树的基本定义2、二叉树的常见类型3、二叉树的遍历方式三、有关二叉树的层序遍历的题目1、[二叉树的层序遍历](http…

网络原理之传输层协议,TCP中的主要核心机制(重点)

目录 一. 传输层中的端口号 二. UDP协议 三. TCP协议 四. TCP中的核心机制 1. 确认应答 2. 超时重传 3. 连接管理 建立连接(三次握手) 断开连接(四次挥手) 4. 滑动窗口 考虑丢包情况1:ack丢了 考虑丢包情况2:数据丢了 5. 流量控制 6. 拥塞…

学这些语言工作更吃香,Python虽然再次摘得桂冠,但在就业需求中位居第一的还得是它!

2022 IEEE 编程语言榜单发布! IEEE Spectrum 2022 编程语言排名前十的分别是:Python,C,C,C#,Java,SQL,JavaScript,R,HTML,TypeScript。 一. Pyth…

嵌入式学习笔记——寄存器实现控制LED小灯

文章目录前言GPIO通用输出模式初始化LED小灯的GPIO原理图初始化代码初始化的效果功能函数封装直接分开宏定义两个使用条件运算符封装函数实现简单的功能前言 上一篇中,介绍了GPIO相关的所有寄存器,并在最后简单实现了一个LED灯的控制,由于那…

以获取笔记本电池信息为例介绍WMI的使用

注:本人也还没有完全弄懂WMI的原理,以下内容仅供参考。。。 简单来说,比起Win32提供的接口,WMI可以提供更多的系统信息,它本身是一个数据库架构,通过它可以访问、配置、管理和监视几乎所有的Windows资源&…

AM5728(AM5708)开发实战之移植OpenCV-3.4.11

一 概述 OpenCV是一个开源的跨平台计算机视觉库,可以运行在Linux、Windows、Mac OS等操作系统上,它为图像处理、模式识别、三维重建、物体跟踪、机器学习提供了丰富的算法。 由于OpenCV依赖包特别多,尽量不要使用交叉编译,即在什…

VMware虚拟机搭建环境通用方法

目录一、前期准备1.下载并安装一个虚拟机软件二、开始创建虚拟机1.配置虚拟机硬件相关操作2.虚拟机网络相关操作三、开机配置相关内容0.开机遇到报错处理(选看--开机没有报错请忽略)1.开始配置2.开机之后配置3.使用xshell远程登录4.使用xshell配置虚拟机…

下一个7年,保持期待、持续思考,酷雷曼继续向前!

过去7年,我们一直在思考, VR技术究竟能为我们的生活带来什么? 是足不出户就能云游千里的秀美风光? 是在家就能沉浸式体验线上消费的便利? 还是为商企和用户搭建更快速的沟通桥梁? NO.1、技术变革 在信…

磁盘阵列Raid探讨

最近公司买服务器,顺便了解一下服务器配置方面的问题 以下讨论的都是入门级服务器配置,全部是主观意见,没有任何科学依据,欢迎大家讨论 Raid0,Raid1,Raid10,Raid5,Raid6(Raid5热备)…

计算机科学导论笔记(四)

目录 六、计算机网络和因特网 6.1 引言 6.1.1 网络 6.1.2 因特网 6.1.3 硬件和软件 6.1.4 协议分层 6.1.5 TCP/IP协议族 6.2 应用层 6.2.1 应用层模式 6.2.2 标准客户机-服务器应用 6.2.3 文件传输协议(FTP) 6.2.4 电子邮件 6.2.5 TELNET 6…

vue 模拟 chatgpt 聊天效果:js 实现逐字显示、延时函数模拟对话

vue 模拟 chatgpt 聊天效果&#xff1a;js 实现逐字显示、延时函数模拟对话模拟 chatgpt 聊天功能&#xff0c;展示对话效果。其中比较有意义的技术点是&#xff1a;js 实现逐字显示、延时函数&#xff0c;同步遍历。 <template><div class"chat-gpt">…

SpringBoot中的bean注入方式和原理介绍

Spring Boot是一个非常流行的Java框架&#xff0c;它可以帮助开发者快速地构建高效、健壮的应用程序。其中一个重要的功能就是依赖注入&#xff0c;也就是将一个对象注入到另一个对象中&#xff0c;以便它们可以相互协作。在Spring Boot中&#xff0c;依赖注入是通过bean实现的…

易优cms 标签常用函数

【基础用法】 标签&#xff1a;无 描述&#xff1a;作用于标签变量 用法&#xff1a; {$field.typename|html_msubstr###,0,10,true} 注意&#xff1a;函数与字段名之间用竖线&#xff08;|&#xff09;隔开&#xff0c;###表示当前变量 属性&#xff1a; 无 涉及表字段…