diff --git a/module/testcase/model.php b/module/testcase/model.php index 872f44983e..c99dccdb03 100755 --- a/module/testcase/model.php +++ b/module/testcase/model.php @@ -2794,4 +2794,18 @@ class testcaseModel extends model $this->loadModel('search')->setSearchParams($this->config->testcase->search); } + + /** + * 过略自动测试用例的ID列表 + * Ignore auto testcase id list. + * + * @param array $caseIdList + * @access public + * @return array + */ + public function ignoreAutoCaseIdList(array $caseIdList): array + { + if(empty($caseIdList)) return array(); + return $this->dao->select('id')->from(TABLE_CASE)->where('id')->in($caseIdList)->andWhere('auto')->ne('auto')->fetchPairs('id', 'id'); + } } diff --git a/module/testcase/test/model/ignoreautocaseidlist.php b/module/testcase/test/model/ignoreautocaseidlist.php new file mode 100755 index 0000000000..e8ab6266d8 --- /dev/null +++ b/module/testcase/test/model/ignoreautocaseidlist.php @@ -0,0 +1,29 @@ +#!/usr/bin/env php +ignoreAutoCaseIdList(); +cid=0 + +- 传入空数组 @0 +- 传入不存在的用例 @0 +- 传入重复的用例 @1 +- 传入不重复非自动化用例 @1;2 +- 传入自动化的用例 @0 +- 传入既有自动化用例又有非自动化用例 @1;2 + +*/ + +zenData('case')->loadYaml('ignoreautocase')->gen('50'); + +global $tester; +$testcase = $tester->loadModel('testcase'); +r(count($testcase->ignoreAutoCaseIdList(array()))) && p() && e('0'); // 传入空数组 +r(count($testcase->ignoreAutoCaseIdList(array(100, 101)))) && p() && e('0'); // 传入不存在的用例 +r(implode(';', $testcase->ignoreAutoCaseIdList(array(1, 1)))) && p() && e('1'); // 传入重复的用例 +r(implode(';', $testcase->ignoreAutoCaseIdList(array(1, 2)))) && p() && e('1;2'); // 传入不重复非自动化用例 +r(count($testcase->ignoreAutoCaseIdList(array(3)))) && p() && e('0'); // 传入自动化的用例 +r(implode(';', $testcase->ignoreAutoCaseIdList(array(1, 2, 3)))) && p() && e('1;2'); // 传入既有自动化用例又有非自动化用例 diff --git a/module/testcase/test/yaml/ignoreautocase.yaml b/module/testcase/test/yaml/ignoreautocase.yaml new file mode 100644 index 0000000000..d7d4c4345d --- /dev/null +++ b/module/testcase/test/yaml/ignoreautocase.yaml @@ -0,0 +1,7 @@ +title: table zt_case +desc: "用例" +author: Mengyi Liu +version: "1.0" +fields: + - field: auto + range: no{2},auto diff --git a/module/testtask/control.php b/module/testtask/control.php index 1c44b98b86..a7d8cee319 100644 --- a/module/testtask/control.php +++ b/module/testtask/control.php @@ -918,15 +918,15 @@ class testtask extends control return $this->send(array('result' => 'success', 'message' => $this->lang->saveSuccess, 'load' => $url)); } - if(!$this->post->caseIdList) $this->locate($url); - /* 根据不同情况获取要批量执行的用例。*/ /* Get cases to run according to different situations. */ - $caseIdList = array_unique($this->post->caseIdList); - $cases = $this->testtaskZen->prepareCasesForBatchRun($productID, $orderBy, $from, $taskID, $confirm, $caseIdList); + $caseIdList = $this->loadModel('testcase')->ignoreAutoCaseIdList((array)$this->post->caseIdList); + if(empty($caseIdList)) $this->locate($url); + + $cases = $this->testtaskZen->prepareCasesForBatchRun($productID, $orderBy, $from, $taskID, $confirm, $caseIdList); if(empty($cases)) return $this->send(array('result' => 'fail', 'load' => array('alert' => $this->lang->testtask->skipChangedCases, 'locate' => $url))); - $steps = $this->loadModel('testcase')->getStepGroupByIdList($caseIdList); + $steps = $this->testcase->getStepGroupByIdList($caseIdList); $emptyCases = ''; foreach($cases as $caseID => $case) diff --git a/module/testtask/model.php b/module/testtask/model.php index 12443ba3cd..74da0229c9 100755 --- a/module/testtask/model.php +++ b/module/testtask/model.php @@ -1684,7 +1684,7 @@ class testtaskModel extends model if($action == 'activate') return ($testtask->status == 'blocked' || $testtask->status == 'done'); if($action == 'close') return $testtask->status != 'done'; if($action == 'ztfrun') return $testtask->auto == 'auto'; - if($action == 'runcase') return (empty($testtask->lib) || !empty($testtask->product)) && $testtask->auto == 'no' && $testtask->status != 'wait'; + if($action == 'runcase') return (empty($testtask->lib) || !empty($testtask->product)) && $testtask->status != 'wait'; return true; } diff --git a/module/testtask/zen.php b/module/testtask/zen.php index 6f7641547d..f36c6ce990 100644 --- a/module/testtask/zen.php +++ b/module/testtask/zen.php @@ -555,10 +555,7 @@ class testtaskZen extends testtask /* 如果批量执行的用例来自测试单,检查这些用例的版本,如果不是最新版就移除它们。*/ /* If cases come from a testtask, check the version of these cases, if not the latest version, remove them. */ - $runs = $this->dao->select('`case`, version')->from(TABLE_TESTRUN) - ->where('`case`')->in(array_keys($cases)) - ->andWhere('task')->eq($taskID) - ->fetchPairs(); + $runs = $this->dao->select('`case`, version')->from(TABLE_TESTRUN)->where('`case`')->in(array_keys($cases))->andWhere('task')->eq($taskID)->fetchPairs(); foreach($cases as $caseID => $case) { if(isset($runs[$caseID]) && $runs[$caseID] < $case->version) unset($cases[$caseID]); diff --git a/module/zanode/control.php b/module/zanode/control.php index d4a5fd843b..035723c9e9 100644 --- a/module/zanode/control.php +++ b/module/zanode/control.php @@ -613,17 +613,18 @@ class zanode extends control { if($_POST) { - $caseIDList = $_POST['caseIDList']; - $runIDList = empty($_POST['runIDList']) ? array() : $_POST['runIDList']; + $caseIdList = $_POST['caseIdList']; + $runIdList = empty($_POST['runIDList']) ? array() : $_POST['runIDList']; $script = $this->zanode->getAutomationByID($scriptID); - $cases = $this->loadModel('testcase')->getByList($caseIDList); + $cases = $this->loadModel('testcase')->getByList($caseIdList); $case2RunMap = array(); - foreach($caseIDList as $index => $caseID) $case2RunMap[$caseID] = empty($runIDList[$index]) ? 0 : $runIDList[$index]; + foreach($caseIdList as $index => $caseID) $case2RunMap[$caseID] = empty($runIDList[$index]) ? 0 : $runIDList[$index]; foreach($cases as $id => $case) { if($case->auto != 'auto') continue; + if(empty($script->node)) continue; $resultID = $this->loadModel('testtask')->initResult($case2RunMap[$id], $id, $case->version, $script->node); if(!dao::isError()) $this->zanode->runZTFScript($script->id, $id, $resultID); }