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

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

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

  def test_case1(self):
    self.assertEqual(1, 1)數據庫

  def test_case2(self):
    passdjango

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

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

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同樣的錯誤。ui

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

  import django
  django.setup()

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

相關文章
相關標籤/搜索