* Refactor testcaseModel::appendData, and modify its unit test.

This commit is contained in:
liumengyi
2023-08-25 14:27:52 +08:00
parent c02ca2fba8
commit 53db67bb31
4 changed files with 85 additions and 61 deletions
+32 -40
View File
@@ -2247,56 +2247,49 @@ class testcaseModel extends model
}
/**
* 追加 bug 和用例执行结果信息
* Append bugs and results.
*
* @param int $cases
* @param array $cases
* @param string $type
* @param array $caseIdlist
* @param array $caseIdList
* @access public
* @return void
*/
public function appendData($cases, $type = 'case', $caseIdlist = array())
public function appendData(array $cases, string $type = 'case', array $caseIdList = array()): array
{
if(empty($caseIdlist)) $caseIdList = array_keys($cases);
if($type == 'case')
{
$caseBugs = $this->dao->select('count(*) as count, `case`')->from(TABLE_BUG)->where('`case`')->in($caseIdList)->andWhere('deleted')->eq(0)->groupBy('`case`')->fetchPairs('case', 'count');
$results = $this->dao->select('count(*) as count, `case`')->from(TABLE_TESTRESULT)->where('`case`')->in($caseIdList)->groupBy('`case`')->fetchPairs('case', 'count');
if(empty($caseIdList)) $caseIdList = array_keys($cases);
$caseFails = $this->dao->select('count(*) as count, `case`')->from(TABLE_TESTRESULT)
->where('caseResult')->eq('fail')
->andwhere('`case`')->in($caseIdList)
->groupBy('`case`')
->fetchPairs('case','count');
/* 查询用例的 bugs 和结果。 */
/* Get bugs and results. */
$queryField = $type == 'case' ? '`case`' : '`result`';
$caseBugs = $this->dao->select('count(*) as count, `case`')->from(TABLE_BUG)->where($queryField)->in($caseIdList)->andWhere('deleted')->eq(0)->groupBy('`case`')->fetchPairs('case', 'count');
$results = $this->dao->select('count(*) as count, `case`')->from(TABLE_TESTRESULT)->where('`case`')->in($caseIdList)->groupBy('`case`')->fetchPairs('case', 'count');
$steps = $this->dao->select('count(distinct t1.id) as count, t1.`case`')->from(TABLE_CASESTEP)->alias('t1')
->leftJoin(TABLE_CASE)->alias('t2')->on('t1.`case`=t2.`id`')
->where('t1.`case`')->in($caseIdList)
->andWhere('t1.type')->ne('group')
->andWhere('t1.version=t2.version')
->groupBy('t1.`case`')
->fetchPairs('case', 'count');
}
else
{
$caseBugs = $this->dao->select('count(*) as count, `case`')->from(TABLE_BUG)->where('`result`')->in($caseIdList)->andWhere('deleted')->eq(0)->groupBy('`case`')->fetchPairs('case', 'count');
$results = $this->dao->select('count(*) as count, `case`')->from(TABLE_TESTRESULT)->where('`run`')->in($caseIdList)->groupBy('`case`')->fetchPairs('case', 'count');
/* 查询用例的失败结果。 */
/* Get result fails of the the testcases. */
if($type != 'case') $queryField = '`run`';
$caseFails = $this->dao->select('count(*) as count, `case`')->from(TABLE_TESTRESULT)
->where('caseResult')->eq('fail')
->andWhere($queryField)->in($caseIdList)
->groupBy('`case`')
->fetchPairs('case','count');
$caseFails = $this->dao->select('count(*) as count, `case`')->from(TABLE_TESTRESULT)
->where('caseResult')->eq('fail')
->andwhere('`run`')->in($caseIdList)
->groupBy('`case`')
->fetchPairs('case','count');
$steps = $this->dao->select('count(distinct t1.id) as count, t1.`case`')->from(TABLE_CASESTEP)->alias('t1')
->leftJoin(TABLE_TESTRUN)->alias('t2')->on('t1.`case`=t2.`case`')
->where('t2.`id`')->in($caseIdList)
->andWhere('t1.type')->ne('group')
->andWhere('t1.version=t2.version')
->groupBy('t1.`case`')
->fetchPairs('case', 'count');
}
/* 查询用例的步骤。 */
/* Get the the testcase steps. */
$queryTable = $type == 'case' ? TABLE_CASE : TABLE_TESTRUN;
$queryOn = $type == 'case' ? 't1.`case`=t2.`id`' : 't1.`case`=t2.`case`';
$queryField = $type == 'case' ? 't1.`case`' : 't2.`id`';
$steps = $this->dao->select('count(distinct t1.id) as count, t1.`case`')->from(TABLE_CASESTEP)->alias('t1')
->leftJoin($queryTable)->alias('t2')->on($queryOn)
->where($queryField)->in($caseIdList)
->andWhere('t1.type')->ne('group')
->andWhere('t1.version=t2.version')
->groupBy('t1.`case`')
->fetchPairs('case', 'count');
/* 设置测试用例的 bugs 执行结果和步骤。 */
/* Set related bugs, results and steps of the testcases. */
foreach($cases as $key => $case)
{
$caseID = $type == 'case' ? $case->id : $case->case;
@@ -2305,7 +2298,6 @@ class testcaseModel extends model
$case->caseFails = isset($caseFails[$caseID]) ? $caseFails[$caseID] : 0;
$case->stepNumber = isset($steps[$caseID]) ? $steps[$caseID] : 0;
}
return $cases;
}
+32 -12
View File
@@ -2,6 +2,13 @@
<?php
include dirname(__FILE__, 5) . '/test/lib/init.php';
include dirname(__FILE__, 2) . '/testcase.class.php';
zdTable('case')->gen('100');
zdTable('casestep')->gen('100');
zdTable('bug')->config('casebug')->gen('50');
zdTable('testresult')->gen('50');
zdTable('user')->gen('1');
su('admin');
/**
@@ -10,11 +17,6 @@ title=测试 testcaseModel->appendData();
cid=1
pid=1
获取case 1 2 可以加入的数据 >> 0,1,0,1;2,1,1,1
获取case 1 2 可以加入的数据 >> 0,1,0,1;0,1,1,1
获取case 1 2 可以加入的数据 >> 0,1,0,1;2,1,1,1
获取case 1 2 可以加入的数据 >> 0,1,0,1;0,1,1,1
获取case 1 2 可以加入的数据 >> 0,1,0,1;2,1,1,1
*/
$case1 = new stdclass();
@@ -58,13 +60,31 @@ $case10->id = 10;
$case10->case = 10;
$cases = array(array(1 => $case1, 2 => $case2), array(3 => $case3, 4 => $case4), array(5 => $case5, 6 => $case6), array(7 => $case7, 8 => $case8), array(9 => $case9, 10 => $case10));
$type = 'run';
$type = array('case', 'run');
$caseIdList = array(1, 3, 5, 7);
$testcase = new testcaseTest();
r($testcase->appendDataTest($cases[0])) && p('1:bugs,results,caseFails,stepNumber;2:bugs,results,caseFails,stepNumber') && e('0,1,0,1;2,1,1,1'); // 获取case 1 2 可以加入的数据
r($testcase->appendDataTest($cases[1])) && p('3:bugs,results,caseFails,stepNumber;4:bugs,results,caseFails,stepNumber') && e('0,1,0,1;0,1,1,1'); // 获取case 1 2 可以加入的数据
r($testcase->appendDataTest($cases[2])) && p('5:bugs,results,caseFails,stepNumber;6:bugs,results,caseFails,stepNumber') && e('0,1,0,1;2,1,1,1'); // 获取case 1 2 可以加入的数据
r($testcase->appendDataTest($cases[3])) && p('7:bugs,results,caseFails,stepNumber;8:bugs,results,caseFails,stepNumber') && e('0,1,0,1;0,1,1,1'); // 获取case 1 2 可以加入的数据
r($testcase->appendDataTest($cases[4])) && p('9:bugs,results,caseFails,stepNumber;10:bugs,results,caseFails,stepNumber') && e('0,1,0,1;2,1,1,1'); // 获取case 1 2 可以加入的数据
r($testcase->appendDataTest($cases[0], $type[0])) && p('1:bugs,results,caseFails,stepNumber;2:bugs,results,caseFails,stepNumber') && e('6,1,0,1;6,1,1,1'); // 获取case 1 2 可以加入的数据
r($testcase->appendDataTest($cases[1], $type[0])) && p('3:bugs,results,caseFails,stepNumber;4:bugs,results,caseFails,stepNumber') && e('6,1,0,1;0,1,1,1'); // 获取case 3 4 可以加入的数据
r($testcase->appendDataTest($cases[2], $type[0])) && p('5:bugs,results,caseFails,stepNumber;6:bugs,results,caseFails,stepNumber') && e('0,1,0,1;6,1,1,1'); // 获取case 5 6 可以加入的数据
r($testcase->appendDataTest($cases[3], $type[0])) && p('7:bugs,results,caseFails,stepNumber;8:bugs,results,caseFails,stepNumber') && e('6,1,0,1;5,1,1,1'); // 获取case 7 8 可以加入的数据
r($testcase->appendDataTest($cases[4], $type[0])) && p('9:bugs,results,caseFails,stepNumber;10:bugs,results,caseFails,stepNumber') && e('5,1,0,1;0,1,1,1'); // 获取case 9 10 可以加入的数据
r($testcase->appendDataTest($cases[0], $type[1])) && p('1:bugs,results,caseFails,stepNumber;2:bugs,results,caseFails,stepNumber') && e('0,1,0,1;0,1,1,1'); // 获取run 1 2 可以加入的数据
r($testcase->appendDataTest($cases[1], $type[1])) && p('3:bugs,results,caseFails,stepNumber;4:bugs,results,caseFails,stepNumber') && e('2,1,0,1;0,1,1,1'); // 获取run 3 4 可以加入的数据
r($testcase->appendDataTest($cases[2], $type[1])) && p('5:bugs,results,caseFails,stepNumber;6:bugs,results,caseFails,stepNumber') && e('0,1,0,1;1,1,1,1'); // 获取run 5 6 可以加入的数据
r($testcase->appendDataTest($cases[3], $type[1])) && p('7:bugs,results,caseFails,stepNumber;8:bugs,results,caseFails,stepNumber') && e('2,1,0,1;1,1,1,1'); // 获取run 7 8 可以加入的数据
r($testcase->appendDataTest($cases[4], $type[1])) && p('9:bugs,results,caseFails,stepNumber;10:bugs,results,caseFails,stepNumber') && e('0,1,0,1;0,1,1,1'); // 获取run 9 10 可以加入的数据
r($testcase->appendDataTest($cases[0], $type[0], $caseIdList)) && p('1:bugs,results,caseFails,stepNumber;2:bugs,results,caseFails,stepNumber') && e('6,1,0,1;0,0,0,0'); // 获取case 1 2 case id 1 3 5 7 可以加入的数据
r($testcase->appendDataTest($cases[1], $type[0], $caseIdList)) && p('3:bugs,results,caseFails,stepNumber;4:bugs,results,caseFails,stepNumber') && e('6,1,0,1;0,0,0,0'); // 获取case 3 4 case id 1 3 5 7 可以加入的数据
r($testcase->appendDataTest($cases[2], $type[0], $caseIdList)) && p('5:bugs,results,caseFails,stepNumber;6:bugs,results,caseFails,stepNumber') && e('0,1,0,1;0,0,0,0'); // 获取case 5 6 case id 1 3 5 7 可以加入的数据
r($testcase->appendDataTest($cases[3], $type[0], $caseIdList)) && p('7:bugs,results,caseFails,stepNumber;8:bugs,results,caseFails,stepNumber') && e('6,1,0,1;0,0,0,0'); // 获取case 7 8 case id 1 3 5 7 可以加入的数据
r($testcase->appendDataTest($cases[4], $type[0], $caseIdList)) && p('9:bugs,results,caseFails,stepNumber;10:bugs,results,caseFails,stepNumber') && e('0,0,0,0;0,0,0,0'); // 获取case 9 10 case id 1 3 5 7 可以加入的数据
r($testcase->appendDataTest($cases[0], $type[1], $caseIdList)) && p('1:bugs,results,caseFails,stepNumber;2:bugs,results,caseFails,stepNumber') && e('3,1,0,1;3,0,0,0'); // 获取run 1 2 run id 1 3 5 7 可以加入的数据
r($testcase->appendDataTest($cases[1], $type[1], $caseIdList)) && p('3:bugs,results,caseFails,stepNumber;4:bugs,results,caseFails,stepNumber') && e('3,1,0,1;0,0,0,0'); // 获取run 3 4 run id 1 3 5 7 可以加入的数据
r($testcase->appendDataTest($cases[2], $type[1], $caseIdList)) && p('5:bugs,results,caseFails,stepNumber;6:bugs,results,caseFails,stepNumber') && e('0,1,0,1;3,0,0,0'); // 获取run 5 6 run id 1 3 5 7 可以加入的数据
r($testcase->appendDataTest($cases[3], $type[1], $caseIdList)) && p('7:bugs,results,caseFails,stepNumber;8:bugs,results,caseFails,stepNumber') && e('3,1,0,1;3,0,0,0'); // 获取run 7 8 run id 1 3 5 7 可以加入的数据
r($testcase->appendDataTest($cases[4], $type[1], $caseIdList)) && p('9:bugs,results,caseFails,stepNumber;10:bugs,results,caseFails,stepNumber') && e('3,0,0,0;0,0,0,0'); // 获取run 9 10 run id 1 3 5 7 可以加入的数据
+12 -9
View File
@@ -90,14 +90,15 @@ class testcaseTest
}
/**
* Test get cases of a module.
* 测试获取模块的用例。
* Test get cases of modules.
*
* @param int $productID
* @param int $branch
* @param int $moduleIdList
* @param string $browseType
* @param string $auto
* @param string $caseType
* @param int $productID
* @param int|string $branch
* @param int|array $moduleIdList
* @param string $browseType
* @param string $auto no|unit
* @param string $caseType
* @access public
* @return string
*/
@@ -677,16 +678,18 @@ class testcaseTest
}
/**
* 测试追加 bug 和执行结果信息。
* Test append bugs and results.
*
* @param array $cases
* @param string $type
* @param array $caseIdList
* @access public
* @return array
*/
public function appendDataTest($cases, $type = 'case')
public function appendDataTest(array $cases, string $type = 'case', array $caseIdList = array()): array
{
$objects = $this->objectModel->appendData($cases, $type = 'case');
$objects = $this->objectModel->appendData($cases, $type, $caseIdList);
if(dao::isError()) return dao::getError();
+9
View File
@@ -0,0 +1,9 @@
title: table zt_bug
desc: "bug"
author: Mengyi Liu
version: "1.0"
fields:
- field: case
range: 1-3,6-9
- field: result
range: 3-5,7-9