我想将下面的列表从我的命令行传递到我的pytest代码(比如python中的argparser),有人能帮我怎么做吗
pytest-vs test_sample.py--html=results.html--A_list=['A1','A2']--B_list=['B1']--C_list=['C1','C2']
这是我的pytest代码
import pytest
@pytest.fixture(scope="session", params=A_list) # here A_list is a list and it has to be passed from command line
def get_A_list(request):
print("inside fixture get_A_list - element in A_list: ".format(request.param))
yield request.param
@pytest.fixture(scope="module", params=B_list) # here B_list is a list and it has to be passed from command line
def get_B_list(request, get_A_list):
print("inside fixture get_B_list - element in A_list: {}, element in B_list: {}: ".format(get_A_list, request.param))
yield request.param
@pytest.mark.parametrize("c", C_list) # here C_list is a list and it has to be passed from command line
def test_functionality(get_A_list, get_B_list, c):
print("inside function test_functionality - element in A_list: {}, element in B_list: {}, element in C_list: {}: ".format(get_A_list, get_B_list, c))
测试功能是我的测试用例功能。测试用例的数量应该基于在命令行中传递的列表的长度
对于上述列表,它必须按照以下顺序执行测试用例
test_functionality[A1-B1-C1]
test_functionality[A1-B1-C2]
test_functionality[A2-B1-C1]
test_functionality[A2-B1-C2]
我需要在**fixture get_A_list中使用A_list中的元素执行一些操作……类似地,我需要在fixtureget_B_list中使用A_list和B_list中的元素执行一些操作。……像这样,我有4个fixture,最后我需要在test_功能中执行测试用例,该功能将使用A_列表、B_列表、C_列表等中的元素
最后,输出应如下所示
inside fixture get_A_list - element in A_list: A1
inside fixture get_B_list - element in A_list: A1, element in B_list: B1
inside function test_functionality - element in A_list: A1, element in B_list: B1, element in C_list: C1
inside function test_functionality - element in A_list: A1, element in B_list: B1, element in C_list: C2
inside function test_functionality - element in A_list: A1, element in B_list: B1, element in C_list: C3
inside fixture get_A_list - element in A_list: A2
inside fixture get_B_list - element in A_list: A2, element in B_list: B1
inside function test_functionality - element in A_list: A2, element in B_list: B1, element in C_list: C1
inside function test_functionality - element in A_list: A2, element in B_list: B1, element in C_list: C2
inside function test_functionality - element in A_list: A2, element in B_list: B1, element in C_list: C3
这里的问题是
params
参数是在加载时读取的,其中关于命令行参数的信息还不可用,因此不能像示例中那样设置它们最好的方法是适当地重新构造代码,这样就不需要了。如果你能做到这一点,那么你就不需要额外的固定装置
无论如何,首先必须注册命令行参数:
conftest.py
现在,如果可以重新构造代码,使fixture不依赖于参数,那么可以根据传递的命令行参数对测试进行参数化。如果以逗号分隔的列表形式传递参数,则可以执行以下操作:
test.py
这将按所需顺序创建参数化测试
如果不可能,您可以尝试在运行时创建装置(有关详细信息,请参见this post):
conftest.py
注意,您仍然需要如上所述参数化
c
的函数:test.py
这将创建所需的参数化测试:
pytest -vv A_list="A1,A2" B_list="B1" C_list="C1,C2"
:请注意,参数顺序不是所需的,但这只是一个表面问题。以下是
print
函数的输出:pytest -s A_list="A1,A2" B_list="B1" C_list="C1,C2"
相关问题 更多 >
编程相关推荐