pytest退出没有错误,但“收集0项”

时间:2016-05-20 18:54:35

标签: python unit-testing

我一直在尝试使用python中的pytest运行单元测试。我编写了一个模块,其中包含一个类和该类中的一些方法。我为这个模块写了一个单元测试(用一个简单的断言语句来检查列表的相等性),我首先用列表实例化类。然后我在该对象上调用一个方法(来自该类)。 test.py和要测试的脚本都在同一个文件夹中。当我在其上运行pytest时,我会收到“收集0项”。

我是pytest的新手,但能够成功运行他们的示例。我在这里缺少什么?

在Windows 7上运行Python版本3.5.1和pytest版本2.8.1。

我的test.py代码:

from sort_algos import Sorts

def integer_sort_test():
    myobject1 = Sorts([-100,10,-10])
    assert myobject1.merge_sort() == [-101,-100,10]

sort_algos.py是一个包含类Sorts的模块。 merge_sort是Sorts下的一种方法。

5 个答案:

答案 0 :(得分:36)

pytest根据命名约定收集测试。默认情况下,任何包含测试的文件都必须以test_开头命名,文件中任何应被视为测试的函数也必须以test_开头。

如果您将测试文件重命名为test_sorts.py并将上面提供的示例函数重命名为test_integer_sort,那么您会发现它会自动收集并执行。

此测试收集行为can be changed以满足您的需求。更改它需要了解configuration in pytest

答案 1 :(得分:2)

我遇到了同样的问题,但是我的功能叫做test.py,我从来不认为这个问题是文件名,在文档中说:“ pytest将运行格式为test_*.py的所有文件,或者*_test.py在当前目录及其子目录中。更一般而言,它遵循标准的测试发现规则。”

完全正确!该名称应为test_.pytest_something.py并且对我有用。

我觉得很愚蠢

答案 2 :(得分:1)

我也遇到了这个问题,我花了一整天才发现类名应该以“Test”开头,而我的类名是“test”。这让我成功地运行了我的代码。

确保你的python测试文件名和方法名也应该以“test_”开头

答案 3 :(得分:0)

我遇到了同样的问题,尽管我使用了如上所述的命名约定:

  1. test_1-something1.py
  2. test_2-something2.py

我看到物品没有被收集并随消息一起扔 「收集了0件物品」 但是,如果测试抛出错误,则HTML报告将显示该错误。

请提出任何想法。 * @ cewing,提供的两个链接均不起作用。

答案 4 :(得分:0)

我也遇到了这个问题。它不是由脚本名称引起的,而是由于一个名为“ pytest-appium”的插件而引起的,我本来就无意使用它。

我终于从报告中发现了它: ('c:\ python39 \ lib \ site-packages \ pytest_appium \ plugin.py',8,'已跳过:无变量文件')

因为 plugin.py 需要变量,但我不知道它是做什么的。

@pytest.fixture(scope='session')
def appium(variables):
    if not variables:
        pytest.skip('no variables file')

解决方案:

pip uninstall pytest-appium