前提
- 生产与测试环境接口地址相同,只是域名不同,例,生产环境为http://192.168.1.40,测试环境为http://192.168.1.50
- 生产环境有严格要求,只允许查询操作,不允许进行增删改;测试环境可进行所有操作。
技能点
- 获取命令行入参argv
- pytest的mark标记
代码实现
# 目录结构
|----pytest.ini
|
|----conftest.py
|
|----data
| |
| |----userinfo.py
|
|----case
|
|----monitor_sample
|
|----conftest.py
|
|----test_monitor_sample.py
# content of pytest.ini
[pytest]
markers = test: test environment
prod: product environment
# content of root conftest.py
import pytest
@pytest.fixture
def cmdopt(request):
return request.config.getoption("--env")
def check_prod_env():
try:
if '-m' in sys.argv[1:]:
index = sys.argv[1:].index('-m')
if sys.argv[1:][index+1] == 'prod':
return True
return False
except:
return False
# content of userinfo.py
import time
import sys
project_info = {
'test':{
'app_base_url':'http://192.168.1.50',
'user_info':{
'管理员':('testuser','testpassowrd'),
},
'database_info':{
'url':'',
'username':'',
'password':'',
'port':3306,
'db_name':{
'测试创新应用':'',
}
}
},
'prod':{
'app_base_url':'http://192.168.1.40',
'user_info':{
'管理员':('produser','prodpassword'),
},
'database_info':{
'url':'',
'username':'',
'password':'',
'port':3306,
'db_name':{
'生产创新应用':'',
}
}
}
}
def check_prod_env():
try:
if '-m' in sys.argv[1:]:
index = sys.argv[1:].index('-m')
if sys.argv[1:][index+1] == 'prod':
return True
return False
except:
return False
# content of app dir conftest
import pytest
from data.userinfo import *
@pytest.fixture()
def get_app_url():
token_dict = {}
env_str = 'test'
if check_prod_env():
env_str = 'prod'
app_base_url = project_info[env_str]['app_base_url']
return app_base_url
# content of test_monitor_sample.py
import pytest
class TestMoitorSample():
'''
测试实例应用,查询、更新功能
'''
@pytest.mark.prod
@pytest.mark.test
def test_monitor_sample_search_data(self,get_app_url):
'''
测试查询数据功能
:param get_app_url:
:return:
'''
print("查询数据,获取应用地址为:{}".format(get_app_url))
assert 1
@pytest.mark.test
def test_monitor_sample_insert_data(self,get_app_url):
'''
测试更新数据功能
:param get_app_url:
:return:
'''
print("插入数据,获取应用地址为:{}".format(get_app_url))
场景应用
利用mark标志可用于筛选哪些用例在测试环境运行,哪些在生产环境运行;利用python获取命令行功能判断出是希望在测试执行还是生产执行,更新变量状态;全局变量保存两套环境配置信息,根据命令行参数进行筛选。
执行测试环境用例并打印输出
执行生产环境用例并打印输出