基于python從redmine-api中獲取項目缺陷數據(1)

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數據可視化

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末荔仁,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌乏梁,老刑警劉巖次洼,帶你破解...
    沈念sama閱讀 217,084評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現場離奇詭異遇骑,居然都是意外死亡卖毁,警方通過查閱死者的電腦和手機,發(fā)現死者居然都...
    沈念sama閱讀 92,623評論 3 392
  • 文/潘曉璐 我一進店門落萎,熙熙樓的掌柜王于貴愁眉苦臉地迎上來亥啦,“玉大人,你說我怎么就攤上這事练链∠柰眩” “怎么了?”我有些...
    開封第一講書人閱讀 163,450評論 0 353
  • 文/不壞的土叔 我叫張陵媒鼓,是天一觀的道長碍侦。 經常有香客問我,道長隶糕,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,322評論 1 293
  • 正文 為了忘掉前任站玄,我火速辦了婚禮枚驻,結果婚禮上,老公的妹妹穿的比我還像新娘株旷。我一直安慰自己再登,他們只是感情好,可當我...
    茶點故事閱讀 67,370評論 6 390
  • 文/花漫 我一把揭開白布晾剖。 她就那樣靜靜地躺著锉矢,像睡著了一般。 火紅的嫁衣襯著肌膚如雪齿尽。 梳的紋絲不亂的頭發(fā)上沽损,一...
    開封第一講書人閱讀 51,274評論 1 300
  • 那天,我揣著相機與錄音循头,去河邊找鬼绵估。 笑死础淤,一個胖子當著我的面吹牛入客,可吹牛的內容都是我干的欠肾。 我是一名探鬼主播蒸眠,決...
    沈念sama閱讀 40,126評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼掌桩,長吁一口氣:“原來是場噩夢啊……” “哼惶室!你這毒婦竟也來了当娱?” 一聲冷哼從身側響起卖局,我...
    開封第一講書人閱讀 38,980評論 0 275
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎渺杉,沒想到半個月后蛇数,有當地人在樹林里發(fā)現了一具尸體,經...
    沈念sama閱讀 45,414評論 1 313
  • 正文 獨居荒郊野嶺守林人離奇死亡少办,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,599評論 3 334
  • 正文 我和宋清朗相戀三年苞慢,在試婚紗的時候發(fā)現自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片英妓。...
    茶點故事閱讀 39,773評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡挽放,死狀恐怖,靈堂內的尸體忽然破棺而出蔓纠,到底是詐尸還是另有隱情辑畦,我是刑警寧澤,帶...
    沈念sama閱讀 35,470評論 5 344
  • 正文 年R本政府宣布腿倚,位于F島的核電站纯出,受9級特大地震影響,放射性物質發(fā)生泄漏敷燎。R本人自食惡果不足惜暂筝,卻給世界環(huán)境...
    茶點故事閱讀 41,080評論 3 327
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望硬贯。 院中可真熱鬧焕襟,春花似錦、人聲如沸饭豹。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,713評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽拄衰。三九已至它褪,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間翘悉,已是汗流浹背茫打。 一陣腳步聲響...
    開封第一講書人閱讀 32,852評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留妖混,地道東北人包吝。 一個月前我還...
    沈念sama閱讀 47,865評論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像源葫,于是被迫代替她去往敵國和親诗越。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,689評論 2 354

推薦閱讀更多精彩內容