diff --git a/module/ci/control.php b/module/ci/control.php index df2253e9f0..188eb2de69 100644 --- a/module/ci/control.php +++ b/module/ci/control.php @@ -53,7 +53,7 @@ class ci extends control foreach($compiles as $compile) { if($compile->atTime and date('H:i') < $compile->atTime) continue; - $this->compile->execByCompile($compile); + $this->compile->exec($compile); } echo 'success'; } @@ -64,9 +64,9 @@ class ci extends control * @access public * @return void */ - public function checkBuildStatus() + public function checkCompileStatus() { - $this->ci->checkBuildStatus(); + $this->ci->checkCompileStatus(); if(dao::isError()) { echo json_encode(dao::getError()); @@ -112,10 +112,19 @@ class ci extends control if(empty($productID)) $productID = $compile->product; if($compile->status != 'success' and $compile->status != 'fail' and $compile->status != 'create_fail' and $compile->status != 'timeout') { - $this->loadModel('compile')->syncStatus($compile); + $this->loadModel('compile')->syncCompileStatus($compile); } } + /* Get productID from caseResults when productID is null. */ + if(empty($productID) and $testType == 'ztf') + { + $caseResults = $post->ztfCaseResults; + $firstCase = array_shift($caseResults); + $productID = $firstCase->productId; + } + if(empty($productID)) die(json_encode(array('result' => 'fail', 'message' => 'productID is not found'))); + /* Get testtaskID or create testtask. */ if(!empty($taskID)) { @@ -135,7 +144,7 @@ class ci extends control $testtask = new stdclass(); $testtask->product = $productID; - $testtask->name = sprintf($this->lang->testtask->unitTitleTemplate, date('Y-m-d H:i:s')); + $testtask->name = sprintf($this->lang->testtask->titleOfAuto, date('Y-m-d H:i:s')); $testtask->owner = $this->app->user->account; $testtask->project = $lastProject; $testtask->build = 'trunk'; @@ -154,14 +163,14 @@ class ci extends control /* Build data from case results. */ if($testType == 'unit') { - $data = $this->testtask->buildDataFromUnit($post->unitCaseResults, $frame, $productID, $jobID, $compileID); + $data = $this->testtask->parseZTFUnitResult($post->unitResult, $frame, $productID, $jobID, $compileID); } - elseif($testType == 'ztf') + elseif($testType == 'func') { - $data = $this->testtask->buildDataFromZTF($post->ztfCaseResults, $frame, $productID, $jobID, $compileID); + $data = $this->testtask->parseZTFFuncResult($post->funcResult, $frame, $productID, $jobID, $compileID); } - $taskID = $this->testtask->saveUnit($taskID, $productID, $data['suites'], $data['cases'], $data['results'], $data['suiteNames'], $data['caseTitles']); + $taskID = $this->testtask->processAutoResult($taskID, $productID, $data['suites'], $data['cases'], $data['results'], $data['suiteNames'], $data['caseTitles']); die(json_encode(array('result' => 'success'))); } diff --git a/module/ci/model.php b/module/ci/model.php index d23ba94fc6..981947e6fc 100644 --- a/module/ci/model.php +++ b/module/ci/model.php @@ -29,7 +29,7 @@ class ciModel extends model * @access public * @return void */ - public function checkBuildStatus() + public function checkCompileStatus() { $compiles = $this->dao->select('t1.*, t2.jkJob, t3.name as jenkinsName,t3.url,t3.account,t3.token,t3.password') ->from(TABLE_COMPILE)->alias('t1') @@ -42,17 +42,17 @@ class ciModel extends model ->andWhere('t1.createdDate')->gt(date(DT_DATETIME1, strtotime("-1 day"))) ->fetchAll(); - foreach($compiles as $compile) $this->syncStatus($compile); + foreach($compiles as $compile) $this->syncCompileStatus($compile); } /** - * Sync status. + * Sync compile status. * * @param object $compile * @access public * @return void */ - public function syncStatus($compile) + public function syncCompileStatus($compile) { $jenkinsServer = $compile->url; $jenkinsUser = $compile->account; diff --git a/module/common/lang/zh-cn.php b/module/common/lang/zh-cn.php index ba79b0fd02..f64458fb25 100644 --- a/module/common/lang/zh-cn.php +++ b/module/common/lang/zh-cn.php @@ -280,7 +280,7 @@ $lang->qa->menu->caselib = array('link' => '用例库|caselib|browse'); $lang->qa->subMenu = new stdclass(); $lang->qa->subMenu->testcase = new stdclass(); $lang->qa->subMenu->testcase->feature = array('link' => '功能测试|testcase|browse|productID=%s', 'alias' => 'view,create,batchcreate,edit,batchedit,showimport,groupcase,importfromlib', 'subModule' => 'tree,story'); -$lang->qa->subMenu->testcase->unit = array('link' => '单元测试|testtask|browseUnit|productID=%s'); +$lang->qa->subMenu->testcase->unit = array('link' => '单元测试|testtask|browseUnits|productID=%s'); $lang->bug = new stdclass(); $lang->bug->menu = new stdclass(); @@ -790,17 +790,19 @@ if(isset($config->global->flow) and $config->global->flow == 'onlyTest') /* Add bug, testcase and testtask module. */ $lang->menu->bug = 'Bug|bug|index'; - $lang->menu->testcase = '用例|testcase|index'; + $lang->menu->feature = '功能测试|testcase|browse'; + $lang->menu->unit = '单元测试|testtask|browseUnits'; $lang->menu->testsuite = '套件|testsuite|index'; $lang->menu->testtask = '测试单|testtask|index'; $lang->menu->caselib = '用例库|caselib|browse'; $lang->menuOrder[6] = 'bug'; - $lang->menuOrder[7] = 'testcase'; - $lang->menuOrder[8] = 'testsuite'; - $lang->menuOrder[9] = 'testtask'; - $lang->menuOrder[10] = 'caselib'; - $lang->menuOrder[11] = 'product'; + $lang->menuOrder[7] = 'feature'; + $lang->menuOrder[8] = 'unit'; + $lang->menuOrder[9] = 'testsuite'; + $lang->menuOrder[10] = 'testtask'; + $lang->menuOrder[11] = 'caselib'; + $lang->menuOrder[12] = 'product'; /* Adjust sub menu of bug module. */ $lang->bug->menu = new stdclass(); diff --git a/module/compile/control.php b/module/compile/control.php index e51931baa9..319cb84887 100644 --- a/module/compile/control.php +++ b/module/compile/control.php @@ -45,7 +45,8 @@ class compile extends control $this->view->position[] = html::a($this->createLink('job', 'browse'), $this->lang->ci->job); $this->view->position[] = $this->lang->compile->browse; - $this->app->loadLang('job'); + $this->loadModel('job'); + if($jobID) $this->view->job = $this->job->getById($jobID); $this->view->jobID = $jobID; $this->view->buildList = $this->compile->getList($jobID, $orderBy, $pager); $this->view->orderBy = $orderBy; diff --git a/module/compile/model.php b/module/compile/model.php index e79006cf98..b6744ab8ec 100644 --- a/module/compile/model.php +++ b/module/compile/model.php @@ -34,7 +34,7 @@ class compileModel extends model */ public function getList($jobID, $orderBy = 'id_desc', $pager = null) { - return $this->dao->select('t1.id, t1.name, t1.status, t1.createdDate,t1.testtask, t2.jkJob,t2.triggerType,t2.comment,t2.atDay,t2.atTime, t3.name as repoName, t4.name as jenkinsName')->from(TABLE_COMPILE)->alias('t1') + return $this->dao->select('t1.id, t1.name, t1.job, t1.status, t1.createdDate,t1.testtask, t2.jkJob,t2.triggerType,t2.comment,t2.atDay,t2.atTime, t3.name as repoName, t4.name as jenkinsName')->from(TABLE_COMPILE)->alias('t1') ->leftJoin(TABLE_JOB)->alias('t2')->on('t1.job=t2.id') ->leftJoin(TABLE_REPO)->alias('t3')->on('t2.repo=t3.id') ->leftJoin(TABLE_JENKINS)->alias('t4')->on('t2.jkHost=t4.id') @@ -57,6 +57,18 @@ class compileModel extends model return $this->dao->select('*')->from(TABLE_COMPILE)->where('status')->eq('')->andWhere('deleted')->eq('0')->fetchAll(); } + /** + * Get last result. + * + * @param int $jobID + * @access public + * @return object + */ + public function getLastResult($jobID) + { + return $this->dao->select('*')->from(TABLE_COMPILE)->where('job')->eq($jobID)->andWhere('status')->ne('')->orderBy('createdDate_desc')->limit(1)->fetch(); + } + /** * Get build url. * @@ -106,7 +118,7 @@ class compileModel extends model * @access public * @return bool */ - public function execByCompile($compile) + public function exec($compile) { $job = $this->dao->select('t1.id,t1.name,t1.repo,t1.jkJob,t2.name as jenkinsName,t2.url,t2.account,t2.token,t2.password') ->from(TABLE_JOB)->alias('t1') diff --git a/module/compile/view/browse.html.php b/module/compile/view/browse.html.php index f6df664031..899ad70a6c 100644 --- a/module/compile/view/browse.html.php +++ b/module/compile/view/browse.html.php @@ -15,7 +15,7 @@
createLink('job', 'browse'), "{$lang->ci->task}", '', "class='btn btn-link'"); - echo html::a($this->createLink('compile', 'browse'), "{$lang->ci->history}", '', "class='btn btn-link btn-active-text'"); + echo html::a($this->createLink('compile', 'browse'), "" . ($jobID ? $job->name : '') . " {$lang->ci->history}", '', "class='btn btn-link btn-active-text'"); ?>
@@ -33,14 +33,14 @@ job->triggerType;?> compile->status);?> compile->time);?> - actions;?> + actions;?> $build):?> - name;?> + createLink('job', 'view', "jobID={$build->job}&compileID={$build->id}", 'html', true), $build->name, '', "class='iframe' data-width='90%'") : $build->name;?> repoName;?> jkJob) . '@' . $build->jenkinsName;?> @@ -49,16 +49,12 @@ compile->statusList, $build->status);?> createdDate;?> - + compile->logs); + common::printLink('compile', 'logs', "buildID=$id", $lang->compile->logs); if($build->testtask) { - common::printIcon('testtask', 'units', "taskID=$build->testtask", '', 'list', 'list-alt', '', '', '', '', $lang->compile->result); - } - else - { - echo html::a('###', "", '', "class='btn disabled' title='{$lang->compile->result}'"); + common::printLink('testtask', 'unitCases', "taskID=$build->testtask", $lang->compile->result, '', "class='iframe' data-width='90%'", true, true); } ?> diff --git a/module/job/control.php b/module/job/control.php index b0be413315..8052970aa5 100644 --- a/module/job/control.php +++ b/module/job/control.php @@ -150,6 +150,87 @@ class job extends control die(js::reload('parent')); } + /** + * View job and compile. + * + * @param int $jobID + * @param int $compileID + * @access public + * @return void + */ + public function view($jobID, $compileID = 0) + { + $job = $this->job->getById($jobID); + + $this->loadModel('compile'); + if($compileID) + { + $compile = $this->compile->getById($compileID); + } + else + { + $compile = $this->compile->getLastResult($jobID); + } + + if($compile and $compile->testtask) + { + $this->app->loadLang('project'); + $taskID = $compile->testtask; + $task = $this->loadModel('testtask')->getById($taskID); + $runs = $this->testtask->getRuns($taskID, 0, 'id'); + + $cases = array(); + $runs = $this->loadModel('testcase')->appendData($runs, 'testrun'); + foreach($runs as $run) $cases[$run->case] = $run; + + $results = $this->dao->select('*')->from(TABLE_TESTRESULT)->where('`case`')->in(array_keys($cases))->andWhere('run')->in(array_keys($runs))->fetchAll('run'); + foreach($results as $result) + { + $runs[$result->run]->caseResult = $result->caseResult; + $runs[$result->run]->xml = $result->xml; + $runs[$result->run]->duration = $result->duration; + } + + $groupCases = $this->dao->select('*')->from(TABLE_SUITECASE)->where('`case`')->in(array_keys($cases))->orderBy('case')->fetchGroup('suite', 'case'); + $summary = array(); + if(empty($groupCases)) $groupCases[] = $cases; + foreach($groupCases as $suiteID => $groupCase) + { + $caseCount = 0; + $failCount = 0; + $duration = 0; + foreach($groupCase as $caseID => $suitecase) + { + $case = $cases[$caseID]; + $groupCases[$suiteID][$caseID] = $case; + $duration += $case->duration; + $caseCount ++; + if($case->caseResult == 'fail') $failCount ++; + } + $summary[$suiteID] = sprintf($this->lang->testtask->summary, $caseCount, $failCount, $duration); + } + + $suites = $this->loadModel('testsuite')->getUnitSuites($task->product); + + $this->view->groupCases = $groupCases; + $this->view->suites = $suites; + $this->view->summary = $summary; + $this->view->taskID = $taskID; + } + + $this->view->title = $this->lang->ci->job . $this->lang->colon . $this->lang->job->browse; + $this->view->position[] = $this->lang->ci->job; + $this->view->position[] = $this->lang->job->browse; + + $this->view->users = $this->loadModel('user')->getPairs('noletter'); + $this->view->job = $job; + $this->view->compile = $compile; + $this->view->repo = $this->loadModel('repo')->getRepoByID($job->repo); + $this->view->jenkins = $this->loadModel('jenkins')->getById($job->jkHost); + $this->view->product = $this->loadModel('product')->getById($job->product); + $this->display(); + } + /** * Exec a job. * diff --git a/module/job/css/view.css b/module/job/css/view.css new file mode 100644 index 0000000000..651669bb29 --- /dev/null +++ b/module/job/css/view.css @@ -0,0 +1,5 @@ +#mainContent{padding:0px; padding-top: 5px;} +th.c-side{width:260px;} +td.pass{color:green} +td.fail{color:red} +#pageNav .btn-group.open ul.dropdown-menu{max-height:350px; overflow-y:auto;} diff --git a/module/job/js/view.js b/module/job/js/view.js new file mode 100644 index 0000000000..45d7da808d --- /dev/null +++ b/module/job/js/view.js @@ -0,0 +1,41 @@ +$(function() +{ + $('td.group-toggle').click(function() + { + var dataid = $(this).closest('tr').attr('data-id'); + var $tbody = $(this).closest('tbody'); + $tbody.find('tr[data-id=' + dataid + ']').addClass('hidden'); + $tbody.find('tr.group-summary[data-id=' + dataid + ']').removeClass('hidden'); + + $('.group-collapse-all').show(); + $('.group-expand-all').hide(); + if($tbody.find('tr:not(.group-summary):not(.hidden)').length == 0) + { + $('.group-collapse-all').hide(); + $('.group-expand-all').show(); + } + }); + $('tr.group-summary.group-toggle').click(function() + { + dataid = $(this).attr('data-id'); + $(this).closest('tbody').find('tr[data-id=' + dataid + ']').removeClass('hidden'); + $(this).addClass('hidden'); + + $('.group-collapse-all').show(); + $('.group-expand-all').hide(); + }); + $('.group-collapse-all').click(function() + { + $(this).closest('table').find('tbody tr').addClass('hidden'); + $(this).closest('table').find('tbody tr.group-summary').removeClass('hidden'); + $('.group-expand-all').show(); + $(this).hide(); + }); + $('.group-expand-all').click(function() + { + $(this).closest('table').find('tbody tr').removeClass('hidden'); + $(this).closest('table').find('tbody tr.group-summary').addClass('hidden'); + $('.group-collapse-all').show(); + $(this).hide(); + }); +}) diff --git a/module/job/lang/zh-cn.php b/module/job/lang/zh-cn.php index f63de649fb..4c06915374 100644 --- a/module/job/lang/zh-cn.php +++ b/module/job/lang/zh-cn.php @@ -26,6 +26,8 @@ $lang->job->lastStatus = '最后执行状态'; $lang->job->lastExec = '最后执行时间'; $lang->job->comment = '匹配关键字'; +$lang->job->lblBasic = '基本信息'; + $lang->job->example = '举例'; $lang->job->commitEx = "用于匹配创建构建任务的关键字,多个关键字用','分割"; $lang->job->cronSample = '如 0 0 2 * * 2-6/1 表示每个工作日凌晨2点'; @@ -40,11 +42,11 @@ $lang->job->triggerTypeList['commit'] = '提交注释包含关键字'; $lang->job->triggerTypeList['schedule'] = '定时计划'; $lang->job->frameList[''] = ''; -$lang->job->frameList['junit'] = 'JUNIT'; -$lang->job->frameList['testng'] = 'TESTNG'; -$lang->job->frameList['phpunit'] = 'PHPUNIT'; -$lang->job->frameList['pytest'] = 'PYTEST'; -$lang->job->frameList['jtest'] = 'JTEST'; -$lang->job->frameList['cppunit'] = 'CPPUNIT'; -$lang->job->frameList['gtest'] = 'GTEST'; -$lang->job->frameList['qtest'] = 'QTEST'; +$lang->job->frameList['junit'] = 'JUnit'; +$lang->job->frameList['testng'] = 'TestNG'; +$lang->job->frameList['phpunit'] = 'PHPUnit'; +$lang->job->frameList['pytest'] = 'Pytest'; +$lang->job->frameList['jtest'] = 'JTest'; +$lang->job->frameList['cppunit'] = 'CppUnit'; +$lang->job->frameList['gtest'] = 'GTest'; +$lang->job->frameList['qtest'] = 'QTest'; diff --git a/module/job/view/browse.html.php b/module/job/view/browse.html.php index f16896f24e..c54b21a591 100644 --- a/module/job/view/browse.html.php +++ b/module/job/view/browse.html.php @@ -41,7 +41,7 @@ $job):?> - name; ?> + createLink('job', 'view', "jobID={$job->id}", 'html', true), $job->name, '', "class='iframe' data-width='90%'") : $job->name;?> repoName; ?> job->frameList, $job->frame);?> jkJob) . '@' . $job->jenkinsName;?> @@ -52,7 +52,7 @@ lastStatus) echo $job->lastExec;?> createLink('job', 'delete', "jobID=$id"), '', 'hiddenwin', "title='{$lang->job->delete}' class='btn'"); diff --git a/module/job/view/view.html.php b/module/job/view/view.html.php new file mode 100644 index 0000000000..23b0e7153d --- /dev/null +++ b/module/job/view/view.html.php @@ -0,0 +1,106 @@ + + * @package job + * @version $Id$ + * @link http://www.zentao.net + */ +?> + + +
+ testtask));?> + logs));?> +
+ +
+ +
+ app->getModuleRoot() . 'testtask/view/unitgroup.html.php';?> +
+ + +
'> +
logs);?>
+
+ +
'> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
job->repo;?>name;?>
job->product;?>name;?>
job->frame;?>job->frameList, $job->frame);?>
job->jkHost;?>jkJob) . '@' . $jenkins->name;?>
job->triggerType;?>job->getTriggerConfig($job);?>
compile->status;?> + status) + { + echo zget($lang->compile->statusList, $compile->status); + } + elseif($job->lastStatus) + { + echo zget($lang->compile->statusList, $job->lastStatus); + } + ?> +
compile->time;?> + status) + { + echo zget($lang->compile->statusList, $compile->updateDate); + } + elseif($job->lastStatus) + { + echo zget($lang->compile->statusList, $job->lastExec); + } + ?> +
+
+
+
+
+ + diff --git a/module/story/model.php b/module/story/model.php index 0adcbc600a..a1a7e854f2 100644 --- a/module/story/model.php +++ b/module/story/model.php @@ -2626,7 +2626,6 @@ class storyModel extends model if($action == 'activate') return $story->status == 'closed'; if($action == 'assignto') return $story->status != 'closed'; if($action == 'batchcreate' and $story->parent > 0) return false; - if($action == 'batchcreate' and $story->type == 'requirement') return false; if($action == 'batchcreate' and ($story->status != 'active' or $story->stage != 'wait')) return false; return true; diff --git a/module/testcase/control.php b/module/testcase/control.php index 168ba40afe..dfce6afe79 100644 --- a/module/testcase/control.php +++ b/module/testcase/control.php @@ -486,7 +486,7 @@ class testcase extends control { $case = $this->testcase->getById($caseID, $version); if(!$case) die(js::error($this->lang->notFound) . js::locate('back')); - if($case->auto != 'no') + if($case->auto == 'unit') { $this->lang->testcase->subMenu->testcase->feature['alias'] = ''; $this->lang->testcase->subMenu->testcase->unit['alias'] = 'view'; diff --git a/module/testcase/lang/zh-cn.php b/module/testcase/lang/zh-cn.php index 7d5aa10571..65b2630e7d 100644 --- a/module/testcase/lang/zh-cn.php +++ b/module/testcase/lang/zh-cn.php @@ -168,12 +168,12 @@ $lang->testcase->priList[4] = 4; /* Define the types. */ $lang->testcase->typeList[''] = ''; $lang->testcase->typeList['feature'] = '功能测试'; -$lang->testcase->typeList['unit'] = '单元测试'; $lang->testcase->typeList['performance'] = '性能测试'; $lang->testcase->typeList['config'] = '配置相关'; $lang->testcase->typeList['install'] = '安装部署'; $lang->testcase->typeList['security'] = '安全相关'; $lang->testcase->typeList['interface'] = '接口测试'; +$lang->testcase->typeList['unit'] = '单元测试'; $lang->testcase->typeList['other'] = '其他'; $lang->testcase->stageList[''] = ''; @@ -223,6 +223,3 @@ $lang->testcase->featureBar['browse']['group'] = '分组查看'; $lang->testcase->featureBar['browse']['suite'] = '套件'; $lang->testcase->featureBar['browse']['zerocase'] = "零用例{$lang->storyCommon}"; $lang->testcase->featureBar['groupcase'] = $lang->testcase->featureBar['browse']; - -$lang->testcase->featureBar['unit']['all'] = $lang->testcase->allCases; -$lang->testcase->featureBar['unit']['wait'] = '待评审'; diff --git a/module/testcase/model.php b/module/testcase/model.php index cfd42baaa5..7f9af8d993 100644 --- a/module/testcase/model.php +++ b/module/testcase/model.php @@ -350,8 +350,8 @@ class testcaseModel extends model ->beginIF($branch)->andWhere('t1.branch')->eq($branch)->fi() ->beginIF($moduleIdList)->andWhere('t1.module')->in($moduleIdList)->fi() ->beginIF($browseType == 'wait')->andWhere('t1.status')->eq($browseType)->fi() - ->beginIF($auto == 'no')->andWhere('t1.auto')->eq('no')->fi() - ->beginIF($auto != 'no')->andWhere('t1.auto')->ne('no')->fi() + ->beginIF($auto == 'unit')->andWhere('t1.auto')->eq('unit')->fi() + ->beginIF($auto != 'unit')->andWhere('t1.auto')->ne('unit')->fi() ->andWhere('t1.deleted')->eq('0') ->orderBy($orderBy)->page($pager)->fetchAll('id'); } @@ -378,8 +378,8 @@ class testcaseModel extends model ->andWhere('t3.suite')->eq((int)$suiteID) ->beginIF($branch)->andWhere('t1.branch')->eq($branch)->fi() ->beginIF($moduleIdList)->andWhere('t1.module')->in($moduleIdList)->fi() - ->beginIF($auto == 'no')->andWhere('t1.auto')->eq('no')->fi() - ->beginIF($auto != 'no')->andWhere('t1.auto')->ne('no')->fi() + ->beginIF($auto == 'unit')->andWhere('t1.auto')->eq('unit')->fi() + ->beginIF($auto != 'unit')->andWhere('t1.auto')->ne('unit')->fi() ->andWhere('t1.deleted')->eq('0') ->orderBy($orderBy)->page($pager)->fetchAll('id'); } @@ -469,8 +469,8 @@ class testcaseModel extends model ->andWhere('t1.product')->eq($productID) ->beginIF($branch)->andWhere('t1.branch')->eq($branch)->fi() ->beginIF($modules)->andWhere('t1.module')->in($modules)->fi() - ->beginIF($auto == 'no')->andWhere('t1.auto')->eq('no')->fi() - ->beginIF($auto != 'no')->andWhere('t1.auto')->ne('no')->fi() + ->beginIF($auto != 'unit')->andWhere('t1.auto')->ne('unit')->fi() + ->beginIF($auto == 'unit')->andWhere('t1.auto')->eq('unit')->fi() ->orderBy($sort) ->page($pager) ->fetchAll(); @@ -537,8 +537,8 @@ class testcaseModel extends model $cases = $this->dao->select('*')->from(TABLE_CASE)->where($caseQuery) ->beginIF($queryProductID != 'all')->andWhere('product')->eq($productID)->fi() - ->beginIF($auto == 'no')->andWhere('t1.auto')->eq('no')->fi() - ->beginIF($auto != 'no')->andWhere('t1.auto')->ne('no')->fi() + ->beginIF($auto != 'unit')->andWhere('t1.auto')->ne('unit')->fi() + ->beginIF($auto == 'unit')->andWhere('t1.auto')->eq('unit')->fi() ->andWhere('deleted')->eq(0) ->orderBy($orderBy)->page($pager)->fetchAll('id'); @@ -565,8 +565,8 @@ class testcaseModel extends model ->andWhere('t3.status')->ne('done') ->andWhere('t3.deleted')->eq(0) ->andWhere('t2.deleted')->eq(0) - ->beginIF($auto == 'no')->andWhere('t1.auto')->eq('no')->fi() - ->beginIF($auto != 'no')->andWhere('t1.auto')->ne('no')->fi() + ->beginIF($auto != 'unit')->andWhere('t1.auto')->ne('unit')->fi() + ->beginIF($auto == 'unit')->andWhere('t1.auto')->eq('unit')->fi() ->orderBy($orderBy)->page($pager)->fetchAll(); } @@ -585,8 +585,8 @@ class testcaseModel extends model return $this->dao->findByOpenedBy($account)->from(TABLE_CASE) ->andWhere('product')->ne(0) ->andWhere('deleted')->eq(0) - ->beginIF($auto == 'no')->andWhere('auto')->eq('no')->fi() - ->beginIF($auto != 'no')->andWhere('auto')->ne('no')->fi() + ->beginIF($auto != 'unit')->andWhere('auto')->ne('unit')->fi() + ->beginIF($auto == 'unit')->andWhere('auto')->eq('unit')->fi() ->orderBy($orderBy)->page($pager)->fetchAll(); } diff --git a/module/testcase/view/create.html.php b/module/testcase/view/create.html.php index 1971328be4..d7e84232cd 100644 --- a/module/testcase/view/create.html.php +++ b/module/testcase/view/create.html.php @@ -52,6 +52,7 @@ testcase->type;?> + testcase->typeList['unit']);?> testcase->typeList, $type, "class='form-control chosen'");?> diff --git a/module/testcase/view/view.html.php b/module/testcase/view/view.html.php index e7f0d04e42..e8626998b7 100644 --- a/module/testcase/view/view.html.php +++ b/module/testcase/view/view.html.php @@ -55,7 +55,7 @@
- auto == 'no'):?> + auto != 'unit'):?>
testcase->precondition;?>
precondition);?>
@@ -127,7 +127,7 @@ id", $case, 'button', '', '', 'showinonlybody'); - if(!$isLibCase and $case->auto == 'no') common::printIcon('testcase', 'create', "productID=$case->product&branch=$case->branch&moduleID=$case->module&from=testcase¶m=$case->id", $case, 'button', 'copy'); + if(!$isLibCase and $case->auto != 'unit') common::printIcon('testcase', 'create', "productID=$case->product&branch=$case->branch&moduleID=$case->module&from=testcase¶m=$case->id", $case, 'button', 'copy'); if($isLibCase and common::hasPriv('caselib', 'createCase')) echo html::a($this->createLink('caselib', 'createCase', "libID=$case->lib&moduleID=$case->module¶m=$case->id", $case), "", '', "class='btn' title='{$lang->testcase->copy}'"); common::printIcon('testcase', 'delete', "caseID=$case->id", $case, 'button', 'trash', 'hiddenwin', 'showinonlybody'); ?> diff --git a/module/testsuite/model.php b/module/testsuite/model.php index b3fc36a491..47952dde37 100644 --- a/module/testsuite/model.php +++ b/module/testsuite/model.php @@ -157,7 +157,7 @@ class testsuiteModel extends model * @access public * @return array */ - public function getUnit($productID, $orderBy = 'id_desc') + public function getUnitSuites($productID, $orderBy = 'id_desc') { return $this->dao->select("*")->from(TABLE_TESTSUITE) ->where('product')->eq((int)$productID) diff --git a/module/testtask/config.php b/module/testtask/config.php index ac64a00827..66c12c437d 100644 --- a/module/testtask/config.php +++ b/module/testtask/config.php @@ -1,25 +1,26 @@ testtask = new stdclass(); -$config->testtask->create = new stdclass(); -$config->testtask->importunit = new stdclass(); -$config->testtask->edit = new stdclass(); -$config->testtask->create->requiredFields = 'project,build,begin,end,name'; -$config->testtask->importunit->requiredFields = 'project,build,begin,end,name,resultFile'; -$config->testtask->edit->requiredFields = 'project,build,begin,end,name'; +$config->testtask->create = new stdclass(); +$config->testtask->edit = new stdclass(); +$config->testtask->create->requiredFields = 'project,build,begin,end,name'; +$config->testtask->edit->requiredFields = 'project,build,begin,end,name'; + +$config->testtask->importunitresult = new stdclass(); +$config->testtask->importunitresult->requiredFields = 'project,build,begin,end,name,resultFile'; $config->testtask->editor = new stdclass(); -$config->testtask->editor->create = array('id' => 'desc', 'tools' => 'simpleTools'); -$config->testtask->editor->edit = array('id' => 'desc,report,comment', 'tools' => 'simpleTools'); -$config->testtask->editor->view = array('id' => 'lastComment', 'tools' => 'simpleTools'); -$config->testtask->editor->start = array('id' => 'comment', 'tools' => 'simpleTools'); -$config->testtask->editor->close = array('id' => 'report,comment', 'tools' => 'simpleTools'); -$config->testtask->editor->block = array('id' => 'comment', 'tools' => 'simpleTools'); -$config->testtask->editor->activate = array('id' => 'comment', 'tools' => 'simpleTools'); -$config->testtask->editor->importunit = array('id' => 'desc', 'tools' => 'simpleTools'); +$config->testtask->editor->create = array('id' => 'desc', 'tools' => 'simpleTools'); +$config->testtask->editor->edit = array('id' => 'desc,report,comment', 'tools' => 'simpleTools'); +$config->testtask->editor->view = array('id' => 'lastComment', 'tools' => 'simpleTools'); +$config->testtask->editor->start = array('id' => 'comment', 'tools' => 'simpleTools'); +$config->testtask->editor->close = array('id' => 'report,comment', 'tools' => 'simpleTools'); +$config->testtask->editor->block = array('id' => 'comment', 'tools' => 'simpleTools'); +$config->testtask->editor->activate = array('id' => 'comment', 'tools' => 'simpleTools'); +$config->testtask->editor->importunitresult = array('id' => 'desc', 'tools' => 'simpleTools'); $config->testtask->datatable = new stdclass(); $config->testtask->datatable->defaultField = array('id', 'pri', 'title', 'type', 'assignedTo', 'lastRunner', 'lastRunDate', 'lastRunResult', 'status', 'bugs', 'results', 'stepNumber','actions'); -$config->testtask->unitFormat = new stdclass(); -$config->testtask->unitFormat->common = array('path' => array('testsuite/testcase', 'testcase'), 'name' => array('classname', 'name'), 'failure' => 'failure', 'suite' => 'name', 'aliasSuite' => array('classname')); -$config->testtask->unitFormat->phpunit = array('path' => array('test', 'testsuite/testcase', 'testcase'), 'name' => array('className', 'methodName'), 'aliasName' => array('classname', 'name'), 'failure' => 'failure', 'suite' => 'name', 'aliasSuite' => array('classname', 'className')); +$config->testtask->unitResultRules = new stdclass(); +$config->testtask->unitResultRules->common = array('path' => array('testsuite/testcase', 'testcase'), 'name' => array('classname', 'name'), 'failure' => 'failure', 'suite' => 'name', 'aliasSuite' => array('classname')); +$config->testtask->unitResultRules->phpunit = array('path' => array('test', 'testsuite/testcase', 'testcase'), 'name' => array('className', 'methodName'), 'aliasName' => array('classname', 'name'), 'failure' => 'failure', 'suite' => 'name', 'aliasSuite' => array('classname', 'className')); diff --git a/module/testtask/control.php b/module/testtask/control.php index d5dcb5709d..c67682d669 100644 --- a/module/testtask/control.php +++ b/module/testtask/control.php @@ -92,7 +92,7 @@ class testtask extends control } /** - * Browse unit task. + * Browse unit tasks. * * @param int $productID * @param string $browseType @@ -103,7 +103,7 @@ class testtask extends control * @access public * @return void */ - public function browseUnit($productID = 0, $browseType = 'newest', $orderBy = 'id_desc', $recTotal = 0, $recPerPage = 20, $pageID = 1) + public function browseUnits($productID = 0, $browseType = 'newest', $orderBy = 'id_desc', $recTotal = 0, $recPerPage = 20, $pageID = 1) { /* Save session. */ $this->session->set('testtaskList', $this->app->getURI(true)); @@ -124,7 +124,7 @@ class testtask extends control $sort = $this->loadModel('common')->appendOrder($orderBy); $this->view->title = $this->products[$productID] . $this->lang->colon . $this->lang->testtask->common; - $this->view->position[] = html::a($this->createLink('testtask', 'browseUnit', "productID=$productID"), $this->products[$productID]); + $this->view->position[] = html::a($this->createLink('testtask', 'browseUnits', "productID=$productID"), $this->products[$productID]); $this->view->position[] = $this->lang->testtask->common; $this->view->productID = $productID; $this->view->productName = $this->products[$productID]; @@ -287,7 +287,7 @@ class testtask extends control * @access public * @return void */ - public function units($taskID, $orderBy = 'id') + public function unitCases($taskID, $orderBy = 'id') { $task = $this->testtask->getById($taskID); @@ -328,28 +328,29 @@ class testtask extends control if(empty($groupCases)) $groupCases[] = $cases; foreach($groupCases as $suiteID => $groupCase) { - $caseNum = 0; - $failNum = 0; - $duration = 0; + $caseCount = 0; + $failCount = 0; + $duration = 0; foreach($groupCase as $caseID => $suitecase) { $case = $cases[$caseID]; $groupCases[$suiteID][$caseID] = $case; $duration += $case->duration; - $caseNum ++; - if($case->caseResult == 'fail') $failNum ++; + $caseCount ++; + if($case->caseResult == 'fail') $failCount ++; } - $summary[$suiteID] = sprintf($this->lang->testtask->unitSummary, $caseNum, $failNum, $duration); + $summary[$suiteID] = sprintf($this->lang->testtask->summary, $caseCount, $failCount, $duration); } - $suites = $this->loadModel('testsuite')->getUnit($productID); + $suites = $this->loadModel('testsuite')->getUnitSuites($productID); /* Assign. */ $this->view->title = $this->products[$productID] . $this->lang->colon . $this->lang->testcase->common; - $this->view->position[] = html::a($this->createLink('testcase', 'browseUnit', "productID=$productID"), $this->products[$productID]); + $this->view->position[] = html::a($this->createLink('testcase', 'browseUnits', "productID=$productID"), $this->products[$productID]); $this->view->position[] = $this->lang->testcase->common; $this->view->productID = $productID; + $this->view->task = $task; $this->view->product = $this->product->getById($productID); $this->view->productName = $this->products[$productID]; $this->view->users = $this->loadModel('user')->getPairs('noletter'); @@ -1159,7 +1160,7 @@ class testtask extends control * @access public * @return void */ - public function importUnit($productID) + public function importUnitResult($productID) { if($_POST) { @@ -1170,11 +1171,11 @@ class testtask extends control move_uploaded_file($file['tmpname'], $fileName); $this->session->set('resultFile', $fileName); - $taskID = $this->testtask->importUnit($productID); + $taskID = $this->testtask->importUnitResult($productID); if(dao::isError()) die(js::error(dao::getError())); $this->loadModel('action')->create('testtask', $taskID, 'opened'); - die(js::locate($this->createLink('testtask', 'units', "taskID=$taskID"), 'parent')); + die(js::locate($this->createLink('testtask', 'unitCases', "taskID=$taskID"), 'parent')); } $this->testtask->setMenu($this->products, $productID); @@ -1190,9 +1191,9 @@ class testtask extends control ->orderBy('t1.project desc') ->fetchPairs('id', 'name'); - $this->view->title = $this->products[$productID] . $this->lang->colon . $this->lang->testtask->importUnit; + $this->view->title = $this->products[$productID] . $this->lang->colon . $this->lang->testtask->importUnitResult; $this->view->position[] = html::a($this->createLink('testtask', 'browse', "productID=$productID"), $this->products[$productID]); - $this->view->position[] = $this->lang->testtask->importUnit; + $this->view->position[] = $this->lang->testtask->importUnitResult; $this->view->projects = array('' => '') + $projects; $this->view->builds = $this->loadModel('build')->getProductBuildPairs($productID, 0, 'notrunk'); diff --git a/module/testtask/js/common.js b/module/testtask/js/common.js index 95f00b00ab..9fc5ac1201 100644 --- a/module/testtask/js/common.js +++ b/module/testtask/js/common.js @@ -21,6 +21,12 @@ $(document).ready(function() }); }) +/** + * Adjust priBox width. + * + * @access public + * @return void + */ function adjustPriBoxWidth() { var boxWidth = $('#ownerAndPriBox').width(); @@ -29,6 +35,13 @@ function adjustPriBoxWidth() $('#pri,#pri_chosen .chosen-single').css('width', boxWidth - beginWidth -addonWidth); } +/** + * Create bug from fail case. + * + * @param object $obj + * @access public + * @return void + */ function createBug(obj) { var $form = $(obj).closest('form'); @@ -45,11 +58,25 @@ function createBug(obj) config.onlybody = onlybody; } +/** + * Load project related + * + * @param int $projectID + * @access public + * @return void + */ function loadProjectRelated(projectID) { loadProjectBuilds(projectID); } +/** + * Load project builds. + * + * @param int $projectID + * @access public + * @return void + */ function loadProjectBuilds(projectID) { selectedBuild = $('#build').val(); diff --git a/module/testtask/lang/zh-cn.php b/module/testtask/lang/zh-cn.php index 6467a9668d..cda457a53e 100644 --- a/module/testtask/lang/zh-cn.php +++ b/module/testtask/lang/zh-cn.php @@ -14,7 +14,7 @@ $lang->testtask->create = "提交测试"; $lang->testtask->reportChart = '报表统计'; $lang->testtask->reportAction = '用例报表统计'; $lang->testtask->delete = "删除测试单"; -$lang->testtask->importUnit = "导入测试结果"; +$lang->testtask->importUnitResult = "导入单元测试结果"; $lang->testtask->view = "概况"; $lang->testtask->edit = "编辑测试单"; $lang->testtask->browse = "测试单列表"; @@ -82,11 +82,11 @@ $lang->testtask->lastRunner = '最后执行人'; $lang->testtask->lastRunDate = '最后执行时间'; $lang->testtask->date = '测试时间'; $lang->testtask->deleted = "已删除"; -$lang->testtask->resultFile = "测试结果"; -$lang->testtask->caseNum = '用例数'; -$lang->testtask->passNum = '成功'; -$lang->testtask->failNum = '失败'; -$lang->testtask->unitSummary = '有%s个用例,失败%s个,耗时%s。'; +$lang->testtask->resultFile = "结果文件"; +$lang->testtask->caseCount = '用例数'; +$lang->testtask->passCount = '成功'; +$lang->testtask->failCount = '失败'; +$lang->testtask->summary = '有%s个用例,失败%s个,耗时%s。'; $lang->testtask->beginAndEnd = '起止时间'; $lang->testtask->to = '至'; @@ -124,7 +124,7 @@ $lang->testtask->noTesttask = '暂时没有测试单'; $lang->testtask->checkLinked = '请检查测试单的产品是否与项目相关联'; $lang->testtask->noImportData = '导入的XML没有解析出数据。'; $lang->testtask->unitXMLFormat = '请选择Junit XML 格式的文件。'; -$lang->testtask->unitTitleTemplate = "%s 单元测试"; +$lang->testtask->titleOfAuto = "%s 自动化测试"; $lang->testtask->assignedToMe = '指派给我'; $lang->testtask->allCases = '所有用例'; diff --git a/module/testtask/model.php b/module/testtask/model.php index 8fe856d002..b62c6f5a74 100644 --- a/module/testtask/model.php +++ b/module/testtask/model.php @@ -128,7 +128,7 @@ class testtaskModel extends model public function setUnitMenu($products, $productID, $branch = 0, $testtask = 0) { $this->loadModel('product')->setMenu($products, $productID, $branch); - $selectHtml = $this->product->select($products, $productID, 'testtask', 'browseUnit', '', $branch); + $selectHtml = $this->product->select($products, $productID, 'testtask', 'browseUnits', '', $branch); if($testtask and $this->app->viewType != 'mhtml') { @@ -139,7 +139,7 @@ class testtaskModel extends model $selectHtml .= "
"; $selectHtml .= "" . $testtasks[$testtask]->name . " "; $selectHtml .= ""; $selectHtml .= "
"; $selectHtml .= "
"; @@ -236,7 +236,7 @@ class testtaskModel extends model ->leftJoin(TABLE_PRODUCT)->alias('t2')->on('t1.product = t2.id') ->leftJoin(TABLE_BUILD)->alias('t4')->on('t1.build = t4.id') ->where('t1.deleted')->eq(0) - ->andWhere('t1.auto')->eq('no') + ->andWhere('t1.auto')->ne('unit') ->beginIF($scopeAndStatus[0] == 'local')->andWhere('t1.product')->eq((int)$productID)->fi() ->beginIF($scopeAndStatus[0] == 'all')->andWhere('t1.product')->in($products)->fi() ->beginIF($scopeAndStatus[1] == 'totalStatus')->andWhere('t1.status')->in(('blocked,doing,wait,done'))->fi() @@ -256,7 +256,7 @@ class testtaskModel extends model ->leftJoin(TABLE_PROJECTPRODUCT)->alias('t5')->on('t1.project = t5.project and t1.product = t5.product') ->where('t1.deleted')->eq(0) - ->andWhere('t1.auto')->eq('no') + ->andWhere('t1.auto')->ne('unit') ->andWhere('t3.id')->in($this->app->user->view->projects) ->beginIF($scopeAndStatus[0] == 'local')->andWhere('t1.product')->eq((int)$productID)->fi() ->beginIF($scopeAndStatus[0] == 'all')->andWhere('t1.product')->in($products)->fi() @@ -293,7 +293,7 @@ class testtaskModel extends model ->leftJoin(TABLE_BUILD)->alias('t4')->on('t1.build = t4.id') ->where('t1.deleted')->eq(0) ->andWhere('t1.product')->eq($productID) - ->andWhere('t1.auto')->ne('no') + ->andWhere('t1.auto')->eq('unit') ->beginIF($browseType != 'all' and $browseType != 'newest' and $beginAndEnd) ->andWhere('t1.end')->ge($beginAndEnd['begin']) ->andWhere('t1.end')->le($beginAndEnd['end']) @@ -311,7 +311,7 @@ class testtaskModel extends model ->leftJoin(TABLE_BUILD)->alias('t4')->on('t1.build = t4.id') ->where('t1.deleted')->eq(0) ->andWhere('t1.product')->eq($productID) - ->andWhere('t1.auto')->ne('no') + ->andWhere('t1.auto')->eq('unit') ->beginIF($browseType != 'all' and $browseType != 'newest' and $beginAndEnd) ->andWhere('t1.end')->ge($beginAndEnd['begin']) ->andWhere('t1.end')->le($beginAndEnd['end']) @@ -329,13 +329,13 @@ class testtaskModel extends model { $results = zget($resultGroups, $taskID, array()); - $task->caseNum = count($results); - $task->passNum = 0; - $task->failNum = 0; + $task->caseCount = count($results); + $task->passCount = 0; + $task->failCount = 0; foreach($results as $result) { - if($result->caseResult == 'pass') $task->passNum ++; - if($result->caseResult == 'fail') $task->failNum ++; + if($result->caseResult == 'pass') $task->passCount ++; + if($result->caseResult == 'fail') $task->failCount ++; } } @@ -357,7 +357,7 @@ class testtaskModel extends model ->from(TABLE_TESTTASK)->alias('t1') ->leftJoin(TABLE_BUILD)->alias('t2')->on('t1.build = t2.id') ->where('t1.project')->eq((int)$projectID) - ->andWhere('t1.auto')->eq('no') + ->andWhere('t1.auto')->ne('unit') ->andWhere('t1.deleted')->eq(0) ->orderBy($orderBy) ->page($pager) @@ -429,7 +429,7 @@ class testtaskModel extends model ->leftJoin(TABLE_PROJECT)->alias('t2')->on('t1.project = t2.id') ->leftJoin(TABLE_BUILD)->alias('t3')->on('t1.build = t3.id') ->where('t1.deleted')->eq(0) - ->andWhere('t1.auto')->eq('no') + ->andWhere('t1.auto')->ne('unit') ->andWhere('t1.owner')->eq($account) ->andWhere('t2.id')->in($this->app->user->view->projects) ->beginIF($type == 'wait')->andWhere('t1.status')->ne('done')->fi() @@ -630,7 +630,7 @@ class testtaskModel extends model return $this->dao->select('id, name')->from(TABLE_TESTTASK) ->where('product')->eq($productID) - ->andWhere('auto')->eq('no') + ->andWhere('auto')->ne('unit') ->beginIF($beginDate)->andWhere('begin')->le($beginDate)->fi() ->andWhere('deleted')->eq('0') ->andWhere('id')->notin($testTaskID) @@ -1398,7 +1398,7 @@ class testtaskModel extends model if($action == 'block') return ($testtask->status == 'doing' || $testtask->status == 'wait'); if($action == 'activate') return ($testtask->status == 'blocked' || $testtask->status == 'done'); if($action == 'close') return $testtask->status != 'done'; - if($action == 'runcase' and $testtask->auto != 'no') return false; + if($action == 'runcase' and $testtask->auto == 'unit') return false; if($action == 'runcase') return isset($testtask->caseStatus) ? $testtask->caseStatus != 'wait' : $testtask->status != 'wait'; return true; } @@ -1648,13 +1648,13 @@ class testtaskModel extends model * @access public * @return string */ - public function importUnit($productID) + public function importUnitResult($productID) { $frame = $this->post->frame; unset($_POST['frame']); $fileName = $this->session->resultFile; - $data = $this->buildDataFromXML($fileName, $productID, $frame); + $data = $this->parseXMLResult($fileName, $productID, $frame); if($frame == 'cppunit' and empty($data['cases'])) $data = $this->buildDataFromCppXML($fileName, $productID, $frame); /* Create task. */ @@ -1665,11 +1665,11 @@ class testtaskModel extends model unset($_SESSION['resultFile']); if(dao::isError()) return false; - return $this->saveUnit($testtaskID, $productID, $data['suites'], $data['cases'], $data['results'], $data['suiteNames'], $data['caseTitles']); + return $this->processAutoResult($testtaskID, $productID, $data['suites'], $data['cases'], $data['results'], $data['suiteNames'], $data['caseTitles']); } /** - * Save unit. + * Process auto test result. * * @param int $testtaskID * @param int $productID @@ -1681,7 +1681,7 @@ class testtaskModel extends model * @access public * @return int */ - public function saveUnit($testtaskID, $productID, $suites, $cases, $results, $suiteNames = array(), $caseTitles = array()) + public function processAutoResult($testtaskID, $productID, $suites, $cases, $results, $suiteNames = array(), $caseTitles = array()) { if(empty($cases)) die(js::alert($this->lang->testtask->noImportData)); @@ -1788,7 +1788,7 @@ class testtaskModel extends model $failNodes = $parsedXML->xpath('FailedTests/FailedTest'); $passNodes = $parsedXML->xpath('SuccessfulTests/Test'); $matchNodes = array_merge($failNodes, $passNodes); - if(count($matchNodes) == 0) die(js::alert($this->lang->testtask->noImportData)); + if(count($matchNodes) == 0) return array('suites' => array(), 'cases' => array(), 'results' => array(), 'suiteNames' => array(), 'caseTitles' => array()); /* Get cases and results by parsed node. */ $now = helper::now(); @@ -1843,7 +1843,7 @@ class testtaskModel extends model } /** - * buildDataFromXML + * Parse unit result from xml. * * @param string $fileName * @param int $productID @@ -1851,19 +1851,19 @@ class testtaskModel extends model * @access public * @return array */ - public function buildDataFromXML($fileName, $productID, $frame) + public function parseXMLResult($fileName, $productID, $frame) { /* Parse result xml. */ - $unitFormat = zget($this->config->testtask->unitFormat, $frame, $this->config->testtask->unitFormat->common); - $parsedXML = simplexml_load_file($fileName); + $rules = zget($this->config->testtask->unitResultRules, $frame, $this->config->testtask->unitResultRules->common); + $parsedXML = simplexml_load_file($fileName); /* Get testcase node. */ - $matchPaths = $unitFormat['path']; - $nameFields = $unitFormat['name']; - $failure = $unitFormat['failure']; - $suiteField = $unitFormat['suite']; - $aliasSuite = zget($unitFormat, 'aliasSuite', array()); - $aliasName = zget($unitFormat, 'aliasName', array()); + $matchPaths = $rules['path']; + $nameFields = $rules['name']; + $failure = $rules['failure']; + $suiteField = $rules['suite']; + $aliasSuite = zget($rules, 'aliasSuite', array()); + $aliasName = zget($rules, 'aliasName', array()); $matchNodes = array(); foreach($matchPaths as $matchPath) { @@ -2001,7 +2001,7 @@ class testtaskModel extends model } /** - * Build data from unit. + * Parse unit result from ztf. * * @param array $caseResults * @param string $frame @@ -2011,7 +2011,7 @@ class testtaskModel extends model * @access public * @return array */ - public function buildDataFromUnit($caseResults, $frame, $productID, $jobID, $compileID) + public function parseZTFUnitResult($caseResults, $frame, $productID, $jobID, $compileID) { $now = helper::now(); $cases = array(); @@ -2081,7 +2081,7 @@ class testtaskModel extends model } /** - * Build data from ztf. + * Parse function result from ztf. * * @param array $caseResults * @param string $frame @@ -2091,7 +2091,7 @@ class testtaskModel extends model * @access public * @return array */ - public function buildDataFromZTF($caseResults, $frame, $productID, $jobID, $compileID) + public function parseZTFFuncResult($caseResults, $frame, $productID, $jobID, $compileID) { $now = helper::now(); $cases = array(); @@ -2109,13 +2109,13 @@ class testtaskModel extends model $case->product = $productID; $case->title = $caseResult->title; $case->pri = 3; - $case->type = 'unit'; - $case->stage = 'unittest'; + $case->type = 'feature'; + $case->stage = 'feature'; $case->status = 'normal'; $case->openedBy = $this->app->user->account; $case->openedDate = $now; $case->version = 1; - $case->auto = 'ztf'; + $case->auto = 'function'; $case->frame = $frame; $result = new stdclass(); diff --git a/module/testtask/view/browseunit.html.php b/module/testtask/view/browseunits.html.php similarity index 84% rename from module/testtask/view/browseunit.html.php rename to module/testtask/view/browseunits.html.php index 072ff9668c..a57ac9b0fd 100644 --- a/module/testtask/view/browseunit.html.php +++ b/module/testtask/view/browseunits.html.php @@ -20,11 +20,11 @@
@@ -47,9 +47,9 @@ testtask->build);?> testtask->owner);?> testtask->execTime);?> - testtask->caseNum;?> - testtask->passNum;?> - testtask->failNum;?> + testtask->caseCount;?> + testtask->passCount;?> + testtask->failCount;?> actions;?> @@ -57,19 +57,19 @@ id);?> - id"), $task->name);?> + id"), $task->name);?> global->flow != 'onlyTest'):?> projectName?> build == 'trunk' || empty($task->buildName)) ? $lang->trunk : html::a($this->createLink('build', 'view', "buildID=$task->build",'',true), $task->buildName);?> owner);?> end?> - caseNum?> - passNum?> - failNum?> + caseCount?> + passCount?> + failCount?> id", '', 'list', 'list-alt','','',true); + common::printIcon('testtask', 'unitCases', "taskID=$task->id", '', 'list', 'list-alt','','',true); common::printIcon('testtask', 'edit', "taskID=$task->id", $task, 'list','','','',true); if(common::hasPriv('testtask', 'delete', $task)) { diff --git a/module/testtask/view/importunit.html.php b/module/testtask/view/importunitresult.html.php similarity index 96% rename from module/testtask/view/importunit.html.php rename to module/testtask/view/importunitresult.html.php index 32541c14fb..d390eefad8 100644 --- a/module/testtask/view/importunit.html.php +++ b/module/testtask/view/importunitresult.html.php @@ -17,7 +17,7 @@
-

testtask->importUnit;?>

+

testtask->importUnitResult;?>

@@ -71,7 +71,7 @@ - + diff --git a/module/testtask/view/results.html.php b/module/testtask/view/results.html.php index 420909dec5..fda69bab08 100644 --- a/module/testtask/view/results.html.php +++ b/module/testtask/view/results.html.php @@ -20,7 +20,7 @@
- auto == 'no'):?> + auto != 'unit'):?>
testcase->precondition;?>
precondition;?>
@@ -28,7 +28,7 @@
testtask->name;?>testtask->unitTitleTemplate, date('Y-m-d H:i:s')), "class='form-control'");?>testtask->titleOfAuto, date('Y-m-d H:i:s')), "class='form-control'");?>
testtask->desc;?>
- auto == 'no'):?> + auto != 'unit'):?>
testcase->result?>   testtask->showResult, $count)?> diff --git a/module/testtask/view/unitcases.html.php b/module/testtask/view/unitcases.html.php new file mode 100644 index 0000000000..9dc98c080a --- /dev/null +++ b/module/testtask/view/unitcases.html.php @@ -0,0 +1,57 @@ + + * @package testcase + * @version $Id$ + * @link http://www.zentao.net + */ +?> +global->flow); +?> + +global->flow == 'full'):?> + +
'> +
+ + +
+
+ + +
+ +
+ + diff --git a/module/testtask/view/unitgroup.html.php b/module/testtask/view/unitgroup.html.php new file mode 100644 index 0000000000..6da58c35db --- /dev/null +++ b/module/testtask/view/unitgroup.html.php @@ -0,0 +1,68 @@ + +
+

+ testcase->noCase;?> +

+
+ + + + + + + + + + + + + + + + + + + $cases):?> + name : ''; + ?> + $case):?> + > + + + + + + + + + + + + + + + + + + + + + + +
+
+ + +
+
idAB;?> priAB;?>testcase->title;?> testtask->lastRunAccount;?>testtask->lastRunTime;?> testtask->lastRunResult;?>testcase->bugsAB;?>testcase->resultsAB;?>testcase->stepNumberAB;?> actions;?>
+
$groupName", '', "class='text-primary'");?>
+ +
pri;?>' title='testcase->priList, $case->pri, $case->pri);?>'>testcase->priList, $case->pri, $case->pri);?>case&version={$case->version}&from=testtask&task=$taskID", $case->title)) echo $case->title;?>lastRunner);?>lastRunDate)) echo date(DT_MONTHTIME1, strtotime($case->lastRunDate));?>lastRunResult) echo $lang->testcase->resultList[$case->lastRunResult];?>bugs) ? html::a($this->createLink('testcase', 'bugs', "runID={$case->id}&caseID={$case->case}"), $case->bugs, '', "class='iframe'") : $case->bugs;?>results) ? html::a($this->createLink('testtask', 'results', "runID={$case->id}&caseID={$case->case}"), $case->results, '', "class='iframe'") : $case->results;?>stepNumber;?> + id&caseID=$case->case", $case, 'list', '', '', 'iframe', true, "data-width='95%'");?> +
+ diff --git a/module/testtask/view/units.html.php b/module/testtask/view/units.html.php deleted file mode 100644 index ca44582b95..0000000000 --- a/module/testtask/view/units.html.php +++ /dev/null @@ -1,117 +0,0 @@ - - * @package testcase - * @version $Id$ - * @link http://www.zentao.net - */ -?> -global->flow); -?> -global->flow == 'full'):?> - - -
- -
-

- testcase->noCase;?> -

-
- - - - - - - - - - - - - - - - - - - $cases):?> - name : ''; - ?> - $case):?> - > - - - - - - - - - - - - - - - - - - - - - - -
-
- - -
-
idAB;?> priAB;?>testcase->title;?> testtask->lastRunAccount;?>testtask->lastRunTime;?> testtask->lastRunResult;?>testcase->bugsAB;?>testcase->resultsAB;?>testcase->stepNumberAB;?> actions;?>
-
$groupName", '', "class='text-primary'");?>
- -
pri;?>' title='testcase->priList, $case->pri, $case->pri);?>'>testcase->priList, $case->pri, $case->pri);?>case&version={$case->version}&from=testtask&task=$taskID", $case->title)) echo $case->title;?>lastRunner);?>lastRunDate)) echo date(DT_MONTHTIME1, strtotime($case->lastRunDate));?>lastRunResult) echo $lang->testcase->resultList[$case->lastRunResult];?>bugs) ? html::a($this->createLink('testcase', 'bugs', "runID={$case->id}&caseID={$case->case}"), $case->bugs, '', "class='iframe'") : $case->bugs;?>results) ? html::a($this->createLink('testtask', 'results', "runID={$case->id}&caseID={$case->case}"), $case->results, '', "class='iframe'") : $case->results;?>stepNumber;?> - id&caseID=$case->case", $case, 'list', '', '', 'iframe', true, "data-width='95%'");?> -
- -
- -