* adjust for parse cppunit.

This commit is contained in:
wangyidong
2020-04-03 13:51:02 +08:00
parent 32bbf6ada8
commit cd4f552347
7 changed files with 119 additions and 18 deletions
+3 -3
View File
@@ -457,7 +457,7 @@ class testcaseModel extends model
$cases = array();
if($browseType == 'bymodule' or $browseType == 'all' or $browseType == 'wait')
{
$cases = $this->getModuleCases($productID, $branch, $modules, $sort, $pager, $browseType, $type);
$cases = $this->getModuleCases($productID, $branch, $modules, $sort, $pager, $browseType, $auto);
}
/* Cases need confirmed. */
elseif($browseType == 'needconfirm')
@@ -477,12 +477,12 @@ class testcaseModel extends model
}
elseif($browseType == 'bysuite')
{
$cases = $this->getBySuite($productID, $branch, $queryID, $modules, $sort, $pager);
$cases = $this->getBySuite($productID, $branch, $queryID, $modules, $sort, $pager, $auto);
}
/* By search. */
elseif($browseType == 'bysearch')
{
$cases = $this->getBySearch($productID, $queryID, $sort, $pager, $branch, $type);
$cases = $this->getBySearch($productID, $queryID, $sort, $pager, $branch, $auto);
}
return $cases;
+2 -2
View File
@@ -21,5 +21,5 @@ $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');
$config->testtask->unitFormat->phpunit = array('path' => array('test', 'testsuite/testcase', 'testcase'), 'name' => array('className', 'methodName'), 'failure' => 'failure');
$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'));
+1
View File
@@ -325,6 +325,7 @@ class testtask extends control
$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)
{
$caseNum = 0;
+1
View File
@@ -1,2 +1,3 @@
th.c-side{width:260px;}
td.pass{color:green}
td.fail{color:red}
+109 -11
View File
@@ -1654,7 +1654,14 @@ class testtaskModel extends model
unset($_POST['frame']);
$fileName = $this->session->resultFile;
$data = $this->buildDataFromXML($fileName, $productID, $frame);
if($frame == 'cppunit')
{
$data = $this->buildDataFromCppXML($fileName, $productID, $frame);
}
else
{
$data = $this->buildDataFromXML($fileName, $productID, $frame);
}
/* Create task. */
$this->post->set('auto', 'unit');
@@ -1682,6 +1689,8 @@ class testtaskModel extends model
*/
public function saveUnit($testtaskID, $productID, $suites, $cases, $results, $suiteNames = array(), $caseTitles = array())
{
if(empty($cases)) die(js::alert($this->lang->testtask->noImportData));
/* Import cases and link task and insert result. */
$this->loadModel('action');
$existSuites = $this->dao->select('*')->from(TABLE_TESTSUITE)->where('name')->in($suiteNames)->andWhere('product')->eq($productID)->andWhere('type')->eq('unit')->andWhere('deleted')->eq(0)->fetchPairs('name', 'id');
@@ -1767,6 +1776,78 @@ class testtaskModel extends model
return $testtaskID;
}
/**
* Build data from cppunit XML.
*
* @param string $fileName
* @param int $productID
* @param string $frame
* @access public
* @return array
*/
public function buildDataFromCppXML($fileName, $productID, $frame)
{
/* Parse result xml. */
$parsedXML = simplexml_load_file($fileName);
/* Get testcase node. */
$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));
/* Get cases and results by parsed node. */
$now = helper::now();
$cases = array();
$results = array();
$caseTitles = array();
$suiteNames = array();
$suiteIndex = 0;
$suites = array($suiteIndex => '');
foreach($matchNodes as $caseIndex => $matchNode)
{
$case = new stdclass();
$case->product = $productID;
$case->title = (string)$matchNode->Name;
$case->pri = 3;
$case->type = 'unit';
$case->stage = 'unittest';
$case->status = 'normal';
$case->openedBy = $this->app->user->account;
$case->openedDate = $now;
$case->version = 1;
$case->auto = 'unit';
$case->frame = $frame ? $frame : 'junit';
$result = new stdclass();
$result->case = 0;
$result->version = 1;
$result->caseResult = 'pass';
$result->lastRunner = $this->app->user->account;
$result->date = $now;
$result->duration = 0;
$result->xml = $matchNode->asXML();
$result->stepResults[0]['result'] = 'pass';
$result->stepResults[0]['real'] = '';
if(isset($matchNode->Message))
{
$result->caseResult = 'fail';
$result->stepResults[0]['result'] = 'fail';
$result->stepResults[0]['real'] = (string)$matchNode->Message;
}
$result->stepResults = serialize($result->stepResults);
$case->lastRunner = $this->app->user->account;
$case->lastRunDate = $now;
$case->lastRunResult = $result->caseResult;
$caseTitles[$suiteIndex][] = $case->title;
$cases[$suiteIndex][$caseIndex] = $case;
$results[$suiteIndex][$caseIndex] = $result;
}
return array('suites' => $suites, 'cases' => $cases, 'results' => $results, 'suiteNames' => $suiteNames, 'caseTitles' => $caseTitles);
}
/**
* buildDataFromXML
*
@@ -1786,6 +1867,9 @@ class testtaskModel extends model
$matchPaths = $unitFormat['path'];
$nameFields = $unitFormat['name'];
$failure = $unitFormat['failure'];
$suiteField = $unitFormat['suite'];
$aliasSuite = zget($unitFormat, 'aliasSuite', array());
$aliasName = zget($unitFormat, 'aliasName', array());
$matchNodes = array();
foreach($matchPaths as $matchPath)
{
@@ -1817,11 +1901,11 @@ class testtaskModel extends model
$caseNodes = $parentNode->xpath($caseNode);
$attributes = $parentNode->attributes();
$suite = '';
if(isset($attributes['name']))
if(isset($attributes[$suiteField]))
{
$suite = new stdclass();
$suite->product = $productID;
$suite->name = (string)$attributes['name'];
$suite->name = (string)$attributes[$suiteField];
$suite->type = 'unit';
$suite->addedBy = $this->app->user->account;
$suite->addedDate = $now;
@@ -1830,15 +1914,19 @@ class testtaskModel extends model
else
{
$attributes = $caseNodes[0]->attributes();
if(isset($attributes['classname']))
foreach($aliasSuite as $alias)
{
$suite = new stdclass();
$suite->product = $productID;
$suite->name = (string)$attributes['classname'];
$suite->type = 'unit';
$suite->addedBy = $this->app->user->account;
$suite->addedDate = $now;
$suiteNames[] = $suite->name;
if(isset($attributes[$alias]))
{
$suite = new stdclass();
$suite->product = $productID;
$suite->name = (string)$attributes[$alias];
$suite->type = 'unit';
$suite->addedBy = $this->app->user->account;
$suite->addedDate = $now;
$suiteNames[] = $suite->name;
break;
}
}
}
$suites[$suiteIndex] = $suite;
@@ -1865,6 +1953,16 @@ class testtaskModel extends model
$case->title .= (string)$attributes[$field] . ' ';
}
$case->title = trim($case->title);
if(empty($case->title))
{
foreach($aliasName as $field)
{
if(!isset($attributes[$field])) continue;
$case->title .= (string)$attributes[$field] . ' ';
}
$case->title = trim($case->title);
}
if(empty($case->title)) continue;
$result = new stdclass();
$result->case = 0;
-1
View File
@@ -47,7 +47,6 @@ $status = $this->session->testTaskVersionStatus;
</div>
</div>
<div class="btn-toolbar pull-right">
<?php common::printLink('testtask', 'importUnit', "product=$productID", "<i class='icon icon-import'></i> " . $lang->testtask->importUnit, '', "class='btn'");?>
<?php common::printLink('testtask', 'create', "product=$productID", "<i class='icon icon-plus'></i> " . $lang->testtask->create, '', "class='btn btn-primary'");?>
</div>
</div>
+3 -1
View File
@@ -17,7 +17,9 @@ js::set('flow', $config->global->flow);
?>
<?php if($config->global->flow == 'full'):?>
<div id='mainMenu' class='clearfix'>
<div class='btn-toolbar pull-left'></div>
<div class='btn-toolbar pull-left'>
<?php common::printBack($this->createLink('testtask', 'browseUnit'), 'btn btn-primary');?>
</div>
<div class='btn-toolbar pull-right'>
<div class='btn-group'>
<button type='button' class='btn btn-link dropdown-toggle' data-toggle='dropdown'>