Pytest:在测试中更新全局变量

3

我是Python的新手,正在使用pytest进行测试。

我正在从python脚本中执行pytest。我在脚本中有一个全局变量,根据测试结果进行修改。测试执行后再次使用更新后的全局变量。

import pytest
global test_suite_passed
test_suite_passed = True

def test_toggle():
   global test_suite_passed
   a = True
   b = True
   c = True if a == b else False
   test_suite_passed = c
   assert c

def test_switch():
   global test_suite_passed
   one = True
   two = False
   three = True if one == two else False
   if test_suite_passed:
      test_suite_passed = three
   assert three


if __name__ == '__main__':
   pytest.main()
   if not test_suite_passed:
      raise Exception("Test suite failed")
   print "Test suite passed"

我有两个问题:

1) 上述代码片段打印出"测试套件通过",然而我期望第二个测试用例会引发一个异常。

2) 基本上,我想要一个对pytest结果的引用,通过它我可以知道有多少测试用例通过和失败。这会显示在测试摘要中。但我正在寻找一个对象,在测试执行后可以进一步在脚本中使用。


1
永远不要使用全局变量。在测试中也不要使用全局变量。 - Daniel
2个回答

1

谢谢您的回复。基本上,我有这个pytest作为Java的子进程运行。这就是我从脚本本身调用测试的原因。您发布的链接很好,但对我来说有点复杂。我所需要的就是Python子进程(pytest)应该运行所有测试。但是,如果整个测试套件中至少有一个失败,则该进程应该以异常退出。否则,它应该进行优雅的退出。这将有助于验证Java端子进程的退出代码。这就是为什么我有全局变量来知道测试套件是否通过的原因。 - user3451476
后处理插件在测试用例中的每个断言都会被调用。你能告诉我如何在这里维护一个状态,以便找出是否有任何测试用例失败了吗?即使一个测试用例在中间失败了,我也希望执行所有的测试用例。但是在所有的测试用例执行完毕之后,如果其中一个测试用例失败了,我想抛出一个异常。这就是我使用全局变量来维护该状态的原因。我可以从“failures”文件中读取以检查测试用例是否失败,就像你提到的链接中建议的那样,但这是不必要的开销。 - user3451476

1
这可以通过调用pytest.main()时返回的退出代码来解决,全局变量不是必需的。
import pytest

def test_toggle():
    a = True
    b = True
    c = True if a == b else False
    assert c

def test_switch():
    one = True
    two = False
    three = True if one == two else False
    assert three


if __name__ == '__main__':
    exit_code = pytest.main()
    if exit_code == 1:
        raise Exception("Test suite failed")
    print "Test suite passed"

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接