鼻子2 vspy.测试独立的过程

2024-10-03 19:32:35 发布

您现在位置:Python中文网/ 问答频道 /正文

我们一直在使用noestest来运行和收集我们的unittests(它们都是我们喜欢的python unittests编写的)。我们喜欢鼻子的地方:

  • 使用标准的python单元测试(我们喜欢这种结构)。在
  • 支持以xml形式报告覆盖率和测试输出(对于jenkins)。在

我们缺少的是一种在孤立过程中运行测试的好方法,同时保持良好的错误再缓冲(我们正在通过Python测试C++库,所以片段不应该是灾难性的)。鼻管似乎不再维修了,我们有一些问题。在

我们在想是否应该 -固定/使用鼻管 -切换到nose2并写入nosepipe2。 -使用pytest或其他一些测试框架。在

我们更愿意与一个好的社区合作。似乎我们的问题(C++插件需要良好的隔离)可能是一个常见的问题,但是Google我没有找到维护的解决方案。感谢经验丰富的主管的建议。在


Tags: 方法标准过程报告地方覆盖率xml单元测试
1条回答
网友
1楼 · 发布于 2024-10-03 19:32:35

pytest的xdist plugin提供了 boxed选项 在受控子进程中运行每个测试。以下是一个基本示例:

# content of test_module.py

import pytest
import os
import time

# run test function 50 times with different argument
@pytest.mark.parametrize("arg", range(50))
def test_func(arg):
    time.sleep(0.05) # each tests takes a while
    if arg % 19 == 0: 
        os.kill(os.getpid(), 15)

如果您使用以下命令运行此命令:

^{2}$

您将看到有几个测试报告为崩溃 通过小写f和相应的失败摘要。你也可以使用 xdist提供了并行化功能来加快测试速度:

$ py.test  boxed -n3
=========================== test session starts ============================
platform linux2   Python 2.7.3   pytest-2.3.0.dev8
plugins: xdist, bugzilla, cache, oejskit, cli, pep8, cov
gw0 I / gw1 I / gw2 I
gw0 [50] / gw1 [50] / gw2 [50]

scheduling tests via LoadScheduling
..f...............f..................f............
================================= FAILURES =================================
_______________________________ test_func[0] _______________________________
[gw0] linux2   Python 2.7.3 /home/hpk/venv/1/bin/python
/home/hpk/tmp/doc-exec-420/test_module.py:6: running the test CRASHED with signal 15
______________________________ test_func[19] _______________________________
[gw2] linux2   Python 2.7.3 /home/hpk/venv/1/bin/python
/home/hpk/tmp/doc-exec-420/test_module.py:6: running the test CRASHED with signal 15
______________________________ test_func[38] _______________________________
[gw2] linux2   Python 2.7.3 /home/hpk/venv/1/bin/python
/home/hpk/tmp/doc-exec-420/test_module.py:6: running the test CRASHED with signal 15
=================== 3 failed, 47 passed in 2.03 seconds ====================

原则上,仅仅分配给并行子进程通常就足够了,并且避免了为每个测试启动装箱进程的开销。当前只有当崩溃测试少于进程的-n个数时,这才有效,因为没有重新启动正在死亡的测试进程。这一限制可能不需要太多努力就可以消除。同时你必须使用安全装箱选项。在

相关问题 更多 >