Python pytest通过比较两个列表动态生成案例

Python pytest通过比较两个列表动态生成案例,python,pytest,Python,Pytest,我在动态生成pytest测试用例方面遇到了很多麻烦。下面是一个场景 我有两个带有字符串元素的列表 List1 = ['a', 'b', 'c'] List2 = ['a', 'c', 'd'] 我想比较这两个列表,并将列表1的第一个元素与列表2的第一个元素进行比较 例如,如果列表1'a'中的第一个元素==列表2'a'中的第一个元素,则它是一个过程。现在,列表1中的第二个元素与列表2中的第二个元素不匹配,因此在本例中它应该抛出FAIL'b'!='c' 我不知道如何为此编写pytest测试用例。这

我在动态生成pytest测试用例方面遇到了很多麻烦。下面是一个场景

我有两个带有字符串元素的列表

List1 = ['a', 'b', 'c']
List2 = ['a', 'c', 'd']
我想比较这两个列表,并将列表1的第一个元素与列表2的第一个元素进行比较

例如,如果列表1'a'中的第一个元素==列表2'a'中的第一个元素,则它是一个过程。现在,列表1中的第二个元素与列表2中的第二个元素不匹配,因此在本例中它应该抛出FAIL'b'!='c'

我不知道如何为此编写pytest测试用例。这两个列表是包含太多元素的长列表 这就是我正在做的

def list1():
对于某些csv中的i:
清单1.追加(i)
def list2():
对于某些csv中的i:
清单2.追加(一)
@pytest.mark.parametrize(“list1”,list1())
def测试单元验证(列表1):
在list2()中断言list1

我做错了什么?

您第一次忘记了每个列表方法中的返回值。 第二次测试不是您描述的测试。 prametrize将在list1()的结果上循环,这意味着您将比较list2()的结果中是否有“a”。 例

使用in可能会给examle带来一些问题

List1 = ['a', 'b', 'c', 'd']
List2 = ['a', 'c', 'd' 'b']
'b' in list2() # This is True
我对你的问题的理解是比较两个列表的相等性。要做到这一点,你可以做到

['a', 'b', 'c'] == ['a', 'c', 'd']
您的示例如下所示

def list1():
    for i in some_csv:
        list1.append(i)
    return list1

def list2():
    for i in some_csv:
        list2.append(i)
    return list2

def test_validation():
    assert list1() == list2()

致以最诚挚的问候

为什么不直接比较一下列表呢

assert list1()==list2()
但如果您坚持按元素进行测试:

@pytest.mark.parametrize(
“一,二”,这些是测试用例的参数
zip(list1(),list2()),#生成要解压缩到args中的元组
)
def测试_元件(一、二):
断言一=二

不过,测试名称会很混乱。您可能希望为
ids
提供一个列表/迭代器,以使名称更美观。

您忘记在函数中返回值。另外,函数(
list1
)和包含列表元素的变量使用相同的名称也不是一个好主意。谢谢您的回复。如何使用pytest.mark.parametrize decorator比较两个列表函数并生成动态测试用例。例如,若第一个列表的第一个元素和第二个列表的第一个元素相等,那个么在控制台中我应该看到通过了,若第一个列表的第二个元素和第二个列表的第二个元素不匹配,那个么我应该看到失败了。
def list1():
    for i in some_csv:
        list1.append(i)
    return list1

def list2():
    for i in some_csv:
        list2.append(i)
    return list2

def test_validation():
    assert list1() == list2()