我正在使用Jenkins,Python,Selenium2(webdriver)和Py.test框架为网络测试创建测试用例。
到目前为止,我正在按照以下结构组织测试:
每个 类 是 测试用例 ,每个 test_ 方法是一个 测试步骤 。
test_
当一切正常时,此设置非常有用,但是当一个步骤崩溃时,其余的“测试步骤”就会发疯。我可以借助来将故障包含在类(测试用例)中teardown_class(),但是我正在研究如何改进它。
teardown_class()
我需要的是,test_如果其中一个方法失败,则以某种方式跳过(或xfail)一个类中的其余方法,以使其余测试用例不运行并标记为FAILED(因为这将是假肯定)
谢谢!
更新: 我没有寻找或答案“这是不好的做法”,因为这样称呼是非常有争议的。(每个测试类都是独立的-这就足够了)。
更新2: 在每个测试方法中都添加“如果”条件不是一个选择- 这是很多重复的工作。我正在寻找的是(也许)有人知道如何使用钩子连接类方法。
我喜欢一般的“测试步骤”构想。我将其称为“增量”测试,在功能测试方案恕我直言中最有意义。
这是一个不依赖pytest内部细节的实现(官方钩子扩展除外)。复制到您的conftest.py:
conftest.py
import pytest def pytest_runtest_makereport(item, call): if "incremental" in item.keywords: if call.excinfo is not None: parent = item.parent parent._previousfailed = item def pytest_runtest_setup(item): previousfailed = getattr(item.parent, "_previousfailed", None) if previousfailed is not None: pytest.xfail("previous test failed (%s)" % previousfailed.name)
如果您现在有一个像这样的“ test_step.py”:
import pytest @pytest.mark.incremental class TestUserHandling: def test_login(self): pass def test_modification(self): assert 0 def test_deletion(self): pass
然后运行,如下所示(使用-rx报告xfail原因):
(1)hpk@t2:~/p/pytest/doc/en/example/teststep$ py.test -rx ============================= test session starts ============================== platform linux2 -- Python 2.7.3 -- pytest-2.3.0.dev17 plugins: xdist, bugzilla, cache, oejskit, cli, pep8, cov, timeout collected 3 items test_step.py .Fx =================================== FAILURES =================================== ______________________ TestUserHandling.test_modification ______________________ self = <test_step.TestUserHandling instance at 0x1e0d9e0> def test_modification(self): > assert 0 E assert 0 test_step.py:8: AssertionError =========================== short test summary info ============================ XFAIL test_step.py::TestUserHandling::()::test_deletion reason: previous test failed (test_modification) ================ 1 failed, 1 passed, 1 xfailed in 0.02 seconds =================
我在这里使用“ xfail”,因为跳过是针对错误的环境或缺少依赖项,错误的解释器版本。
编辑:请注意,您的示例和我的示例都无法直接用于分布式测试。为此,pytest- xdist插件需要发展一种方法来定义要整体出售给一个测试从属的组/类,而不是通常将类的测试功能发送给不同从属的当前模式。