From 5b2c5c80bad4cb69bd9037c8d2a1de8c16578637 Mon Sep 17 00:00:00 2001 From: wangyidong Date: Wed, 22 Mar 2017 11:31:14 +0800 Subject: [PATCH] * add testtask repot for bug report. --- module/testcase/view/caseheader.html.php | 2 +- module/testreport/control.php | 10 --- module/testreport/model.php | 73 +++++++++++++++++-- .../testreport/view/blockbugreport.html.php | 14 ++-- module/testreport/view/blockbugs.html.php | 2 +- module/testreport/view/blockbuilds.html.php | 2 +- module/testreport/view/blockcases.html.php | 2 +- .../testreport/view/blocklegacybugs.html.php | 4 +- module/testreport/view/blockstories.html.php | 2 +- module/testtask/control.php | 9 ++- module/testtask/css/report.css | 7 ++ module/testtask/js/report.js | 14 ++++ module/testtask/lang/zh-cn.php | 18 ++--- module/testtask/model.php | 4 +- module/testtask/view/caseheader.html.php | 2 +- module/testtask/view/report.html.php | 2 +- 16 files changed, 118 insertions(+), 49 deletions(-) create mode 100644 module/testtask/css/report.css create mode 100644 module/testtask/js/report.js diff --git a/module/testcase/view/caseheader.html.php b/module/testcase/view/caseheader.html.php index 0eb25ba953..056259f063 100644 --- a/module/testcase/view/caseheader.html.php +++ b/module/testcase/view/caseheader.html.php @@ -4,7 +4,7 @@
  • '> lang->tree->all; + echo !empty($moduleID) ? $moduleName : $this->lang->tree->all; if(!empty($moduleID)) { $removeLink = $browseType == 'bymodule' ? inlink('browse', "productID=$productID&branch=$branch&browseType=$browseType¶m=0&orderBy=$orderBy&recTotal=0&recPerPage={$pager->recPerPage}") : 'javascript:removeCookieByKey("caseModule")'; diff --git a/module/testreport/control.php b/module/testreport/control.php index 05915ec1dc..2ac48782d8 100644 --- a/module/testreport/control.php +++ b/module/testreport/control.php @@ -178,8 +178,6 @@ class testreport extends control } $cases = $this->testreport->getTaskCases($tasks); $bugInfo = $this->testreport->getBugInfo($tasks, $productIdList, $begin, $end, $builds); - $modules = array(); - foreach($productIdList as $productID) $modules += $this->tree->getOptionMenu($productID, $viewType = 'bug'); $this->view->begin = $begin; @@ -196,7 +194,6 @@ class testreport extends control $this->view->builds = $builds; $this->view->users = $this->user->getPairs('noletter|nodeleted|noclosed'); - $this->view->modules = $modules; $this->view->cases = $cases; $this->view->caseSummary = $this->testreport->getResultSummary($tasks, $cases); @@ -289,8 +286,6 @@ class testreport extends control $cases = $this->testreport->getTaskCases($tasks); $bugInfo = $this->testreport->getBugInfo($tasks, $productIdList, $report->begin, $report->end, $builds); - $modules = array(); - foreach($productIdList as $productID) $modules += $this->tree->getOptionMenu($productID, $viewType = 'bug'); $this->view->title = $report->title . $this->lang->testreport->edit; @@ -304,7 +299,6 @@ class testreport extends control $this->view->builds = $builds; $this->view->users = $this->user->getPairs('noletter|nodeleted|noclosed'); - $this->view->modules = $modules; $this->view->cases = $cases; $this->view->caseSummary = $this->testreport->getResultSummary($tasks, $cases); @@ -343,7 +337,6 @@ class testreport extends control $browseLink = inlink('browse', "objectID=$projectID&objectType=project"); $this->view->position[] = html::a($browseLink, $project->name); - } $stories = $report->stories ? $this->story->getByList($report->stories) : array(); @@ -360,8 +353,6 @@ class testreport extends control $builds = $report->builds ? $this->build->getByList($report->builds) : array(); $cases = $this->testreport->getTaskCases($tasks, $report->cases); $bugInfo = $this->testreport->getBugInfo($tasks, $report->product, $report->begin, $report->end, $builds); - $modules = array(); - foreach(explode(',', $report->product) as $productID) $modules += $this->tree->getOptionMenu($productID, $viewType = 'bug'); $this->view->title = $report->title; $this->view->browseLink = $browseLink; @@ -374,7 +365,6 @@ class testreport extends control $this->view->builds = $builds; $this->view->cases = $cases; $this->view->users = $this->user->getPairs('noletter|nodeleted|noclosed'); - $this->view->modules = $modules; $this->view->actions = $this->loadModel('action')->getList('testreport', $reportID); $this->view->storySummary = $this->product->summary($stories); diff --git a/module/testreport/model.php b/module/testreport/model.php index 5161e6b422..cc628c7b53 100644 --- a/module/testreport/model.php +++ b/module/testreport/model.php @@ -152,8 +152,8 @@ class testreportModel extends model $statusGroups[$bug->status] = isset($statusGroups[$bug->status]) ? $statusGroups[$bug->status] + 1 : 1; $openedByGroups[$bug->openedBy] = isset($openedByGroups[$bug->openedBy]) ? $openedByGroups[$bug->openedBy] + 1 : 1; $moduleGroups[$bug->module] = isset($moduleGroups[$bug->module]) ? $moduleGroups[$bug->module] + 1 : 1; - if($bug->resolvedBy)$resolvedByGroups[$bug->resolvedBy] = isset($resolvedByGroups[$bug->resolvedBy]) ? $resolvedByGroups[$bug->resolvedBy] + 1 : 1; - if($bug->resolution)$resolutionGroups[$bug->resolution] = isset($resolutionGroups[$bug->resolution]) ? $resolutionGroups[$bug->resolution] + 1 : 1; + if($bug->resolvedBy) $resolvedByGroups[$bug->resolvedBy] = isset($resolvedByGroups[$bug->resolvedBy]) ? $resolvedByGroups[$bug->resolvedBy] + 1 : 1; + if($bug->resolution) $resolutionGroups[$bug->resolution] = isset($resolutionGroups[$bug->resolution]) ? $resolutionGroups[$bug->resolution] + 1 : 1; if($bug->status == 'resolved' or $bug->status == 'closed') $resolvedBugs ++; } @@ -166,16 +166,73 @@ class testreportModel extends model if(!array_diff(explode(',', $bug->openedBuild), $buildIdList) and ($bug->status == 'active' OR $bug->resolvedDate > "$end 23:59:59")) $legacyBugs[$bug->id] = $bug; if($bug->case) $byCaseNum ++; } + + $bugInfo['legacyBugs'] = $legacyBugs; $bugInfo['countBugByTask'] = count($bugsByTask); - $bugInfo['bugSeverityGroups'] = $severityGroups; - $bugInfo['bugStatusGroups'] = $statusGroups; - $bugInfo['bugResolutionGroups'] = $resolutionGroups; - $bugInfo['bugOpenedByGroups'] = $openedByGroups; - $bugInfo['bugModuleGroups'] = $moduleGroups; - $bugInfo['bugResolvedByGroups'] = $resolvedByGroups; $bugInfo['bugConfirmedRate'] = empty($resolvedBugs) ? 0 : round((count(zget($resolutionGroups, 'fixed', array())) + count(zget($resolutionGroups, 'postponed', array()))) / $resolvedBugs * 100, 2); $bugInfo['bugCreateByCaseRate'] = empty($byCaseNum) ? 0 : round($byCaseNum / count($newBugs) * 100, 2); + + $this->app->loadLang('bug'); + $users = $this->loadModel('user')->getPairs('noclosed|nodeleted|noletter'); + $data = array(); + foreach($severityGroups as $severity => $count) + { + $data[$severity] = new stdclass(); + $data[$severity]->name = zget($this->lang->bug->severityList, $severity); + $data[$severity]->value = $count; + } + $bugInfo['bugSeverityGroups'] = $data; + + $data = array(); + foreach($statusGroups as $status => $count) + { + $data[$status] = new stdclass(); + $data[$status]->name = zget($this->lang->bug->statusList, $status); + $data[$status]->value = $count; + } + $bugInfo['bugStatusGroups'] = $data; + + $data = array(); + foreach($resolutionGroups as $resolution => $count) + { + $data[$resolution] = new stdclass(); + $data[$resolution]->name = zget($this->lang->bug->resolutionList, $resolution); + $data[$resolution]->value = $count; + } + $bugInfo['bugResolutionGroups'] = $data; + + $data = array(); + foreach($openedByGroups as $openedBy => $count) + { + $data[$openedBy] = new stdclass(); + $data[$openedBy]->name = zget($users, $openedBy); + $data[$openedBy]->value = $count; + } + $bugInfo['bugOpenedByGroups'] = $data; + + $this->loadModel('tree'); + $modules = array(); + $data = array(); + if(is_string($productIdList)) $productIdList = explode(',', $productIdList); + foreach($productIdList as $productID) $modules += $this->tree->getOptionMenu($productID, $viewType = 'bug'); + foreach($moduleGroups as $moduleID => $count) + { + $data[$moduleID] = new stdclass(); + $data[$moduleID]->name = zget($modules, $moduleID); + $data[$moduleID]->value = $count; + } + $bugInfo['bugModuleGroups'] = $data; + + $data = array(); + foreach($resolvedByGroups as $resolvedBy => $count) + { + $data[$resolvedBy] = new stdclass(); + $data[$resolvedBy]->name = zget($users, $resolvedBy); + $data[$resolvedBy]->value = $count; + } + $bugInfo['bugResolvedByGroups'] = $data; + return $bugInfo; } diff --git a/module/testreport/view/blockbugreport.html.php b/module/testreport/view/blockbugreport.html.php index 4b13419b78..0286136021 100644 --- a/module/testreport/view/blockbugreport.html.php +++ b/module/testreport/view/blockbugreport.html.php @@ -4,9 +4,8 @@ ';?> - - + + value;?> diff --git a/module/testreport/view/blockbugs.html.php b/module/testreport/view/blockbugs.html.php index 67925c47ea..9d9b4c84c1 100644 --- a/module/testreport/view/blockbugs.html.php +++ b/module/testreport/view/blockbugs.html.php @@ -25,6 +25,6 @@ - +
    testreport->$infoKey?>
    @@ -14,6 +13,7 @@
    @@ -46,10 +46,12 @@ $listValue):?> name; + $data = $infoValue[$listKey]->value; + } ?>
    testreport->none;?>
    testreport->none;?>
    diff --git a/module/testreport/view/blockbuilds.html.php b/module/testreport/view/blockbuilds.html.php index 17ec7c063a..5bc2f96c43 100644 --- a/module/testreport/view/blockbuilds.html.php +++ b/module/testreport/view/blockbuilds.html.php @@ -19,6 +19,6 @@ - + diff --git a/module/testreport/view/blockcases.html.php b/module/testreport/view/blockcases.html.php index 881616253f..c5db5539b6 100644 --- a/module/testreport/view/blockcases.html.php +++ b/module/testreport/view/blockcases.html.php @@ -29,6 +29,6 @@ - testreport->none;?> + testreport->none;?> diff --git a/module/testreport/view/blocklegacybugs.html.php b/module/testreport/view/blocklegacybugs.html.php index 523a4dfd17..86a411bb9e 100644 --- a/module/testreport/view/blocklegacybugs.html.php +++ b/module/testreport/view/blocklegacybugs.html.php @@ -5,7 +5,7 @@ priAB;?> bug->title;?> openedByAB;?> - bug->resolvedBy;?> + bug->resolvedBy;?> bug->resolvedDate;?> statusAB;?> @@ -25,6 +25,6 @@ - testreport->none;?> + testreport->none;?> diff --git a/module/testreport/view/blockstories.html.php b/module/testreport/view/blockstories.html.php index 1eb2afe1d9..2b3e4c17ed 100644 --- a/module/testreport/view/blockstories.html.php +++ b/module/testreport/view/blockstories.html.php @@ -27,6 +27,6 @@ - testreport->none;?> + testreport->none;?> diff --git a/module/testtask/control.php b/module/testtask/control.php index 66387a6174..a291baf861 100644 --- a/module/testtask/control.php +++ b/module/testtask/control.php @@ -311,16 +311,17 @@ class testtask extends control public function report($productID, $taskID, $browseType, $branchID, $moduleID) { $this->loadModel('report'); - $this->view->charts = array(); + $this->view->charts = array(); if(!empty($_POST)) { + $task = $this->testtask->getById($taskID); + $bugInfo = $this->loadModel('testreport')->getBugInfo(array($taskID => $taskID), array($productID => $productID), $task->begin, $task->end, array($task->build => $task->build)); foreach($this->post->charts as $chart) { $chartFunc = 'getDataOf' . $chart; - $chartData = $this->testtask->$chartFunc($taskID); - $chartOption = $this->lang->testtask->report->$chart; - $this->testtask->mergeChartOption($chart); + $chartData = isset($bugInfo[$chart]) ? $bugInfo[$chart] : $this->testtask->$chartFunc($taskID); + $chartOption = $this->testtask->mergeChartOption($chart); $this->view->charts[$chart] = $chartOption; $this->view->datas[$chart] = $this->report->computePercent($chartData); diff --git a/module/testtask/css/report.css b/module/testtask/css/report.css new file mode 100644 index 0000000000..b4d3ca6834 --- /dev/null +++ b/module/testtask/css/report.css @@ -0,0 +1,7 @@ +.table-bordered caption {border: 1px solid #ddd;} +.table-bordered tr > th:first-child, .table-bordered tr > td:first-child {border-left: 1px solid #ddd!important} +.table-bordered tr > th:last-child, .table-bordered tr > td:last-child {border-right: 1px solid #ddd!important} + +.col-side {width: 250px} + +.panel-heading > strong > span {float: right; color: #29a8cd;} diff --git a/module/testtask/js/report.js b/module/testtask/js/report.js new file mode 100644 index 0000000000..38276947f3 --- /dev/null +++ b/module/testtask/js/report.js @@ -0,0 +1,14 @@ +$(function() +{ + var resizeChartTable = function() + { + $('.table-wrapper').each(function() + { + var $this = $(this); + $this.css('max-height', $this.closest('.table').find('.chart-wrapper').outerHeight()); + }); + }; + resizeChartTable(); + fixedTableHead('.table-wrapper'); + $(window).resize(resizeChartTable); +}); diff --git a/module/testtask/lang/zh-cn.php b/module/testtask/lang/zh-cn.php index 0aa5a08ad9..28017e7ec1 100644 --- a/module/testtask/lang/zh-cn.php +++ b/module/testtask/lang/zh-cn.php @@ -59,7 +59,7 @@ $lang->testtask->linkVersion = '版本'; $lang->testtask->lastRunAccount = '执行人'; $lang->testtask->lastRunTime = '执行时间'; $lang->testtask->lastRunResult = '结果'; -$lang->testtask->report = '测试总结'; +$lang->testtask->reportField = '测试总结'; $lang->testtask->files = '上传附件'; $lang->testtask->legendDesc = '版本描述'; @@ -143,19 +143,15 @@ $lang->testtask->report->charts['testTaskPerRunResult'] = '用例结果统计'; $lang->testtask->report->charts['testTaskPerType'] = '用例类型统计'; $lang->testtask->report->charts['testTaskPerModule'] = '用例模块统计'; $lang->testtask->report->charts['testTaskPerRunner'] = '用例执行人统计'; +$lang->testtask->report->charts['bugSeverityGroups'] = 'Bug严重级别分布'; +$lang->testtask->report->charts['bugStatusGroups'] = 'Bug状态分布'; +$lang->testtask->report->charts['bugOpenedByGroups'] = 'Bug创建者分布'; +$lang->testtask->report->charts['bugResolvedByGroups'] = 'Bug解决者分布'; +$lang->testtask->report->charts['bugResolutionGroups'] = 'Bug解决方案分布'; +$lang->testtask->report->charts['bugModuleGroups'] = 'Bug模块分布'; $lang->testtask->report->options = new stdclass(); $lang->testtask->report->options->graph = new stdclass(); $lang->testtask->report->options->type = 'pie'; $lang->testtask->report->options->width = 500; $lang->testtask->report->options->height = 140; - -$lang->testtask->report->testTaskPerRunResult = new stdclass(); -$lang->testtask->report->testTaskPerType = new stdclass(); -$lang->testtask->report->testTaskPerModule = new stdclass(); -$lang->testtask->report->testTaskPerRunner = new stdclass(); - -$lang->testtask->report->testTaskPerRunResult->graph = new stdclass(); -$lang->testtask->report->testTaskPerType->graph = new stdclass(); -$lang->testtask->report->testTaskPerModule->graph = new stdclass(); -$lang->testtask->report->testTaskPerRunner->graph = new stdclass(); diff --git a/module/testtask/model.php b/module/testtask/model.php index 08a559b762..294e08d57d 100644 --- a/module/testtask/model.php +++ b/module/testtask/model.php @@ -447,9 +447,10 @@ class testtaskModel extends model */ public function mergeChartOption($chartType) { - $chartOption = $this->lang->testtask->report->$chartType; + $chartOption = isset($this->lang->testtask->report->$chartType) ? $this->lang->testtask->report->$chartType : new stdclass(); $commonOption = $this->lang->testtask->report->options; + if(!isset($chartOption->graph)) $chartOption->graph = new stdclass(); $chartOption->graph->caption = $this->lang->testtask->report->charts[$chartType]; if(!isset($chartOption->type)) $chartOption->type = $commonOption->type; if(!isset($chartOption->width)) $chartOption->width = $commonOption->width; @@ -457,6 +458,7 @@ class testtaskModel extends model /* 合并配置。*/ foreach($commonOption->graph as $key => $value) if(!isset($chartOption->graph->$key)) $chartOption->graph->$key = $value; + return $chartOption; } /** diff --git a/module/testtask/view/caseheader.html.php b/module/testtask/view/caseheader.html.php index 0f8a07e1ab..9d6daed6a5 100644 --- a/module/testtask/view/caseheader.html.php +++ b/module/testtask/view/caseheader.html.php @@ -43,7 +43,7 @@ if($this->methodName == 'cases') echo "
  •  {$lang->testcase->bySearch}
  • "; if(common::hasPriv('testtask', 'view')) echo '
  • ' . html::a(inlink('view', "taskID=$taskID"), $lang->testtask->view) . '
  • '; - if(common::hasPriv('testreport', 'browse')) echo '
  • ' . html::a($this->createLink('testreport', 'browse', "objectID=$productID&objectType=product&extra=$taskID"), $lang->testtask->report) . '
  • '; + if(common::hasPriv('testreport', 'browse')) echo '
  • ' . html::a($this->createLink('testreport', 'browse', "objectID=$productID&objectType=product&extra=$taskID"), $lang->testtask->reportField) . '
  • '; ?>
    diff --git a/module/testtask/view/report.html.php b/module/testtask/view/report.html.php index c831e8e9e7..03bdcb16f8 100644 --- a/module/testtask/view/report.html.php +++ b/module/testtask/view/report.html.php @@ -54,7 +54,7 @@
    - testtask->report->$chartType, 'height', $lang->testtask->report->options->height) . 'px'; ?> + height . 'px'; ?>