我在使用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>
控制台输出是:
============================= 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>
这是预期的行为。我做错了什么?
使用的代码是conftest.py:
import pytest
import smtplib
@pytest.fixture(scope="module")
def smtp():
return smtplib.SMTP("merlinux.eu")
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
使用以下命令从脚本运行测试:
import pytest,os
os.chdir("[path_to_tests]/tests") #your file location
pytest.main(['-s', 'test_smtplib.py'])
任何建议,非常感谢您的帮助!
答案 0 :(得分:1)
我没有eclipse,但我一直在查看Pydev和pytest的源代码。 pytest默认情况下不使用多处理,但如果安装了xdist,它将会使用。也许你有它?或许Eclipse安装了它?
如果您仍然可以使用该系统,可以尝试在pytest参数中设置以下选项吗?它只是告诉pytest在使用xdist as documented here时使用一个进程。
-n=1
或者它可能更喜欢-n 1
如果这不起作用,那么这也应该不起作用,但你可以试试吗?像以前一样使用 pytest 选项中的选项(不在pydev test runner选项中)来启用模块级测试。这是一个pydev测试运行器选项,所以我猜它会导致错误,但也许其他一些关键选项的代码会使用它。
--split_jobs=module
或者也许--split_jobs module
答案 1 :(得分:1)
似乎这是pydev方面的一个长期存在的错误。我刚修好并向Pydev提交了拉取请求,请参阅https://github.com/fabioz/Pydev/pull/120。同时,您可能会稍微改变一下并应用于已安装的pydev版本,启用适当的pydev / pytest运行并使用作用域。