From 53db67bb3177009d86c6e23f481ae2f249bbad1c Mon Sep 17 00:00:00 2001 From: liumengyi Date: Fri, 25 Aug 2023 14:27:52 +0800 Subject: [PATCH] * Refactor testcaseModel::appendData, and modify its unit test. --- module/testcase/model.php | 72 ++++++++++------------- module/testcase/test/model/appenddata.php | 44 ++++++++++---- module/testcase/test/testcase.class.php | 21 ++++--- module/testcase/test/yaml/casebug.yaml | 9 +++ 4 files changed, 85 insertions(+), 61 deletions(-) create mode 100644 module/testcase/test/yaml/casebug.yaml diff --git a/module/testcase/model.php b/module/testcase/model.php index 7494a298c9..9fa36b59f2 100644 --- a/module/testcase/model.php +++ b/module/testcase/model.php @@ -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; } diff --git a/module/testcase/test/model/appenddata.php b/module/testcase/test/model/appenddata.php index 1b416f02a1..7fe13e601f 100755 --- a/module/testcase/test/model/appenddata.php +++ b/module/testcase/test/model/appenddata.php @@ -2,6 +2,13 @@ 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 可以加入的数据 \ No newline at end of file +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 可以加入的数据 diff --git a/module/testcase/test/testcase.class.php b/module/testcase/test/testcase.class.php index d8b7418953..5d866eab3b 100644 --- a/module/testcase/test/testcase.class.php +++ b/module/testcase/test/testcase.class.php @@ -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(); diff --git a/module/testcase/test/yaml/casebug.yaml b/module/testcase/test/yaml/casebug.yaml new file mode 100644 index 0000000000..e2d4aa4525 --- /dev/null +++ b/module/testcase/test/yaml/casebug.yaml @@ -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