Python Py.test失败,但./manage.Py测试工作正常
我最近接管了一个代码库,我开始添加Selenium测试,然后转到py.test。由于并行性和其他第三方软件包,我喜欢py.test,但我注意到py.test的主要问题 代码库是Django堆栈(Python2.7上的1.8,pytest-2.6.4,目前没有x-dist) 1) py.test测试比普通的django测试套件运行得慢(不太好,但我可以接受) 2) 当我通过执行Python Py.test失败,但./manage.Py测试工作正常,python,unit-testing,selenium,pytest,pytest-django,Python,Unit Testing,Selenium,Pytest,Pytest Django,我最近接管了一个代码库,我开始添加Selenium测试,然后转到py.test。由于并行性和其他第三方软件包,我喜欢py.test,但我注意到py.test的主要问题 代码库是Django堆栈(Python2.7上的1.8,pytest-2.6.4,目前没有x-dist) 1) py.test测试比普通的django测试套件运行得慢(不太好,但我可以接受) 2) 当我通过执行py.test与Selenium测试一起运行unittests时,一些unittest失败。如果我只使用py.test运行
py.test
与Selenium测试一起运行unittests时,一些unittest失败。如果我只使用py.test运行unittest(通过使用@skipUnless
装饰器排除),那么一切都会顺利通过。当我使用/manage.py test
运行(unittest和selenium)时,所有测试都可以正常运行
py.tests失败(在使用unittest和selenium运行时),出现一个奇怪的错误,DoesNotExist:ActionType匹配查询不存在。
py.test运行的测试与普通Django测试套件不同吗?
当我将unittest与Selenium测试一起运行时,有什么建议说明unittest失败的原因吗?
Selenium测试是在失败的单元测试之前执行的,但它们涉及到代码的一个非常不同的区域(不同的模块)。我刚刚修复了一个类似的情况。问题是查询无法返回我期望存在的对象 事实证明,它们应该是由信号处理程序创建的。这些处理程序在导入时在signals.py中注册,如
@receiver(post_save, sender=CustomUser)
def create_email_verification(sender, instance, created, **kwargs):
signals.py是从相应模块的导入的
事实证明,应用程序配置从未加载(由于缺少默认的\u app\u config
),但Django还是加载了signals.py。但是,当运行py.test时,没有加载模块(因为它没有在其他任何地方导入),因此信号处理程序从未注册
结论:
manage.py test
似乎自动导入了一些模块,而py.test没有。可能有一些代码(信号处理程序)没有以其他方式显式导入。我刚刚修复了一个类似的情况。问题是查询无法返回我期望存在的对象
事实证明,它们应该是由信号处理程序创建的。这些处理程序在导入时在signals.py中注册,如
@receiver(post_save, sender=CustomUser)
def create_email_verification(sender, instance, created, **kwargs):
signals.py是从相应模块的导入的
事实证明,应用程序配置从未加载(由于缺少默认的\u app\u config
),但Django还是加载了signals.py。但是,当运行py.test时,没有加载模块(因为它没有在其他任何地方导入),因此信号处理程序从未注册
结论:
manage.py test
似乎自动导入了一些模块,而py.test没有。可能有一些代码(信号处理程序)没有以其他方式显式导入。如何定义失败的测试用例?我认为django和pytest收集测试用例的方式不同,因此您的问题可能只是测试用例的顺序。检查它们是否以相同的顺序运行,尤其是操纵ActionType
模型的部分,或者如果没有太多工作,则尝试设置显式的测试顺序(这不是一个好的做法,因为测试用例应该是独立的,但您可能会找到它们不独立的地方).您如何定义失败的测试用例?我认为django和pytest收集测试用例的方式不同,因此您的问题可能只是测试用例的顺序。检查它们是否以相同的顺序运行,尤其是操纵ActionType
模型的部分,或者如果没有太多工作,则尝试设置显式的测试顺序(这不是一个好的做法,因为测试用例应该是独立的,但您可能会找到它们不独立的地方)。