我最近接手了一个代码库,然后我开始添加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
与@skipUnless
装饰器排除),一切正常。当我使用./manage.py test
运行(unittest& selenium)时,所有测试都运行良好。
py.tests失败(在使用unittest和selenium的运行中),出现奇怪的错误DoesNotExist: ActionType matching query does not exist.
。
py.test运行测试的方式与普通的Django测试套件不同吗?
当我与Selenium测试一起运行时,为什么单元测试失败的任何建议?
Selenium测试在失败的单元测试之前执行,但它们遇到了代码的不同区域(不同的模块)。
答案 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没有。可能存在一些未明确导入的代码(信号处理程序)。