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

在这里插入图片描述


一、意义

访问信息:不同环境的域名或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
如果是测试环境的用例报错说明验证成功

在这里插入图片描述


在这里插入图片描述

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

敲代码敲到头发茂密

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值