我正在尝试构建一个例程,为当前directoy中的每个PDF文档调用一个Pytest类。。。让我解释一下
假设我有这个测试文件
import pytest
class TestHeader:
#asserts...
class TestBody:
#asserts...
此脚本需要测试我的cwd中的每个pdf文档
以下是我最好的尝试:
import glob
import pytest
class TestHeader:
#asserts...
class TestBody:
#asserts...
filelist = glob.glob('*.pdf')
for file in filelist:
#magically call pytest for each file
我将如何处理这个问题
编辑:补充我的问题
我有一个巨大的函数,可以提取每个文档的数据,我们称之为extract_pdf
此函数返回一个元组(头、体)
当前尝试如下所示:
import glob
import pytest
class TestHeader:
#asserts...
class TestBody:
#asserts...
filelist = glob.glob('*.pdf')
for file in filelist:
header, body = extract_pdf(file)
pytest.main(<pass header and body as args for pytest>)
我需要在测试之前解析每个文档。可以这样做吗
这是对@ArunKalirajaBaskaran现有答案的扩展
问题是您有不同的测试类想要使用相同的数据,但是您只想解析数据一次。如果可以一次读取所有数据,则可以将其读入全局变量,并使用这些变量对测试进行参数化:
这与使用相同
pytest_generate_tests
只是增加了一点便利性,因此您不必为每个测试重复parametrize
装饰程序当然,这样做的缺点是您将一次读入所有数据,如果有很多文件,这可能会导致内存使用问题。使用
pytest.main
的方法将不起作用,因为这与使用给定参数在命令行上调用pytest
是一样的。参数化可以在夹具级别或测试级别上完成(如此处),但两者都需要在加载时对参数进行评估,因此我不认为可以懒散地进行此操作(除了将其全部放在一个测试中)。也许其他人有更好的主意实现这一点的最佳方法是动态参数化测试用例
这可以通过使用
pytest_generate_tests
钩子实现注意:
fileName
应该是测试函数的参数之一这将导致对目录中的每个文件执行testcase,testcase如下
等等
相关问题 更多 >
编程相关推荐