我一直在尝试使用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下的一种方法。
答案 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_.py
或test_something.py
并且对我有用。
我觉得很愚蠢
答案 2 :(得分:1)
我也遇到了这个问题,我花了一整天才发现类名应该以“Test”开头,而我的类名是“test”。这让我成功地运行了我的代码。
确保你的python测试文件名和方法名也应该以“test_”开头
答案 3 :(得分:0)
我遇到了同样的问题,尽管我使用了如上所述的命名约定:
我看到物品没有被收集并随消息一起扔 「收集了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