我想在测试套件中的每个测试之前和之后运行其他设置和拆卸检查。我看过赛程,但不确定它们是否是正确的方法。我需要在每次测试之前运行设置代码,并且需要在每次测试后运行拆卸检查。
我的用例是检查没有正确清理的代码:它会留下临时文件。在我的设置中,我将检查文件,在拆解中我也会检查文件。如果有额外的文件,我希望测试失败。
夹具正是你想要的。这就是它们的设计目的。
无论是使用pytest样式夹具,还是设置和拆卸(模块,类或方法级别)xUnit样式夹具,都取决于情况和个人品味。
从你的描述来看,你似乎可以使用pytest autouse fixtures。< br >或者xUnit风格的函数级setup _ function()/tear down _ function()。
Pytest已经完全覆盖了您。如此之多,也许这是一个消防水管的信息。
您可以使用夹具
来实现您想要的。
import pytest
@pytest.fixture(autouse=True)
def run_before_and_after_tests(tmpdir):
"""Fixture to execute asserts before and after a test is run"""
# Setup: fill with any logic you want
yield # this is where the testing happens
# Teardown : fill with any logic you want
> < Li > < p > < code > @ pytest . fixture(autouse = True),来自文档:“有时,您可能希望在不显式声明函数参数或usefixtures装饰器的情况下自动调用fixture。”因此,每次执行测试时,这个fixture都会运行。
<code>#Setup:填充您想要的任何逻辑
< code>yield,正如注释中指出的,这是测试发生的地方
# 拆解 :填充您想要的任何逻辑
,此逻辑将在每次测试后执行。无论在测试期间发生什么情况,都可以保证此逻辑运行。
注意:在<code>pytest
考虑以下示例:
import pytest
@pytest.fixture(autouse=True)
def run_around_tests():
assert False # This will generate an error when running tests
yield
assert True
def test():
assert True
import pytest
@pytest.fixture(autouse=True)
def run_around_tests():
assert True
yield
assert False
def test():
assert True
import pytest
@pytest.fixture(autouse=True)
def run_around_tests():
assert True
yield
assert True
def test():
assert False
import pytest
@pytest.fixture(autouse=True)
def run_around_tests():
assert True
yield
assert True
def test():
assert True
py。测试夹具在技术上是实现您的目的的适当方法。
您只需要像这样定义一个fixture:
@pytest.fixture(autouse=True)
def run_around_tests():
# Code that will run before your test, for example:
files_before = # ... do something to check the existing files
# A test function will be run at this point
yield
# Code that will run after your test, for example:
files_after = # ... do something to check the existing files
assert files_before == files_after
通过使用<code>autouse=True<code>声明fixture,它将自动为同一模块中定义的每个测试函数调用。
也就是说,有一个警告。在设置/拆卸时断言是一种有争议的做法。我的印象是py.test主要作者不喜欢它(我也不喜欢它,所以这可能会影响我自己的看法),所以当你前进时,你可能会遇到一些问题或粗糙的边缘。
问题内容: 我想依次运行每个选定的py.test项目任意次。 我没有看到任何标准的py.test机制来执行此操作。 我试图做到这一点。我修改了传入的项目列表,以多次指定每个项目。测试项目的第一次执行可以按预期工作,但是这似乎对我的代码造成了一些问题。 此外,我希望每次运行都具有唯一的测试项目对象,因为我在各种报告代码中都使用id(项目)作为键。不幸的是,我找不到任何py.test代码来复制测试项目
问题内容: 我有一个测试套件,可以在其中退出系统并在中关闭浏览器。我尝试使用每种测试方法都使用Selenium拍摄失败的测试屏幕截图。我手动检查了它只在每个之前运行,但我想在它之前和之后进行设置。我找不到简单的解决方案。任何帮助将不胜感激。 我得到的输出是 问题答案: 由于规则的设置方式,因此不能有@before之后或@after之后的规则。您可以想到放在测试方法上的诸如shell之类的规则。要进
testng.xml 底座 我已经使用maven在libs包中复制了所有的依赖项,并且我已经验证了selenium-docker.jar和selenium-docker-tests.jar中存在所有的main和test编译类 为创建selenium-docker.jar和selenium-docker-tests.jar而运行的命令: 用于创建Docker图像的命令: 运行测试的命令: 输出 [D
如果你希望在每次运行 Puppet 之前执行命令,可以在配置文件中使用 prerun_command 配置。 类似地,你也可以使用 postrun_command 配置运行 Puppet 之后需要执行的命令。 这种机制为 Puppet 与其他软件的集成提供了强大的钩子,甚至可以触发其他机器上的事件。 prerun 和 postrun 命令必须能成功运行(即其返回的状态码为 0),否则 Puppet
问题内容: 我正在尝试测试tensorflow程序。我正在使用参数化的py.test夹具设置tensorflow会话: Tensorflow具有全局状态,因此一些测试启动会污染它。例如,启用急切执行后,无法禁用它。有没有一种方法可以指示py.test为每个测试创建一个新进程?还是使用参数化夹具来配置测试环境的另一种方法?用法示例: 问题答案: 如评论中所建议,使用将是解决方案。该插件设计用于并行或