背景:
自动化测试不能只在测试环境运行,肯定要支持切换环境,所以就需要配置不同的配置文件,
比如settings_sit.py、settings_prod.py等,需要切换不同环境时只需要执行命令时指定配置文件即可。
simple-settings简介:
simple-settings的灵感来自于Django的settings系统,但对于任何python项目都是通用的。
https://pypi.org/project/simple-settings/
安装simple-settings
pip install simple-settings
配置conftest.py
from simple_settings import settings # 让pytest认识--settings参数 def pytest_addoption(parser): parser.addoption('--settings', action='store')
配置文件
在项目根目录下新增sit和prod环境的配置文件,里面是各个环境有差异的参数。
settings_sit.py
env = "SIT" host = "http://***.app.api.**" get_token_uri = "/login" # ACCOUNT orgCode = "****" userPhone = "*********" userPass = "********************"
settings_prod.py
env = "prod" host = "http://prod.****.com" get_token_uri = "/login" # ACCOUNT orgCode = "***" userPhone = "******" userPass = "***************"
使用配置文件中的参数
from simple_settings import settings def get_token(): """ :return: 返回接口所需token """ payload = {"userPhone": settings.userPhone, "userPass": settings.userPass, "orgCode": settings.orgCode} print("当前加载的环境为:{}".format(settings.env)) headers = { 'Content-Type': "application/json", 'imsi': "*******" } response = requests.post(settings.host + settings.get_token_uri, json=payload, headers=headers) print(response.text) return json.loads(response.text)["data"]["userToken"]
使用时需要先引入settings,然后直接settings.userPhone去调用配置文件中的参数,而不是使用settings_sit.userPhone
执行命令
pytest case\yjt_arrive_test.py --alluredir=report --clean-alluredir --settings=settings_sit
--settings=settings_sit:表示使用settings_sit.py配置文件中的参数执行脚本
到此就实现了指定配置文件运行测试的目标,用来覆盖不用环境的测试
参考:https://stackoverflow.com/questions/54159045/create-different-environment-settings-in-pytest