Flask Travis & Coverall 配置
Travis
Travis CI
是一个提供持续集成功能的平台,在 Github
上,可以添加Travis CI
,当有code push
时候,会推送通知到 Travis
,根据设置的脚本运行指定任务,进行环境的配置。配置步骤可见官方配图:
注册配置
首先需要注册账号,然后选择对应的库开启集成功能。如果库在 organization 上,还需要首先请求获得这个 organization 的权限。所有 organization 中有权限的 travis 账户都会看到这个 organization 中库的集成信息。
添加 .travis.yml
然后就是把 .travis.yml
文件加入到库中。这里主要说说怎么写这个文件。
根据使用语言不同,配置也会有较大差异。这里以 Python 下 Flask 框架编写的后端服务器为例。
首先我们以逐步迭代的方式说明。首先我们看官方文档给出的 Python 配置:
language: python
python:
- "2.6"
- "2.7"
- "3.3"
- "3.4"
- "3.5"
- "3.5-dev" # 3.5 development branch
- "3.6"
- "3.6-dev" # 3.6 development branch
- "3.7-dev" # 3.7 development branch
# command to install dependencies
install:
- pip install -r requirements.txt
# command to run tests
script:
- pytest # or py.test for Python versions 3.5 and below
基本可以看清这个文件的语义:
- 首先指定对应的语言
language
,并且确定要使用的 python 版本。如果有多个版本的话,会分别在这几个版本都进行集成测试。 - 然后
install
后面写安装依赖项阶段需要执行的脚本命令。其实 travis 也会默认执行pip install -r requirements.txt
这个安装命令,不过还是显式写出来比较好。 -
script
后面就是进行测试阶段执行的命令。一般使用 pytest,当然使用自己写的其他单元测试也是可以的。
在这个配置的基础上,可以根据我们需求修改,获得我们的一个基础版本:
language: python
python:
- "3.6"
os:
- linux
install:
- pip3 install -r requirements.txt
script:
- python manage.py test
但是我们的服务器还需要链接数据库。Travis 的虚拟机自带很多数据库,我们的服务器使用 MySQL。于是我们在使用 MySQL 之前,需要创建一个数据库給我们的服务器使用。因为文件里写的都是命令行执行的脚本,所以我们需要用命令行创建一个数据库。命令行创建数据库的命令是 mysql -e 'CREATE DATABASE test
。因此我们在安装依赖之前执行创建数据库的操作。同时创建数据库需要 sudo 权限,所以我们在一开始启用 sudo 权限。这里创建了测试和开发环境的数据库。
sudo: enabled
language: python
python:
- "3.6"
os:
- linux
services:
- mysql
# install dependencies
before_install:
- mysql -e 'CREATE DATABASE test DEFAULT CHARSET utf8 COLLATE utf8_general_ci;'
- mysql -e 'CREATE DATABASE dev DEFAULT CHARSET utf8 COLLATE utf8_general_ci;'
install:
- pip3 install -r requirements.txt
script:
- python manage.py test
这样基本的构建就完成了。构建没有报错的话,就会在官网看到一个 passing 徽章:
Coverall
然后我们需要进行代码覆盖率测试。Coveralls 借助 Travis CI 的持续集成服务,向用户报告自动测试的测试覆盖率。同样注册,登录自己的账号。记得要得到自己 Organization access 的权限。
然后和 travis 一样,打开仓库后进行配置。使用 coveralls-python 进行测试的话,可以直接在命令行运行:
pip install coveralls
coverage run --source=mypkg setup.py test
coveralls
就可以跑单元测试,同时测试代码覆盖率。因为全在命令行运行,所以正好可以直接写在 Travis CI 里。所以我们把 coveralls 写进 requirements.txt
后,只需要加上后面两条命令即可。
加上 coveralls 后的配置文件 .travis.yml
:
sudo: enabled
language: python
python:
- "3.6"
os:
- linux
services:
- mysql
# install dependencies
before_install:
- mysql -e 'CREATE DATABASE test DEFAULT CHARSET utf8 COLLATE utf8_general_ci;'
- mysql -e 'CREATE DATABASE dev DEFAULT CHARSET utf8 COLLATE utf8_general_ci;'
install:
- pip3 install -r requirements.txt
before_script:
- python manage.py gen_basic_data
- python manage.py gen_fake_data
script:
- coverage run --source=app manage.py test
after_success:
- coveralls
before_script
执行的是在进行单元测试之前,生成一些伪数据。在单元测试成功之后,执行 after_success
里的命令,上传覆盖率信息。
然后就能在官网看见覆盖率的结果,把这个徽章的 URL 放到 README 中,就能在 github 上显示出来:
最后默认每次集成之后都会发一封邮件通知结果。关闭这个功能的话只需加上一条:
notifications:
email: false