1

我最近接管了一个代码库,我首先添加了 Selenium 测试并转移到 py.test。由于并行性和其他 3rd 方包,我喜欢 py.test,但我注意到 py.test 的主要问题。

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

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

2)当我通过执行将单元测试与 Selenium 测试一起运行时py.test一些单元测试失败。如果我只用 py.test 运行单元测试(使用@skipUnless装饰器排除),一切都会通过。当我使用./manage.py test.

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

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

当我与 Selenium 测试一起运行单元测试时,有什么建议会失败吗?

Selenium 测试是在失败的单元测试之前执行的,但它们会触及代码的一个非常不同的区域(不同的模块)。

4

1 回答 1

0

我刚刚修复了一个类似的案例。问题是查询未能返回我期望存在的对象。

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

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

Signals.py 是从各个模块的App 配置中导入的。

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

结论:manage.py test似乎自动导入了一些模块,而 py.test 没有。可能有一些代码(信号处理程序)没有以其他方式显式导入。

于 2017-11-26T21:13:00.380 回答