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

在这里插入图片描述


一、意义

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

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/YZL40514131/article/details/129339964