From ccd131d8a886a838af8bc6358dc9012945e3afbf Mon Sep 17 00:00:00 2001 From: liugang Date: Wed, 12 Nov 2025 10:03:40 +0800 Subject: [PATCH] + [misc] Add unit tests for testcaseZen::assignForBrowse() method MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude --- .../test/lib/testcasezen.unittest.class.php | 46 ++++++++ module/testcase/test/zen/assignforbrowse.php | 103 ++++++++++++++++++ 2 files changed, 149 insertions(+) create mode 100755 module/testcase/test/zen/assignforbrowse.php diff --git a/module/testcase/test/lib/testcasezen.unittest.class.php b/module/testcase/test/lib/testcasezen.unittest.class.php index fcb8563526..2d544165e9 100755 --- a/module/testcase/test/lib/testcasezen.unittest.class.php +++ b/module/testcase/test/lib/testcasezen.unittest.class.php @@ -2785,4 +2785,50 @@ class testcaseZenTest return $result; } + /** + * Test assignForBrowse method. + * + * @param int $productID + * @param string $branch + * @param string $browseType + * @param int $projectID + * @param int $param + * @param int $moduleID + * @param int $suiteID + * @param string $caseType + * @access public + * @return array + */ + public function assignForBrowseTest(int $productID, string $branch, string $browseType, int $projectID, int $param, int $moduleID, int $suiteID, string $caseType): array + { + global $tester; + + // 设置 session + $tester->session->set('project', $projectID); + + // 调用被测方法并获取 view 属性 + callZenMethod('testcase', 'assignForBrowse', [$productID, $branch, $browseType, $projectID, $param, $moduleID, $suiteID, $caseType]); + $view = callZenMethod('testcase', 'assignForBrowse', [$productID, $branch, $browseType, $projectID, $param, $moduleID, $suiteID, $caseType], 'view'); + + // 获取视图数据 + $result = array(); + $result['projectID'] = $view->projectID ?? 0; + $result['browseType'] = $view->browseType ?? ''; + $result['param'] = $view->param ?? 0; + $result['moduleID'] = $view->moduleID ?? 0; + $result['moduleName'] = $view->moduleName ?? ''; + $result['suiteID'] = $view->suiteID ?? 0; + $result['caseType'] = $view->caseType ?? ''; + $result['projectType'] = $view->projectType ?? ''; + $result['hasUsers'] = isset($view->users) && count($view->users) > 0 ? 1 : 0; + $result['hasModules'] = isset($view->modules) && count($view->modules) > 0 ? 1 : 0; + $result['hasSuites'] = isset($view->suiteList) && count($view->suiteList) > 0 ? 1 : 0; + $result['hasLibraries'] = isset($view->libraries) && count($view->libraries) > 0 ? 1 : 0; + $result['switcherObjectID'] = $view->switcherObjectID ?? 0; + + if(dao::isError()) return dao::getError(); + + return $result; + } + } diff --git a/module/testcase/test/zen/assignforbrowse.php b/module/testcase/test/zen/assignforbrowse.php new file mode 100755 index 0000000000..30bc44d61e --- /dev/null +++ b/module/testcase/test/zen/assignforbrowse.php @@ -0,0 +1,103 @@ +#!/usr/bin/env php +id->range('1-5'); +$productTable->name->range('产品A,产品B,产品C,产品D,产品E'); +$productTable->type->range('normal{2},branch{2},platform{1}'); +$productTable->status->range('normal'); +$productTable->createdBy->range('admin'); +$productTable->createdDate->range('`2024-01-01 10:00:00`'); +$productTable->deleted->range('0'); +$productTable->gen(5); + +$projectTable = zenData('project'); +$projectTable->id->range('1-5'); +$projectTable->name->range('项目A,项目B,项目C,项目D,项目E'); +$projectTable->type->range('project'); +$projectTable->model->range('scrum{2},waterfall{2},kanban{1}'); +$projectTable->status->range('doing'); +$projectTable->openedBy->range('admin'); +$projectTable->openedDate->range('`2024-01-01 10:00:00`'); +$projectTable->deleted->range('0'); +$projectTable->gen(5); + +$moduleTable = zenData('module'); +$moduleTable->id->range('1-10'); +$moduleTable->root->range('1{5},2{3},3{2}'); +$moduleTable->branch->range('0'); +$moduleTable->name->range('模块A,模块B,模块C,模块D,模块E,模块F,模块G,模块H,模块I,模块J'); +$moduleTable->type->range('case'); +$moduleTable->parent->range('0'); +$moduleTable->grade->range('1'); +$moduleTable->deleted->range('0'); +$moduleTable->gen(10); + +$suiteTable = zenData('testsuite'); +$suiteTable->id->range('1-5'); +$suiteTable->name->range('测试套件A,测试套件B,测试套件C,测试套件D,测试套件E'); +$suiteTable->type->range('public'); +$suiteTable->product->range('1{3},2{2}'); +$suiteTable->deleted->range('0'); +$suiteTable->gen(5); + +$userTable = zenData('user'); +$userTable->id->range('1-10'); +$userTable->account->range('admin,user1,user2,user3,user4,user5,user6,user7,user8,user9'); +$userTable->realname->range('管理员,用户1,用户2,用户3,用户4,用户5,用户6,用户7,用户8,用户9'); +$userTable->password->range('123456'); +$userTable->role->range('admin,qa{5},dev{3},pm{1}'); +$userTable->deleted->range('0'); +$userTable->gen(10); + +// 3. 用户登录(选择合适角色) +su('admin'); + +// 4. 创建测试实例(变量名与模块名一致) +$testcaseTest = new testcaseZenTest(); + +// 5. 🔴 强制要求:必须包含至少5个测试步骤 +r($testcaseTest->assignForBrowseTest(1, '0', 'all', 1, 0, 0, 0, 'feature')) && p('projectID,browseType,moduleID') && e('1,all,0'); // 步骤1:正常产品浏览(有项目) +r($testcaseTest->assignForBrowseTest(2, '0', 'all', 0, 0, 0, 0, 'feature')) && p('projectID,browseType,moduleID') && e('0,all,0'); // 步骤2:正常产品浏览(无项目) +r($testcaseTest->assignForBrowseTest(1, '0', 'all', 0, 0, 5, 0, 'feature')) && p('moduleID,moduleName') && e('5,模块E'); // 步骤3:指定模块ID浏览 +r($testcaseTest->assignForBrowseTest(2, '1', 'all', 2, 0, 0, 0, 'feature')) && p('projectID,browseType') && e('2,all'); // 步骤4:分支产品浏览 +r($testcaseTest->assignForBrowseTest(1, '0', 'all', 0, 0, 0, 3, 'feature')) && p('suiteID,caseType') && e('3,feature'); // 步骤5:指定测试套件浏览 +r($testcaseTest->assignForBrowseTest(1, '0', 'wait', 0, 0, 0, 0, 'feature')) && p('browseType,param') && e('wait,0'); // 步骤6:按状态浏览 +r($testcaseTest->assignForBrowseTest(1, '0', 'bystory', 0, 10, 0, 0, 'feature')) && p('browseType,param') && e('bystory,10'); // 步骤7:按需求浏览 \ No newline at end of file