如何在github利用Travis CI 對項目做持續集成測試

前言

一個項目如何保證代碼質量是開發中非常重要的環節,對於開源項目來說更是如此,因爲開源項目要面對的是來自不同水平開發者提交的代碼。所以圍繞開源做持續集成(Continuous Integration)變得越來越重要,而目前使用最廣泛的免費CI工具當數Travis CI


我們可以在github中常見到這些圖標,就是集成測試的效果

點鏈接,還可以看成集成測試的過程



Travis CI能做的最主要工作是自動運行項目的單元測試並生成報告。進入項目的Travis CI頁面,可以看到最新版本的測試情況,默認設置下,每次對項目進行Push時,都會觸發Travis CI運行一次測試,測試環境包括各種版本的不同情況。Travis CI同時提供了一個項目狀態圖標,可以放置在項目主頁告知用戶當前的測試情況.


測試工具

unittest單元測試

nose將測試用例聚合和進行迴歸測試

coverage確定代碼覆蓋率

PyLint掃描代碼

關於測試

例如django中每個子類必須要有測試

[python] view plain copy
  1. from django.test import TestCase  
  2.   
  3. class SimpleTest(TestCase):  
  4.     def test_basic_addition(self):  
  5.         """ 
  6.         Tests that 1 + 1 always equals 2. 
  7.         """  
  8.         self.assertEqual(1+1,2)  

[python] view plain copy
  1. python manage.py test <app_name>  

每個view必須要有測試

[python] view plain copy
  1. class BlogViewsTest(TestCase):  
  2.     def test_index(self):  
  3.         response =self.client.get(reverse('index'))  
  4.         self.assertEqual(response.status_code,200)  

fixtures使用

[python] view plain copy
  1. Fixtures 是一種新的提供初始化數據的方法,並且被Django的測試框架用來處理單元測試的測試數據。  
  2. 不同於SQL文件的是,使用fixture你可以提供一個被 Django的serialization系統所能識別的序列化文件,  
  3. 它會被讀取並自動轉換成對應的model,然後保存進你的數據庫  
  4.   
  5. 你需要創建一個fixture文件(使用manage.py的dumpdata命令更簡單),確保文件名爲"initial_data",後綴名可以是json, xml, yaml, python其一。  
  6. 把這個文件放到你的app目錄下的fixtures目錄裏,它就會在執行syncdb的時候創建完你的數據表後自動讀取並插入數據。  
  7. 如果你有更多fixtures文件或者你沒有在執行syncdb的時候提供fixture的話,你也可以使用manage.py的loaddata命令手工加載fixture  
  8.   
  9. Fixtures 適用於少量的初始化數據,因爲它使用Django的序列化功能,所以不依賴於特定的數據庫。  
  10. 它執行起來沒有SQL快,因爲要創建對象。另外,這個功能可以 在你切換數據庫平臺的時候使用,  
  11. 比如我要把系統從Mysql切換到PostgreSQL,就可以使用fixtures來導入轉出數據  

[python] view plain copy
  1. python manage.py dumpdata app_name>app_name/fixtures/file.json  


[python] view plain copy
  1. class BlogViewsTest(TestCase):    
  2.   
  3.     fixtures =['test_data.json']  
  4.   
  5.     def test_index(self):    
  6.         response =self.client.get(reverse('index'))    
  7.         self.assertEqual(response.status_code,200)  

使用

註冊賬號見https://travis-ci.org/

過程很簡單,用github賬號授權就行


[plain] view plain copy
  1. 1.使用github賬號登錄  
  2. 2.指定repo  
  3. 3.編寫.travis.yml  
  4. 4.push code  

一個簡單的.travis.yml的配置文檔

[python] view plain copy
  1. language: python  
  2.   
  3. python:  
  4.     - "2.6"  
  5.     - "2.7"  
  6. env:  
  7.     - DJANGO=1.4  
  8.     - DJANGO=1.5  
  9.     - DJANGO=1.6.0  
  10. install:  
  11.     - pip install -r requirements.txt --use-mirrors  
  12. script:  
  13.     - python manage.py test  
  14. notifications:  
  15.     recipients:  
  16.         - [email protected]  
  17.     on_success: change  
  18.     on_failure: always  
  19.     irc:  
  20.         channels:  
  21.             - "irc.freenode.org#cloudsafe"  
  22.         on_success: change  
  23.         on_failure: always  

在github中添加travis.io集成

[python] view plain copy
  1. .. image:: https://api.travis-ci.org/wcc526/cloudsafe.png?branch=master  
  2.     :target: http://travis-ci.org/wcc526/cloudsafe  
  3. .. image:: https://drone.io/github.com/wcc526/cloudsafe/status.png   
  4.     :target: https://drone.io/github.com/wcc526/cloudsafe/latest  
  5. 最終效果如圖   

不明白的,可以參看我這個項目 https://github.com/wcc526/cloudsafe

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章