diff --git a/module/testtask/model.php b/module/testtask/model.php index 39a80d689e..3f8892e3fa 100755 --- a/module/testtask/model.php +++ b/module/testtask/model.php @@ -1471,6 +1471,7 @@ class testtaskModel extends model } /** + * 通过执行 ID 或用例 ID 获取用例的执行结果。 * Get results by runID or caseID * * @param int $runID @@ -1480,41 +1481,27 @@ class testtaskModel extends model * @access public * @return void */ - public function getResults($runID, $caseID = 0, $status = 'all', $type = 'all') + public function getResults(int $runID, int $caseID = 0, string $status = 'all', string $type = 'all'): array { - if($runID > 0) - { - $results = $this->dao->select('*')->from(TABLE_TESTRESULT) - ->where('run')->eq($runID) - ->beginIF($status == 'done')->andWhere('caseResult')->ne('')->fi() - ->beginIF($type != 'all')->andWhere('caseResult')->eq($type)->fi() - ->orderBy('id desc') - ->fetchAll('id'); - } - else - { - $results = $this->dao->select('*')->from(TABLE_TESTRESULT) - ->where('`case`')->eq($caseID) - ->beginIF($status == 'done')->andWhere('caseResult')->ne('')->fi() - ->beginIF($type != 'all')->andWhere('caseResult')->eq($type)->fi() - ->orderBy('id desc') - ->fetchAll('id'); - } - + $results = $this->dao->select('*')->from(TABLE_TESTRESULT) + ->beginIF($runID > 0)->where('run')->eq($runID)->fi() + ->beginIF($runID <= 0)->where('`case`')->eq($caseID)->fi() + ->beginIF($status == 'done')->andWhere('caseResult')->ne('')->fi() + ->beginIF($type != 'all')->andWhere('caseResult')->eq($type)->fi() + ->orderBy('id desc') + ->fetchAll('id'); if(!$results) return array(); - $relatedVersions = array(); - $runIdList = array(); - $nodeIdList = array(); + list($resultFiles, $stepFiles) = $this->getResultsFiles(array_keys($results)); + + $runIdList = $nodeIdList = $relatedVersions = array(); foreach($results as $result) { - $runIdList[$result->run] = $result->run; - $relatedVersions[] = $result->version; - $runCaseID = $result->case; - if(!empty($result->node)) $nodeIdList[] = $result->node; + $runIdList[$result->run] = $result->run; + $nodeIdList[$result->node] = $result->node; + $relatedVersions[$result->version] = $result->version; + $runCaseID = $result->case; } - $relatedVersions = array_unique($relatedVersions); - $relatedSteps = $this->dao->select('*')->from(TABLE_CASESTEP) ->where('`case`')->eq($runCaseID) ->andWhere('version')->in($relatedVersions) @@ -1524,19 +1511,105 @@ class testtaskModel extends model ->leftJoin(TABLE_TESTTASK)->alias('t2')->on('t1.task=t2.id') ->where('t1.id')->in($runIdList) ->fetchPairs(); - $nodes = $this->dao->select('id,name')->from(TABLE_ZAHOST) - ->where('id')->in(array_unique($nodeIdList)) - ->fetchPairs(); + $nodes = $this->dao->select('id,name')->from(TABLE_ZAHOST)->where('id')->in($nodeIdList)->fetchPairs(); - $this->loadModel('file'); - $files = $this->dao->select('*')->from(TABLE_FILE) + foreach($results as $resultID => $result) + { + if($result->stepResults) $result->stepResults = ''; + $result->stepResults = unserialize($result->stepResults); + $result->build = $result->run && !empty($runs[$result->run]->build) ? $runs[$result->run]->build : 0; + $result->task = $result->run && !empty($runs[$result->run]->task) ? $runs[$result->run]->task : 0; + $result->nodeName = zget($nodes, $result->node, ''); + $result->files = zget($resultFiles, $resultID, array()); //Get files of case result. + if(isset($relatedSteps[$result->version])) $result->stepResults = $this->processResultSteps($result, $relatedSteps[$result->version]); + if(!empty($result->ZTFResult)) $result->ZTFResult = $this->formatZtfLog($result->ZTFResult, $result->stepResults); + + /* Get files of step result. */ + if(!empty($result->stepResults)) + { + foreach(array_keys($result->stepResults) as $stepID) $result->stepResults[$stepID]['files'] = isset($stepFiles[$resultID][$stepID]) ? $stepFiles[$resultID][$stepID] : array(); + } + } + return $results; + } + + /** + * 计算用例执行结果的步骤。 + * Process steps of result. + * + * @param object $result + * @param array $relatedStep + * @access public + * @return array + */ + public function processResultSteps(object $result, array $relatedStep): array + { + $this->loadModel('testcase'); + + $preGrade = 1; + $parentSteps = array(); + $key = array(0, 0, 0); + foreach($relatedStep as $stepID => $step) + { + $parentSteps[$step->id] = $step->parent; + $grade = 1; + if(isset($parentSteps[$step->parent])) + { + $grade = isset($parentSteps[$parentSteps[$step->parent]]) ? 3 : 2; + } + + if($grade > $preGrade) + { + $key[$grade - 1] = 1; + } + else + { + if($grade < $preGrade) + { + if($grade < 2) $key[1] = 0; + if($grade < 3) $key[2] = 0; + } + $key[$grade - 1] ++; + } + $name = implode('.', $key); + $name = str_replace('.0', '', $name); + + $relatedStep[$stepID] = (array)$step; + $relatedStep[$stepID]['name'] = $name; + $relatedStep[$stepID]['grade'] = $grade; + $relatedStep[$stepID]['desc'] = html_entity_decode($relatedStep[$stepID]['desc']); + $relatedStep[$stepID]['expect'] = html_entity_decode($relatedStep[$stepID]['expect']); + if(isset($result->stepResults[$stepID])) + { + $relatedStep[$stepID]['result'] = $result->stepResults[$stepID]['result']; + $relatedStep[$stepID]['real'] = $result->stepResults[$stepID]['real']; + } + + $preGrade = $grade; + } + return $relatedStep; + } + + /** + * 获取结果的文件。 + * Get files of the results. + * + * @param array $resultIdList + * @access public + * @return array + */ + public function getResultsFiles(array $resultIdList): array + { + $resultFiles = array(); + $stepFiles = array(); + $files = $this->dao->select('*')->from(TABLE_FILE) ->where("(objectType = 'caseResult' or objectType = 'stepResult')") - ->andWhere('objectID')->in(array_keys($results)) + ->andWhere('objectID')->in($resultIdList) ->andWhere('extra')->ne('editor') ->orderBy('id') ->fetchAll(); - $resultFiles = array(); - $stepFiles = array(); + + $this->loadModel('file'); foreach($files as $file) { $this->file->setFileWebAndRealPaths($file); @@ -1544,75 +1617,13 @@ class testtaskModel extends model { $resultFiles[$file->objectID][$file->id] = $file; } - elseif($file->objectType == 'stepResult' and $file->extra !== '') + elseif($file->objectType == 'stepResult' && $file->extra !== '') { $stepFiles[$file->objectID][(int)$file->extra][$file->id] = $file; } } - foreach($results as $resultID => $result) - { - $result->stepResults = unserialize($result->stepResults); - $result->build = $result->run && !empty($runs[$result->run]->build) ? $runs[$result->run]->build : 0; - $result->task = $result->run && !empty($runs[$result->run]->task) ? $runs[$result->run]->task : 0; - $result->nodeName = $result->node ? zget($nodes, $result->node, '') : ''; - if(!empty($result->ZTFResult)) - { - $result->ZTFResult = $this->formatZtfLog($result->ZTFResult, $result->stepResults); - } - - $result->files = zget($resultFiles, $resultID, array()); //Get files of case result. - if(isset($relatedSteps[$result->version])) - { - $preGrade = 1; - $parentSteps = array(); - $key = array(0, 0, 0); - $relatedStep = $relatedSteps[$result->version]; - foreach($relatedStep as $stepID => $step) - { - $parentSteps[$step->id] = $step->parent; - $grade = 1; - if(isset($parentSteps[$step->parent])) - { - $grade = isset($parentSteps[$parentSteps[$step->parent]]) ? 3 : 2; - } - - if($grade > $preGrade) - { - $key[$grade - 1] = 1; - } - else - { - if($grade < $preGrade) - { - if($grade < 2) $key[1] = 0; - if($grade < 3) $key[2] = 0; - } - $key[$grade - 1] ++; - } - $name = implode('.', $key); - $name = str_replace('.0', '', $name); - - $relatedStep[$stepID] = (array)$step; - $relatedStep[$stepID]['name'] = $name; - $relatedStep[$stepID]['grade'] = $grade; - $relatedStep[$stepID]['desc'] = html_entity_decode($relatedStep[$stepID]['desc']); - $relatedStep[$stepID]['expect'] = html_entity_decode($relatedStep[$stepID]['expect']); - if(isset($result->stepResults[$stepID])) - { - $relatedStep[$stepID]['result'] = $result->stepResults[$stepID]['result']; - $relatedStep[$stepID]['real'] = $result->stepResults[$stepID]['real']; - } - - $preGrade = $grade; - } - $result->stepResults = $relatedStep; - } - - /* Get files of step result. */ - if(!empty($result->stepResults)) foreach($result->stepResults as $stepID => $stepResult) $result->stepResults[$stepID]['files'] = isset($stepFiles[$resultID][$stepID]) ? $stepFiles[$resultID][$stepID] : array(); - } - return $results; + return array($resultFiles, $stepFiles); } /** diff --git a/module/testtask/test/model/getresults.php b/module/testtask/test/model/getresults.php index ba06b54f64..c7e9bc9988 100755 --- a/module/testtask/test/model/getresults.php +++ b/module/testtask/test/model/getresults.php @@ -14,6 +14,54 @@ pid=1 */ +$runIdList = array(0, 1, 2, 3, 4 ,5); +$caseIdList = array(0, 1, 2, 3, 4 ,5); +$statusList = array('all', 'done'); +$typeList = array('all', 'pass', 'fail'); + $testtask = new testtaskTest(); -r($testtask->getResultsTest()) && p() && e(); \ No newline at end of file +r($testtask->getResultsTest($runIdList[0], $caseIdList[0])) && p() && e('0'); // 获取执行 0 用例 0 执行结果。 + +r($testtask->getResultsTest($runIdList[0], $caseIdList[1])) && p('1:id,case,run,caseResult,stepResults,ZTFResult,node') && e('1,1,1,pass,1,~~,0'); // 获取执行 0 用例 1 执行结果。 +r($testtask->getResultsTest($runIdList[0], $caseIdList[2])) && p('2:id,case,run,caseResult,stepResults,ZTFResult,node') && e('2,2,2,fail,2,~~,0'); // 获取执行 0 用例 2 执行结果。 +r($testtask->getResultsTest($runIdList[0], $caseIdList[3])) && p('3:id,case,run,caseResult,stepResults,ZTFResult,node') && e('3,3,3,pass,3,~~,0'); // 获取执行 0 用例 3 执行结果。 +r($testtask->getResultsTest($runIdList[0], $caseIdList[4])) && p('4:id,case,run,caseResult,stepResults,ZTFResult,node') && e('4,4,4,fail,4,~~,0'); // 获取执行 0 用例 4 执行结果。 +r($testtask->getResultsTest($runIdList[0], $caseIdList[5])) && p('5:id,case,run,caseResult,stepResults,ZTFResult,node') && e('5,5,5,pass,5,~~,0'); // 获取执行 0 用例 5 执行结果。 + +r($testtask->getResultsTest($runIdList[0], $caseIdList[1], $statusList[1], $typeList[0])) && p('1:id,case,run,caseResult,stepResults,ZTFResult,node') && e('1,1,1,pass,1,~~,0'); // 获取执行 0 用例 1 状态 done 结果 all 执行结果。 +r($testtask->getResultsTest($runIdList[0], $caseIdList[1], $statusList[1], $typeList[1])) && p('1:id,case,run,caseResult,stepResults,ZTFResult,node') && e('1,1,1,pass,1,~~,0'); // 获取执行 0 用例 1 状态 done 结果 pass 执行结果。 +r($testtask->getResultsTest($runIdList[0], $caseIdList[1], $statusList[1], $typeList[2])) && p() && e('0'); // 获取执行 0 用例 1 状态 done 结果 fail 执行结果。 +r($testtask->getResultsTest($runIdList[0], $caseIdList[2], $statusList[1], $typeList[0])) && p('2:id,case,run,caseResult,stepResults,ZTFResult,node') && e('2,2,2,fail,2,~~,0'); // 获取执行 0 用例 2 状态 done 结果 all 执行结果。 +r($testtask->getResultsTest($runIdList[0], $caseIdList[2], $statusList[1], $typeList[1])) && p() && e('0'); // 获取执行 0 用例 2 状态 done 结果 pass 执行结果。 +r($testtask->getResultsTest($runIdList[0], $caseIdList[2], $statusList[1], $typeList[2])) && p('2:id,case,run,caseResult,stepResults,ZTFResult,node') && e('2,2,2,fail,2,~~,0'); // 获取执行 0 用例 2 状态 done 结果 fail 执行结果。 + +r($testtask->getResultsTest($runIdList[1], $caseIdList[1])) && p('1:id,case,run,caseResult,stepResults,ZTFResult,node') && e('1,1,1,pass,1,~~,0'); // 获取执行 1 用例 1 执行结果。 +r($testtask->getResultsTest($runIdList[1], $caseIdList[2])) && p('1:id,case,run,caseResult,stepResults,ZTFResult,node') && e('1,1,1,pass,1,~~,0'); // 获取执行 1 用例 2 执行结果。 +r($testtask->getResultsTest($runIdList[1], $caseIdList[3])) && p('1:id,case,run,caseResult,stepResults,ZTFResult,node') && e('1,1,1,pass,1,~~,0'); // 获取执行 1 用例 3 执行结果。 +r($testtask->getResultsTest($runIdList[1], $caseIdList[4])) && p('1:id,case,run,caseResult,stepResults,ZTFResult,node') && e('1,1,1,pass,1,~~,0'); // 获取执行 1 用例 4 执行结果。 +r($testtask->getResultsTest($runIdList[1], $caseIdList[5])) && p('1:id,case,run,caseResult,stepResults,ZTFResult,node') && e('1,1,1,pass,1,~~,0'); // 获取执行 1 用例 5 执行结果。 + +r($testtask->getResultsTest($runIdList[2], $caseIdList[1])) && p('2:id,case,run,caseResult,stepResults,ZTFResult,node') && e('2,2,2,fail,2,~~,0'); // 获取执行 2 用例 1 执行结果。 +r($testtask->getResultsTest($runIdList[2], $caseIdList[2])) && p('2:id,case,run,caseResult,stepResults,ZTFResult,node') && e('2,2,2,fail,2,~~,0'); // 获取执行 2 用例 2 执行结果。 +r($testtask->getResultsTest($runIdList[2], $caseIdList[3])) && p('2:id,case,run,caseResult,stepResults,ZTFResult,node') && e('2,2,2,fail,2,~~,0'); // 获取执行 2 用例 3 执行结果。 +r($testtask->getResultsTest($runIdList[2], $caseIdList[4])) && p('2:id,case,run,caseResult,stepResults,ZTFResult,node') && e('2,2,2,fail,2,~~,0'); // 获取执行 2 用例 4 执行结果。 +r($testtask->getResultsTest($runIdList[2], $caseIdList[5])) && p('2:id,case,run,caseResult,stepResults,ZTFResult,node') && e('2,2,2,fail,2,~~,0'); // 获取执行 2 用例 5 执行结果。 + +r($testtask->getResultsTest($runIdList[3], $caseIdList[1])) && p('3:id,case,run,caseResult,stepResults,ZTFResult,node') && e('3,3,3,pass,3,~~,0'); // 获取执行 3 用例 1 执行结果。 +r($testtask->getResultsTest($runIdList[3], $caseIdList[2])) && p('3:id,case,run,caseResult,stepResults,ZTFResult,node') && e('3,3,3,pass,3,~~,0'); // 获取执行 3 用例 2 执行结果。 +r($testtask->getResultsTest($runIdList[3], $caseIdList[3])) && p('3:id,case,run,caseResult,stepResults,ZTFResult,node') && e('3,3,3,pass,3,~~,0'); // 获取执行 3 用例 3 执行结果。 +r($testtask->getResultsTest($runIdList[3], $caseIdList[4])) && p('3:id,case,run,caseResult,stepResults,ZTFResult,node') && e('3,3,3,pass,3,~~,0'); // 获取执行 3 用例 4 执行结果。 +r($testtask->getResultsTest($runIdList[3], $caseIdList[5])) && p('3:id,case,run,caseResult,stepResults,ZTFResult,node') && e('3,3,3,pass,3,~~,0'); // 获取执行 3 用例 5 执行结果。 + +r($testtask->getResultsTest($runIdList[4], $caseIdList[1])) && p('4:id,case,run,caseResult,stepResults,ZTFResult,node') && e('4,4,4,fail,4,~~,0'); // 获取执行 4 用例 1 执行结果。 +r($testtask->getResultsTest($runIdList[4], $caseIdList[2])) && p('4:id,case,run,caseResult,stepResults,ZTFResult,node') && e('4,4,4,fail,4,~~,0'); // 获取执行 4 用例 2 执行结果。 +r($testtask->getResultsTest($runIdList[4], $caseIdList[3])) && p('4:id,case,run,caseResult,stepResults,ZTFResult,node') && e('4,4,4,fail,4,~~,0'); // 获取执行 4 用例 3 执行结果。 +r($testtask->getResultsTest($runIdList[4], $caseIdList[4])) && p('4:id,case,run,caseResult,stepResults,ZTFResult,node') && e('4,4,4,fail,4,~~,0'); // 获取执行 4 用例 4 执行结果。 +r($testtask->getResultsTest($runIdList[4], $caseIdList[5])) && p('4:id,case,run,caseResult,stepResults,ZTFResult,node') && e('4,4,4,fail,4,~~,0'); // 获取执行 4 用例 5 执行结果。 + +r($testtask->getResultsTest($runIdList[5], $caseIdList[1])) && p('5:id,case,run,caseResult,stepResults,ZTFResult,node') && e('5,5,5,pass,5,~~,0'); // 获取执行 5 用例 1 执行结果。 +r($testtask->getResultsTest($runIdList[5], $caseIdList[2])) && p('5:id,case,run,caseResult,stepResults,ZTFResult,node') && e('5,5,5,pass,5,~~,0'); // 获取执行 5 用例 2 执行结果。 +r($testtask->getResultsTest($runIdList[5], $caseIdList[3])) && p('5:id,case,run,caseResult,stepResults,ZTFResult,node') && e('5,5,5,pass,5,~~,0'); // 获取执行 5 用例 3 执行结果。 +r($testtask->getResultsTest($runIdList[5], $caseIdList[4])) && p('5:id,case,run,caseResult,stepResults,ZTFResult,node') && e('5,5,5,pass,5,~~,0'); // 获取执行 5 用例 4 执行结果。 +r($testtask->getResultsTest($runIdList[5], $caseIdList[5])) && p('5:id,case,run,caseResult,stepResults,ZTFResult,node') && e('5,5,5,pass,5,~~,0'); // 获取执行 5 用例 5 执行结果。 diff --git a/module/testtask/test/model/getresultsfile.php b/module/testtask/test/model/getresultsfile.php new file mode 100644 index 0000000000..203ebf80a0 --- /dev/null +++ b/module/testtask/test/model/getresultsfile.php @@ -0,0 +1,40 @@ +#!/usr/bin/env php +gen('1'); +zdTable('file')->config('resultfile')->gen('20'); + +su('admin'); + +/** + +title=测试 testtaskModel->getResultsFiles(); +cid=1 +pid=1 + + + +*/ + +$resultIdList = array(); +$resultIdList[] = array (1, 2, 3); +$resultIdList[] = array (4, 5, 6); +$resultIdList[] = array (7, 8, 9); +$resultIdList[] = array (10, 11, 12); +$resultIdList[] = array (13, 14, 15); +$resultIdList[] = array (16, 17, 18); +$resultIdList[] = array (19, 20); +$resultIdList[] = array (21, 22); + +$testtask = new testtaskTest(); + +r($testtask->getResultsFilesTest($resultIdList[0])) && p('result,step') && e('1: 1 3: 3,2: 2'); // 测试获取结果 1 2 3 的文件 +r($testtask->getResultsFilesTest($resultIdList[1])) && p('result,step') && e('5: 5,4: 4 6: 6'); // 测试获取结果 4 5 6 的文件 +r($testtask->getResultsFilesTest($resultIdList[2])) && p('result,step') && e('9: 9,~~'); // 测试获取结果 7 8 9 的文件 +r($testtask->getResultsFilesTest($resultIdList[3])) && p('result,step') && e('11: 11,10: 10 12: 12'); // 测试获取结果 10 11 12 的文件 +r($testtask->getResultsFilesTest($resultIdList[4])) && p('result,step') && e('13: 13 15: 15,~~'); // 测试获取结果 13 14 15 的文件 +r($testtask->getResultsFilesTest($resultIdList[5])) && p('result,step') && e('17: 17,16: 16 18: 18'); // 测试获取结果 16 17 18 的文件 +r($testtask->getResultsFilesTest($resultIdList[6])) && p('result,step') && e('19: 19,20: 20'); // 测试获取结果 19 20 的文件 +r($testtask->getResultsFilesTest($resultIdList[7])) && p('result,step') && e('~~,~~'); // 测试获取不存在的结果 21 22 的文件 diff --git a/module/testtask/test/model/getrunbyid.php b/module/testtask/test/model/getrunbyid.php index 858a8bf3f8..0a715e792e 100755 --- a/module/testtask/test/model/getrunbyid.php +++ b/module/testtask/test/model/getrunbyid.php @@ -24,7 +24,7 @@ $runIdList = array(1, 2, 3, 4, 5); $testtask = new testtaskTest(); r($testtask->getRunByIdTest($runIdList[0])) && p('id,task') && e('1,1'); // 查询run 1 的信息 -r($testtask->getRunByIdTest($runIdList[1])) && p('id,task') && e('2,1'); // 查询run 1 的信息 -r($testtask->getRunByIdTest($runIdList[2])) && p('id,task') && e('3,1'); // 查询run 1 的信息 -r($testtask->getRunByIdTest($runIdList[3])) && p('id,task') && e('4,1'); // 查询run 1 的信息 -r($testtask->getRunByIdTest($runIdList[4])) && p('id,task') && e('5,2'); // 查询run 1 的信息 +r($testtask->getRunByIdTest($runIdList[1])) && p('id,task') && e('2,1'); // 查询run 2 的信息 +r($testtask->getRunByIdTest($runIdList[2])) && p('id,task') && e('3,1'); // 查询run 3 的信息 +r($testtask->getRunByIdTest($runIdList[3])) && p('id,task') && e('4,1'); // 查询run 4 的信息 +r($testtask->getRunByIdTest($runIdList[4])) && p('id,task') && e('5,2'); // 查询run 5 的信息 diff --git a/module/testtask/test/model/processresultsteps.php b/module/testtask/test/model/processresultsteps.php new file mode 100644 index 0000000000..c0f008b710 --- /dev/null +++ b/module/testtask/test/model/processresultsteps.php @@ -0,0 +1,33 @@ +#!/usr/bin/env php +gen('1'); +zdTable('case')->gen('5'); +zdTable('casestep')->config('casestep')->gen('20'); +zdTable('testresult')->gen('5'); + +su('admin'); + +/** + +title=测试 testtaskModel->processResultSteps(); +cid=1 +pid=1 + + + +*/ + +$resultIdList = array(1, 2, 3, 4, 5); + +$testtask = new testtaskTest(); + +$testtask->initResult(); + +r($testtask->processResultStepsTest($resultIdList[0])) && p() && e('1, 1, 1, pass,; 2, 1.1, 2; 3, 1.1.1, 3; 4, 2, 1; 5, 2.1, 2; 6, 2.1.1, 3; 7, 2.1.2, 3; 8, 2.2, 2; 9, 2.2.1, 3; 10, 3, 1; 11, 3.1, 3; 12, 4, 1;'); // 测试计算用例执行结果 1 的步骤 +r($testtask->processResultStepsTest($resultIdList[1])) && p() && e('13, 1, 1;'); // 测试计算用例执行结果 2 的步骤 +r($testtask->processResultStepsTest($resultIdList[2])) && p() && e('14, 1, 1;'); // 测试计算用例执行结果 3 的步骤 +r($testtask->processResultStepsTest($resultIdList[3])) && p() && e('15, 1, 1;'); // 测试计算用例执行结果 4 的步骤 +r($testtask->processResultStepsTest($resultIdList[4])) && p() && e('16, 1, 1;'); // 测试计算用例执行结果 5 的步骤 diff --git a/module/testtask/test/testtask.class.php b/module/testtask/test/testtask.class.php index e76513b8ec..0d94e49bf1 100644 --- a/module/testtask/test/testtask.class.php +++ b/module/testtask/test/testtask.class.php @@ -7,6 +7,30 @@ class testtaskTest $this->objectModel = $tester->loadModel('testtask'); } + /** + * 初始化结果。 + * Init test results. + * + * @access public + * @return void + */ + public function initResult(): void + { + global $tester; + $testResults = $tester->dao->select('*')->from(TABLE_TESTRESULT)->fetchAll(); + foreach($testResults as $testResult) + { + if($testResult->caseResult == 'fail') + { + $tester->dao->update(TABLE_TESTRESULT)->set('`stepResults`')->eq('a:1:{i:'.$testResult->run.';a:2:{s:6:"result";s:4:"fail";s:4:"real";s:0:"";}}')->where('id')->eq($testResult->id)->exec(); + } + else + { + $tester->dao->update(TABLE_TESTRESULT)->set('`stepResults`')->eq('a:1:{i:'.$testResult->run.';a:2:{s:6:"result";s:4:"pass";s:4:"real";s:0:"";}}')->where('id')->eq($testResult->id)->exec(); + } + } + } + /** * Test create testtask. * @@ -265,10 +289,6 @@ class testtaskTest * Test get info of a test run. * * @param int $runID - * @param int $caseID - * @param int $version - * @param string $status all|done - * @param string $type all|fail * @access public * @return array|object */ @@ -299,9 +319,24 @@ class testtaskTest return $objects; } - public function getResultsTest($runID, $caseID = 0) + /** + * 测试获取用例执行结果。 + * Test get results. + * + * @param int $runID + * @param int $caseID + * @param string $status + * @param string $type + * @access public + * @return array + */ + public function getResultsTest(int $runID, int $caseID = 0, string $status = 'all', string $type = 'all'): array { - $objects = $this->objectModel->getResults($runID, $caseID = 0); + $objects = $this->objectModel->getResults($runID, $caseID, $status, $type); + foreach($objects as $object) + { + if($object->stepResults) $object->stepResults = implode(',', array_keys($object->stepResults)); + } if(dao::isError()) return dao::getError(); @@ -379,4 +414,71 @@ class testtaskTest return $objects; } + + /** + * 测试计算用例执行结果的步骤 + * Test process result steps. + * + * @param int $resultID + * @access public + * @return string|array + */ + public function processResultStepsTest(int $resultID): string|array + { + global $tester; + + $result = $tester->dao->select('*')->from(TABLE_TESTRESULT)->where('id')->eq($resultID)->fetch(); + + $relatedSteps = $tester->dao->select('*')->from(TABLE_CASESTEP)->where('case')->eq($result->case)->orderBy('id')->fetchAll('id'); + $result->stepResults = unserialize($result->stepResults); + + $objects = $this->objectModel->processResultSteps($result, $relatedSteps); + + $return = ''; + foreach($objects as $object) + { + $return .= "{$object['id']}, {$object['name']}, {$object['grade']}"; + if(isset($object['result'])) $return .= ", {$object['result']}, {$object['real']}"; + $return = trim($return) . '; '; + } + + if(dao::isError()) return dao::getError(); + + return trim($return); + } + + /** + * 测试结果的文件。 + * Test get files of the results + * + * @param array $resultIdList + * @access public + * @return array + */ + public function getResultsFilesTest(array $resultIdList): array + { + list($resultFiles, $stepFiles) = $this->objectModel->getResultsFiles($resultIdList); + + if(dao::isError()) return dao::getError(); + + $return = array('result' => '', 'step' => ''); + + foreach($resultFiles as $resultID => $files) + { + $return['result'] .= "{$resultID}: "; + $return['result'] .= implode(',', array_keys($files)); + $return['result'] .= " "; + } + $return['result'] = trim($return['result']); + + foreach($stepFiles as $stepID => $extraFiles) + { + $return['step'] .= "{$stepID}: "; + foreach($extraFiles as $files) $return['step'] .= implode(',', array_keys($files)); + $return['step'] .= " "; + } + $return['step'] = trim($return['step']); + + return $return; + } } diff --git a/module/testtask/test/yaml/casestep.yaml b/module/testtask/test/yaml/casestep.yaml new file mode 100644 index 0000000000..cb09598ff1 --- /dev/null +++ b/module/testtask/test/yaml/casestep.yaml @@ -0,0 +1,14 @@ +title: table zt_casestep +desc: "用例步骤" +author: Mengyi Liu +version: "1.0" +fields: + - field: parent + range: 0,1,2,0,4,5,5,4,9,0,11,0{1000} + - field: case + range: 1{12},2-1000 + - field: type + range: group,group,item,group,group,item,item,group,item,group,item,step{1000} + - field: version + range: 1{3},2{9},1{1000} + diff --git a/module/testtask/test/yaml/resultfile.yaml b/module/testtask/test/yaml/resultfile.yaml new file mode 100644 index 0000000000..66ca25679e --- /dev/null +++ b/module/testtask/test/yaml/resultfile.yaml @@ -0,0 +1,11 @@ +title: table zt_file +desc: "用例步骤" +author: Mengyi Liu +version: "1.0" +fields: + - field: objectType + range: caseResult,stepResult + - field: objectID + range: 1-20 + - field: extra + range: "[],0-4,editor"