微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

python – pytest.main(‘ – s’)应该运行两次测试吗?

我刚开始学习测试,所以我刚开始尝试使用py.test组合并运行一些非常简单的单元测试.

示例test_script.py:

import pytest

def test_func():
    assert True

pytest.main('-v')

运行这个给出:

============================= test session starts ==============================
platform win32 -- Python 3.3.1 -- pytest-2.3.4 -- C:\Program Files (x86)\python33\python.exe
collecting ... collected 1 items

test_script.py:3: test_func PASSED
=========================== 1 passed in 0.12 seconds ===========================

如果我用-s替换-v来查看stdout(并禁用stdout的pytest捕获),测试会运行两次:

============================= test session starts ==============================
platform win32 -- Python 3.3.1 -- pytest-2.3.4
============================= test session starts ==============================
platform win32 -- Python 3.3.1 -- pytest-2.3.4
collected 1 items

test_script.py .

=========================== 1 passed in 0.04 seconds ===========================
collected 1 items

test_script.py .

=========================== 1 passed in 0.12 seconds ===========================

测试应该在这里运行两次吗?我做了搜索,但在文档中找不到任何明显的东西(虽然可能一直在寻找错误的地方).

解决方法:

那是一个有趣的:)

这是发生的事情:python执行test_script.py并因此执行pytest.main(“ – s”),它返回到文件系统并收集test_script.py作为测试模块.当pytest导入test_script时,在收集期间再次调用pytest.main(…).第二次调用不会再次导入test_script,因为它现在在sys.modules中,但它执行测试功能.当集合完成(并且内部pytest.main运行已执行测试一次)时,测试函数也由外部pytest.main调用执行.一切都清楚了吗?

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐