Pytest无法识别类内的测试方法

8

我一直在使用Python的unittest2,最近刚开始迁移到pytest。自然而然地,我试着做一些类比,但有一件事我就无法解决:

问题:为什么Pytest无法识别我在“test”类中定义的测试方法。

对我有效的方法

# login_test.py
import pytest
from frontend.app.login.login import LoginPage

@pytest.fixture
def setup():
    login = LoginPage()
    return login

def test_successful_login(setup):
    login = setup
    login.login("incorrect username","incorrect password")
    assert login.error_msg_label().text == 'Invalid Credentials'

对我无效的内容(无效=测试方法未被发现)

# login_test.py 
import pytest
from frontend.app.login.login import LoginPage


class LoginTestSuite(object):

    @pytest.fixture
    def setup():
        login = LoginPage()
        return login

    def test_invalid_login(self, setup):
        login = setup
        login.login("incorrect username","incorrect password")
        assert login.error_msg_label().text == 'Invalid Credentials'

pytest.ini中,我有以下配置:
# pytest.ini
[pytest]
python_files = *_test.py
python_classes = *TestSuite
# Also tried
# python_classes = *
# That does not work either

不确定其他什么信息可以用于调试?

感激任何建议。


如果使用默认命名约定,即TestSuiteLogin,它是否有效?您确定.ini正在被使用吗? - jonrsharpe
在3.x中,您不需要显式地子类化object以获得新样式类,这就是为什么我说这不是问题的原因。这似乎非常奇怪! - jonrsharpe
不知道 @3.x 不需要显式子类来获取新风格。是的,这非常奇怪。因为我在 py.test 的文档中看到了很多使用类的示例。而且,我也无法通过切换某些“非常详细”的选项来进行调试。 :/ - Amey
@jonrsharpe,好的,有一些进展了。当我从比它更高的文件夹运行py.test时,它会被检测到。这个数据点有帮助吗? - Amey
好的,我觉得我找到原因了。如果在 pytest.ini 文件中有任何关于 python_classes= 的设置,它就不能正常工作。即使是全匹配的 python_classes=* 也不行。一旦我删除或注释该行设置,它就能正常工作。 - Amey
显示剩余4条评论
2个回答

12
我发现了一个类似的问题。如果你用"Test"作为类名的开头,pytest 就可以找到它们,否则你的测试类就无法被发现。
下面是可行的代码示例:
class TestClass:
    def test_one(self):
        assert 0

这并不包括以下内容:
class ClassTest:
    def test_one(self):
        assert 0

我只是把testClass改为TestClass,就可以工作了。 - Alirezak

-1

Pytest不需要从unittest继承来使用Test Class。同时,使用测试类也有其优势。一个例子是对一组测试进行单个命令标记- http://pytest.org/latest/example/markers.html#marking-whole-classes-or-modules - Amey

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