Python-redmine的基本使用

前言

作為一名測試人員,需要不斷提升軟件交付質(zhì)量以及提升測試效率,其中一個有效的方法則是勤于軟件缺陷分析。想要做好缺陷分析,最基礎(chǔ)的環(huán)節(jié)是快速獲取呈現(xiàn)數(shù)據(jù)。

缺陷管理庫記錄了缺陷相關(guān)的資料,為缺陷分析提供了詳細的信息,是缺陷分析的數(shù)據(jù)來源。下文將學(xué)習(xí)如何訪問redmine獲取數(shù)據(jù)。

REST API

Redmine的部分數(shù)據(jù)可以通過REST API訪問。該API提供對資源(resources)訪問和基礎(chǔ)的增更刪操作,且同時支持XML和JSON格式。下面講述一下常用方法。

Python-Redmine

REST API提供用于Python的語言的庫,即Python-Redmine,提供簡單有力的接口。

環(huán)境搭建

$ pip install python-redmine

簡單配置

  • Redmine類
    從redminelib庫導(dǎo)入 Redmine類,用于下面流程中生成redmine對象。
from redminelib import Redmine
  • 訪問地址
    實例化Redmine對象時,需要賦值訪問的地址參數(shù),以F項目為例:
redmine = Redmine('http://10.20.11.218:8222/redmine')
  • 關(guān)于版本號
    Redmine的API有很多版本,不同版本支持不同的資源和特征。為了保證不出問題,需要指明Redmine版本號。通過該訪問http://10.20.11.218:8222/redmine/admin/info可知版本號,見下:(需要管理員權(quán)限)
version.jpeg
redmine = Redmine('http://10.20.11.218:8222/redmine', version='3.3.1')
  • 授權(quán)登錄
    大多數(shù)情況,API都需要授權(quán)登錄,常用有兩種不同的登錄方式:

    1. 個人賬戶的用戶名密碼登陸
    2. 通過API key訪問,不需要將用戶名和密碼寫入腳本中
redmine = Redmine('http://10.20.11.218:8222/redmine', username='username', password='password')
or
redmine = Redmine('http://10.20.11.218:8222/redmine', key='key')

其中key可以從redmine個人賬戶頁面獲?。?/p>

redmine_key.jpeg

基本概念介紹

1.資源

在Redmine管理中,資源(Resource)在其中是個重要的概念,因為我們的Bug管理的記錄都是靠這些資源作為一個個集合體依據(jù)一定的關(guān)系所構(gòu)建出來,如同關(guān)系型數(shù)據(jù)庫一般。 舉個例子,當我們訪問到某個Project的時候,我們能夠獲得這個Project的信息,包括名稱、id、描述等,不僅如此,我們通過對象中的元素變量issues能夠獲得這個Project下面的所有bug issue。而反過來,我們知道一個bug issue后,也能通過其issue id來反搜出它所在的project id。
而在Redmine中,已經(jīng)存在了一些定義好的資源類型,方便我們直接使用,當然我們也可以自己根據(jù)需要去新建資源類型。
如下是我們常見并且需要掌握才能夠熟悉Redmine的資源類型:
Issue, Project, User, Version, Issue Status

2. 資源管理器

如上所述,在Redmine當中,有著許許多多的資源,而在Python-redmine中,我們可以通過管理器(ResourceManager )的模式去訪問我們的資源。那首先來看看什么是資源管理器:

>>> redmine.project
<redminelib.managers.ResourceManager object for Project resource>
>>> redmine.issue
<redminelib.managers.ResourceManager object for Issue resource>
>>> redmine.user
<redminelib.managers.ResourceManager object for User resource>

以上幾個是我們比較常見的資源管理器,通過資源管理器我們才能夠進行下面的一些基本操作。

這里需要注意的是,在官方的文檔當中,推薦我們直接用管理器調(diào)用其基本操作的方法來獲得我們的資源,而不是通過中間變量來獲得資源管理器,原因應(yīng)該是擔心在使用過程中,有可能會有誤操作將資源管理器的引用指向別的變量而導(dǎo)致管理器污染。

 //this is good
 p1 = redmine.project.get(1)
 p2 = redmine.project.get(2)

 //this is not so good
 project = redmine.project
 p1 = project.get(1)
 p2 = project.get(2)

2..基本操作

一般來講,資源管理器會有CRUD 操作,也就是我們常說的“增刪查改“。但并不是每個資源管理器都會有這樣的操作,所以如果使用了不支持的方法,管理器也會報出相應(yīng)的異常。

以下給出簡單的增刪查改樣例:
create():

>>> project = redmine.project.create(
...     name='Vacation',
...     identifier='vacation',
...     description='foo',
...     homepage='http://foo.bar',
...     is_public=True,
...     parent_id=345,
...     inherit_members=True,
...     custom_fields=[{'id': 1, 'value': 'foo'}, {'id': 2, 'value': 'bar'}]
... )
>>> project
<redminelib.resources.Project #123 "Vacation">

new():

>>> project = redmine.project.new()
>>> project.name = 'Vacation'
>>> project.identifier = 'vacation'
>>> project.description = 'foo'
>>> project.homepage = 'http://foo.bar'
>>> project.is_public = True
>>> project.parent_id = 345
>>> project.inherit_members = True
>>> project.custom_fields = [{'id': 1, 'value': 'foo'}, {'id': 2, 'value': 'bar'}]
>>> project.save()
True

get()

>>> project = redmine.project.get('vacation')
>>> project
<redminelib.resources.Project #123 "Vacation">

all():

>>> projects = redmine.project.all()
>>> projects
<redminelib.resultsets.ResourceSet object with Project resources>

update():

>>> redmine.project.update(123, name='Work', description='Work tasks')
True

delete():

>>> redmine.project.delete(1)
True

除此之外,還有個比較重要的操作就是filter(),如果我們要用于后續(xù)的分析和統(tǒng)計,filter函數(shù)能夠幫助我們篩選出符合我們需求的version或者issue來進行操作。

>>> issues = redmine.issue.filter(project_id='vacation')
>>> issues
<redminelib.resultsets.ResourceSet object with Issue resources>

如上面例子,我們能夠通過project_id來篩選出全部是vacation的issue。

總結(jié)

綜上所述,掌握以上內(nèi)容,我們就基本能夠使用Python-redmine,可以對已經(jīng)搭建好的Redmine服務(wù)器進行訪問和操作。除此之外,結(jié)合需求,我們能夠通過Python的接口調(diào)用數(shù)據(jù),再通過Python的第三方庫,如Panda來展示數(shù)據(jù),能夠?qū)崿F(xiàn)進一步的Bug分析以及后續(xù)的開發(fā)指導(dǎo)。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容