Py.test失败,但./manage.py测试工作正常

时间:2015-11-05 17:00:50

标签: python unit-testing selenium pytest pytest-django

我最近接手了一个代码库,然后我开始添加Selenium测试并转移到py.test。由于并行性和其他第三方软件包,我喜欢py.test,但我注意到了py.test的主要问题。

代码库是一个Django堆栈(Python 2.7上的1.8,pytest-2.6.4,目前没有x-dist)。

1)py.test测试比普通的django测试套件运行得慢(不是很好,但我可以忍受)

2)当我通过执行py.test部分单元测试失败。如果我只使用py.test运行unittest(使用@skipUnless装饰器排除),一切正常。当我使用./manage.py test运行(unittest& selenium)时,所有测试都运行良好。

py.tests失败(在使用unittest和selenium的运行中),出现奇怪的错误DoesNotExist: ActionType matching query does not exist.

py.test运行测试的方式与普通的Django测试套件不同吗?

当我与Selenium测试一起运行时,为什么单元测试失败的任何建议?

Selenium测试在失败的单元测试之前执行,但它们遇到了代码的不同区域(不同的模块)。

1 个答案:

答案 0 :(得分:0)

我刚刚修了一个类似的案子。问题是查询无法返回我期望存在的对象。

事实证明它们应该由信号处理程序创建。这些处理程序在导入时在signals.py中注册,如

@receiver(post_save, sender=CustomUser)                                         
def create_email_verification(sender, instance, created, **kwargs):             

signals.py是从相应模块的App configs导入的。

原来,应用程序配置从未加载(由于缺少default_app_config),但Django无论如何都加载了signals.py。但是当通过py.test运行时,模块没有加载(因为它没有在其他任何地方导入),因此信号处理程序从未注册过。

结论:manage.py test似乎是自动导入一些模块,py.test没有。可能存在一些未明确导入的代码(信号处理程序)。