Mantis深入学习

一、mantis的配置和开发环境

  Mantis我用的1.2.5版,建议对mantis感兴趣的,都看看doc目录下的administration_guide和developers两个文档,自己试验里面的参数和功能,对mantis的理解能加深不少。当然了,即使不深入了解,直接使用mantis也不会有什么问题。

  二、mantis结构分析

  下面的内容,仅仅代表本人的一些看法,可能有不对的地方,大家可以随时指出,谢谢。

  Mantis的目录和文件很多,根目录下面的php文件主要都是功能页面,core目录中是需要的各种api函数文件,因为汉化的缘故,lang目录的strings_chinese_simplified.txt文件也是我们关心的内容。

  其实感觉mantis的结构安排不尽合理,根目录下面的大部分php文件,都应该放置到一个专门的目录,因为都是一些功能页面文件。而用户定义的内容,比如config_inc.php等,才应该放置在根目录或者专门的配置目录中,现在的安排显得很混乱,主次不清。

  如果看过mantis的源码,会发现很多源码文件中都首先引入


require_once( 'core.php' );

  core.php是我们第一个需要分析的文件,把此文件分析完,应该如何让mantis按照自己的心意修改,我们也就了解了。

  三、core.php到底做了什么

  下面的分析,我没有解释全部代码,只是挑选主要的说明mantis都在后面做了哪些魔法,感兴趣的可以直接去看完整的代码。

  1、constant_inc.php

  在core.php文件第45行:


require_once( dirname( __FILE__ ).DIRECTORY_SEPARATOR.'core'.DIRECTORY_SEPARATOR.'constant_inc.php' );

  在constant_inc.php文件中定义了mantis中使用的各种常量。

  2、custom_constants_inc.php

  第50、51行:


if ( file_exists( dirname( __FILE__ ).DIRECTORY_SEPARATOR.'custom_constants_inc.php' ) ) {

require_once( dirname( __FILE__ ).DIRECTORY_SEPARATOR.'custom_constants_inc.php' );}

  ……………………

  查看全文请点击下载:http://www.51testing.com/html/54/n-247254.html

  四、在config_inc.php中自定义配置

  上面的是分析,下面开始实践了,分两个部分,第一部分是通过修改config_inc.php配置文件,根据实际情况自定义需要的功能;第二部分是通过编写一个代码示例实现需要的功能。

  以下内容没有特殊说明,都在config_inc.php中定义。

  1、国际化

  在config_inc.php中,如果通过install.php安装,默认就有数据库相关的信息。

  比如我的就是:


$g_hostname = 'localhost';

$g_db_type = 'mysql';

$g_database_name = 'mantis';

$g_db_username = 'mantis';

$g_db_password = 'mantis';

接着把mantis的默认语言设置为中文:


$g_default_language = 'chinese_simplified';

  $g_default_language是很关键的参数变量,看源码就能清楚,在mantis中显示字段内容的时候,都是用lang_get()函数,lang_get函数会根据你设定的默认语言,找lang目录下对应的语言文件,比如$g_default_language 设定为'chinese_simplified'后,那么只要遇到lang_get(),就找lang/strings_chinese_simplified.txt文件中对应的变量,界面就相应显示为相应中文。

  2、新建角色

  不知道为什么,mantis缺省没有测试人员角色,只有报告员角色,但是报告员角色的权限比开发员低,也就是说,如果测试员设定为报告员角色,开发员因为权限更高,可以处理测试员的缺陷状态,比如直接关闭缺陷,我认为既然mantis主要给测试人员管理缺陷用的,那么测试人员的角色权限就应该在开发人员之上。

  根据以上说明,创建新的测试人员角色。还有给匿名用户新建一个匿名用户权限。

  在config_inc.php中,加入


$g_access_levels_enum_string = '5:匿名用户,10:复查员,25:报告员,40:修改员,55:开发人员,60:测试人员,70:经理,90:管理员';

  在lang目录的strings_chinese_simplified.txt中,查找并修改


$s_access_levels_enum_string = '5:匿名用户,10:复查员,25:报告员,40:修改员,55:开发人员,60:测试人员,70:经理,90:管理员';

  ……………………

  查看全文请点击下载:http://www.51testing.com/html/54/n-247254.html

  五、开发版本默认值功能

  上一章用户定义的内容,都是通过系统自带的变量接口进行配置。但是一些内容,没有自定义的接口,怎么办?

  好在mantis是开源软件,自己动手修改吧。

  在提交缺陷的时候,有产品版本和目标版本,在处理缺陷的时候,有修正版本,这些版本都没有预设值,都需要自己手工选择版本,我们下一步就是通过自定义开发,给这些版本加上默认值。

  1、mantis中的版本

  在后台管理版本的时候,版本有两个选项:已发布、已过期。

  而mantis中使用版本的地方有三个:产品版本、目标版本、修正版本。

  我们需要考虑的是:mantis为什么这么设定,这么设定有什么意义。

  下面是我认为的三个版本的含义:

  产品版本:当前测试软件的版本。

  目标版本:预期解决缺陷的版本。

  修正版本:真正解决缺陷的版本。

  其中产品版本一定是已经发布的,目标版本是没有发布的,修正版本有可能发布、也有可能没有发布。

 在mantis中有两个功能模块:

  变更日志(Changelog):记录项目在各个不同的版本已经处理的缺陷。根据修正版本进行记录,只记录最终状态为已解决和已关闭的缺陷。

  路线图(Roadmap):在预期的目标版本是否真正处理了缺陷,给一个项目已经处理缺陷的百分比。根据目标版本进行分类,最终状态为已解决和已关闭的缺陷才计算为已经处理的缺陷。

  变更日志和路线图功能需要使用的时候,都必须设定相应版本。

  例如:一个问题,发现在1.2版本,目标1.4版本,关闭在1.5版本。相应的变更日志中,在1.5版本就记录一条状态为关闭的记录;在路线图中,1.4版会记录此问题关闭并且算已解决问题。

  所以说,mantis之所以设计为三个版本,是为了相关的功能需要。

  如果大家认为不需要使用变更日志和路线图功能,三种版本没有必要全部填写。

  2、通过编程实现版本默认值功能

  通过上一节的分析,我们了解了不同版本的差别,那么就可以确定,产品版本,是已经发布的版本,目标版本和修正版本,应该是没有发布的版本(也有可能是已发布版本版本,请手工选择即可,不在自动化提取默认值功能代码考虑范围之内)。根据版本是否发布,我们从版本列表中取得已发布或未发布的第一个版本作为相应版本的默认值。

  在根目录创建custom_functions_inc.php文件,在里面写入自定义的获取版本函数,$project_id参数是项目的id,$t_released参数确定版本是否已发布,此自定义函数取得版本列表中遇到的已发布或未发布的第一个版本作为函数返回值,代码如下:


<?php

function custom_version($project_id,  $t_released= VERSION_ALL) {

    foreach (version_get_all_rows( $project_id,  $t_released) as $t_version){

      $t_custom_version = $t_version['version'];

      break;  

    }

    return $t_custom_version;  

}

?>

  ……………………

  查看全文请点击下载:http://www.51testing.com/html/54/n-247254.html

  六、总结

  此篇文章,仅仅是我对使用mantis这几个月的学习总结,我看过很多人写的mantis安装配置文章,里面都仅仅说如何配置mantis完成需要的功能。而我这个系列的文章,希望告诉大家,为什么按照别人说的配置下来,mantis就能相应改变,大家如果能从知其然到知其所以然,也就不枉费我花费这么多的精力了。

  个人的文笔有限,了解mantis的人可能会觉得我说的过于繁琐,但是我这个系列是给希望了解mantis的初学者看的,高手可以直接看代码,比我文中说的更详细和准确。

  其实觉得mantis的结构安排不尽合理,很多的内容过于绕。但是mantis确实考虑到了很多的情况,看过上文就知道,很多内容不需要大改,mantis尽可能的把函数参数接口都设计好了,可以根据需要由用户直接调整。

  大概就是这些了,文章虽然检查了几遍,但是个人不敢保证里面是否还有问题。

  再次感谢有耐心看完全文的的人。

 尝试着研究了下mantis。发现安装和配置还是比较负责的,期间会遇到很多麻烦的配置问题,

        比如邮件发送,乱码,图标支持,项目路径存取等等,网上没有详细的整理的资料。

 

        所以为了大伙能够迅速使用mantis,少走弯路,特整理了一下安装和配置文档。希望大家能够喜欢。这可是辛苦整理了几天的哦,呵呵!!!!

 

                           Mantis环境配置单

 

步骤一:安装Apache HTTP Server 2.2.4

      apache_2.2.4-win32-x86-no_ssl.msi。安装时domain和server都填了localhost,端口选择8080(如果不考虑IIS就用80)。   
    启动服务,输入http://localhost:8080/,出现It works!表示Apache正常运行。

步骤二:安装PHP 5.2.5

      php-5.2.5-Win32.zip,解压到任意目录(我解压到d:\php-5.2.5\)。

步骤三:配置Apache使支持PHP

编辑\Apache2.2\conf\httpd.conf文件,在末尾添加两行:
    LoadModule php5_module "d:/php-5.2.5/php5apache2_2.dll"
    AddType application/x-httpd-php .php
    如果Apache的版本为2.0那么应当使用php5apache2.dll,另外注意Apache的配置文件使用/而非\。然后可以写一个简单的php测试页面放到\Apache2.2\htdocs。内容如下:
    <html><body><h1><?php echo "It works!"; ?></h1></body></html>
    出现It works!表示Apache可以解析PHP。

 步骤四安装MySQL v5.1.46

     安装过后紧接就是配置,为了避免以后的麻烦请选择Detailed Configuration。在接下来的向导中务必记得两点:
    1、选择Best Support For Multilingualism,这样MySQL的默认字符集设置为UTF8,能够支持中文存储。否则以后使用Mantis创建帐户、创建项目等等只要输入有中文,入库就报错。
    2、设置root帐户的密码,因为Mantis建立数据库时似乎不支持空密码的root帐户。
     而其余的仍可使用默认的。

步骤五配置PHP使支持MySQL

在PHP安装目录,拷贝php.ini-dist或php.ini-recommended并改名为php.ini。
    1、找到下面两行:
    ; Windows: "\path1;\path2"
    ;include_path = ".;c:\php\includes"
    去掉include_path前面的分号,改为include_path = ".;d:\php-5.2.5\PEAR"。
2、找到下面两行:
    ; Directory in which the loadable extensions (modules) reside.
    extension_dir = "./"
    改为extension_dir = "d:\php-5.2.5\ext",该目录包含有php_mysql.dll

3、找到extension=php_mysql.dll这行,去掉前面的分号。
    4、拷贝D:\php-5.2.5\libmysql.dll到C:\Windows\System32(能否不拷贝?望知情者告知)。
    5、编辑\Apache2.2\conf\httpd.conf文件,在末尾加上一行:
    PHPIniDir "d:/php-5.2.5"
    使用Apache解析PHP时必须这样指定php.ini文件的位置,进而使PHP加载MySQL的扩展模块。
    以上缺少任何一步就会收到错误:Call to undefined function mysql_connect()。

步骤六:安装Mantis 1.1.1

  InstantMantis-1.1.1.zip

解压到任意目录(我解压到d:\InstantMantis-1.1.1\)。

 1、映射虚拟路径,编辑\Apache2.2\conf\httpd.conf文件,在末尾添加:
    Alias /mantis "d:/instantmantis-1.1.1/root/mantis/"
    <Directory "d:/instantmantis-1.1.1/root/mantis/">
    Options Indexes
    AllowOverride None
    Order allow,deny
    Allow from all
    </Directory>
 2、输入http://localhost:8080/mantis/admin/install.php,填写参数,应该都看得懂吧,然后点击按钮建立数据库。需要注意的是Hostname一栏,默认值为localhost:3360,修改为MySQL安装时默认端口为3306
    3、更改数据库连接,编辑d:/instantmantis-1.1.1/root/mantis/config_inc.php,修改以下变量的值,如:
    $g_hostname = 'localhost:3306';
    $g_db_type = 'mysql';
    $g_database_name = 'mantis';
    $g_db_username = 'root';
    $g_db_password = '密码';
    4、输入http://localhost:8080/mantis,用内置的帐号administrator(密码root)登录。局域网内其它机器访问时记得开放8080端口(如果有防火墙的话)

 

配置邮件发送

1)         修改mantis中的config_defaults_inc.php配置邮箱发送功能

#############################

         # Mantis Email Settings

         #############################

         # --- email variables -------------

         $g_administrator_email          = 'jinchun1223@126.com';

         $g_webmaster_email             = 'jinchun1223@126.com';

         # the sender email, part of 'From: ' header in emails

        $g_from_email                       = 'jinchun1223@126.com';

         # the sender name, part of 'From: ' header in emails

         $g_from_name                       = 'Mantis Bug Tracker';

         # the return address for bounced mail

         $g_return_path_email   = 'jinchun1223@126.com';

         # allow email notification

         #  note that if this is disabled, sign-up and password reset messages will

         #  not be sent.

         $g_enable_email_notification = ON;

2)         修改mantis中的config_inc.php  修改配置文件使其支持中文

<?php $g_hostname='localhost:3306';$g_db_type='mysql';$g_database_name='mantis';$g_db_username='root';$g_db_password='root';

$g_default_language='chinese_simplified_utf8';支持中文显示和数据库插入查询等

$g_window_title='Mantis Bug';         

$g_page_title= 'Mantis Bug';   

$g_use_jpgraph=ON; 支持报表图形化显示

?>

mantis中如何显示统计报表

默认情况下,Mantis的图形报表是关闭的,需要安装JPGraph模块。
1).请注意JPGraph 1.x 版本是针对php4,2.x 是针对php5的,请下载对应版本。
2). 将下载包解压到一个目录下,我解压到mantis下的jpgraph目录

3). 然后在config_inc.php中添加下面几行:
$g_use_jpgraph = ON;
$g_jpgraph_path = './jpgraph/src/';       //你也可以按照你的地址填写文件的绝对路径。
4). 在php.ini将“;extension=php_gd2.dll”前面的分号删除,这个模块是JPGraph在显示图表和进行汉字编码转换是所必须的。
(3) JPGraph的中文显示
1) 如果你的界面语言是用简体中文或者繁体中文,那么你会看到图形中的汉字都是乱码,这是因为Mantis对于JPGraph的编码设置不正确造成的。JPGraph会自动将汉字转换为UTF-8编码,但是需要在调用JPGraph的时候对标题等SetFont,Mantis没有做这个操作,因此汉字显示出来都是乱码。
解决方法是增加对图形设置字体的代码;
2) 打开$mantis\core\graph_api.php,查找:graph_get_font(),在其中添加一行
'chinese_gbk' => FF_SIMSUN,
3) 在config_inc.php文件中添加
$g_graph_font           = 'chinese_gbk';
4) 打开$JPGraph\src\jpg-config.inc.php
查找 DEFINE('CHINESE_TTF_FONT','bkai00mp.ttf');
改为 DEFINE('CHINESE_TTF_FONT','simsun.ttc');
jpg-config.inc.php也可以不改,如果生成的图形中的字体想由自己定义,可以这样改。
这个时候,如果你选择的语言是chinese_simplified,现在你的图形报表应该就可以显示中文了。
5) 但如果你选择语言跟我一样是chinese_simplified_utf8,则发现报表显示还是乱码。
原来JPGraph中处理的时候比较bt,只要看到字体设置是FF_SIMSUN,就认为字符串编码是GB2312,输出的时候都要转成UTF8,
单实际上已经是UTF8了,根本不用转。
直接修改代码:
打开JPGraph下的jpgraph.php文件,搜索其中:
elseif( $aFF === FF_SIMSUN ) {
      // Do Chinese conversion
      if( $this->g2312 == null ) {
   include_once 'jpgraph_gb2312.php' ;
   $this->g2312 = new GB2312toUTF8();
      }
      return $this->g2312->gb2utf8($aTxt);
}
改为:
elseif( $aFF === FF_SIMSUN ) {
      // Do Chinese conversion
   /*
      if( $this->g2312 == null ) {
   include_once 'jpgraph_gb2312.php' ;
   $this->g2312 = new GB2312toUTF8();
      }
      return $this->g2312->gb2utf8($aTxt);
   */
   return $aTxt;
}
就是把转换编码的代码注释掉,最好不要直接删掉了,不然以后想改回来就麻烦了。
这样改实际是有些问题,如果mantis中有部分用户的语言选择为chinese_simplified,另一部分选择为chinese_simplified_utf8就不行了,

                     设置上传文件保存位置

主要配置项修改:

1、修改mantis\config_inc.php配置文件

 $g_allow_file_upload  = ON;

 $g_file_upload_method = DISK;

   如果没有,则手动添加这两行。

2、上传文件的大小受到 Mantis\config_inc.php 和 PHP\php.ini 的双重限制

   需要修改:/webapps/mantis/config_inc.php 中 $g_max_file_size = 10000000; # 这个单位是K,10000000K=10 MB

   PHP\php.ini 中upload_max_filesize = 10M 和 post_max_size = 10M

3、在mantis下新增upload文件夹

   在Mantis目录下新建目录如 upload ,再在mantis建立的项目中把文件上传路径设置为“upload”(通过Web方式)。这样上传的文件就会存放在upload目录中。

   但是设置是把服务器的绝对路径配进去了,结果我在其他机器上登录后,提交bug时,附件总是提交不上去,后来我把服务器上的upload目录设置为共享,并且赋予写的权限,然后再web页面上配置了然后再上传附件,发现就可以成功上传了。

在项目管理里面直接输入相对路径upload_boss就可以。

4、附件直接浏览功能:

     在提交一个issue的时候,有时候会有截图提交附件情况,希望能直接看到错误截图而不想自己下载后再看,目前Mantis只是针对bmp, png, gif, jpg格式的图片文件实现了在web页内直接浏览功能,其他各式的文件好像暂时不支持。

     实现方法,将config文件中的$g_preview_attachments_inline_max_size修改一下值

     当将这个设置为0的情况,那么查看issue的时候是永远不会出现附件贴图的,但是如果你将这个设置为一个足够大的尺寸,那么就会在issue里直接出现图片,这个数值是以字节计算,我设置$g_preview_attachments_inline_max_size=1000000,则bmp, png, gif, jpg格式的图片文件直接显示了。

本文出自seven的测试人生公众号最新内容请见作者的GitHub页:http://qaseven.github.io/

时间: 2024-10-02 17:57:54

Mantis深入学习的相关文章

【英语学习】三月份

大学来唯一坚持的就是学习英语.每次都是从图书馆借一本书来,每天阅读英语美文(应该说是快速浏览),然后记录几个不认识的单词和自己感觉还不错的句子.四年下来感觉词汇量还是有所增加的,读写能力增强了,听说能力还是一如既往的不行,谁叫我连普通话都说得不标准.四年来在有道记录的生词已三千有余,对即将的研究生学习来说还是远远不够的.我决定把每天学习的生单词都记载博客上,这样可以养成我时常上博客的习惯,每天学到的太少,还是以一个月为单位吧. 2014-03-01 verdant   ['vɝdnt]  翠绿的

从8个方面对移动设备阅读体验进行研究学习

一直想对移动设备阅读体验进行较为完整的研究和学习,但内容太多,涉及到非常多的传统平面设计知识,目前仅初步地完整字体部分.完整的研究框架包括: 1.界面版式设计的方法.常用的栅格分割适合移动设备多分辨率复杂内容的自动排版,内容可控制时是否可以模仿杂志的复杂不规则排版方式,以达到最佳的阅读体验. 2.移动设备上最佳的字体有什么必要的设计要素?如下图,更多的内容包括字体颜色.字间距.行间距和字体渲染等,不同的内容需要不同的字体.随着屏幕分辨率和显示精度的发展,字体也有一个进化过程. 3.屏幕亮度等参数

值得学习的19个jQuery和CSS按钮教程

jQuery是继prototype之后又一个优秀的Javascrīpt框架,使用户能更方便地处理HTML documents.events.实现动画效果,并且方便地为网站提供AJAX交互.相对于传统HTML的表现而言,CSS能够对网页中的对象的位置排 版进行像素级的精确控制,支持几乎所有的字体字号样式,拥有对网页对象盒模型的能力,并能够进行初步交互设计,是目前基于文本展示最优秀的表现设计语言. 这里就将分享国外19个值得学习的jQuery和CSS按钮教程,希望能有所帮助. Awesome CSS

[Java]基本的学习实例

好久没有更新了,偷懒,该打!1.这个是一个基本的文件操作,实现对文件读取.写入一个数字的操作的package trying;import java.io.*; /** * @author gooing */public class FileRw { private File f = new File("d:\\j2\\a.txt"); public int getNum(){ int i = -1; try{ String stri=""; BufferedRead

java web实现增删改查后,应该学习哪些高级技术?

问题描述 java web实现增删改查后,应该学习哪些高级技术? 做了个小项目,实现了curd,想继续往缓存,并发,负载高级深入,请推荐一个详细的高级技术路线?最好有书 解决方案 javaweb深入浅出,不过这个方向研究,主要还是在公司里学的会更实用些 解决方案二: 多线程,Socket,I/O JSP.EL.JSTL,AJAX JavaScript,jQuery JSON,XML EJB(可忽略) 各种框架 ......太多了 解决方案三: 多线程,Socket,I/O JSP.EL.JSTL

我的java学习经验谈2

  第二篇:编程入门上一次给大家说了环境的配置,这几天又连着上了几次课,大致都是再说一些编程入门的基础知识,把心得跟大家分享一下吧!我再声明一下,我本人的编程水平很是有限, ^_^,所以我说的力图让大家好懂,至于概念我尽量的不去说,因为我怕我说的不准,耽误了大家的学习,至于不对的地方,还请大家多多指出,省得让新人们看了概念混淆!我的文章的目的基本上是扫盲,想让更多的哥哥妹妹们早点的跨入编程的大门,省得天天让那些电脑公司的二道贩子天天一两句变量,函数什么的就给弄的晕头转向!实话实说,国内现在程序员

JetSpeed学习笔记(一)

笔记 JetSpeed学习笔记(一) fuweilin 2005-4-7 前言 参加了公司的portal的兴趣小组,今天对portal进行学习.首先上网看了看一些portal的资料,对portal.portlet.portlet container以及JSR168等概念有个基本的了解.决定进一步实战的方式感受portal,于是学习JetSpeed.     1.  JetSpeed介绍JetSpeed是Apache组织开发的一个采用Java和XML的开放源代码的企业信息门户的实现.门户可以让终端

自动化运维工具Saltstack学习笔记(二)

前面学习了Saltstack安装和基本的配置,可以通过Saltstack批量执行系统命令,包括系统重启,查看系统负载,添加/删除用户等等.也可以把线上WEB,DB,BBS等安装和配置相同或相近的服务器分为一组,通过Saltstack的group功能批量执行管理.下面通过Saltstack来实现批量安装,卸载RPM软件包,批量分发文件,压缩包和推送目录到指定的minion,定期修改Apache/Nginx/Mysql等配置文件并实施推送到minion. 1.物理环境 2.配置Saltstack m

源代码-我在学习Android 的ZXing开源项目二维码时 有几个类 不清楚他具体的意义,功能。

问题描述 我在学习Android 的ZXing开源项目二维码时 有几个类 不清楚他具体的意义,功能. ①BitMatrix.java ②ByteMatrix.java ③MultiFormatWriter.java ④QRCodeWriter.java 这4个 我实在不懂 这功能,这里面哪个 是将输入字符串 变成那个0,1 那个的?用什么算法了...我这是Android工程. 谢谢了...