好长时间没发帖子了,先说一下事情的起因吧。我们公司测试使用 testlink 管理测试用例,之前有同学跟我反馈过,导入用例操作步骤、期望结果不换行,看起来特别费劲。一直忙把这事给忘了,这几天我检查工具使用情况时,有同学反应他们现在还是用 Excel 执行用例,完成后每天更新一次 testlink 中的用例状态。(听完好有罪恶感,感觉给大家添了不少麻烦)昨天花了些时间检查了一下 testlink 准备修改。
修改不换行这个问题有两种方式,第一种直接在数据导入的时候给每一行加上<p></p>,第二种在页面展示的时候加上<p></p> 最终还是第二种方式更科学,不会破坏原始数据。
开始分析:
既然是展示,那我们先打开一个测试用例,然后查看调用接口,返现只有 testlink/lib/testcases/archiveData.php?version_id=undefined&edit=testcase&id=1691&form_token=1898459100 被调用,直接查看 archiveData.php 文件,展示部分代码。
以下代码都是节选,避免篇幅太长


list($args,$gui,$grants) = initializeEnv($db); //  **找到我们传入的参数**
switch($args->feature) // **参数处理过程**
{
  case 'testproject':  // **测试项目**
  case 'testsuite':     // **测试用例集** 
  case 'testcase':   // **测试用例,我们修改的就是测试用例展示方式,接口请求时带了参数testcase(可以看上面请求),就是它了,读代码**

查找 processTestCase 方法,也在 archiveData.php 文件中

function processTestCase(&$dbHandler,$tplEngine,$args,&$gui,$grants,$cfg)
{

    try
    {
      $item_mgr->show($tplEngine,$gui,$identity,$grants); // **这个方法名字有些赤裸裸,我们就先找它的方法体吧** 
    }
    catch (Exception $e)
    {
      echo $e->getMessage();
    }
    exit();

}

查找 show 方法体,在 testcase.class.php 中找到了

foreach($idSet as $key => $tc_id)
     {
       // using $version_id has sense only when we are working on ONE SPECIFIC Test Case
       // if we are working on a set of test cases $version_id will be ALL VERSIONS
       if( !$tc_array = $this->get_by_id($tc_id,$version_id,null,$gopt) )
       {
         continue;
       }


       $tc_array[0]['tc_external_id'] = $gui->tcasePrefix . $tc_array[0]['tc_external_id'];
       $tc_array[0]['ghost'] = '[ghost]"TestCase":"' . $tc_array[0]['tc_external_id'] . '","Version":"' .
                               $tc_array[0]['version'] . '"[/ghost]';

       // status quo of execution and links of tc versions
       $gui->status_quo[] = $this->get_versions_status_quo($tc_id);

       if($cfg->show_tplan_usage)
       {
         $gui->linked_versions[] = $this->get_linked_versions($tc_id);
       }


       $gui->keywords_map[] = isset($allTCKeywords[$tc_id]) ? $allTCKeywords[$tc_id] : null;

       $tc_current = $tc_array[0];

       // **加入如下代买处理换行**
       foreach( $tc_current['steps'] as $k=>&$v ){
           $v['expected_results'] = self::nl2p( $v['expected_results'] );
           $v['actions'] = self::nl2p( $v['actions'] );
       }

另外还需要在 testcase.class.php 文件中加一个方法 nl2p,此方法按照既定格式将文本分行并加上<p></p>,方法体如下:

public static function nl2p($str)  
{
    $strTemp = '';
  $string_arr = explode(" ", $str );
    foreach($string_arr as $val){
      $strTemp .= str_replace('<p></p>', '', '<p>' . preg_replace('#\n|\r#', '</p>$0<p>', $val) . '</p>'); //MS
    }
    return $strTemp;
}

此方法是按照中文空格拆长字符串,一般也符合大家写测试用例习惯,当然如果想按照其他字符拆长字符串修改

$string_arr = explode(" ", $str ); // **修改 “ ”里面的内容即可**

以上就是修改操作步骤和期望结果换行,看看效果图

希望能帮助到大家。感谢李鹏支持!


↙↙↙阅读原文可查看相关链接,并与作者交流