重新组织 pytest 或 pytest 输出以更加直观

问题描述 投票:0回答:0

我有一个通用框架,用于针对多个数据集测试各种模型,我知道这些数据集的预期结果。

我当前代码的模型如下所示:

import numpy as np
import pytest

@pytest.fixture(params=[(1,2),(2,3),(3,9)],scope='session')
def model_output(request):
    data,expected_results = request.param
    results = data*data
    return results, expected_results

class TestCat1:
    def test_a(self,model_output):
        results, expected_results = model_output
        var = results
        var_truth = expected_results
        if var_truth is None:
            pytest.skip("variable not defined")
        else:
            assert np.allclose(var,var_truth)

    def test_b(self,model_output):
        results, expected_results = model_output
        var = results
        var_truth = expected_results
        if var_truth is None:
            pytest.skip("variable not defined")
        else:
            assert np.allclose(var,var_truth)

    def test_c(self,model_output):
        results, expected_results = model_output
        var = results
        var_truth = expected_results
        if var_truth is None:
            pytest.skip("variable not defined")
        else:
            assert np.allclose(var,var_truth)


class TestCat2:
    def test_d(self,model_output):
        results, expected_results = model_output
        var = results
        var_truth = expected_results
        if var_truth is None:
            pytest.skip("variable not defined")
        else:
            assert np.allclose(var,var_truth)

    def test_e(self,model_output):
        results, expected_results = model_output
        var = results
        var_truth = expected_results
        if var_truth is None:
            pytest.skip("variable not defined")
        else:
            assert np.allclose(var,var_truth)

class TestCat3:
    def test_f(self,model_output):
        results, expected_results = model_output
        var = results
        var_truth = expected_results
        if var_truth is None:
            pytest.skip("variable not defined")
        else:
            assert np.allclose(var,var_truth)


因此,模型针对每个示例运行,相关输出被存储并与预期结果进行比较,并评估预期输出是否已定义(否则跳过测试)。

我的问题是从 pytest 获得的输出不太容易阅读,我想知道更改它的最佳方法是什么。以下是 pycharm 中的输出示例:

Pytest result in pycharm

这里的问题基本上是测试的分组方式。它会运行一个数据集的所有测试,然后再转到下一个数据集,这是明智的,不幸的是,最后的报告反映了这一点,我最终得到了所有这些重复的类别,我无法看到哪个数据集失败了,除非我一路展开(在这个模型中,我只有一些测试和 3 个数据集,但想象我有 20 个数据集和 20 个测试)。有没有办法对这些测试进行分组?我猜测 pytest 有某种分组命令,我可以在 conftest.py 文件中对其进行修改,但是我对 conftest 文档的查看并没有让我对此更加明智。

或者,我猜测我可以尝试重新排序测试的运行方式。我对此有些犹豫,因为当前的方法似乎更明智,其中每个数据集都在所有测试中使用,然后再进行下一个测试。据我所知,替代方案需要在每个测试的所有数据集上缓存或重新运行模型。

应该指出的是,我还尝试查看通过 CLI 运行时的输出,但这似乎并没有好多少。

python testing pycharm pytest
© www.soinside.com 2019 - 2024. All rights reserved.