最近一段時間,寫了一個簡易的測試質量看板,能夠從不同維度查看缺陷分布情況;另外由於公司用的jira,所以也匯總了故事卡以及每個人的故事點情況
初版的效果如下:
從本篇開始,將會寫一系列文章把整個開發過程記錄下來,包括但不限於:
1、后端如何提取jira中的數據,例如每個項目的bug情況、故事卡情況等;
2、提取數據后,如何進行組裝,構造出前端需要的數據格式;
3、前端如何處理后端返回的數據,學習如何調整基本的樣式;
4、利用echarts繪圖時,調整圖標的樣式;
本篇為這個系列的第一章,先來學習一下怎樣提取jira的數據
最初我打算登錄公司內部的jira系統,看看能否抓一下登錄的接口,然后再進行相關的操作,但是經過一番嘗試后,最終以失敗告終......
然后按照慣例開始【網上沖浪】,發現原來官方有一個封裝好的jira庫,可以通過這個庫來對jira進行各種操作
1、連接jira
from jira import JIRA import requests jira = JIRA(server='http://jira.xxx.xxx/', basic_auth=('user', 'password'))
server
中需要填寫公司jira服務的域名;
basic_auth
中需要填寫登錄jira所需的用戶名、密碼
也可以按照如下方式連接
jira = JIRA(auth=('user', 'password'), options={'server': 'http://jira.xxx.xxx/'})
這樣就得到了一個jira對象,可以通過這個jira對象來查看jira中的項目、缺陷、故事卡等等
2、查看項目project
projects = jira.projects() # 查看所有項目 project = jira.project("project_key") # 查看單個項目,需要輸入項目的key
項目對象的主要屬性及方法如下:
- key: 項目Key
- id: 項目id
- name: 項目名稱
- components: 項目下的模塊
- versions: 這個項目中已經創建好的影響版本
- raw: 項目的原始API數據
issue = jira.issue("issue_key") print(issue.raw) print(issue.key)
4、利用jql搜索
用過jira的肯定知道jira有自己專門的一套搜索語言,叫做JQL
我們在jira中做的任何查詢操作,都可以轉化為對應的jql語句
可以通過它來查詢bug、查詢故事(story)、子任務等等,用法如下
jql = "project = xxx AND issuetype = 缺陷" issues = jira.search_issues(jql)
它返回的是一個列表(一個符合搜索條件的jira對象集合),並且每個jira對象會包含所有原始信息
可以通過添加fields
來指定返回原始信息的哪些字段(建議在進行搜索時加上fields參數,不然查詢速度會比較慢)
另外還有一個maxResults
參數,它用來控制返回結果的數量,一般設置為-1
,表示返回所有結果
issues = jira.search_issues(jql, fields="summary, priority, status, creator, created, customfield_11200", maxResults=-1)
根據需要來指定fields的值,如果不確定自己需要的信息對應fields中的哪個字段,可以打印原始信息看看
常見的fields固定屬性包括:
- summary,標題
- creator,創建者
- created,創建時間
- status,狀態
- priority,優先級
- assignee,經辦人
此外還有一些自定義屬性,形如customfield_12309(例如前端負責人、前端故事點、故事卡提測日期等就是這種)
借助強大的jql,我們可以在代碼中構造需要的jql語句,查詢自己需要的結果
例如,根據創建日期的范圍來查詢bug,那么jql如下
jql = "project in ({}) AND issuetype = 缺陷 AND created >= {} AND created <= {}".format(project, start_date,end_date)
獲取不同sprint的故事卡數據
jql = "project in ({}) AND issuetype = Story AND Sprint in ({})".format(project, sprint)
jql並不需要自己來寫,在jira中設置好查詢條件后,切換到【高級】,就自動給出對應的jql語句了
關於jira的學習參考了如下博文:
https://www.cnblogs.com/superhin/p/11693280.html
https://www.cnblogs.com/gcgc/p/12674341.html
https://jira.readthedocs.io/examples.html