直接用nose進行django項目測試並輸出html報告


先說需求:1、測試django項目;2、打印測試報告(html格式)
有以下幾種測試方法:
1、django自帶的測試模塊。在app目錄下的tests.py文件中寫測試類,類似這樣:

class MyTest(TestCase):
  def setUp(self):
    dosomething()

  def test_case1(self):
    self.assertEqual(1, 1)

  def test_case2(self):
    pass

然后直接在項目目錄下運行python manager.py test。理想狀態下,控制台會打印出assert失敗的case。但是沒有辦法把結果輸出成html格式(也可能有我不知道的黑科技,google不到)。

2、nose + django-nose + nose-htmloutput。python下比較著名的測試框架nose,加上插件nose-htmloutput,可以把測試報告以html格式輸出,再用django的nose插件(django-nose)把nose集成到django中。使用姿勢:
django項目的setting.py:

INSTALLED_APPS = [
  ...
  'django_nose'
  ]

TEST_RUNNER = 'django_nose.NoseTestSuiteRunner'

  項目依賴:
  pip install nose
  pip install django-nose
  pip install nose-htmloutput
  測試命令:python manager.py test --with-html --html-file=/path/to/htmlfile。
  到此為止可以滿足大部分需求,然而由於我項目的特殊性(詳見http://www.cnblogs.com/beeler/p/6743171.html),這種測試方式出問題了。首先說特殊性,簡單來說,就是我的項目中會出現多線程訪問數據庫的場景,如果使用TestCase,主線程對數據庫做的修改並不能從其他線程中訪問到,為解決這個問題,必須使用 TransactionTestCase + 非內存數據庫 的方法進行測試;其次說問題,在上述的設置下,使用django_nose.NoseTestSuiteRunner會出現錯誤,大意是文件數據庫無法創建(目測是個nose的bug,但是錯誤比較底層,能力所限,沒能解決)。為解決這個問題,看了一下django-nose的源碼,發現了不止NoseTestSuiteRunner這一個runner,於是試了一下另外的runner:BaseRunner和BasicNoseRunner。BaseRunner可以運行但不能輸出html報告,BasicNoseRunner和NoseTestSuiteRunner一樣的錯誤。

3、直接用nose測試django項目。不用python manager.py test命令,而用nosetests加載tests.py進行測試。測試需要django環境,所以在tests.py開頭加上:
  import os
  os.environ.setdefault("DJANGO_SETTINGS_MODULE", "myproject.settings")

  import django
  django.setup()

運行命令 nosetests --with-html --html-file=/path/to/htmlfile


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM