使用模块共享夹具运行pytest单元测试的PyDev失败

MBa*_*ann 13 python unit-testing pydev pytest

我在使用pyDev运行pytest单元测试时遇到问题.我尝试使用模块共享夹具和终结器进行单元测试,在最后一次测试后应该将其推迟.但是当在pyDev中运行单元测试时,它不使用相同的实例,而是创建两个不同的实例.该示例在控制台中运行正常,或者从pydev中的脚本启动时运行正常.

我在Win7上使用平台Python 2.7.3,pytest-2.3.4,pyDev 2.7.3.2013031601,Eclipse 4.2.

我在http://pytest.org/latest/fixture.html上尝试了这个例子

pydev的输出是:

============================= test session starts ==============================
platform win32 -- Python 2.7.3 -- pytest-2.3.4
__________________________________ test_ehlo ___________________________________
smtp = <smtplib.SMTP instance at 0x027F9080>
__________________________________ test_noop ___________________________________
smtp = <smtplib.SMTP instance at 0x027FF3C8>
Run Code Online (Sandbox Code Playgroud)

控制台输出是:

============================= test session starts ==============================
platform win32 -- Python 2.7.3 -- pytest-2.3.4
__________________________________ test_ehlo ___________________________________
smtp = <smtplib.SMTP instance at 0x01E51288>
__________________________________ test_noop ___________________________________
smtp = <smtplib.SMTP instance at 0x01E51288>
Run Code Online (Sandbox Code Playgroud)

这是预期的行为.我究竟做错了什么??

使用的代码是conftest.py:

import pytest
import smtplib

@pytest.fixture(scope="module")
def smtp():
return smtplib.SMTP("merlinux.eu")
Run Code Online (Sandbox Code Playgroud)

test_smtplib.py中的测试代码:

# content of test_module.py
def test_ehlo(smtp):
    response = smtp.ehlo()
    assert response[0] == 250
    assert "merlinux" in response[1]
    assert 0  # for demo purposes

def test_noop(smtp):
    response = smtp.noop()
    assert response[0] == 250
    assert 0  # for demo purposes
Run Code Online (Sandbox Code Playgroud)

从脚本运行测试:

import pytest,os
os.chdir("[path_to_tests]/tests") #your file location
pytest.main(['-s', 'test_smtplib.py'])
Run Code Online (Sandbox Code Playgroud)

任何建议,非常感谢您的帮助!

Kob*_*ohn 1

我没有 eclipse,但我一直在查看 Pydev 和 pytest 的源代码。pytest 默认情况下不使用多重处理,但如果您安装了 xdist,它就会使用多重处理。也许你有吗?或者也许 Eclipse 已经安装了它?

如果您的系统仍然可用,您可以尝试在 pytest 参数中设置以下选项吗?它只是告诉 pytest 在使用 xdist 时使用一个进程,如此处所述

-n=1或者也许它会更喜欢-n 1

如果这不起作用,那么这也不应该起作用,但你能尝试一下吗?像以前一样在pytest选项中使用以下选项(不在 pydev 测试运行程序选项中)来启用模块级测试。这是一个 pydev 测试运行程序选项,所以我猜它会导致错误,但也许关闭该选项的其他一些代码会使用它。

--split_jobs=module或者也许再次--split_jobs module