禅道开源版16.4实战:手把手教你给测试用例加个“测试方式”字段(附完整代码)

禅道开源版16.4实战:手把手教你给测试用例加个“测试方式”字段(附完整代码) 禅道开源版16.4深度定制零侵入式扩展测试用例模块实战指南当测试团队从手工测试向自动化测试转型时往往需要清晰区分两类用例的执行方式。禅道开源版16.4原生测试用例模块并未内置该分类字段但通过其灵活的扩展机制我们可以不修改核心代码就实现这个需求。本文将完整演示如何通过zentaoPHP扩展架构为测试用例添加测试方式字段的全流程。1. 环境准备与需求拆解在开始编码前需要确认以下基础环境禅道版本16.4.stable扩展机制与后续版本存在差异开发环境PHP 5.6/7.0、MySQL 5.5目录权限确保module目录可写需求明确为三个核心功能点新建用例时可选手工/自动化测试方式用例列表页展示该字段编辑用例时可修改该属性技术方案选择zentaoPHP的扩展覆盖模式而非直接修改源码这样做有三大优势不影响官方版本升级修改范围最小化扩展代码集中管理提示所有扩展代码都应存放在对应模块的ext目录下这是禅道推荐的扩展规范2. 数据库层改造首先需要扩展zt_case表结构建议通过SQL文件管理变更-- 文件位置/module/testcase/ext/sql/alter_table.sql ALTER TABLE zt_case ADD COLUMN exec_type VARCHAR(20) NOT NULL DEFAULT manual COMMENT 测试方式 manual/auto AFTER last_run_result;字段设计考虑字段名类型默认值说明exec_typeVARCHAR(20)manual存储manual/auto两种值执行方案推荐开发环境直接执行SQL生产环境通过禅道「后台-系统-数据库-执行SQL」菜单操作3. 前端界面扩展实战3.1 新建页面字段注入在/module/testcase/ext/view/下创建create.html.php?php /** * 覆盖扩展新建用例视图 */ include ../../view/create.html.php; // 继承原始视图 // 在适用阶段字段后追加测试方式字段 $html HTML div classtable-col idexecTypeBox div classinput-group span classinput-group-addon fix-border{$lang-testcase-execType}/span ?php echo html::select(execType, $lang-testcase-execTypeList, $execType, classform-control chosen);? /div /div HTML; // 通过jQuery动态插入DOM echo SCRIPT script $(#stageBox).after({$html}); /script SCRIPT;3.2 列表页字段展示创建/module/testcase/ext/view/browse.test.html.hook.php实现钩子扩展?php // 在列表最后追加执行类型列 $html HTML th classw-80px{$lang-testcase-execType}/th HTML; ? script $(.table-col-header th:last).after(?php echo $html?); // 遍历每行数据追加对应单元格 $(.case-item).each(function(){ var execType $(this).data(exec-type); var displayText execType auto ? 自动化 : 手工; $(this).find(td:last).after(td${displayText}/td); }); /script4. 后端逻辑扩展4.1 语言包配置创建/module/testcase/ext/lang/zh-cn/testcase.php?php $lang-testcase-execType 测试方式; $lang-testcase-execTypeList array( manual 手工执行, auto 自动化执行 );4.2 控制器层扩展覆盖create方法/module/testcase/ext/control/create.php?php include ../../control.php; class myTestcase extends testcase { public function create($productID, $branch , $moduleID 0, $from , $param 0, $storyID 0, $extras ) { // 设置默认测试方式 $this-view-execType manual; parent::create($productID, $branch, $moduleID, $from, $param, $storyID, $extras); } }4.3 模型层处理通过钩子扩展保存逻辑/module/testcase/ext/model/hook/create.test.php?php // 自动捕获表单提交的execType值 if(isset($_POST[execType])) { $data-execType $this-post-execType; }5. 完整功能验证流程为确保扩展功能完整可用建议按以下步骤验证数据库验证执行DESC zt_case确认字段已添加新建用例后检查exec_type字段值前端功能验证新建页面下拉框显示正常列表页新增列显示正确编辑页面可修改字段值数据流验证提交不同选项检查数据库存储列表筛选功能测试如需常见问题排查字段不显示 ⇒ 检查view扩展路径是否正确选项为空 ⇒ 确认lang文件加载顺序保存无效 ⇒ 检查model钩子是否生效6. 扩展方案优化建议基础功能实现后可以考虑以下增强点性能优化为exec_type字段添加索引列表页实现服务端分页过滤功能增强// 在/ext/config/my.php中添加配置项 $config-testcase-execTypes array( manual 手工, auto 自动化, mixed 混合执行 );使用体验添加列表页筛选功能实现批量修改测试方式增加统计报表展示两类用例比例经过三个实际项目的验证这种扩展方式在升级禅道版本时表现出良好的兼容性。唯一需要特别注意是当官方修改了testcase模块的核心结构时可能需要相应调整扩展点位置。