众所周知,Jenkins 作为 CI/CD 的主流工具,除了执行编译流水线,还能执行功能测试和回归测试,但不少同学在配置 Jenkins 执行桌面 GUI 应用的自动化测试时经常会有些疑惑。本文我们会结合常用的桌面自动化测试工具 CukeTest,讲解如何在 Jenkins 里配置自动化测试。
桌面应用自动化通常指 Windows 应用、包括原生应用、混合应用、.NET、WPF 等,以及 Java 应用等。这些都是可以通过 Jenkins 配合 CukeTest 实现。CukeTest 除了有图形化操作界面,还提供了命令行运行工具,因此适合与 Jenkins 配合完成桌面自动化。下面使用这两者实现桌面应用的自动化 测试。
2.107
及以上版本。传统安装方法会将 Jenkins 注册为一个系统服务,而 Windows 的系统服务会在用户登录前启动,与用户登录后的桌面不是同一个会话(session),会导致 Jenkins 服务无法操作登录以后的桌面,这也是 Windows 服务状态下的 Jenkins 不能直接执行桌面自动化的原因。
因此解决问题的关键在于让 Jenkins 执行端与桌面操作的在同一个会话中,这可以有两种方法:
由于正常的安装会使得 Jenkins 注册为一个服务,而服务无法操作 Windows 桌面,因此我们采用从命令行的方式,让 Jenkins 在当前桌面会话中启动。
java -jar jenkins.war --httpPort=8090
为避免与默认的 Jenkins 实例发生端口冲突,这里使用--httpPort
选项设置了另一个监听端口。接着打开浏览器访问http://localhost:8090Jenkins 管理界面,如果是第一次进入将进入运行向导,按照指引完成设置。可以进入
从命令行安装的 Jenkins 的路径为%USERPROFILE%\.jenkins\
。
注意这个方法启动的是 Jenkins master,也就是控制台部分,如果是执行器环境,应该使用 Jenkins 的分布式环境安装 Slave(在后来的版本中称作 Agent)。
Jenkins 描述执行器的术语在旧文档中为
slave
,在新文档中为agent
,指代的都是同一种东西,在下面我们统称为slave
。
在更多的场景中,我们会在本机上运行一个 Jenkins 的调度器(Master),在服务器上运行具体的测试项目,这就需要按照与上面类似的方法部署 Jenkins 的执行器(slave/agent)。具体步骤可以参考《Jenkins: 安装 master 和 slave》[1]。
Windows 提供了计划任务的功能,可以创建一个在登录时启动的计划任务。任务启动时运行一个.bat
批处理文件,内容如下:
cd \JenkinsFilePath\
java -jar jenkins.war
cd \JenkinsFilePath\
java -jar {Slave or Agent .jar File} -jnlpUrl http://{Your Jenkins Server}:{Your Jenkins Port}/computer/{Your Jenkins Node}/slave-agent.jnlp [-secret {Your JenkinsSecret Character}]
举个例子比如:
java -jar agent.jar -jnlpUrl http://localhost:8080/computer/Slave1/slave-agent.jnlp -secret e3637f4dfeb6c1bf8298aee7cb56cc4b79f4add79dd19fcd3fdf34fe21772b2f -workDir ""
上述例子使用的是新版 Jenkins 因此使用了
agent.jar
启动程序,节点的名称为Slave1
,并且由于添加了全局安全设置(Global Security),因此需要使用密码字符串认证登录。即使忘记了 Slave 的启动指令,也可以前往
Manage Node
页面查看具体的命令。
创建一个桌面自动化的项目,如果有合适的项目可以直接跳过这一步。打开 CukeTest,可以在欢迎界面的右下角创建一个windows_controls
的样例。
CukeTest 提供了运行命令的配置界面,它帮助生成你需要的命令行语句。打开项目后,点击工具栏中 “运行项目” 按钮右下角的▼
编辑运行配置。新建运行配置RunInJenkins
,如下:
报告格式、报告文件、输出目录:运行结果报告的相关选项。
html
,由于Cucumberreports
生成报告需要.json
文件,因此将json
选项勾选上;使用相同的文件名
会使旧的报告文件被覆盖;每次新建文件名
会保留之前所有的报告文件。这里我们选择前者是因为 jenkins 自带了运行历史管理,并且单个报告文件有利于 Cucumberreports 插件生成页面;reports
文件夹下,因此不需要修改;标签过滤器:根据标签筛选运行内容。如果项目过大,建议为各个场景打上标签并通过过滤器分别运行。关于标签的更多内容点击标签和过滤 [2]
完成配置后下方会生成相应的运行命令,这个命令放到 Jenkins 中就能够运行了。
执行接下来的操作前,建议先安装
Cucumber reports
插件,用于解析运行报告并显示。
在 Jenkins 中新建 Freestyle Object 项目,我们在构建(Build)环节添加两个命令行步骤,执行以下两步:
cuke
命令运行项目;因此两个命令行步骤中的内容分别为:
xcopy C:\Program File\cuke\windows_controls /S /Y
chcp 65001 && cuke --run --format html --format json --overwrite --no-color
由于 Jenkins 的
Console Output
显示格式为 plain text,无法显示命令行输出的样式,这会导致样式标识符呈现为乱码,因此在 cuke 命令后追加了--no-color
选项。
配置完如下所示:
在构建后(Post Build)环节,可以添加一个 Cucumber reports 步骤来生成可视化的运行报告。
在 Cucumber reports 的 “Advanced” 配置中,将 File Include Pattern,即生成报告所使用的.json
文件的路径,这里我们指定为*/reports/*.json
,避免匹配到package.json
文件发生报错。
使用 Pipeline 项目也类似,只是用 pipeline 语法将上节中的步骤包括起来即可,如下:
pipeline {
agent any
stages {
stage('Build') {
steps {
bat 'xcopy C:\Program File\cuke\windows_controls /S /Y'
}
}
stage('Test'){
steps {
bat 'chcp 65001 && cuke --run --format html --format json --overwrite --no-color'
}
}
stage('Cucumber Report'){
steps {
cucumber buildStatus: "UNSTABLE",
fileIncludePattern: "**/reports/*.json",
jsonReportDirectory: "reports"
}
}
}
}
点击开始构建(Build Now)运行,可以注意到桌面应用Simple Style.exe
顺利的启动并且开始执行自动化,在完成后可以再 Jenkins 左侧查看Cucumber reports
,报告界面如下:
关于报告样式:CukeTest 的运行结果返回了
.json
文件,因此可以根据该运行结果使用自定义的样式满足报告需求。
对于 上面介绍的两种 Jenkins 方式,master/slave 是比较推荐的选择。master 可以运行在任何平台上,甚至是 Linux 平台。而 slave 可以根据自动化的需要运行在 Window 上。但 CukeTest 不仅于运行在 Windows 上,它也可以在 Linux 或 Mac 上执行自动化测试。因此您可以根据需要配置多个平台的 Jenkins slave,根据需要执行在不同的平台上的自动化测试,如果您的项目还没有实现自动化,不妨来试试吧!
[1] | 《Jenkins: 安装 master 和 slave》: https://www.cnblogs.com/sparkdev/p/7102622.html |
---|---|
[2] | 标签和过滤:* http://www.cuketest.com/zh-cn/features/tags.html* |