2015-11-05 54 views
1

我最近接管了一個代碼庫,並開始添加Selenium測試並移至py.test。由於並行性和其他第三方包,我喜歡py.test,但是我注意到了py.test的主要問題。Py.test失敗,但./manage.py測試正常工作

代碼庫是一個Django堆棧(Python 2.7中爲1.8,pytest-2.6.4,此刻沒有x-dist)。

1)py.test測試通過執行py.test運行速度比正常的django測試套件(不是很大慢,但是我可以忍受)

2)當我與Selenium測試運行單元測試一起,一些的單元測試失敗。如果我只用py.test運行單元測試(使用@skipUnless裝飾器排除),一切正常。當我運行(單元測試&硒)與./manage.py test所有測試運行也很好。

py.tests失敗(在單元測試和硒運行)與奇怪的錯誤DoesNotExist: ActionType matching query does not exist.

py.test運行測試與正常的Django測試套件不同嗎?

任何建議爲什麼unittest與Selenium測試一起運行時失敗?

Selenium測試是在失敗的單元測試之前執行的,但它們碰到代碼的一個非常不同的區域(不同的模塊)。

+0

你如何定義你的測試用例失敗? – sobolevn

+0

我想django和pytest如何收集測試用例的方式不同,所以你的問題可能只是測試用例的順序。檢查它們是否以相同的順序運行,尤其是操作ActionType模型的部分,或者如果它沒有太多的工作嘗試設置明確的測試順序(這是不好的做法,因爲測試用例應該是獨立的,但你可能會發現地方他們不是)。 – beezz

回答

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不會。可能有一些代碼(信號處理程序)沒有明確的導入。

相關問題