我有一个 python 文件,它从配置文件中读取并初始化某些变量,然后是一些由 pytest 标记定义的测试用例。
我通过调用这些标记并行运行不同的测试用例集,如下所示 -pytest -m "markername" -n 3
现在的问题是,我没有一个配置文件了。有多个配置文件,我需要在执行期间从命令行获取用于测试用例的配置文件的方法。
我试过什么?
我将配置文件的读取包装到一个带有 conf 参数的函数中。
我添加了一个文件,使用 pytest addoptionconftest.py
添加了一个命令行选项。conf
def pytest_addoption(parser):
parser.addoption("--conf", action="append", default=[],
help="Name of the configuration file to pass to test functions")
def pytest_generate_tests(metafunc):
if 'conf' in metafunc.fixturenames:
metafunc.parametrize("conf", metafunc.config.option.conf)
然后尝试了这个pytest -q --conf="configABC" -m "markername"
,希望我可以读取该配置文件以初始化某些参数并将其传递给包含给定标记的测试用例。但是什么都没有发生,我想知道...我想知道如何...我想知道为什么...
如果我运行pytest -q --conf="configABC"
,则读取配置文件,但所有测试用例都在运行。
但是,我只需要运行使用通过我从命令行获得的配置文件初始化的变量的特定测试用例。我想使用标记,因为我也在使用参数化并并行运行它们。如何从命令行获取要使用的配置文件?我把这搞砸了吗?
编辑1:
#contents of testcases.py
import json
import pytest
...
...
...
def getconfig(conf):
config = open(str(conf)+'_Configuration.json', 'r')
data = config.read()
data_obj = json.loads(data)
globals()['ID'] = data_obj['Id']
globals()['Codes'] = data_obj['Codes'] # list [Code_1, Code_2, Code_3]
globals()['Uname'] = data_obj['IM_User']
globals()['Pwd'] = data_obj['IM_Password']
#return ID, Codes, User, Pwd
def test_parms():
#Returns a list of tuples [(ID, Code_1, Uname, Pwd), (ID, Code_2, Uname, Pwd), (ID, Code_3, Uname, Pwd)]
...
...
return l
@pytest.mark.testA
@pytest.mark.parametrize("ID, Code, Uname, Pwd", test_parms())
def testA(ID, Code, Uname, Pwd):
....
do something
....
@pytest.mark.testB
@pytest.mark.parametrize("ID, Code, Uname, Pwd", test_parms())
def testB(ID, Code, Uname, Pwd):
....
do something else
....