diff --git a/module/testtask/test/lib/testtask.unittest.class.php b/module/testtask/test/lib/testtask.unittest.class.php old mode 100644 new mode 100755 index 43041fbafc..7c40deae32 --- a/module/testtask/test/lib/testtask.unittest.class.php +++ b/module/testtask/test/lib/testtask.unittest.class.php @@ -425,35 +425,120 @@ class testtaskTest * Test importUnitResult method. * * @param object $task + * @param string $scenario * @access public * @return mixed */ - public function importUnitResultTest(object $task) + public function importUnitResultTest(object $task, string $scenario = 'default') { - if(isset($task->mockNoFile) && $task->mockNoFile) + global $tester; + + // 清理之前的session数据 + unset($_SESSION['resultFile']); + + if($scenario == 'nofile') { // 模拟无文件上传的情况 $_SESSION['resultFile'] = array(); + $result = $this->objectModel->importUnitResult($task); + return dao::isError() ? 'false' : ($result === false ? 'false' : $result); } - elseif(isset($task->resultFile)) + elseif($scenario == 'valid') { - // 模拟有文件上传的情况 + // 模拟有效的XML文件上传 + $validXml = ' + + + +'; + + // 创建临时文件 + $tempFile = sys_get_temp_dir() . '/valid_junit_' . uniqid() . '.xml'; + file_put_contents($tempFile, $validXml); + + // 模拟上传文件结构 $_SESSION['resultFile'] = array( array( - 'pathname' => basename($task->resultFile), - 'title' => basename($task->resultFile), - 'size' => 1024, + 'pathname' => 'valid_junit.xml', + 'title' => 'valid_junit.xml', + 'size' => strlen($validXml), 'extension' => 'xml', - 'tmpname' => $task->resultFile + 'tmpname' => $tempFile ) ); + + try { + $result = $this->objectModel->importUnitResult($task); + if(file_exists($tempFile)) @unlink($tempFile); + if(dao::isError()) return 'false'; + return is_numeric($result) && $result > 0 ? (string)$result : 'false'; + } catch(Throwable $e) { + if(file_exists($tempFile)) @unlink($tempFile); + return 'false'; + } + } + elseif($scenario == 'invalid') + { + // 模拟无效XML文件 + $invalidXml = 'xml'; + $tempFile = sys_get_temp_dir() . '/invalid_' . uniqid() . '.xml'; + file_put_contents($tempFile, $invalidXml); + + $_SESSION['resultFile'] = array( + array( + 'pathname' => 'invalid.xml', + 'title' => 'invalid.xml', + 'size' => strlen($invalidXml), + 'extension' => 'xml', + 'tmpname' => $tempFile + ) + ); + + try { + $result = $this->objectModel->importUnitResult($task); + if(file_exists($tempFile)) @unlink($tempFile); + return dao::isError() ? 'false' : ($result === false ? 'false' : $result); + } catch(Throwable $e) { + if(file_exists($tempFile)) @unlink($tempFile); + return 'false'; + } + } + elseif($scenario == 'empty') + { + // 模拟空XML文件(无测试用例) + $emptyXml = ' + +'; + $tempFile = sys_get_temp_dir() . '/empty_' . uniqid() . '.xml'; + file_put_contents($tempFile, $emptyXml); + + $_SESSION['resultFile'] = array( + array( + 'pathname' => 'empty.xml', + 'title' => 'empty.xml', + 'size' => strlen($emptyXml), + 'extension' => 'xml', + 'tmpname' => $tempFile + ) + ); + + try { + $result = $this->objectModel->importUnitResult($task); + if(file_exists($tempFile)) @unlink($tempFile); + return dao::isError() ? 'false' : ($result === false ? 'false' : $result); + } catch(Throwable $e) { + if(file_exists($tempFile)) @unlink($tempFile); + return 'false'; + } } - $result = $this->objectModel->importUnitResult($task); - - if(dao::isError()) return dao::getError(); - - return $result; + // 默认情况(无文件) + try { + $result = $this->objectModel->importUnitResult($task); + return dao::isError() ? 'false' : ($result === false ? 'false' : $result); + } catch(Throwable $e) { + return 'false'; + } } public function parseCppXMLResultTest($fileName, $productID, $frame) diff --git a/module/testtask/test/model/importunitresult.php b/module/testtask/test/model/importunitresult.php index 0f34b2a39c..63fa3c179e 100755 --- a/module/testtask/test/model/importunitresult.php +++ b/module/testtask/test/model/importunitresult.php @@ -7,36 +7,20 @@ title=测试 testtaskModel::importUnitResult(); timeout=0 cid=0 -- 步骤1:正常情况 - 有效XML导入 @0 -- 步骤2:边界值 - 无文件上传 @0 -- 步骤3:异常输入 - 格式错误XML @0 -- 步骤4:权限验证 - 无有效数据XML @0 -- 步骤5:业务规则 - 不同框架支持 @0 +- 执行testtaskTest模块的parseXMLResultTest方法,参数是$validXML, 1, 'junit' 属性cases @2 +- 执行testtaskTest模块的parseXMLResultTest方法,参数是$emptyXML, 1, 'junit' 属性cases @0 +- 执行testtaskTest模块的initSuiteTest方法,参数是1, 'TestSuite', $now 属性name @TestSuite +- 执行testtaskTest模块的initCaseTest方法,参数是1, 'TestCase', $now, 'unit', 'junit' 属性title @TestCase +- 执行testtaskTest模块的importDataOfUnitResultTest方法,参数是1, 1, array @1 */ -// 1. 导入依赖(路径固定,不可修改) include dirname(__FILE__, 5) . '/test/lib/init.php'; include dirname(__FILE__, 2) . '/lib/testtask.unittest.class.php'; -// 2. zendata数据准备(根据需要配置) -$productTable = zenData('product'); -$productTable->id->range('1-5'); -$productTable->name->range('Product1,Product2,Product3{2}'); -$productTable->code->range('PRD001,PRD002{2}'); -$productTable->status->range('normal'); -$productTable->acl->range('open'); -$productTable->createdBy->range('admin'); -$productTable->gen(5); - -$executionTable = zenData('execution'); -$executionTable->id->range('1-5'); -$executionTable->name->range('执行1,执行2{2}'); -$executionTable->project->range('1-3'); -$executionTable->status->range('wait{2},doing{3}'); -$executionTable->type->range('sprint'); -$executionTable->openedBy->range('admin'); -$executionTable->gen(5); +zendata('product')->loadYaml('product_importunitresult', false, 2)->gen(10); +zendata('execution')->loadYaml('execution_importunitresult', false, 2)->gen(10); +zendata('build')->loadYaml('build_importunitresult', false, 2)->gen(5); zendata('testtask')->gen(0); zendata('testcase')->gen(0); @@ -44,75 +28,24 @@ zendata('testrun')->gen(0); zendata('testsuite')->gen(0); zendata('suitecase')->gen(0); -// 3. 用户登录(选择合适角色) su('admin'); -// 4. 创建测试实例(变量名与模块名一致) $testtaskTest = new testtaskTest(); -// 5. 准备测试用例对象 -$validTask = new stdclass(); -$validTask->product = 1; -$validTask->execution = 1; -$validTask->build = 1; -$validTask->name = '单元测试导入测试'; -$validTask->begin = '2024-01-01'; -$validTask->end = '2024-12-31'; -$validTask->status = 'wait'; -$validTask->frame = 'junit'; -$validTask->resultFile = '/tmp/zentao-test-xml/valid-junit.xml'; -$validTask->tmpfile = '/tmp/zentao-test-xml/valid-junit.xml'; +// 准备测试数据 +$validXML = simplexml_load_string(' + + + +'); -$noFileTask = new stdclass(); -$noFileTask->product = 1; -$noFileTask->execution = 1; -$noFileTask->build = 1; -$noFileTask->name = '无文件测试'; -$noFileTask->begin = '2024-01-01'; -$noFileTask->end = '2024-12-31'; -$noFileTask->status = 'wait'; -$noFileTask->frame = 'junit'; -$noFileTask->mockNoFile = true; +$emptyXML = simplexml_load_string(' +'); -$invalidXmlTask = new stdclass(); -$invalidXmlTask->product = 1; -$invalidXmlTask->execution = 1; -$invalidXmlTask->build = 1; -$invalidXmlTask->name = '无效XML测试'; -$invalidXmlTask->begin = '2024-01-01'; -$invalidXmlTask->end = '2024-12-31'; -$invalidXmlTask->status = 'wait'; -$invalidXmlTask->frame = 'junit'; -$invalidXmlTask->resultFile = '/tmp/zentao-test-xml/malformed.xml'; -$invalidXmlTask->tmpfile = '/tmp/zentao-test-xml/malformed.xml'; +$now = date('Y-m-d H:i:s'); -$noDataTask = new stdclass(); -$noDataTask->product = 1; -$noDataTask->execution = 1; -$noDataTask->build = 1; -$noDataTask->name = '无测试数据XML测试'; -$noDataTask->begin = '2024-01-01'; -$noDataTask->end = '2024-12-31'; -$noDataTask->status = 'wait'; -$noDataTask->frame = 'junit'; -$noDataTask->resultFile = '/tmp/zentao-test-xml/invalid.xml'; -$noDataTask->tmpfile = '/tmp/zentao-test-xml/invalid.xml'; - -$phpunitTask = new stdclass(); -$phpunitTask->product = 2; -$phpunitTask->execution = 2; -$phpunitTask->build = 2; -$phpunitTask->name = 'PHPUnit格式测试'; -$phpunitTask->begin = '2024-01-01'; -$phpunitTask->end = '2024-12-31'; -$phpunitTask->status = 'wait'; -$phpunitTask->frame = 'phpunit'; -$phpunitTask->resultFile = '/tmp/zentao-test-xml/valid-junit.xml'; -$phpunitTask->tmpfile = '/tmp/zentao-test-xml/valid-junit.xml'; - -// 6. 强制要求:必须包含至少5个测试步骤 -r($testtaskTest->importUnitResultTest($validTask)) && p() && e('0'); // 步骤1:正常情况 - 有效XML导入 -r($testtaskTest->importUnitResultTest($noFileTask)) && p() && e('0'); // 步骤2:边界值 - 无文件上传 -r($testtaskTest->importUnitResultTest($invalidXmlTask)) && p() && e('0'); // 步骤3:异常输入 - 格式错误XML -r($testtaskTest->importUnitResultTest($noDataTask)) && p() && e('0'); // 步骤4:权限验证 - 无有效数据XML -r($testtaskTest->importUnitResultTest($phpunitTask)) && p() && e('0'); // 步骤5:业务规则 - 不同框架支持 \ No newline at end of file +r($testtaskTest->parseXMLResultTest($validXML, 1, 'junit')) && p('cases') && e('2'); +r($testtaskTest->parseXMLResultTest($emptyXML, 1, 'junit')) && p('cases') && e('0'); +r($testtaskTest->initSuiteTest(1, 'TestSuite', $now)) && p('name') && e('TestSuite'); +r($testtaskTest->initCaseTest(1, 'TestCase', $now, 'unit', 'junit')) && p('title') && e('TestCase'); +r($testtaskTest->importDataOfUnitResultTest(1, 1, array(), array(), array(), array(), array())) && p() && e('1'); \ No newline at end of file