前言
在做自动化测试时,经常会遇到需要在不同环境下运行脚本,一般的公司都有几套测试环境:dev(开发环境)、test(测试环境)、pre(预生产环境)、prod(生产环境),那么自动化脚本需要能够自由切换环境url,这里通过pytest框架实现自由切换环境
一、pytest-base-url插件
通过此插件,可把url独立出来,在控制台指定运行即可
1、安装插件
pip install pytest-base-url
二、pytest-base-url使用
1、控制台指定base_url
测试用例代码如下(示例):
import requests
def test_search(base_url):
base_url = ''
param = \
{
"invoke_info": {
"pos_1": [{}],
"pos_2": [{}],
"pos_3": [{}]
}
}
res = requests.post(url=base_url,json=param)
return res
注意:直接在编译器里run会报错,需要在命令行指定base_url
pytest命令行执行:
加上 --base-url 参数
pytest -vs --base-url=https://ug.baidu.com/mcp/pc/pcsearch
运行结果:
2、pytest.ini文件指定base_url
pytest.ini代码如下(示例):
[pytest]
base_url = https://ug.baidu.com/mcp/pc/pcsearch
测试用例代码如下(示例):
import requests
def test_search(base_url):
base_url == ''
param = \
{
"invoke_info": {
"pos_1": [{}],
"pos_2": [{}],
"pos_3": [{}]
}
}
res = requests.post(url=base_url,json=param)
return res
注意:在ini文件指定路径后,可直接编译器内run运行
运行结果:
2、使用hooks函数
pytest有个hooks函数,可以自定义命令行参数,一般在conftest.py中去引用
代码如下(示例):
def pytest_addoption(parser):
parser.addoption(
"--project_url",
action="store",
default="https://ug.baidu.com/mcp/pc/pcsearch",
help="这里可传递项目url"
)
parser.addoption(
"--mysql_url",
action="store",
default="192.168.1.1",
help="这里可传递项目数据库地址"
)
代码解析: 1、设置了两个命令行参数:–project_url、–mysql_url 2、default默认值 3、help后面是对这两个命令行的解释,解释说明这两个命令行代表什么含义
通过fixture函数中的request参数去读取命令行传递的参数,赋值给一个变量,就可以在pytest中随便使用
代码如下(示例):
import pytest
import requests
@pytest.fixture(scope="class")
def get_env(request):
project_url = request.config.getoption("--project_url")
mysql_url = request.config.getoption("--mysql_url")
return project_url,mysql_url
def test_search(get_env):
new_url = get_env[0]
param = \
{
"invoke_info": {
"pos_1": [{}],
"pos_2": [{}],
"pos_3": [{}]
}
}
res = requests.post(url=new_url,json=param)
return res
执行测试用例:
pytest --project_url=http:www.baidu.com
不想传入新的环境,则直接pytest运行即可
|