发布新日志

  • 转 - Trac系列(6):用户管理和身份验证

    2011-11-11 15:09:10

    关于TRAC的权限设置,可参考如下文章,写的简单易懂。
    转载地址:http://hi.baidu.com/xuexiba/blog/item/23980ffafc7c229459ee90dd.html#0

    Trac系列(6):用户管理和身份验证
    2007-09-05 22:44
    在Trac中,添加、删除、配置用户账户以及身份验证的过程依赖于运行Trac的方式,也就是使用哪种方式、在哪种Web服务器上运行Trac。

    下面介绍使用Tracd时如何管理用户帐号以及进行身份验证。

    在以前的讲解中,我们建立了一个Angel项目的Trac环境,用以下的命令:
    C:\Python24\Scripts>..\python tracd -p 8001 C:\SCM\Angel\Angel_Trac
    来运行Trac环境。

    虽然使用浏览器访问该项目时,页面上方也有一个“Login”连接,但是是无法使用的,点击了会报错,提示:
    “Authentication information not available. Please refer to the installation documentation.”
    这是因为我们没有为该项目设置用户、分配权限和密码。要使Login可用,我们需要做以下三个工作:

    1. 创建用户并分配权限
    过程如下图:

    现在我们的Angel项目有了一个admin的用户,是Trac的管理员。
     

    2. 给用户设定密码
     

    Tracd支持Basic和Digest两种身份验证方式,默认使用Digest,在这里只介绍Digest方式,这是来源于Apache的用户管理和身份验证方式。

    Digest方式需要提供一个特定格式的密码文件,可以使用Apache的htdigest命令来生成密码文件。如果没有Apache,可以使用下面的python脚本来生成密码(我就是使用的这种方式)

    from optparse import OptionParser
    import md5

    # build the options
    usage = "usage: %prog [options]"
    parser = OptionParser(usage=usage)
    parser.add_option("-u", "--username",action="store", dest="username", type = "string",
    help="the username for whom to generate a password")
    parser.add_option("-p", "--password",action="store", dest="password", type = "string",
    help="the password to use")
    (options, args) = parser.parse_args()

    # check options
    if (options.username is None) or (options.password is None):
    parser.error("You must supply both the username and password")

    # Generate the string to enter into the htdigest file
    realm = 'trac'
    kd = lambda x: md5.md5(':'.join(x)).hexdigest()
    print ':'.join((options.username, realm, kd([options.username, realm, options.password])))
    将上面的代码保存到一个新文本文件中,并重命名该文件的扩展名为py(假定修改后该文件是
    trac-digest.py,放在了C:\SCM目录),使用下面的命令
    python trac-digest.py -u username -p password >> c:\digest.txt
    具体到我们的项目就是
    C:\Python24>python c:\scm\trac-digest.py -u admin -p admin >>c:\scm\digest.txt
    会在c:\scm\目录下生成一个digest.txt的密码文件,该文件的格式是“用户名:范围名(readlm名称,默认是trac):密码的密文”。
    如下图

    可以多次执行上面的命令在一个密码文件中为多个用户设定密码。

    3. 使用带验证选项的行命令启动tracd
    命令如下
    tracd -p 8080 --auth=project1,/path/to/users.htdigest,mycompany.com /path/to/project1
    或者
    tracd -p 8080 --auth=*,/path/to/users.htdigest,mycompany.com /path/to/project1
    具体到我们的项目就是
    C:\Python24\Scripts>..\python tracd -p 8001 --auth=Angel_Trac,c:\scm\digest.txt,trac C:\SCM\Angel\Angel_Trac
    或者
    C:\Python24\Scripts>..\python tracd -p 8001 --auth=*,c:\scm\digest.txt,trac C:\SCM\Angel\Angel_Trac
    需要注意:
    a.红色的部分,是realm(范围),在行命令中的realm必须与生成密码文件的脚本总的realm相同。
    b.蓝色的部分,也就是--auth的第一个参数,不是项目名称,是Trac环境全路径的最后一个目录。
    ok,现在打开浏览器,访问Trac网站,点击“Login”,就会弹出登陆对话框进行身份验证了。如下图

    是不是感觉很麻烦呢,没关系,Trac有插件来扩展这些功能,我们随后就会介绍如何用插件来管理用户和配置Trac。

    最后,需要强调的是,这篇文章只是对使用tracd运行Trac的用户管理,其他方式请参考Trac官方网站的指南。


    参考文献:
           Trac的官方指南中的TracAdmin介绍。
        Trac的官方指南中的Trac Permissions介绍。
    Trac的官方指南中的Tracd介绍 。
  • Trac - 如何自定义RoadMap中的内容

    2011-11-11 11:22:15

    曾经写过一篇文章介绍如何自定义字段及流程的文章(http://www.51testing.com/index.php?uid-49689-action-spacelist-type-blog-itemtypeid-11268),今天介绍如何自定义RoadMap.
    原文参见:http://trac.edgewall.org/wiki/TracRoadmapCustomGroups
    Trac中的roadmap是对milestone的一个集合统计,如果你在创建ticket时选择了相应的milestone,则打开roadmap tab时,默认显示如下:

    这个图中只是显示了已解决及未解决的tickets数,根据我们自定义流程中文章中的介绍,trac允许用户自已添加一些流程,如果用户也想在roadmap中体现出来自定义的status,该如何做呢?

    1. 比如用户在trac.ini [ticket-custom]中自定义了testing流程,定义内容如下:

    testing = new, accepted, needs_work, assigned, reopened -> testing
    testing.name = Submit to report for testing
    testing.operations = set_owner
    testing.permissions = TICKET_MODIFY

    2. 如果用户想在roadmap中看新增加的状态,可做如下处理:

    (1)在trac.ini文件中增加[milestone-group] section,其中内容包括如下:

    [milestone-groups]
    # The definition consists in a comma-separated list of accepted status.
    # Also, '*' means any status and could be used to associate all remaining
    # states to one catch-all group.
    # Qualifiers for the above group (the group must have been defined first):
    
    # Definition of a 'closed' group:
    closed = closed # 此closed状态,必须已经提前定义过
    closed.order = 1
    closed.query_args = group=resolution
    closed.overall_completion = true 
    
    # Definition of an 'in testing' group:                                 
    inQA = testing # 此testing状态,必须已经提前定义过
    inQA.order = 2
    inQA.css_class = new
    inQA.label = in testing
    
    # Definition of an 'active' group:
    active = *
    active.order = 3
    active.css_class = open
    active.label = in progress
    
    # The CSS class can be one of: new (yellow), open (no color) or
    # closed (green). New styles can easily be added using the following
    # selector:  `table.progress td.<class>`
    

    完成后,重新trac server,可得到如下roadmap:

    Trac roadmap with multiple groups

    3. 上述内容的解释

    <groupname>可以是一个或多个status,多个status之间用逗号分隔;使用*则意味着匹配所有在[milestone-group]中尚未定义的状态
    <groupname>.order表示在上图progress bar中显示的位置
    <groupname>.query_argsOptional extra parameter for the query
    <groupname>.overall_completiontrue/false - count in the overall completion statistic
    <groupname>.css_class定义progress bar中显示的颜色new (yellow), open (no color) or closed (green). 
    <groupname>.label显示在progress bar中的名称

  • TRAC Configure

    2009-06-05 14:11:47

    公司一直在用TRAC作为BUG管理工具,原先我们用的是0.10版本的,一直用了两年,虽然期间也发现了TRAC 0.10中的一些不方便使用的地方,比如bug流程中没有测试的部分,经过流程上的口头统一还都可以克服. 但自从与我们的客户合作后,客户要求我们的TRAC能与他们的BUG库实现导入导出的对接,这下麻烦可来了.客户的BUG库比较复杂,有很多功能必须通过自定义才能实现, TRAC 0.10偏偏没有自定义的能力. 后来发现Trac 0.11可以实现自定义的功能,但需要配置一下, 0.11中的自定义功能:
    1.Resolution 自定义
    • 在解决BUG的过程中,总有一些BUG是属于现在不解决,要以后解决的,那在选择resolution时,应该有一个选项能标识出以后修改.
    • 用ADMIN的权限登录TRAC,打开"ADMIN" TAB
    • 单击resolution
    • 添加一个项为"Deferred",保存
    • 现在登录试试,应该可以看到自定义的Deferred项了.
    2.自定义字段
    • 在创建BUG的过程中,需要一些其它的选项,比如"是否属于回归测试BUG"等等, 但TICKET默认的字段中没有这些选项,这就需要管理员修改TRAC.INI文件.
    • 参考地址:http://trac.edgewall.org/wiki/TracTicketsCustomFields
    • 实例:要添加一个"是否属于回归测试BUG"的复选框
      • 管理员在某一PROJECTTRAC安装目录-Conf目录中找到 TRAC.ini 并双击打开
      • 在这个文档的最后面添加如下内容
      • [ticket-custom]
      • RT(这个名字根据自己的需要修改)= checkbox(类型)
        RT.label = Regression Testing(显示在TICKET中的字段名称)
        RT.value = 0(默认值是不选中,如果是1则默认值为选中状态)
      • 保存TRAC.ini
      • 刷新TRAC,创建一个TICKET,看一下是不是多出了一个复选框字段"是否属于回归测试BUG",且默认值为不选中状态.
    3.将自定义字段显示在Test report中
    • 比如我想创建一个新的TEST REPORT,这个TEST REPORT可以查询出所有BUG,并且复选框字段"是否属于回归测试BUG"做为一列显示在这个TEST REPORT中,该如何操作呢?
    • 管理员单击View tickets TAB,然后在打开的页面中单击"CREATE NEW REPORT"
    • 输入TEST REPORT的名称,比如"All tickets for ** build"
    • 在Query for Report栏中输入如下SQL语句
    • SELECT
         id AS ticket,
         summary,
         component,
         status,
         resolution as Suebstatus,(CASE WHEN a.value='1' THEN 'yes' ELSE 'no' END) AS Regression, #自定义字段的别名为Regression,且在显示时,如果值=1就显示yes,如果值=0则显示no

         priority,
         t.type AS type,
         owner,
         strftime('%Y-%m-%d',time,'unixepoch') AS Created, #TRAC日期格式存的字符形式的,要想导入时显示的是日期格式,必须做一下格式的转换
         strftime('%Y-%m-%d',changetime,'unixepoch')AS Modified, description AS _description,
         reporter AS reporter
         b.value AS clientversion
        FROM ticket t
        LEFT OUTER JOIN ticket_custom a ON (t.id = a.ticket and a.name = 'rt - 在Trac.ini文件中定义的名称(用小写表示)')#联合自定义的字段
        LEFT OUTER JOIN ticket_custom b ON (t.id = b.ticket and b.name = 'clientversion')
        LEFT JOIN enum p ON p.name = t.priority AND p.type = 'priority'
        WHERE status IN ('new', 'assigned', 'reopened', 'closed') and version='** build'
        ORDER BY time desc
    • 保存,看一下这个TEST REPORT regression是不是做为一列显示出来呢!
    4.自定义测试流程
    • 在TRAC 0.10版本中不能体现测试的流程,通过配置TRAC 0.11的workflow,可以把测试流程嵌入到BUG生命周期中.
    • 管理员在某一PROJECTTRAC安装目录-Conf目录中找到 TRAC.ini 并双击打开
    • 在这个文档的最后面添加如下内容
    • testing = new,accepted,needs_work,assigned,reopened -> testing
      testing.name = Submit to reporter for testing
      testing.permissions = TICKET_MODIFY

      reject = testing -> needs_work
      reject.name = Failed testing, return to developer

      pass = testing -> closed
      pass.name = Passes Testing
      pass.operations = set_resolution
      pass.set_resolution = fixed
    • 保存,无需重启SERVER. 打开一个open状态的BUG,看一下是不是多了"Submit to reporter for testing"的选项.
    • 选中"Submit to reporter for testing"的选项,并更新, 再看一下是不是现在成了三个选项"leave as testing","Failed testing, return to developer","Passes Testing".
    5.将ASSIGN TO 字段改为下拉列表的形式
    这个目前正在研究,我还不是特别的明白,可以把参考地址提供给大家共同研究:http://pacopablo.com/wiki/pacopablo/blog/set-assign-to-drop-down
    6.TRAC独立版window系统下的安装
    • http://trac.edgewall.org/wiki/TracOnWindowsStandalone
    • 需要注意的是在create a Project Environment时候,除了填写PROJECT名称外,其它的均按默认操作,直接回车即可(C:\Python23\Scripts> python trac-admin C:\path\to\trac_env initenv)
    • 启动独立版的SERVER:C:\Python23\Scripts> python tracd --port 8000 C:\path\to\trac_env
    • 通过浏览器打开 http://localhost:8000/projectname
    • 注意事项: 打开浏览器后, 发现无法登录, 你只是以匿名用户的身份来REVIEW, 并没有创建的权限, 如果想要有这些功能还需要权限及用户设置, 这一块的东西相对比较复杂,我在项目中并没有用到这块, 我直接使用以下语句把匿名用户的权限提升到了ADMIN
    •  
      $ trac-admin /path/to/projenv permission add anonymous TRAC_ADMIN

Open Toolbar