参考网站:http://www.testclass.net/jenkins/
一共分为八个部分:持续集成与Jenkins介绍、Jenkins 环境搭建、Jenkins 创建构建任务、Jenkins 配置构建执行状态、Jenkins设置定时任务、实战:构建GitHub项目(上)、实战:构建GitHub项目(中)、实战:构建GitHub项目(下);
(一)持续集成与 Jenkins 介绍
持续集成:持续集成(Continuous integration,简称 CI),随着近几年的发展,持续集成在项目中得到了广泛的推广和应用。本章将带领读者一起了解持续集成工具 Jenkins 的安装与使用。
1.什么是持续集成
软件集成就是用一种较好的方式,使多种软件的功能集成到一个软件里,或是把软件的各部分组合在一起。如果项目开发的规模较小,且对外部系统的依赖很小,那么软件集成不是问题,例如一个人的项目。但是随着软件项目复杂度的增加,会对集成和确保软件组件能够在一起工作提出了更多的要求–>要早集成、常集成。早集成、频繁的集成能够帮助项目开发者在早期发现项目风险和质量问题,越到后期发现的问题,解决的成本越高,从而有可能导致项目延期或者项目失败。
2.定义
大师 Martin Fowler 对持续集成是这样定义的:持续集成是一种软件开发实践,即团队开发成员经常集成他们的工作,通常每个成员每天至少集成一次,也就意味着每天可能会发生多次集成。每次集成都通过自动化的构建(包括编译、发布、自动化测试)来验证,从而尽快地发现集成错误。许多团队发现这个过程可以大大减少集成的问题,让团队能够更快地开发内聚的软件。
Jenkins
Jenkins 官方网站:https://jenkins.io/
提到 Jenkins 就不得不提另一个持续集成工具——Hudson , Hudson 由 Sun 公司开发,2010 年 Sun 公司被 Oracle 公司收购, oracle 公司声称对 hudson 拥有商标所有权。 Jenkins是从 Hudson 中分离出来的一个版本,并将继续走 Open Source 的道路。二者现在由不同的团队在维护。
enkins 主要用于监视执行重复工作,如建立一个软件项目或工作运行的计划任务。当前 Jenkins 关注以下两个工作。
不断地进行项目的构建/测试软件: 就像 CruiseControl 或 DamageControl。概括地说,Jenkins 提供了一个易于使用的所谓的持续集成系统,使开发人员更容易修改整合到项目中,并使它更容易为用户获得一个新的版本。自动连续生成提高了生产效率。
监控外部运行的作业: 如计划任务作业和 Qrocmail 的工作,即使是那些在远程机器上运行的计划任务。 Jenkins 生成这些日志并且很容易让你注意到错误的出现。
(二)Jenkins 环境搭建
Jenkins 是基于Java开发的一种持续集成工具,所以,Jenkins需要Java环境。
1.安装Tomcat
Tomcat是针对Java的一个开源中间件服务器(容器),基于Java Web的项目需要借助Tomcat 才能运行起来。
Tomcat官方网站:http://tomcat.apache.org/ ,打开后首页如图2.1所示
图2.1 下载Tomcat
单击页面左侧Tomcat 版本进行下载,对下载的压缩包进行解压,目录结构如图2.2所示。
图2.2 webapps目录用于web项目 通常将需要运行的应用放到webapps/目录下,进入bin/目录下,双击startup.bat,启动Tomcat服务器。
2.安装Jenkins
Jenkins官方网站:https://jenkins.io/ ,打开后首页如图2.3所示
图2.3 下载Jenkins
点击“Download” 链接进入下载页面,根据自己的系统选择对应的 Jenkins 版本进行下载。
下载完成,双击进行安装,如图2.4所示。
图2.4 双击Jenkins安装
单击“next”按钮,我们直接将其安装到Tomcat的 webapps 目录下,如图2.5所示。一定要选择TomCat 的 webapps 目录。
图2.5 选择Tomcat的webapps目录
3.配置Jenkins
Jenkins 安装完成会自动启动 TomCat , 并通过默认浏览器打开:http://localhost:8080/。
(你也可以手动进Tomcat的bin/目录下启动startup.bat ,通过浏览器访问:http://localhost:8080/) 如图2.6所示。
图2.6 首页Jenkins
根据提示,打开: E:\software\Tomcat\apache-tomcat-7.0.93\webapps\Jenkins\secrets\initialAdminPassword 文件查看密码。将密码填写到输入框中,点击 “继续” 按钮。
接下来根据提示进行安装,点击“安装推荐的插件”。
上图,运行需要一些时间,Jenkins 正在帮我们安装各种主流插件。
号。最后一步配置,创建 管理员账号。
整个 Jenkins 安装配置完成。操作界面如下。
Jenkins 的安装比以前复杂了些,但功能也变得更为强大了。
(三)Jenkins 创建构建任务
1.构建项目类型
点击 Jenkins 首页 “创建一个新任务” 的链接,弹出如图3.1所示页面。
图3.1 选择Jenkins任务类型
1.1 Jenkins 提供了六种类型的任务
- 构建一个自由风格的软件项目
这是Jenkins的主要功能。Jenkins 会结合任何 SCM 和任何构建系统来构建你的项目, 甚至可以构建软件以外的系统。
- Pipeline
Orchestrates long-running activities that can span multiple build slaves. Suitable for building pipelines (formerly known as workflows) and/or organizing complex activities that do not easily fit in free-style job type. – 很难用一两句话说清 Pipeline, 参考 , 后面另起一文来介绍。
- 构建一个多配置项目
适用于多配置项目,例如多环境测试、平台指定构建,等等。
- GitHub Organization
Scans a GitHub organization (or user account) for all repositories matching some defined markers. –这个主要针对由 Github 托管的项目。
- Multibranch Pipeline
Creates a set of Pipeline projects according to detected branches in one SCM repository. 根据一个SCM存储库中检测到的分支创建一组 Pipeline 项目。
- 文件夹
创建一个可以嵌套存储的容器。利用它可以进行分组。 视图仅仅是一个过滤器,而文件夹则是一个独立的命名空间, 因此你可以有多个相同名称的的内容,只要它们在不同的文件夹里即可。
这里选择第一个:构建一个自由风格的软件项目, 输入项目名称:python test project ,点击 “OK”按钮。
2.构建Windows测试任务
假设,我们有一个 Python 编写的测试脚本 py_tests.py ,位于电脑 D盘 根目录,内容如下:
import unittest, time
from selenium import webdriver
class TestClass(unittest.TestCase):
def setUp(self):
self.driver = webdriver.Chrome()
self.base_url = "http://www.testclass.net"
def tearDown(self):
time.sleep(2)
self.driver.quit()
def test_case(self):
self.driver.get(self.base_url)
search_input = self.driver.find_element_by_name("q")
search_input.send_keys("selenium")
search_input.submit()
def test_case2(self):
self.driver.get(self.base_url)
search_input = self.driver.find_element_by_name("q")
search_input.send_keys("jenkins")
search_input.submit()
if __name__ == '__main__':
unittest.main()
如果是在 Windows 下应该如何执行这个测试用例呢? 打开 Windows 命令提示符(CMD)。
Microsoft Windows [版本 10.0.15063]
(c) 2017 Microsoft Corporation。保留所有权利。
C:\Users\name> python d:/py_tests.py
..
----------------------------------------------------------------------
Ran 2 tests in 22.371s
OK
D:\>
不明白什么意思? 那么你记清我上面运行 python 程序时所敲的一行 dos 命令。
下接来回到 Jenkins 的配置过程中,
添加项目的描述:selenium 自动化测试项目。
剩下的选项都不要管,拖到页面底部,构建 选项。
选择 “Execute Windows batch command” 选项,执行Windows批处理命令。
如上图,输入你在 windows 命令提示符下所输的命令(python d:/py_tests.py)。 点击 “保存”。
一个极简的,基于 Windows 系统的,Python 脚本测试的 持续集成项目就创建完成了。
(四)Jenkins 配置构建执行状态
1.运行构建
在项目 左侧列表点击 “立即构建” ,在 “Build History” 列表,你会得到一个红色的小圆点,表示构建失败。
点击 构建失败的任务(红色的小圆点)。然后点击“Console Output” 就可以查看失败的 log 了。
提示:'python' 不是内部或外部命令,也不是可运行的程序或批处理文件。
我们明明在 Windows 提示符下运行是没有问题的。这是因为 Jenkins 缺少环境配置。
2.配置构建执行状态
回到 Jenkins 首页,点击 “构建执行状态” ,右则会列出本机信息,点击本机信息,配置 Python 的 path 环境变量。同时还需要添加浏览器驱动文件所在目录,参考 。
如果你明白这块的话,说明你不懂 Python 语言,或不熟悉 Python 运行环境的配置。(不同技术的之间的配合使用存在一定的依赖关系!我们无法做到零基础。)
配置完成,点击 “保存” , 再来运行 “立即构建” ,这次看到 py_tests.py 自动化脚本被执行了。
查看控制台输出:
好了!一个简单的 selenium + python 自动化测试的构建任务就创建完成了。
但对于 Jenkins 的学习,我们才刚刚开始。
(五)Jenkins 设置定时任务
每次都手动的构建项目显然不够方便,有时候需要定时地执行自动化测试脚本。例如,每天晚上定时执行 py_tests.py 文件来运行自动化测试项目。
1.设置定时任务
前面已经创建的 “python test project” 项目为例,单击项目左侧的 “配置” 选项,修改项目的配置。
找到 构建触发器 ,勾选 Build periodically 选项。
通过查看设置说明,此处定时任务的格式遵循 cron 的语法(可以与 cron 的语法有轻微的差异)。具体格式,每行包含五个字段,通过 Tab 或空格分隔。
字段 | 说明 |
---|---|
MINUTE | Minutes within the hour (0–59) |
HOUR | The hour of the day (0–23) |
DOM | The day of the month (1–31) |
MONTH | The month (1–12) |
DOW | The day of the week (0–7) where 0 and 7 are Sunday. |
若要指定一个字段的多个值,可以使用以下运算符,按先后顺序。
- 指定所有制
- M-N 指定范围值
- M-N/X 或 */X 在指定范围或整个有效范围内按X间隔的步骤
- A,B,...,Z 列举了多个值
例子:
- 每15分钟运行一次 (可能在 1:07分, 1:22分, 1:37分, 1:52分)
H/15 * * * *
- every ten minutes in the first half of every hour (three times, perhaps at :04, :14, :24)
H(0-29)/10 * * * *
- 每周一至周五,上午9:45到下午3:45,每隔2小时45分钟运行一次
45 9-16/2 * * 1-5
- 每两小时一次,每个工作日上午9点到下午5点(也许是上午10:38,下午12:38,下午2:38,下午4:38)
H H(9-16)/2 * * 1-5
- 除12月外,每月1号和15号每天一次
H H 1,15 1-11 *
(六)实战:构建 GitHub 项目(上)
Jenkins 不是一个对开发零基础的人去用的工具。不管你要构建什么样的项目,首先要有这么个项目存在,而且还要知道如何运行该项目。
1.快速创建GitHub项目
如果你想快速的使用 GitHub 来维护你的自动化测试项目,请阅读该教程。
(一)认识Git与GitHub
(二)GitHub注册与Git安装
(三)Git提交代码到GitHub
(四)Git克隆与更新代码
2.Jenkins配置Git
首先,登录 Jenkins ,在首页找到 “系统管理 -> Global Tool Configuration -> Git ”
Path to Git executable :设置 Git 执行文件的位置。从你Git的安装目录中查看 “git.exe” 可执行文件的位置。
设置完成后点击 “Save” 保存设置。
(七)实战:构建 GitHub 项目(中)
前提工作已经完成,接下来创建 GitHub 的项目构建。
1.创建GitHub项目的构建
1.1新建项目
在 Jenkins 首页,点击 “新建”。
设置项目名称:GitHub project
选择“构建一个自由风格的软件项目”
1.2添加GitHub上的项目
勾选 * GitHub Project 选项
Project url :设置 github 的项目地址。
1.3设置Git
- 勾选 * Git 选项
- Repository URL: 填写 GitHub 项目地址
- credentials : 设置资格证书,听过 add 添加账号。
- Branch Specifier(blank for ‘any’) : 默认 */master 不用修改。
1.4设置触发条件
- Github hook trigger for GITScm polling (触发 GitHub 项目轮询) ,勾选
- Poll SCM (设置每两分钟检测一次项目更新)参考((五)Jenkins 设置定时任务),勾选
1.5添加构建命令
添加运行项目测试用例的命令。参考((三)Jenkins 创建构建任务)
项目创建完成,点击“保存”。
(八)实战:构建 GitHub 项目(下)
其实,到些为止,整个项目已经创建完成。这一小节,只是为了验证创建的项目是否有效。
1.提交项目版本
修改 pyse 开源项目,并提交代码到 GitHub .
D:\git\pyse (master)
λ git commit -m "verison 0.0.8"
[master 270de98] verison 0.0.8
6 files changed, 36 insertions(+), 32 deletions(-)
create mode 100644 test_report.png
D:\git\pyse (master)
λ git push origin master
Counting objects: 12, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (11/11), done.
Writing objects: 100% (12/12), 33.80 KiB | 11.27 MiB/s, done.
Total 12 (delta 5), reused 0 (delta 0)
remote: Resolving deltas: 100% (5/5), completed with 5 local objects.
To https://github.com/defnngj/pyse
c5b4c8a..270de98 master -> master
2.查看构建日志
通过 Jenkins 查看项目构建历史。
查看构建的详细日志。
关于 GitHub 的项目实战到此完成。