发布新日志

  • TestLink Integration with Authorized Trac

    2012-03-12 09:26:37

    TestLink集成Trac, 网上有一篇文章是介绍了2种工具的集成,详细内容参见http://blog.csdn.net/coolcqz/article/details/4188236
    此种方法的集成是在可以匿名访问Trac的基础上实现的,也就是说如果Trac要求必须登录的话,这种方法是不适用的。
    Google上搜索了很久,找到一篇贴子讲的就是如何集成这种需要认证的Trac的,参见http://51elliot.blogspot.com/2009/01/trac-testlink-and-xml-rpc.html
    里面主要内容就是讲如何集成认证Trac的内容,主要的关键点在以下几方面:
    1. 保证Trac上已经安装了XML-RPC的插件
    2. 按照http://blog.csdn.net/coolcqz/article/details/4188236 中所定义的顺序进行配置
    3. 对需要验证的Trac,还需要做如下配置,红色字体部分为需要添加或更新的地方
    modified
    /../testlink/cfg/trac.cfg.php, added:
    define('BUG_TRACK_XMLRPC_HOST', 'http://username:password@YourIpAddress');

    modified /../testlink/lib/bugtracking/int_trac.php:
    $this->xmlrpcClient = new IXR_Client(BUG_TRACK_XMLRPC_HOST.$tracProjectName.'/login/xmlrpc');

    modified
    /../testlink/third_party/xml-rpc/class-IXR.php

    function query() {
    $args = func_get_args();
    $method = array_shift($args);
    $request = new IXR_Request($method, $args);
    $length = $request->getLength();
    $xml = $request->getXml();
    $r = "\r\n";
    $credentials = "";
    if ($this->user != "") {
    $credentials = base64_encode($this->user . ":" . $this->pass);
    }

    $request = "POST {$this->path} HTTP/1.0$r";
    $request .= "Host: {$this->server}$r";
    if ($credentials != "") {$request .= "Authorization: Basic {$credentials}$r";}

    function IXR_Client(
    $server, $path = false, $port = 80, $timeout = false) {
    if (!$path) {
    // Assume we have been given a URL instead$bits = parse_url($server);
    $this->server = $bits['host'];
    $this->port = isset($bits['port']) ? $bits['port'] : 80;
    $this->user = isset($bits['user']) ? $bits['user'] : '';
    $this->pass = isset($bits['pass']) ? $bits['pass'] : '';
  • TestLink - Search Test Cases by Author

    2012-03-07 11:57:20

    Testlink中一个模块是专门用来查询Test Cases,此查询模块中包括了几乎Test Case中的所有查询条件,唯独没有按Test Case的创建者查询的条件.
    仔细研究了其数据库结构及lib/testcase/tcSearch.php文件后,按如下步骤可以完成按Author查询TestCase的功能:
    1. 查看数据库所有表
    • 数据库表中,与test case 的 author 有关的数据存放于tcversions这个表中,此表中存放的是author的id,即author_id
    • 要想知道Author的名称的话,必须交叉访问users表中的login字段才可以得到,这2个表是通过 users.id = tcversions.author_id 关联起来的
    2. 了解了表结构,再来看看lib/testcase/tcSearch.php文件中的内容
    • $tables = tlObjectWithDB::getDBTables(array()) 中加入 'users'这个表
    • 在$sqlPart2=""中加入联合查询users表,JOIN {$tables['users']} US ON US.id = TCV.author_id
    • 在 $sqlFields = ""; 中加入author名称的字段”US.login“ 
    • 在if(args->name != ""){...} 下面和if(args->summary != "")上面加入如下代码以便按用户输入的Author name进行模糊查询

    if($args->login != "")
    {        
      $args->login = $db->prepare_string($args->login);                  
      $filter['by_author'] = " AND US.login like '%{$args->login}%' ";    
    }  

    • 在$iParams = array()中加入如下参数,主要作用是进行参数的名称及类型的定义
    "login" => array(tlInputParameter::STRING_N,0,50),

    3. 上表内容修改完成后,还要到gui\templates\testcases中找到“tcSearchForm.tpl“ 进行页面上显示内容的修改
    • 在 {lang_get var="labels" s='' 中 author 值, 这个是在页面上查询页面上显示出来的名称
    • 找好要显示author字段的位置,并加入如下代码

    <tr>
    <td>{$labels.author}</td>
    <td><input type="text" name="login" size="{#TCNAME_SIZE#}" maxlength="{#TCNAME_MAXLEN#}" /></td>
    </tr> 


    • 注意 name 的值必须与lib/testcase/tcSearch.php - $iParams = array()中定义的值一致,否则查询不会成功; 如 在tcSearch.php中定义的名称为"login",在此处的name也必须是"login"
    4. 如果有需要可以重启apache服务
    5. 重启成功后,到 Search Test Case页面,可以看到Author字段,也可按Author进行搜索,如下图

  • Test Link integration with Fogbugz On Demand

    2012-03-02 16:39:36

    最近在研究Testlink集成Fogbugz。
    Fogbugz提供了2种工作模式,一种是下载Fogbugz到本地进行安装配置,另一种方法是托管服务(Fogbugz On Demand),即向Fogbugz申请项目网址,不需要关心安装配置,只需要关心如何使用。
    本公司使用的正是第2种模式,很不幸的是Testlink只提供了第1种方式的集成方法。
    经过3天的研究,走了不少弯路,终于成功实现了Testlink与Fogbugz On Demand的集成,以下把研究的过程Share出来:
    1. 搞明白Testlink集成BTS(Bug Tracking System)的原理
    (1)Testlink是通过config.inc.php来确定与哪个BTS进行集成的,在些我们在[Bug Tracking System]部分中找到$g_interface_bugs = 'FOGBUGZ'
    (2)Testlink通过lib/bugtracking/文件夹中相应类库(如 int_fogbugz.php)向Bug库发送请求并处理返回结果,发送请求时的参数需要在cfg文件夹中相应的配置文件(如fogbugz.cfg.php)进行设置。
    • 首先要搞清楚的问题是,  Fogbuz是如何处理请求并返回结果的?在网上搜索了一下,Fogbugz提供了Api接口,它可以处理按照一定格式发送的请求并返回Xml. API格式定义请参见:http://fogbugz.stackexchange.com/fogbugz-xml-api
    • 比如,你要想查询Fogbugz中的某个Bug并要求返回的结果中包括某个值,则要求按如下地址发送请求:htt://[Your Fogbugz Website]/?token=xxxxxxx&cmd=search&q=25&cols=sStatus
    • 其中token是登录后返回的值; cmd相当于执行的命令,可以是search也可是edit,new等等;q指要查询的关键字,可以是id号也可是其它;cols指search命令后可以返回的值,这个值可以有sStatus,sTtile等
    • 在网上已经有人将Fogbugz的API进行了封装,直接调用封装好的方法可以更方便的发送请求,参见网址https://github.com/LearningStation/fogbugz-php-api
    • 将其中的api.php下载下来,也可以从我上传的附件中得到,放置到testlink/third_library目录下的某个文件夹中,在这,我新建了一个叫‘fogbugz-api’ 
    2. 修改int_fogbugz.php及fogbugz.cfg.php文件
     确定了这些发送请求的机制、格式及必须字段等,就可以对int.fogbugz.php及fogbugz.cfg.php文件进行修改了,修改后的代码参见附件.
    3. 重启apache服务
    4. 注意事项: 
       fogbugzapi.php需要调用php_curl.dll, 先做如下配置,否则会出现 Fatal error: Call to undefined function curl_init() 
    1. 找到php.ini
        修改extension=php_curl.dll 把前面的分号去掉
    2. Windows下处理方式: 在Php安装目录下找到如下模块并将其复制到windows/system32下,并重启Apache
        php5ts.dll
        libeay32.dll
        ssleay32.dll
    3. Linux下需要安装php_curl扩展,生成curl.so文件



Open Toolbar