Windows 桌面應用自動和 Jenkins 持續整合
眾所周知,Jenkins 作為 CI/CD 的主流工具,除了執行編譯流水線,還能執行功能測試和迴歸測試,但不少同學在配置 Jenkins 執行桌面GUI應用的自動化測試時經常會有些疑惑。本文我們會結合常用的桌面自動化測試工具CukeTest,講解如何在Jenkins裡配置自動化測試。
桌面應用自動化通常指Windows應用、包括原生應用、混合應用、.NET、WPF等,以及Java應用等。這些都是可以通過 Jenkins 配合 CukeTest 實現。CukeTest 除了有圖形化操作介面,還提供了命令列執行工具,因此適合與 Jenkins 配合完成桌面自動化。下面使用這兩者實現桌面應用的自動化 測試。
依賴
環境
- Java8以上
- Windows7或更高
準備檔案
- jenkins.war:Jenkins的WebApplicationARchive(WAR)檔案,能夠通過Java在各類作業系統上安裝。建議使用
2.107
及以上版本。
實現方法
問題原因
傳統安裝方法會將 Jenkins 註冊為一個系統服務,而 Windows 的系統服務會在使用者登入前啟動,與使用者登入後的桌面不是同一個會話(session),會導致Jenkins服務無法操作登入以後的桌面,這也是Windows服務狀態下的 Jenkins 不能直接執行桌面自動化的原因。
因此解決問題的關鍵在於讓 Jenkins 執行端與桌面操作的在同一個會話中,這可以有兩種方法:
- 避免將Jenkins註冊為服務:而使用命令列安裝和啟動Jenkins;
- 使用Jenkinsmaster/slave模式:master以Windows服務執行,而Jenkinsslave使用Windows的計劃任務登入後自動啟動。
從命令列安裝 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)
Jenkins 描述執行器的術語在舊文件中為
slave
,在新文件中為agent
,指代的都是同一種東西,在下面我們統稱為slave
。
在更多的場景中,我們會在本機上執行一個 Jenkins 的排程器(Master),在伺服器上執行具體的測試專案,這就需要按照與上面類似的方法部署 Jenkins 的執行器(slave/agent)。具體步驟可以參考《Jenkins: 安裝 master 和 slave》[1]。
通過計劃任務在登入後啟動 Jenkins
Windows 提供了計劃任務的功能,可以建立一個在登入時啟動的計劃任務。任務啟動時執行一個.bat
批處理檔案,內容如下:
- 執行Jenkinsmaster
cd \JenkinsFilePath\
java -jar jenkins.war
- 執行Jenkinsslave:
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 中就能夠執行了。
Freestyle Object 示例
執行接下來的操作前,建議先安裝
Cucumber reports
外掛,用於解析執行報告並顯示。
在 Jenkins 中新建 Freestyle Object 專案,我們在構建(Build)環節新增兩個命令列步驟,執行以下兩步:
- 將專案檔案複製到Jenkins的工作空間;
- 使用
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 語法將上節中的步驟包括起來即可,如下:
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* |
相關文章
- 自動化專案Jenkins持續整合Jenkins
- jenkins介面、UI自動化持續整合JenkinsUI
- Jenkins持續整合Jenkins
- 使用 Jenkins 建立微服務應用的持續整合Jenkins微服務
- Jenkins持續整合配置Jenkins
- Jenkins+Svn+Docker搭建持續整合環境 自動部署JenkinsDocker
- Jenkins持續整合(下)-Jenkins部署Asp.Net網站自動釋出JenkinsASP.NET網站
- 持續整合 Jenkins 簡介Jenkins
- jenkins+docker 持續整合JenkinsDocker
- 持續整合Jenkins+GitlabJenkinsGitlab
- Jenkins 持續整合使用教程Jenkins
- 本地Jenkins.war+SVN實現全自動化持續整合Jenkins
- Jenkins+Python自動化測試持續整合詳細教程JenkinsPython
- Docker+Gitlab+Jenkins+Maven程式碼持續整合與自動部署DockerGitlabJenkinsMaven
- Jenkins教程:使用Jenkins進行持續整合Jenkins
- gitlab和jenkins做持續整合構建教程GitlabJenkins
- 用 Travis CI 打造大前端持續整合和自動化部署前端
- 微服務下的持續整合-Jenkins自動化部署GitHub專案微服務JenkinsGithub
- jenkins+ant+jmeter介面自動化的持續整合測試框架JenkinsJMeter框架
- Jenkins持續部署-自動生成版本號Jenkins
- Linux下搭建Jenkins持續整合LinuxJenkins
- Windows + Jenkins + .NetFramework + SVN 持續部署WindowsJenkinsFramework
- 《轉載》Jenkins持續整合-自動化部署指令碼的實現《python》Jenkins指令碼Python
- Jenkins持續部署-Windows環境持續部署探究1JenkinsWindows
- RF+Jenkins構建持續整合Jenkins
- Jenkins持續整合 入門實踐Jenkins
- SpringBoot+Docker+Git+Jenkins實現簡易的持續整合和持續部署Spring BootDockerGitJenkins
- 用於持續整合的13種Jenkins替代方案 -DEVJenkinsdev
- 持續整合工具之Jenkins基礎使用Jenkins
- 持續整合工具之Jenkins安裝部署Jenkins
- 手摸手聊聊小程式持續整合JenkinsJenkins
- Jenkins整合appium自動化測試(Windows篇)JenkinsAPPWindows
- 使用Jenkins持續整合前端專案並自動化部署到Nginx伺服器Jenkins前端Nginx伺服器
- iOS 持續整合系列 - 自動化 Code ReviewiOSView
- Framework專案持續整合(jenkins)及集合SonarQubeFrameworkJenkins
- Jenkins+iOS持續整合細節記錄JenkinsiOS
- 前端er,Jenkins持續化整合環境搭建前端Jenkins
- 前端er,Jenkins持續化整合Webpack專案前端JenkinsWeb