我在几个班级组织了一些测试。我已经有一个 scope=class 的测试夹具,这样它就可以在测试套件(类)之前运行。但是,我需要在一些特定测试后执行一个函数。假设我在一个类中有 100 个测试,我已经有一个夹具可以在这些测试之前执行一个函数,但我还想在 2-3 个这些测试之后运行一个函数。
实现这一目标的最佳方法是什么?可以用固定装置或其他任何东西来完成吗?
我在几个班级组织了一些测试。我已经有一个 scope=class 的测试夹具,这样它就可以在测试套件(类)之前运行。但是,我需要在一些特定测试后执行一个函数。假设我在一个类中有 100 个测试,我已经有一个夹具可以在这些测试之前执行一个函数,但我还想在 2-3 个这些测试之后运行一个函数。
实现这一目标的最佳方法是什么?可以用固定装置或其他任何东西来完成吗?
首先,编写一个将在测试完成后执行的夹具:
@pytest.fixture
def foo():
yield
print("do stuff after test")
文档:夹具完成/执行拆卸代码
现在标记每个应该调用这个夹具的测试usefixtures("foo")
:
@pytest.mark.usefixtures("foo")
def test_spam():
...
如果您使用的是 python 的内置 unittest 模块,您可以覆盖该tearDown
方法以在类中的每个测试之后运行某些东西。
如果您使用 pytest 的框架并使用 pytests 固定装置,则可以yield
在固定装置中使用关键字。
它记录在https://doc.pytest.org/en/latest/fixture.html#teardown-cleanup-aka-fixture-finalization中。
如果您知道要运行的特定测试,那么您可以在 .csv 中为每个测试设置不同的值,例如 (index) (column) (column) Tests Test# Complete? 测试 1 1 T 测试 2 2 F
import pandas as pd
#makes panda read your file and sets the variable as the data in the file
data = pd.read_csv("filename.csv")
#Gets the value from the column 'test#' and 'complete' and sets as a variable
Var1 = DataFrame.get_value("the number test you want to take", 'Complete?')
If Var1 = T
#Run the rest of your program here
#Then you can just repeat this for the other tests you want to check for
这不是最漂亮的解决方案,但它有效