如何将dicts的词典传递给pytest

时间:2016-05-19 15:15:56

标签: python python-2.7 python-3.x automated-tests pytest

testdata 对象包含各公司的凭据。我想将此对象传递给pytest测试函数。在这种情况下,需要运行2次测试(公司1和2各一次)。

testdata = {
    "Company1": {
        "username": "user1",
        "password": "pass!"
    }, "Company2": {
        "username": "user2",
        "password": "pass!"
    }
}

这是测试功能

def test_login():
    # call login function by passing username and password
    # Returns True if Success else False
    assert login()

我尝试了 @ pytest.mark.parametrize ,但无法弄清楚如何传递dicts。

关于如何解决这个问题的任何指示都会非常有用。

2 个答案:

答案 0 :(得分:0)

这就是 @ pytest.mark.parametrize 传递dicts和其他值类型的方法。

import pytest


@pytest.mark.parametrize(
    "data, value",
    [
        ({"Company1": {"username": "user1", "password": "pass!"},
         "Company2": {"username": "user2", "password": "pass!"}}, "some value")
    ]
)
def test_example(data, value):
    assert isinstance(data, dict)
    assert value == "some value"

但是,如果您想将此字典拆分为两个以作为单独的测试运行,那么您需要执行以下操作:

import pytest


@pytest.mark.parametrize(
    "data, value",
    [
        ({"username": "user1", "password": "pass!"}, "some value"),
        ({"username": "user2", "password": "pass!"}, "some value")
    ]
)
def test_example(data, value):
    assert isinstance(data, dict)
    assert value == "some value"

答案 1 :(得分:0)

当你为实例创建断言时,它不是一个好的实践。你可以断言键/值。

你也可以使用灯具