背景
創(chuàng)建測試報告之后,多個數(shù)據(jù)統(tǒng)計(jì)圖中需要對本次需求鏈接的Bug從不同維度分析,每個圖表中都包含issueKey需要手動修改叉橱,此頁面主要提供批量更新issueKey功能
設(shè)計(jì)
- 利用Jira和Confluence的API實(shí)現(xiàn)
- 使用Confluence提供查詢頁面信息API,根據(jù)頁面ID獲取當(dāng)前頁面信息及版,并找到issueKey
- 正則匹配頁面內(nèi)容中需求ID并批量進(jìn)行更換
- 使用JIRA查詢issue的API,獲取該jiraId的需求名稱
-使用Confluence頁面更新API,更新頁面信息,及頁面標(biāo)題
知識點(diǎn)
JiraAPI :
https://developer.atlassian.com/cloud/jira/software/rest/#api-group-SprintWiKiAPI :
https://docs.atlassian.com/atlassian-confluence/REST/6.6.0/#content/{id}/property-update正則表達(dá)式
具體實(shí)現(xiàn)
- JiraApi通過Key獲取Jira任務(wù)的名稱
API:/rest/api/2/issue/+issueKey
//根據(jù)issueKey獲取需求名稱
HttpGetUtils httpjiraget = new HttpGetUtils(jiraurl);
httpjiraget.setHeader("Authorization",jiraBasicAuth );
String taskInfo = httpjiraget.getHttp(httpjiraget);
String taskName = (String) JSONPath.read(taskInfo,"fields.summary");
System.out.println(taskName);
- API獲取現(xiàn)有頁面內(nèi)容及VersionId
API: /rest/api/content/"+pageID+"/?expand=body.storage
//獲取當(dāng)前頁面版本
HttpGetUtils httpwiki = new HttpGetUtils(wikiCurPageVerUrl);
httpwiki.setHeader("Authorization",jiraBasicAuth );
String versioninfo = httpwiki.getHttp(httpwiki);
//拆解版本號
Integer currentVersion = (Integer)JSONPath.read(versioninfo, "version.number");
//賦值新的頁面版本
Integer versionId = currentVersion + 1;
System.out.println(versionId);
//獲取當(dāng)前頁面的信息
HttpGetUtils httpwikiinfo = new HttpGetUtils(wikiCurPageInfUrl);
httpwikiinfo.setHeader("Authorization",jiraBasicAuth );
String contentInfo = httpwikiinfo.getHttp(httpwikiinfo);
- 正則匹配頁面內(nèi)容中需求ID并批量進(jìn)行更換
//正則表達(dá)式替換所有的Key
newhalfcontent = storage[1].replaceAll("((?<=key\\\\\">)\\S+?[^\\<]+)|((?<=linkedissues\\()[^\\)]+)",issueKey);
- 利用WIKI的API更新頁面
API:/rest/api/content/"+pageID+"/?expand=version"
//更新頁面信息需要用到的傳參
String newContent = "{\n" +
" \"version\": {\n" +
" \"number\": "+versionId+"\n" +
" },\n" +
" \"title\": \""+issueKey+" "+taskName+" 測試綜合文檔"+"\",\n" +
" \"type\": \"page\",\n" +
" \"body\""+newhalfcontent;
System.out.println(newContent);
//更新頁面信息
String wikiUpdateUrl = "http://wiki.test.com/rest/api/content/"+pageID+"";
HttpPutUtils httpwikiupdate = new HttpPutUtils(wikiUpdateUrl);
httpwikiupdate.setHeader("Authorization",jiraBasicAuth );
String tab = httpwikiupdate.jsonPutHttp(newContent,httpwikiupdate);
-
正則匹配小括號中的內(nèi)容2種方式
5.1 表達(dá)式: (?<=()\S+?(?=))
(?<=exp)是以exp開頭的字符串, 但不包含本身长已。
(?=exp)就匹配以exp結(jié)尾的字符串, 但不包含本身。
(?<=() 也就是以括號開頭, 但不包含括號。
(?=)) 就是以括號結(jié)尾术瓮。
\S 匹配任何非空白字符康聂。等價于[^ \f\n\r\t\v]。
+表示至少有一個字符.
? 表示非貪婪(如果沒有有胞四?則會匹配文本中第一個括號到最后一個括號之間的所有內(nèi)容恬汁,如下圖)
(?<=()\S+(?=)) 就是匹配以 (開頭, )結(jié)尾的括號里面最少有一個非空白字符的串, 但不包括開頭的(和結(jié)尾的)
預(yù)搜索就是以啥啥開頭結(jié)尾但是匹配的本身不包括啥啥啥
5.2 表達(dá)式: (?<=()[^)]+
(?<=() 也就是以括號開頭, 但不包含括號.
[^)] 表示匹配非)的字符,當(dāng)匹配的)自動開啟下一次匹配