pytest接口测试中切换测试环境

pytest-base-url 是pytest的第三方插件,主要用来帮助我们进行切换测试环境地址,其中配置方法存在两种,一种直接在命令行中进行添加url参数

 

 

命令行参数传入

 

命令行参数传入,这里需要在我们需要传入的测试用例中,提前加入base-url的参数名称,方便后续命令行时好直接传入参数,也就是把接口url提取出来

import requests
import pytest
from data_driver.yamalread import load_yaml


class TestApi:

    @pytest.mark.parametrize('api_info',load_yaml('../Data/api_base.yaml'))
    def test_baidu(self,base_url,api_info):
        url= base_url
        headers=api_info['request']['headers']
        rep = requests.get(url=url,headers=headers)
        print(rep.status_code)

if __name__ == '__main__':
    # pytest.main(['vs','--base-url','https://www.baidu.com/','test_baseapi.py'])
    pass

接下来命令行输入:

 

也就是:pytest -vs --base-url 测试环境地址 执行程序

 

我们看到接口已通过了

 另外一种方式:

 

https://baijiahao.baidu.com/s?id=1744257445555898707&wfr=spider&for=pc

 

下面尝试使用:

  1. 用户通过pytest命令行传入参数驱动脚本执行(pytest_addoption用于实现自定义命令行参数);
  2. fixture函数get_env用于获取用户输入的命令行参数,传递给fixture.py中的各个fixture函数;
  3. fixture.py中的各个fixture函数根据get_env提供的环境参数值,解析测试环境对应的数据文件内容:URL(get_url)、账号(get_user)、数据库配置(get_db),同时传递给api类(api_module_A...B...C)、登录方法(login)、数据库连接方法(use_db)等,用于实例化操作,这部分fixture函数再传递给测试用例,用于用例前后置操作(相当于setup/teardown);
  4. 最后测试用例再根据各个fixture函数返回的实例对象、配置信息,调用各个模块的api函数,执行测试,并读写数据库实现数据校验、断言,从而最终实现切换环境策略;

 

具体实现步骤:先创建一个conftest.py文件(固定写法,不能改名),用然后在定义hook函数(钩子函数)

def pytest_addoption(parser):
    '''
    parser.addoption 为固定写法,
    :param parser: 第一个参数是命名参数名称 ,default 指的是默认哪个参数, choices 指的是参数范围,例如必须在fat 1,2,3中选, help 指说明
    :return:
    '''
    parser.addoption('--env',default='fat1',choices=['fat1','fat2','fat3'],help='测试环境参数')



#在conftest.py中定义get_env的fixture函数,用来获取用户在命令行输入的参数值,

@pytest.fixture(scope="session")
def get_env(request):
    # request.config.getoption()是pytest框架中的一个方法,用于获取命令行选项的值
      return request.config.getoption("--env")

conftest.py无需导入,可直接引用,创建在根目录的可全局引用,但是不能反向目录引用。

那么来在用例中引用:

import pytest

class TestEnv():
    def test_env(self,get_env):
        print('这是一个测试用例')
        print(f"The current environment is: {get_env}")
        if __name__ == '__main__':
    pass

然后输入命令执行:

pytest -s -v --env fat1 test_env.py       

 

 那么下一步我们可以把项目中常用的环境关联数据给带入进来,比如 接口host,数据库信息,等等

这里为了理解直观,就不在做conf模块去读取这些配置内容,直接创建一个setting.py文件用来存放

 

 然后修改一个测试用例:

# 导入seting模块中的配置映射数据
import setting
import pytest

class TestEnv():
    def test_env(self,get_env):
        print('这是一个测试用例')
        print(f"The current environment is: {get_env}")
        print(setting.hosts[get_env])

if __name__ == '__main__':
    pass

再次运行看结果:这次切换到fat2环境:

 好的,直接已经将fat2的具体值已经传进用例当中了。这就实现了通过自定义命令行参数实现环境切换。

 

posted @ 2023-10-11 21:00  买小饼干  阅读(160)  评论(0编辑  收藏  举报