- 引言
- 本书涉及的内容
- 第 1 部分 Python 开发入门
- 第 1 章 Python 入门
- 第 2 章 开发 Web 应用
- 第 3 章 Python 项目的结构与包的创建
- 第 4 章 面向团队开发的工具
- 第 5 章 项目管理与审查
- 第 6 章 用 Mercurial 管理源码
- 第 7 章 完备文档的基础
- 第 8 章 模块分割设计与单元测试
- 第 9 章 Python 封装及其运用
- 第 10 章 用 Jenkins 持续集成
- 第 11 章 环境搭建与部署的自动化
- 第 12 章 应用的性能改善
- 第 13 章 让测试为我们服务
- 第 14 章 轻松使用 Django
- 第 15 章 方便好用的 Python 模块
- 附录 A VirtualBox 的设置
- 附录 B OS(Ubuntu)的设置
10.3 执行测试代码
现在我们拿一个简单的 Python 项目的测试代码作为例子执行一下。Python 项目由版本控制系统保存,Jenkins 将从版本控制系统获取 Python 项目并执行测试。
10.3.1 让 Jenkins 运行简单的测试代码
首先,我们写一个包含 unittest 模块的简单的测试代码,让 Jenkins 来运行它(LIST 10.1、 LIST 10.2)。
LIST 10.1 foo.py
# -*- coding:utf-8 -*- def divide(num1, num2): """ 对传值参数做除法的简单函数 """ return num1 / num2
LIST 10.2 test_foo.py
# -*- coding:utf-8 -*- import unittest import foo class SimpleTest(unittest.TestCase): """ 测试做除法的函数 """ def test1(self): self.assertEqual(foo.divide(2, 2), 1) def test2(self): self.assertEqual(foo.divide(0, 1), 1) if __name__ == "__main__": unittest.main()
将这两个文件保存在 Mercurial 的版本库里,放在 Jenkins 服务器上的 /var/hg/simple_test 目录下。
10.3.2 添加 Job
接下来给 Jenkins 添加 Job。Jenkins 的 Job 可以指定多种类型的任务,比如构建项目、签出代码等。现在请打开 Jenkins 面板侧边菜单的“新建”界面,如图 10.1。
图 10.1 Jenkins 的面板
在“新建”界面的“Item 名称”处输入 Job 名,选择 Job 种类。如图 10.2,这里我们输入 simple_test 作为 Job 名,种类则选择“构建一个自由风格的软件项目”,然后点击界面下部的“OK”按钮。
图 10.2 新建界面
◉ 指定源码管理系统
在 Job 设置界面的“源码管理”一栏中选择 Mercurial,随后会显示 3 个输入框,我们作如下输入。
① Repository URL:输入版本库的 URL
输入 /var/hg/simple_test
② Branch:输入 Mercurial 的分支名。留空则使用 default
这次我们要用的是 default,因此留空
③ 源码库浏览器:指定用于查看版本库更改的工具
现阶段先用默认的“自动”
NOTE
关于版本库 pull 出错
Jenkins 的 Job 从 Mercurial 上签出源码时,经常由于忘记设置版本库权限而导致 pull 出错。
安装 Jenkins 时会自动创建 jenkins 用户,执行 Job 的都是这个用户,所以一定要记得给这个用户权限。
另外,有时即便已经有权限,在执行 hg pull 时仍会遇到“不可信的用户”“不可信的群组”这类错误。这种情况一般出现在版本库的“.hg/hgrc”所有者与执行 hg 命令的用户不一致的时候。只要在 jenkins 用户的 $HOME/.hgrc 的 trusted 节中进行设置即可解决该问题。比如“不可信的用户”为 foo 、“不可信的群组”为 bar 时,则需在 hgrc 作以下设置。
[trusted] user = foo group = bar
此外,trusted 节的 user、group 元素可以一次指定多个值,相邻两值之间用逗号隔开。
◉ 制定日程表
然后我们来设置另一个重要项目——构建触发器。这个项目能像 cron 一样制定日程表,比如让 Job 定期执行,或者在其他 Job 结束后执行等。这里我们选择“Build periodically”。勾选之后会出现“日程表”输入框,我们在这里设置 Job 的执行间隔,具体方法与设置 crontab 时一样。比如我们想每个小时的 0 分时执行 Job,则写成下面这样。
0 * * * *
此外,在 Jenkins 的 Job 设置界面里,每一项后面都有为用户准备的帮助。各位如果遇到看不懂的项目,可以点击相应的帮助图标作参考。
◉ 设置执行测试代码的命令
最后,在“构建”选项卡处设置执行测试代码的命令。点击“增加构建步骤”之后即可选择“Execute shell”。然后在文本框中描述下述命令,如图 10.3 所示。
python test_foo.py
图 10.3 构建步骤“Execute shell”
只要把我们写 unittest 的测试用例时手动执行的命令写在这里即可。完成上述所有步骤之后点击“保存”按钮进行保存,接下来 Jenkins 将在我们指定的时刻执行 Job。
10.3.3 Job 的成功与失败
Jenkins 的 Job 可以从管理界面手动启动。现在我们试着点击面板上的“立刻构建”,启动刚才创建的 Job。
随后各位看到的应该是一个红色图标,表示“失败”。我们可以点击左侧栏“控制台输出”链接查看执行结果(图 10.4)。Jenkins 会以控制台日志的形式记录每次执行 Job 的过程,便于用户调查失败原因。
图 10.4 通过“控制台输出”查看 Job 执行失败的内容
从日志中一眼就能看出测试结果为 FAILURE 。失败的原因是测试代码有问题,所以接下来,我们要将测试用例修改成 LIST 10.3 这样,然后重新启动 Job。
LIST 10.3 test_foo.py
# -*- coding:utf-8 -*- import unittest import foo class SimpleTest(unittest.TestCase): """ 测试做除法的函数 """ def test1(self): self.assertEqual(foo.divide(2, 2), 1) def test2(self): self.assertEqual(foo.divide(0, 1), 0) if __name__ == "__main__": unittest.main()
如图 10.5,这次看到的应该是蓝色图标,测试结果为 SUCCESS 。
图 10.5 执行成功时的“控制台输出”
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论