Python py.test夹具创建最佳实践

Python py.test夹具创建最佳实践,python,unit-testing,pytest,fixtures,Python,Unit Testing,Pytest,Fixtures,我对单元测试和py.test相当陌生 我对测试有疑问。 我需要格式化来自webservices的数据。 这些数据(xml、json或其他)需要处理,某些部分需要提取并作为内置python类型(列表、dict、集合等)返回 如果我需要创建一个测试方法来检查数据的格式是否正确,那么我需要使用直接来自Web服务的fixture,还是需要使用Web服务提供的数据表示来创建fixture 例如: tests.py def test_well_formated_data(the_fixture):

我对单元测试和py.test相当陌生

我对测试有疑问。 我需要格式化来自webservices的数据。 这些数据(xml、json或其他)需要处理,某些部分需要提取并作为内置python类型(列表、dict、集合等)返回

如果我需要创建一个测试方法来检查数据的格式是否正确,那么我需要使用直接来自Web服务的fixture,还是需要使用Web服务提供的数据表示来创建fixture

例如:

tests.py

def test_well_formated_data(the_fixture):
    assert isintance(formatting_method(the_fixture), list)
    # and other assertion...
conftests.py

@pytest.fixture
def the_fixture()
    return Webservices.connect()
或代表:

@pytest.fixture
def the_fixture()
    # Here is the same string returned by the webservices
    # each time it's called
    return "{'foo': [ 'bar', 'spam', 'egg']}"
在我读过的一些书或教程中,目的是检查输入是否按预期处理和返回。对于输入,此时的数据“快照”就足够了

那么,我是从一个“不可变”的数据创建fixture,而不知道webservices发送的已更改的数据,还是需要创建fixture,在这种情况下,fixture最接近实际情况,但有过于依赖外部行为的风险(例如,404500错误)


提前感谢。

通常,您不会针对外部服务进行测试,而是确保您自己的应用程序在处理和处理方面是正确的


在您的情况下,您可以对Web服务进行修补(即,实现一个返回一些数据片段的虚拟),并测试您的代码是否按预期处理它们。

通常,您将使用测试数据装置来设置一些静态或可编程表达的数据

当我为与外部服务的交互编写单元测试时,通常我会手动调用外部服务并保存响应。然后我将创建一个返回响应的测试装置——我将在测试中使用这个装置


您应该使用什么样的夹具数据实际上取决于您对测试最感兴趣的代码。例如,如果您的代码正在解析JSON响应,您希望将夹具数据定义为原始JSON(即
{“foo”:“bar”}
)还是解析JSON(即
{foo':“bar”}
)?这取决于您对最重要的测试内容的判断。

好的,谢谢,我想我需要创建与原始数据相同的数据片段。