如何在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

猜你喜欢

转载自blog.csdn.net/gaoyi742892115/article/details/80489396