前言
本次集成示意圖
解釋:
-
代碼來自IDE、SVN、GIT、xCopy 此處我們用的IDE commit代碼到 git(State)緩存區狀態
-
多人協同的話merge代碼到git(State), 否則直接 push 代碼到中央倉庫 (此處我們用Gitee)
-
如果推送成功,程序根據預先設置的webhook進行飛書機器人提醒
-
jenkins有兩種方式檢測是否進行拉取代碼進行構建
-
自帶的post build插件,自動檢檢測到代碼有合並 ,trigger拉取事件進行CICD流程
-
手工設置定時任務進行觸發 ,即SchemeTask定時任務
-
-
構建成功,發送郵件到飛書郵箱
-
飛書郵箱里的URL地址鏈接打開鏈接到jenkins上關聯的報告,報告能否打開取決於先前在jenkins上設置的權限認證,匿名用戶配置具有查看Job 以及報告的權限
第一部分:Pycharm for Gitee
1. pycharm安裝gitee插件
點擊File
點擊Settings...
彈出
點擊Plugins
輸入gitee,如下圖
點擊Search in repositories
彈出下圖
點擊Install(綠色的)
等待安裝即可
然后到重新啟動pycharm
看到上圖的Checkout from Version Control下有Gitee
說明安裝成功了
2. gitee關聯本地Git
快速設置— 如果你知道該怎么操作,直接使用下面的地址
強烈建議所有的git倉庫都有一個README
, LICENSE
, .gitignore
文件
Git入門?查看 幫助 , Visual Studio / TortoiseGit / Eclipse / Xcode 下如何連接本站, 如何導入倉庫
簡易的命令行入門教程:
Git 全局設置:
git config --global user.name "Young"
git config --global user.email "vincentsys@yeah.net"
創建 git 倉庫:
mkdir test
cd test
git init
touch README.md
git add README.md
git commit -m "first commit"
git remote add origin https://gitee.com/vincentsys/test.git
git push -u origin master
已有倉庫 ?
cd existing_git_repo
git remote add origin https://gitee.com/vincentsys/test.git
git push -u origin master
3. Git關聯遠程倉庫
一.本地安裝GIT版本控制軟件
二.配置Git,設置用戶信息
git config --global user.name "Youngg"
git config --global user.email "vincentsys@yeah.net"
git config --list
獲取Git配置信息
注意:git config命令的--global參數,用了這個參數,表示你這台機器上所有的Git倉庫都會使用這個配置,當然也可以對某個倉庫指定不同的用戶名和Email地址。
三.Git連接遠程倉庫Gitee
-
在本地根據配置賬戶(user.name)生成密鑰
命令: ssh-keygen -t rsa -C "vincentsys@yeah.net"
-
在GitHub里配置密鑰
登錄GitHub賬戶,在SSH keys里添加sshkey(打開.ssh文件下的 id_rsa.pub文件把密鑰復制到Gitee )
-
檢驗是否鏈接上了github
The authenticity of host 'github.com (192.30.252.131)' can't be establis
RSA key fingerprint is 16:27:ac:a5:76:28:2d:36:63:1b:56:4d:eb:df:a6:48.
直接yes
連接成功!
四.本地遠程倉庫關聯
-
在Gitee上創建倉庫
-
本地創建倉庫
-
本地倉庫連接遠程倉庫
-
遠程本地倉庫同步
-
修改本地提交遠程
@1.添加文件
@2.把文件添加到版本庫
第一步 git add 0701.txt ,命令git add
告訴Git,把文件添加到倉庫
第二步git commit -m 'first commit
命令git commit
告訴Git,把文件提交到倉庫,
-m
后面輸入的是本次提交的說明,可以輸入任意內容,當然最好是有意義的,這樣你就能從歷史記錄里方便地找到改動記錄。
@3.把本地推送到遠程
此時已提交到遠程
常遇問題
第二部分:Jenkins for Gitee
(一)簡介
Gitee Jenkins Plugin 是Gitee基於 GitLab Plugin 開發的 Jenkins 插件。用於配置 Jenkins 觸發器,接受Gitee平台發送的 WebHook 觸發 Jenkins 進行自動化持續集成或持續部署,並可將構建狀態反饋回Gitee平台。
1. 目前支持特性:
-
推送代碼到Gitee時,由配置的 WebHook 觸發 Jenkins 任務構建。
-
評論提交記錄觸發提交記錄對應版本 Jenkins 任務構建
-
提交 Pull Request 到Gitee項目時,由配置的 WebHook 觸發 Jenkins 任務構建,支持PR動作:新建,更新,接受,關閉,審查通過,測試通過。
-
支持 [ci-skip] 指令過濾 或者 [ci-build] 指令觸發構建。
-
過濾已經構建的 Commit 版本,若是分支 Push,則相同分支Push才過濾,若是 PR,則是同一個PR才過濾。
-
按分支名過濾觸發器。
-
正則表達式過濾可觸發的分支。
-
設置 WebHook 驗證密碼。
-
構建后操作可配置 PR 觸發的構建結果評論到Gitee對應的PR中。
-
構建后操作可配置 PR 觸發的構建成功后可自動合並對應PR。
-
對於 PR 相關的所有事件,若 PR 代碼沖突不可自動合並,則不觸發構建;且若配置了評論到PR的功能,則評論到 PR 提示沖突。
-
PR 評論可通過 WebHook 觸發構建(可用於 PR 觸發構建失敗是便於從Gitee平台評論重新觸發構建)
-
支持配置 PR 不要求必須測試時過濾觸發構建。(可用於不需測試則不構建部署測試環境)
-
支持相同 PR 觸發構建時,取消進行中的未完成構建,進行當前構建(相同 PR 構建不排隊,多個不同 PR 構建仍需排隊)
2. 計划中特性
-
PR 審查並測試通過觸發構建(可用戶觸發部署,且可配合自動合並 PR 的特性完善工作流。)
-
勾選觸發方式自動添加WebHook至Gitee。
(二)插件安裝
-
在線安裝
-
前往 Manage Jenkins -> Manage Plugins -> Available
-
右側 Filter 輸入: Gitee
-
下方可選列表中勾選 Gitee(如列表中不存在 Gitee,則點擊 Check now 更新插件列表)
-
點擊 Download now and install after restart
-
-
手動安裝
-
從 release 列表中進入最新發行版,下載對應的 XXX.hpi 文件
-
前往 Manage Jenkins -> Manage Plugins -> Advanced
-
Upload Plugin File 中選擇剛才下載的 XXX.hpi 點擊 Upload
-
后續頁面中勾選 Restart Jenkins when installation is complete and no jobs are running
-
(三)插件配置
1. 添加Gitee鏈接配置
-
前往 Jenkins -> Manage Jenkins -> Configure System -> Gitee Configuration -> Gitee connections
-
在
Connection name
中輸入Gitee
或者你想要的名字 -
Gitee host URL
中輸入Gitee完整 URL地址:https://gitee.com
(Gitee私有化客戶輸入部署的域名) -
Credentials
中如還未配置Gitee APIV5 私人令牌,點擊Add
- >Jenkins
-
Domain
選擇Global credentials
-
Kind
選擇Gitee API Token
-
-
Scope
選擇你需要的范圍-
Gitee API Token
輸入你的Gitee私人令牌,獲取地址:https://gitee.com/profile/personal_access_tokens
-
-
ID
,Descripiton
中輸入你想要的 ID 和描述即可。 -
Credentials
選擇配置好的 Gitee APIV5 Token -
點擊
Advanced
,可配置是否忽略 SSL 錯誤(視您的Jenkins環境是否支持),並可設置鏈接測超時時間(視您的網絡環境而定) -
點擊
Test Connection
測試鏈接是否成功,如失敗請檢查以上 3,5,6 步驟。
配置成功后如圖所示:
2. 新建構建任務
前往 Jenkins -> New Item , name 輸入 'Gitee Test',選擇 Freestyle project
保存即可創建構建項目。
3. 任務全局配置
任務全局配置中需要選擇前一步中的Gitee鏈接。前往某個任務(如'Gitee Test')的 Configure -> General,Gitee connection 中選擇前面所配置的Gitee鏈接,如圖:
4. 源碼管理配置
前往某個任務(如'Gitee Test')的 Configure -> Source Code Management 選項卡
-
點擊 Git
-
輸入你的倉庫地址,例如
git@your.gitee.server:gitee_group/gitee_project.git
-
點擊 Advanced 按鈕, Name 字段中輸入
origin
, Refspec 字段輸入+refs/heads/*:refs/remotes/origin/* +refs/pull/*/MERGE:refs/pull/*/MERGE
,注意新版jenkins不再接受多條同時包含 * 通配符的refs描述,如只對push觸發可寫前半部分,如只對PR觸發可只寫后半段。具體可見下圖:
-
-
憑據Credentials 中請輸入 git 倉庫 https 地址對應的 用戶名密碼憑據,或者 ssh 對應的 ssh key 憑據,注意 Gitee API Token 憑據不可用於源碼管理的憑據,只用於 gitee 插件的 API 調用憑據。
-
Branch Specifier選項:
-
對於單倉庫工作流輸入:
origin/${giteeSourceBranch}
-
-
對於 PR 工作流輸入:
pull/${giteePullRequestIid}/MERGE
-
Additional Behaviours選項:
-
對於單倉庫工作流,如果你希望推送的分支構建前合並默認分支(發布的分支),可以做以下操作:
-
點擊 Add 下拉框
-
選擇 Merge before build
-
-
設置 Name of repository 為
origin
-
設置 Branch to merge to 為
${ReleaseBranch}
即您要合並的默認分支(發布分支)
-
-
對於 PR 工作流,Gitee服務端已經將 PR 的原分支和目標分支作了預合並,您可以直接構建,如果目標分支不是默認分支(發布分支),您也可以進行上訴構建前合並。
-
配置如圖所示:
5. 觸發器配置
前往任務配置的觸發器構建: Configure -> Build Triggers 選項卡
-
Enabled Gitee triggers
勾選您所需要的構建觸發規則,如Push Event
,Opened Merge Request Events
,勾選的事件會接受WebHook,觸發構建。目前支持觸發事件有:-
Push Events :推送代碼事件
-
Commit Comment Events :評論提交記錄事件
-
-
Opened Merge Request Events :提交 PR 事件
-
Updated Merge Request Events :更新 PR 事件
-
-
Accepted Merge Request Events :接受/合並 PR 事件
-
Closed Merge Request Events :關閉 PR 事件
-
-
Approved Pull Requests : 審查通過 PR 事件
-
Tested Pull Requests :測試通過 PR 事件
-
-
Build Instruction Filter
:-
None
: 無過濾 -
[ci-skip] skip build
:commit message 或者 PR 說明包含[ci-skip]
時,跳過構建觸發。
-
-
[ci-build] trigger build
:commit message 或者 PR 說明包含[ci-build]
時,觸發構建。
-
Ignore last commit has build
該選項可以跳過已經構建過的 Commit 版本。 -
Cancel incomplete build on same Pull Requests
該選項在 PR 觸發構建時,會判斷是否存在相同 PR 且未完成的構建,有則取消未完成構建,再進行當前構建。 -
Ignore Pull Request conflicts
該選項在 PR 觸發構建時,會根據 PR 沖突情況選擇是否進行構建。 -
Allowed branches
可以配置允許構建的分支,目前支持分支名和正則表達式的方式進行過濾。 -
Secret Token for Gitee WebHook
該選項可以配置 WebHook 的密碼,該密碼需要與Gitee WebHook配置的密碼一致方可觸發構建。 -
注意:若 PR 狀態為不可自動合並,則不觸發構建。
6. 構建后步驟配置
前往任務配置的構建后配置: Configure -> Post-build Actions 選項卡
7. 構建結果回評至Gitee
-
點擊
Add post-build action
下拉框選擇:Add note with build status on Gitee pull requests
-
Advanced
中可以配置:-
Add message only for failed builds :僅為構建失敗回評到Gitee
-
自定義各狀態的回評內容(內容可以引用 Jenkins 的環境變量,或者自定義的環境變量)
-
-
若開啟該功能,還可將不可自動合並的狀態回評至Gitee
8. 構建成功自動合並PR
點擊 Add post-build action
下拉框選擇:Accept Gitee pull request on success
9. 新建Gitee項目WebHook
進入源碼管理配置中設置的Gitee項目中,進入 管理 -> WebHooks
-
添加 WebHook, URL 填寫
觸發器配置:Build when a change is pushed to Gitee. Gitee webhook URL
中所示 URL,如:: http://127.0.0.1:8080/jenkins/project/fu -
密碼填寫:觸發器配置第 5 點中配置的 WebHook密碼,不設密碼可以不填
-
勾選 PUSH, Pull Request
10. 測試推送觸發構建
-
Gitee的 WebHook 管理中選擇勾選了PUSH的 WebHook 點擊測試,觀察 Jenkins 任務的構建狀態
-
Gitee項目頁面編輯一個文件提交,觀察 Jenkins 任務的構建狀態
11. 測試PR觸發構建
-
Gitee的 WebHook 管理中選擇勾選了 Pull Request 的 WebHook 點擊測試,觀察 Jenkins 任務的構建狀態
-
在Gitee項目中新建一個Pull Request,觀察 Jenkins 任務的構建狀態
(四)環境變量
目前支持環境變量見以下函數,其中不同的 WebHook 觸發可能導致有些變量為空,具體請安裝插件 EnvInject Plugin,於構建中查看 Environment Variables
public Map<String, String> getBuildVariables() {
MapWrapper<String, String> variables = new MapWrapper<>(new HashMap<String, String>());
variables.put("giteeBranch", branch);
variables.put("giteeSourceBranch", sourceBranch);
variables.put("giteeActionType", actionType.name());
variables.put("giteeUserName", userName);
variables.put("giteeUserEmail", userEmail);
variables.put("giteeSourceRepoHomepage", sourceRepoHomepage);
variables.put("giteeSourceRepoName", sourceRepoName);
variables.put("giteeSourceNamespace", sourceNamespace);
variables.put("giteeSourceRepoURL", sourceRepoUrl);
variables.put("giteeSourceRepoSshUrl", sourceRepoSshUrl);
variables.put("giteeSourceRepoHttpUrl", sourceRepoHttpUrl);
variables.put("giteePullRequestTitle", pullRequestTitle);
variables.put("giteePullRequestDescription", pullRequestDescription);
variables.put("giteePullRequestId", pullRequestId == null ? "" : pullRequestId.toString());
variables.put("giteePullRequestIid", pullRequestIid == null ? "" : pullRequestIid.toString());
variables.put("giteePullRequestTargetProjectId", pullRequestTargetProjectId == null ? "" : pullRequestTargetProjectId.toString());
variables.put("giteePullRequestLastCommit", lastCommit);
variables.put("giteePushCreated", created ? "true" : "false");
variables.put("giteePushDeleted", deleted ? "true" : "false");
variables.putIfNotNull("giteePullRequestState", pullRequestState);
variables.putIfNotNull("giteeMergedByUser", mergedByUser);
variables.putIfNotNull("giteePullRequestAssignee", pullRequestAssignee);
variables.put("giteeTargetBranch", targetBranch);
variables.put("giteeTargetRepoName", targetRepoName);
variables.put("giteeTargetNamespace", targetNamespace);
variables.put("giteeTargetRepoSshUrl", targetRepoSshUrl);
variables.put("giteeTargetRepoHttpUrl", targetRepoHttpUrl);
variables.put("giteeBefore", before);
variables.put("giteeAfter", after);
variables.put("giteeBeforeCommitSha", before);
variables.put("giteeAfterCommitSha", after);
variables.put("giteeRef", ref);
variables.put("ref", ref);
variables.put("beforeSha", beforeSha);
variables.put("isTag", isTag);
variables.put("sha", sha);
variables.put("status", status);
variables.put("stages", stages);
variables.put("createdAt", createdAt);
variables.put("finishedAt", finishedAt);
variables.put("duration", buildDuration);
variables.put("jsonBody", jsonBody);
variables.put("noteBody", noteBody);
variables.putIfNotNull("giteeTriggerPhrase", triggerPhrase);
return variables;
}
(五)打包或運行測試
打包 hpi 文件在倉庫目錄中執行: mvn package
直接運行測試執行:mvn hpi:run
第三部分:jenkins構建APIAutomation項目
1.基礎環境配置
-
安裝allure-report插件
-
JDK配置
參考上一章jenkins關聯jmeter自動化部署教程
-
git配置
參考上一章jenkins關聯jmeter自動化部署教程
-
allure配置
Manage Jenkisn -> 全局工具配置 ,配置如下圖所示
-
gitee配置
-
Manage Jenkins -> 系統配置,配置如下圖所示
-
配置全局憑證:選擇Gitee API令牌
-
Gitee API 令牌生成,登錄gitee ->設置->私人令牌->生成
-
將如上生成的令牌粘貼進入測試如下所示成功
-
-
全局屬性配置
Manage Jenkins -> 系統配置->全局屬性,配置如下圖所示
-
字符編碼配置
-
Manage Jenkins -> 系統配置->全局屬性
-
Mange Jenkins -> Manage Nodes and Clouds
-
配置jenkins 啟動文件
添加如下內容:
-Dhudson.model.DirectoryBrowserSupport.CSP= -Dfile.encoding=UTF-8 -Dsun.jnu.encoding=UTF-8
-
配置服務器環境變量
設置jenkins所在服務器環境變量,右鍵我的電腦→屬性→高級系統設置→環境變量,添加
JAVA_TOOL_OPTIONS
-
CMD配置
chcp 65001
在命令行標題欄上點擊右鍵,選擇"屬性"->"字體",將字體修改為True Type字體"Lucida Console"
-
2. 構建項目
源碼管理
配置憑證
所有配置的憑證在首頁均可查看
構建觸發器
生成的webhook鈎子程序復制生成的密碼粘貼到Gitee 項目 ->管理 ->
構建
PATH=$PATH;D:\user\local\Python\Python38-32\Scripts
PATH=$PATH;D:\user\local\Python\Python38-32\Scripts
xcopy /y /c /h /r /s APIAutomatormation D:\user\workspace\py_workspace\APIAutomatormation\
cd /d D:/user/workspace/py_workspace/APIAutomatormation
pytest -s -q --alluredir result
rem D:\user\local\allure-2.13.8\bin\allure.bat generate result -o report --clean
rem xcopy /y/c/h/r/s report C:\Windows\System32\config\systemprofile\AppData\Local\Jenkins\.jenkins\workspace\APIAutomatormation\report
exit 0
構建后操作:添加Allure報告
第三部分:jenkins構建APIAutomation項目點擊高級
構建后操作:郵件通知
郵件模板完整內容:
成功填寫完成,build無誤后 jenkins上會看到如下結果:
郵件成功通知:
郵件模板完整內容如下:
<!DOCTYPE html>
<html lang="en">
<body leftmargin="8" marginwidth="0" topmargin="8" marginheight="4" offset="0">
<table width="95%" cellpadding="0" cellspacing="0" style="font-size: 11pt; font-family: Tahoma, Arial, Helvetica, sans-serif">
<tr>
測試郵件,無需回復!<br/>
各位同事,大家好,以下為${PROJECT_NAME }項目構建信息</br>
<h4><font color="red">allure報告在線查看or下載allure-report.zip用firefox離線查看,測試用例見附件</font></h4>
<h2>在線圖表測試報告:<br/>
<a HREF="${PROJECT_URL}${BUILD_NUMBER}/allure">${PROJECT_URL}${BUILD_NUMBER}/allure</a><h2>
</tr>
<tr>
<td><br/>
<b><font color="#0B610B">項目描述:${JOB_DESCRIPTION}<br></font></b>
<hr size="2" width="100%" align="center" /></td>
</tr>
<tr>
<td>
<ul>
<li>項目名稱 : ${PROJECT_NAME}</li>
<li>構建編號 : 第${BUILD_NUMBER}次構建</li>
<li>SVN 版本: ${SVN_REVISION}</li>
<li>觸發原因: ${CAUSE}</li>
<li>構建狀態: ${BUILD_STATUS}</li>
<li>構建日志: <a href="${BUILD_URL}console">${BUILD_URL}console</a></li>
<li>構建 Url : <a href="${BUILD_URL}">${BUILD_URL}</a></li>
<li>工作目錄 : <a href="${PROJECT_URL}ws">${PROJECT_URL}ws</a></li>
<li>項目 Url : <a href="${PROJECT_URL}">${PROJECT_URL}</a></li>
<li>系統allure測試報告:<a HREF="${PROJECT_URL}${BUILD_NUMBER}/allure">${PROJECT_URL}${BUILD_NUMBER}/allure</a><li>
</ul>
</td>
<tr>
<td>
<b><font color="#0B610B">構建日志 (最后 100行):</font></b>
<hr size="2" width="100%" align="center" />
</td>
</tr>
<tr>
<td>
<textarea cols="80" rows="30" readonly="readonly" style="font-family: Courier New">${BUILD_LOG, maxLines=100}</textarea>
</td>
</tr>
${JELLY_SCRIPT}
</table>
</body>
</html>
第四部分:采坑記錄
一. 本地測試通過,上傳代碼等到gitee服務器運行到jenkins主機,出現如下目錄or路徑不存在
本地排查思路:
-
看到有 unucodeescape 錯誤,開始以為亂碼導致,然后在每個文件頭加字符編碼配置
# _*_ coding:utf-8 _*_
之后發現不可用 -
看到提示No such file or directory :在本機排查發現該文件在當前目錄存在,但是就是為何找不到,懷疑是sys.path沒有將當前項目路徑添加到 PYTHONPATH當中,修改代碼如下:
execFilePath = os.path.dirname(__file__) + '/testcase'
# 追加logging
# D:\user\workspace\py_workspace\APIAutomationFramework\testcase
# execfile = execFilePath + '/test_API.py'
# execfile = r'D:/user/workspace/py_workspace/APIAutomationFramework/testcase/test_API.py'
#此處修改為絕對路徑
execfile = os.path.join(os.path.abspath(os.path.dirname(__file__)), 'testcase', 'test_API.py')
python_install_cmd = os.path.join(sys.path[10], 'python.exe')
os.system("python " + execfile)之后發現仍然不可用,
-
定位代碼logUtils類, 懷疑該行代碼有問題
查看對應的源碼解析,排查到
**os.path.dirname(__file__)**
引用相對路徑的問題,查詢結果如下python3 獲取當前路徑及os.path.dirname的使用
方法一:
import sys,os
os.getcwd()#然后就可以看見結果了方法二:
import os
os.path.dirname(os.path.realpath('__file__'))#注意:添加單引號python中的os.path.dirname(file)的使用
(1)當"print os.path.dirname(file)"所在腳本是以完整路徑被運行的, 那么將輸出該腳本所在的完整路徑,比如:
python d:/pythonSrc/test/test.py
那么將輸出 d:/pythonSrc/test
(2)當"print os.path.dirname(file)"所在腳本是以相對路徑被運行的, 那么將輸出空目錄,比如:
python test.py
那么將輸出空字符串
python中的os.path.dirname(path)
語法:os.path.dirname(path) 功能:去掉文件名,返回目錄 如:
print(os.path.dirname('W:\Python_File\juan之購物車.py'))
#結果
#W:\Python_File
print(os.path.dirname('W:\Python_File'))
#結果
#W:\參考博客:https://www.cnblogs.com/yuehouse/p/12028368.html
然后並沒有卵用, 再次排查
-
定位到可能是否由於fileConfig(p) 加載參數配置只能以windows環境下“\” 標識,查閱相關資料如下
首先,"/"左傾斜是正斜杠,""右傾斜是反斜杠,可以記為:除號是正斜杠一般來說對於目錄分隔符,Unix和Web用正斜杠/,Windows用反斜杠,但是現在Windows 不限制,都可使用
(一)目錄中的斜杠們
python讀文件需要輸入的目錄參數,列出以下例子:
path = r"C:\Windows\temp\readme.txt"
path1 = r"c:\windows\temp\readme.txt"
path2 = "c:\windows\temp\readme.txt"
path3 = "c:/windows/temp/readme.txt"
打開文件函數open()中的參數可以是path也可以是path1、path2、path3。
path:""為字符串中的特殊字符,加上r后變為原始字符串,則不會對字符串中的"\t"、"\r" 進行字符串轉義
path1:大小寫不影響windows定位到文件
path2:用一個""取消第二個""的特殊轉義作用,即為"\"
path3:用正斜杠做目錄分隔符也可以轉到對應目錄,並且在python中path3的方式也省去了反斜杠\轉義的煩惱
(二)正則表達式中的斜杠們
正則表達式匹配反斜杠"",為什么是"\\"或是 r"\"呢?
因為在正則表達式中\為特殊符號,為了取消它在正則表達式中的特殊意義需要加一個\就變成了\,但是問題又來了,\也是字符串中的特殊字符,所以又要分別對兩個\取消其特殊意義,即為\\。Python中有一個原始字符串操作符,用於那些字符串中出現特殊字符,在原始字符串中,沒有轉義字符和不能打印的字符。這樣就可以取消了\在字符串中的轉義功能,即r"\"。
然而仍然沒有卵用 ,
-
最后排查到最后一行代碼:
定位該行問題發現,該文件只有配置文件引用,在logging.conf 下
的確由於該路徑被找不到,目前很疑惑根本原因暫未找到同樣是windows操作環境,換台機器就無法操作,很讓人疑惑,總之更改為項目路徑好使
-
二. 本地測試,生成的報告單獨在桌面直接用index打開數據無法加載,但是在IDE里可以
顯示如下情況:
處於loading狀態,說明有數據只是沒法加載出來
問題解決
-
其實在allure-report下index.html文件是不能直接打開的,出現頁面都是loading的情況,這是因為直接allure報告用瀏覽器是打不開的,需要用allure命令渲染之后打開才能展示效果(allure常識)。
-
allure使用了兩種方式來渲染頁面。分別是 allure open 和 allure serve。前者用於在本地渲染和查看結果,后者用於在本地渲染后對外展示結果。這里我們使用allure open。運行命令
allure open allure-report目錄
即可自動打開瀏覽器展示渲染好的結果。這里的allure-report為allure generate生成的結果所在目錄。
三. 集成到jenkins上發現結果無數據
這里有兩兩種場景:1. 一種是無數據 2. 一種是有數據只不過處於loading狀態加載不出來
目前處於第1種結果:具體表現形式如下:
排查可能原因:
-
首先明確 pytest生成的數據默認在allure-result目錄下,這里我更改了result目錄,通過本地的IDE和cmd命令行發現沒有問題,那么只能是jenkins windows Execute shell命令行有問題
命令行內容如下
xcopy /y /c /h /r /s APIAutomatormation D:\user\workspace\py_workspace\APIAutomatormation\
cd /d D:/user/workspace/py_workspace/APIAutomatormation
python run_main.py
exit 0之后發現,是壓根''python run_main.py '' 壓根就沒有執行,估計是jenkins內部沒有識別python變量,手工添加python執行路徑:
$PYTHON_PATH\python.exe run_main.py
發現執行到一半又不能執行了:
定位到如下位置:
發現代碼里又引用了相對路徑,再次添加絕對路徑進行執行該命令,console控制亂碼錯誤顯示如下:
估計問題不在這里,再次查詢Google, 查到原來jenkins集成allure執行的時候是不需要手工執行生成報告的,查看會自動幫你做
-
再次更改執行命令如下:
PATH=$PATH;D:\user\local\Python\Python38-32\Scripts
PATH=$PATH;D:\user\local\Python\Python38-32\Scripts
xcopy /y /c /h /r /s APIAutomatormation D:\user\workspace\py_workspace\APIAutomatormation\
cd /d D:/user/workspace/py_workspace/APIAutomatormation
pytest -s -q --alluredir result
D:\user\local\allure-2.13.8\bin\allure.bat generate result -o report --clean
exit 0運行之后發現仍然沒有數據,並且
pytest -s -q --alluredir result
這行命令似乎沒有執行 ,發現pytest找不到該命令,實際path已經配置了python環境變量 , 手工將pytest所在目錄也添加到path環境變量中,顯示如下: -
終於pytest可以執行了,但是report沒有結果數據,查看jenkins console發現 取的report是工作空間目錄的結果report數據 , 於是手工復制生成的報告拷貝到jenkins工作空間當中
命令行變為如下
xcopy /y /c /h /r /s APIAutomatormation/report C:\Windows\System32\config\systemprofile\AppData\Local\Jenkins\.jenkins\workspace\APIAutomatormation\report
然而很坑爹並沒有卵用
-
再次查看result路徑,發現其實生成了 result是有數據的,只不過沒有體現在report里,原來jenkins 不用你手工生成報告,插件會自動幫你生成,最后一步取消 ;完整結果顯示如下:
PATH=$PATH;D:\user\local\Python\Python38-32\Scripts
PATH=$PATH;D:\user\local\Python\Python38-32\Scripts
xcopy /y /c /h /r /s APIAutomatormation D:\user\workspace\py_workspace\APIAutomatormation\
cd /d D:/user/workspace/py_workspace/APIAutomatormation
pytest -s -q --alluredir result
exit 0完美解決
最后構建后操作生成報告的地方一定要注意 result 和 report填寫路徑要正確,否則數據仍然不會展示的
至此,該篇幅文章講解結束,以上都是博主親自在公司實踐記錄的內容,如有描述錯誤的地方還請留言批評指出。