Python-redmine的基本使用

前言

作为一名测试人员,需要不断提升软件交付质量以及提升测试效率,其中一个有效的方法则是勤于软件缺陷分析。想要做好缺陷分析,最基础的环节是快速获取呈现数据。

缺陷管理库记录了缺陷相关的资料,为缺陷分析提供了详细的信息,是缺陷分析的数据来源。下文将学习如何访问redmine获取数据。

REST API

Redmine的部分数据可以通过REST API访问。该API提供对资源(resources)访问和基础的增更删操作,且同时支持XML和JSON格式。下面讲述一下常用方法。

Python-Redmine

REST API提供用于Python的语言的库,即Python-Redmine,提供简单有力的接口。

环境搭建

$ pip install python-redmine

简单配置

  • Redmine类
    从redminelib库导入 Redmine类,用于下面流程中生成redmine对象。
from redminelib import Redmine
  • 访问地址
    实例化Redmine对象时,需要赋值访问的地址参数,以F项目为例:
redmine = Redmine('http://10.20.11.218:8222/redmine')
  • 关于版本号
    Redmine的API有很多版本,不同版本支持不同的资源和特征。为了保证不出问题,需要指明Redmine版本号。通过该访问http://10.20.11.218:8222/redmine/admin/info可知版本号,见下:(需要管理员权限)
version.jpeg
redmine = Redmine('http://10.20.11.218:8222/redmine', version='3.3.1')
  • 授权登录
    大多数情况,API都需要授权登录,常用有两种不同的登录方式:

    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个人账户页面获取:

redmine_key.jpeg

基本概念介绍

1.资源

在Redmine管理中,资源(Resource)在其中是个重要的概念,因为我们的Bug管理的记录都是靠这些资源作为一个个集合体依据一定的关系所构建出来,如同关系型数据库一般。 举个例子,当我们访问到某个Project的时候,我们能够获得这个Project的信息,包括名称、id、描述等,不仅如此,我们通过对象中的元素变量issues能够获得这个Project下面的所有bug issue。而反过来,我们知道一个bug issue后,也能通过其issue id来反搜出它所在的project id。
而在Redmine中,已经存在了一些定义好的资源类型,方便我们直接使用,当然我们也可以自己根据需要去新建资源类型。
如下是我们常见并且需要掌握才能够熟悉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>

以上几个是我们比较常见的资源管理器,通过资源管理器我们才能够进行下面的一些基本操作。

这里需要注意的是,在官方的文档当中,推荐我们直接用管理器调用其基本操作的方法来获得我们的资源,而不是通过中间变量来获得资源管理器,原因应该是担心在使用过程中,有可能会有误操作将资源管理器的引用指向别的变量而导致管理器污染。

 //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 操作,也就是我们常说的“增删查改“。但并不是每个资源管理器都会有这样的操作,所以如果使用了不支持的方法,管理器也会报出相应的异常。

以下给出简单的增删查改样例:
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(),如果我们要用于后续的分析和统计,filter函数能够帮助我们筛选出符合我们需求的version或者issue来进行操作。

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

如上面例子,我们能够通过project_id来筛选出全部是vacation的issue。

总结

综上所述,掌握以上内容,我们就基本能够使用Python-redmine,可以对已经搭建好的Redmine服务器进行访问和操作。除此之外,结合需求,我们能够通过Python的接口调用数据,再通过Python的第三方库,如Panda来展示数据,能够实现进一步的Bug分析以及后续的开发指导。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,142评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,298评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,068评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,081评论 1 291
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,099评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,071评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,990评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,832评论 0 273
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,274评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,488评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,649评论 1 347
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,378评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,979评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,625评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,796评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,643评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,545评论 2 352

推荐阅读更多精彩内容