TestLink是一个基于Web的PHP开源测试管理系统,虽然用起来跟QC那些商业软件比起来不是那么爽,但是由于是开源、免费,所以越来越多的公司在用TestLink。BugZilla作为老牌的bug管理工具,同样有着很大的用户群。
TestLink有一个BugTracking的接口模块,可以使得TestLink可以与其他BugTracking系统集成。在集成的过程中发现TestLink提示错误:Bug ID does not exist on BTS(中文的话是’bug的ID在BTS中不存在!’),找到TestLink的代码文件bugAdd.php,找到下面这段代码块
if($args->bug_id != "") { $msg = lang_get("error_wrong_BugID_format"); if ($g_bugInterface->checkBugID($args->bug_id)) { $msg = lang_get("error_bug_does_not_exist_on_bts"); // 问题在这里 if ($g_bugInterface->checkBugID_existence($args->bug_id)) { if (write_execution_bug($db,$args->exec_id, $args->bug_id)) { $msg = lang_get("bug_added"); logAuditEvent(TLS("audit_executionbug_added",$args->bug_id),"CREATE",$args->exec_id,"executions"); } } } }
问题出在$g_bugInterface->checkBugID_existence($args->bug_id)这个方法中。在、TestLink的int_bugzilla.php文件中,并没有overload这个checkBugID_existence的方法,所以这个方法就会按照int_bugtracking.php中的默认实现,返回false。TestLink就会出现error_bug_does_not_exist_on_bts这个ERROR
解决这个问题很简单,就是在int_bugzilla.php中自己实现checkBugID_existence方法,简单的实现如下:
function checkBugID_existence($id) { $status_ok = 0; //关键是下面这个Query bug id的语句,大家自己看看数据库是哪个表,根据实际情况自己修改 $query = "SELECT bug_id FROM bugs WHERE bug_id='" . $id ."'"; $result = $this->dbConnection->exec_query($query); if ($result && ($this->dbConnection->num_rows($result) == 1)) { $status_ok = 1; } return $status_ok; }
OK。在int_bugzilla.php文件中添加了 checkBugID_existence() 方法后,就可以从TestLink中直接把BugZilla里面的BUG ID和某个测试关联起来了。