持续集成
概述
学习时间: 10 min
练习时间: 0 min问题
如何在更多的平台上自动运行测试?
目标
了解持续集成如何加速软件开发
了解持续集成的好处
实施持续集成服务器
确定一些托管持续集成服务器的选项
为了使运行测试尽可能简单,许多软件开发团队实施了一种称为持续集成的策略。顾名思义,持续集成将测试套件集成到开发过程中。每次对存储库进行更改时,持续集成系统都会构建并检查该代码。
实验:您的软件可以在您同事的计算机上运行吗?
想象一下,您在MacOSX计算机上开发软件。上周,你帮助你的办公室同事在他们的Linux计算机上构建和运行它。从那以后,你做了一些改变。
- 如果他们在假期回来时更新他们的存储库,你怎么能确定它仍然可以工作?
- 这个过程需要多长时间?
研究实验室的典型故事是,你不知道它是否能在你同事的机器上工作,直到你尝试在他们的机器上重建它。如果您有构建系统,则可能需要几分钟来更新存储库、重新构建代码并运行测试。如果您没有构建系统,可能需要整个下午才能查看您的新更改是否兼容。
让计算机完成工作
科学家擅长创造性洞察、概念理解、批判性分析和消费浓缩咖啡。计算机擅长遵循指令。如果科学家们可以给计算机指令并去拿一杯浓缩咖啡,科学会更有趣。
持续集成服务器允许这样做。根据您的指示,持续集成服务器可以:
- 从存储库中签出新代码
- 启动受支持操作系统的实例(即各种版本的 OSX、Linux、Windows 等)。
- 使用不同的软件版本(即 python 2.7 和 python 3.0)启动这些实例
- 运行构建和测试脚本
- 检查错误
- 并报告结果。
由于服务器执行的第一步是从存储库中签出代码,因此我们需要将代码放到网上以使用这种服务器(除非我们能够/愿意建立自己的CI服务器)。
在GitHub上设置Git存储库
您的
mean.py
和test_mean.py
文件可以是 GitHub 上存储库的内容。
- 去GitHub并创建一个存储库 称为mean。
- 克隆那个仓库(git clone https://github.com:yourusername/mean)
- 将
mean.py
和test_mean.py
文件复制到存储库目录中。- 使用git
add
、commit
、push
这两个文件到GitHub。
指导
你在mean函数上的工作既有代码也有测试。让我们将该代码复制到它自己的存储库中,并将持续集成添加到该存储库中。
需要什么
它不需要构建系统,因为Python不需要编译。
- 它需要什么?
- 在名为 requirements.txt 的文件中写入软件依赖项的名称并保存该文件。
- 事实上,你为什么不继续进行版本控制呢?
Travis-CI
Travis 是一个持续集成的服务器托管平台。它通常用于Ruby开发圈以及科学Python社区。
要使用Travis,您只需要一个帐户。它是免费的,因此您小组中的某个人应该注册一个Travis帐户。 然后按照Travis网站上的说明将您的Travis帐户与 GitHub连接。
存储库中名为.travis.yml
的文件将向Travis发出信号,表明您要在 Travis-CI 上构建和测试此存储库。 对于我们的目的,这样的文件非常简单:
language: python
python:
- "2.6"
- "2.7"
- "3.2"
- "3.3"
- "3.4"
- "nightly"
# command to install dependencies
install:
- "pip install -r requirements.txt"
# command to run tests
script: pytest
yml文件语法
.travis.yml
文件的确切语法非常重要。确保使用空格(不是制表符)。https://lint.travis-ci.org/ 可用于检查印刷错误。
您可以看到python包管理器pip将如何使用上一个练习中的requirements.txt 文件。 该requirements.txt文件是列出我们需要的所有python包的常规方式。 如果我们需要 pytest、numpy 和 pymol,requirements.txt 文件将如下所示:
numpy
pymol
pytest
最后步骤
- 将.travis.yml添加到您的存储库
- 提交并推送。
- 检查你的服务器的情况
持续集成托管
我们举了Travis的例子,因为它很容易启动。虽然它能够运行多种版本的Linux,但它目前也不支持其他平台。根据您的需要,您可以考虑其他服务,例如:
关键点
存在用于自动运行测试的服务器
运行测试可以由GitHub拉取请求触发
CI允许跨平台构建测试
.travis.yml
文件在 travis-ci 服务器上配置构建许多免费的CI服务器可用