1.引言
本文主要內容是將如何利用 Python 對 Redmine缺陷進行缺陷數據獲取操作亲铡。目前統(tǒng)計缺陷數據時基本是根據項目手動去redmine獲取缺陷數據侦副,至少要花費一個工作日去完成,目前的目標是通過python腳本通過 Redmine-API快速去獲取各個維度的缺陷數據
需求:
需要輸出 產品質量數據(總BUG數驯用,每日新建bug數,每日關閉bug數骂删,bug修復周期掌动,bug提交者統(tǒng)計、bug嚴重程度比)
實現方案:
1.redmine API形式發(fā)布不同維度的缺陷數據統(tǒng)計接口
2.采用python調用api接口宁玫,獲取缺陷數據粗恢,并存儲在數據庫
2.必備環(huán)境
Python3
pycharm IDE
mysql
自行安裝Python需要的包
redminelib
datetime
json
pandas
charts
3.redmine-api理解
了解各個字段代表的含義,比如新建BUG欧瘪、關閉BUG眷射,優(yōu)先級、作者佛掖,引入者妖碉、BUG狀態(tài)等字段的定義及獲取
4.基于python編碼-獲取缺陷數據
引入必須的python庫及包
#coding=utf-8
#引入所需要的庫
from redminelib import Redmine
from pandas import DataFrame;
from string import punctuation
import datetime
import time
import matplotlib
import charts
from mysql_save import Bugcount
import json
定義函數
由于篇幅有限及涉及項目業(yè)務,這里只摘抄一部分關鍵代碼
首先定義函數
def __init__(self, userName, passWord):
self.userName = userName
self.passWord = passWord
self.redMineURL = 'http://10.20.11.218:8222/redmine'
try:
self.redmine = Redmine(self.redMineURL, username=self.userName, password=self.passWord)
self.project = self.redmine.project.get('f_project')
except Exception as ex:
raise RuntimeError('無法連接到Redmine芥被,請檢查網絡欧宜!\n'+ str(ex))
self.fields = None
#新建BUG數定義篩選
def creat_list(created_on,subject):
redmine = MyRedMine("zhangmeiyuan656", "password")
issues1 = redmine.redmine.issue.filter(
project_id='f_project',
created_on='><'+str(created_on)+'|'+str(created_on),
#closed_on='><'+str(closed_on),
status_id='*'
subject=('~'+str(subject)).encode('utf-8'))
result1=str(len(issues1))
return result1
#return issues
#關閉BUG數定義篩選
def closed_list(closed_on,subject):
redmine = MyRedMine("zhangmeiyuan656", "password")
issues2 = redmine.redmine.issue.filter(
project_id='f_project',
closed_on='><'+str(closed_on)+'|'+str(closed_on),
status_id='*',
subject=('~'+str(subject)).encode('utf-8'))
result2=str(len(issues2))
return result2
#數據處理及時間戳轉換使用
if __name__ == '__main__':
redmine = MyRedMine("zhangmeiyuan656", "PASSDWOR")
start_time = "2017-08-01 00:00:00"
end_time = "2017-08-16 00:00:00"
start_time = int(time.mktime(time.strptime(start_time, "%Y-%m-%d %H:%M:%S")))
end_time = int(time.mktime(time.strptime(end_time, "%Y-%m-%d %H:%M:%S")))
c = start_time
while (c < end_time):
c = c + 86400
d = datetime.datetime.utcfromtimestamp(c)
f=str(d.strftime("%Y-%m-%d")
#定義類,字典拴魄,導入MYSQL數據庫
bugCount = Bugcount()
bug_data1 = {}
bug_data1['date_time'] = f
bug_data1['newbug'] = creat_list(f,"XXXv1.0")
bug_data1['closebug'] = closed_list(f,"XXXv1.0")
bugCount.insert_to_db(bug_data1)
bug_data1_string = json.dumps(bug_data1)
print ('json:',bug_data1_string)
4.數據存儲
MYSQL安裝:
在官網上下載mysqlserver 下一步一直安裝
mysql配置
- 1.step1:
蘋果->系統(tǒng)偏好設置->最下邊點mysql 在彈出頁面中 關閉mysql服務
(點擊stop mysql server) - 2.進入終端輸入:cd /usr/local/mysql/bin/
回車后 登錄管理員權限 sudo su
回車后輸入以下命令來禁止mysql驗證功能 ./mysqld_safe --skip-grant-tables &
回車后mysql會自動重啟(偏好設置中mysql的狀態(tài)會變成running) - 3.輸入命令 ./mysql
回車后冗茸,輸入命令 FLUSH PRIVILEGES;
回車后,輸入命令 SET PASSWORD FOR 'root'@'localhost' = PASSWORD('你的新密碼');
至此匹中,密碼修改完成蚀狰,可以成功登陸。
注意測試:mac終端基礎操作mysql
首先手動啟動MySQL應用程序
打開終端輸入如下命令: /usr/local/MySQL/bin/mysql -u root -p
*4职员、進入編碼,新建腳本mysql_sav.py
由于篇幅有限麻蹋,這里只摘抄一部分
#coding=utf-8
#引入所需要的庫
import pymysql
import json
#"""docstring for Bugcount"""
#連接數據庫
connect = pymysql.connect(
host='localhost',
user='root',
passwd='jammy2017',
db='test',
port=3306,
charset='utf8'
)
#獲取cursor對象來進行操作
cursor = connect.cursor()
def __init__(self):
pass
#插入數據
def insert_to_db(self, bug_data):
self.cursor.execute("use test")
self.cursor.execute(
"insert into bug_line(date_time,newbug,closebug) values(%s,%s,%s)", (bug_data.get('date_time'), bug_data.get('newbug'), bug_data.get("closebug")))
self.connect.commit()
5.數據展現
這里嘗試了三種方式
1、一種是將數據通過pands方法轉換后以csv格式導出,這種只適用于將獲取到的數據導出excel表格
示例如下:
#生成CSV格式導出
# df = DataFrame({
# '時間周期':['2017-07-24|2017-07-30','2017-07-20|2017-07-23','2017-07-10|2017-07-20'],
# '每周新建bug數':[str(len(issues)),str(len(issues2)),str(len(issues3))],
# '每周關閉bug數':[str(len(issues4)),str(len(issues5)),str(len(issues6))]
# })
# print(df)
# df.to_csv(
# "/Users/zhangmeiyuan/Desktop/爬蟲腳本/bug趨勢表格.csv",encoding='gb18030'
# )
2焊切、通過POTLY庫生成圖表扮授,不過此方法是在線生成的圖表,借助POTLY的服務器专肪,不能存本地
py.sign_in('jammy0528','erYbv2ED1VmGbWglVhHf')
new_bug = Scatter(
x=[1,2,3],
y=[str(len(issues3)),str(len(issues2)),str(len(issues))],
)
close_bug = Scatter(
x=[1,2,3],
y=[str(len(issues6)),str(len(issues5)),str(len(issues4))]
)
data = Data([new_bug,close_bug])
py.plot(data, filename = 'bug-line')
3刹勃、通過hightcharts+jupyter生成圖表
2C46FA55-FC46-41EC-A40D-8F8A1996F00D.png
6、關于數據可視化嚎尤,未完待續(xù)
后續(xù)考慮通過web框架flask將獲取到的數據進行web數據可視化