使用相同夹具的两次调​​用(但参数不同)运行测试吗?

时间:2018-08-15 17:37:52

标签: python unit-testing pytest

我正在Pytest中编写一个测试套件。我有一个看起来像这样的灯具:

import pytest

@pytest.fixture(scope="session", params=["cpu", "gpu"])
def device(request):
    return request.param

这是因为我希望我的代码在CPU和GPU上都能相同地工作。 (从技术上讲,这个事实与我的问题无关,但是我想举一个用例的实际例子。)表示设备无关代码的所有其他装置都依赖于device,就像这样:

@pytest.fixture(scope="session")
def data(device):
    return LoadData(path, device)

到目前为止,一切都很好。使用load_data的任何测试都会被调用两次:

def test_data_is_loaded(data):
    assert data.success

但这是我的问题:如果我想比较同一灯具的两个不同参数化的输出怎么办?

def test_devices_load_same_amount_of_data(data_cpu, data_gpu):
    assert len(data_cpu) == len(data_gpu)

def test_gpu_is_faster_than_cpu(data_cpu, data_gpu):
    cpu_start = time.time()
    data_cpu.process()
    cpu_duration = time.time() - cpu_start

    gpu_start = time.time()
    data_gpu.process()
    gpu_duration = time.time() - gpu_start

    assert gpu_duration < cpu_duration

我希望能够做类似的事情而无需将data分成多个装置;我已经尝试过了,但是它使我的测试代码易于出错并且很难更改(因为有很多无用的重复)。

如果我必须写新的固定装置,挂钩或标记,也可以。它们只是出于减少代码重复而不是添加的目的。

如果有第三方插件可以做到这一点也没关系。

0 个答案:

没有答案