我有一个通用框架,用于针对多个数据集测试各种模型,我知道这些数据集的预期结果。
我当前代码的模型如下所示:
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 中的输出示例:
这里的问题基本上是测试的分组方式。它会运行一个数据集的所有测试,然后再转到下一个数据集,这是明智的,不幸的是,最后的报告反映了这一点,我最终得到了所有这些重复的类别,我无法看到哪个数据集失败了,除非我一路展开(在这个模型中,我只有一些测试和 3 个数据集,但想象我有 20 个数据集和 20 个测试)。有没有办法对这些测试进行分组?我猜测 pytest 有某种分组命令,我可以在 conftest.py 文件中对其进行修改,但是我对 conftest 文档的查看并没有让我对此更加明智。
或者,我猜测我可以尝试重新排序测试的运行方式。我对此有些犹豫,因为当前的方法似乎更明智,其中每个数据集都在所有测试中使用,然后再进行下一个测试。据我所知,替代方案需要在每个测试的所有数据集上缓存或重新运行模型。
应该指出的是,我还尝试查看通过 CLI 运行时的输出,但这似乎并没有好多少。