“nosetest的LazySuite应该如何使用?”

2024-06-13 21:30:40 发布

您现在位置:Python中文网/ 问答频道 /正文

根据nosetest's API documentation,有一个LazySuite()类,它是

class nose.suite.LazySuite(tests=())
A suite that may use a generator as its list of tests

但是,我找不到这个测试生成器应该是什么样子的任何示例。我试着编写一个方法,在将测试用例交给noestest的测试发现时使用,并将其传递给LazySuite构造函数,如下所示:

^{pr2}$

然而,这与

^{3}$

用来创建LazySuite类实例的生成器应该是什么样子?在


Tags: apithatusedocumentationastestsgeneratormay
1条回答
网友
1楼 · 发布于 2024-06-13 21:30:40

好吧,我不确定这是否是唯一正确的方法,因为我没有看到它在任何地方被正式记录,但是当涉及到the TestLoader class及其loadTestsFromGenerator()方法时,它是有效的。这个方法传递了一个生成器函数,该函数生成我在问题中已经提到的(test_function, other_args, ...)元组中的一个或多个。在

完整示例(打印语句仅用于更容易了解发生的情况):

import nose
import nose.suite
import itertools
from nose.loader import TestLoader


data = [
        ['a', 'b', 'c'],
        ['1', '2', '3']
]

def first_check(row):
    print('Running first check on row: {0}'.format(row))
    assert row[0] is not None


def second_check(row):
    print('Running second check on row: {0}'.format(row))
    assert row[1] is not None

def test_generator():
    for row in data:
        yield first_check, row
        yield second_check, row

if __name__ == '__main__':
    all_tests = TestLoader().loadTestsFromGenerator(test_generator, 'test-with-nose')
    suite = nose.suite.LazySuite(all_tests)
    nose.main(suite=suite)

使用 nocapture选项运行此选项(否则打印将被隐藏)将提供:

^{pr2}$

对大量要测试的行执行此操作(例如,从csv读取器而不是嵌套列表中生成这些行)不是很快,但是,它可以保持较低的内存消耗,因为只有一个行外的组合和测试同时加载到内存中。在

编辑:当我为一个非常大的生成器(例如,有数百万行的csv文件)执行脚本时,这仍然在不断地消耗我宝贵的内存。这可能是因为测试结果仍然存储在内部某处,直到所有测试都已运行?在

相关问题 更多 >