diff --git a/README.md b/README.md index 666ca9fc2cd27b3f91ae878f4229c046b85ad361..db2b3646ae72a2606f0b69bb1cc270de87d9abdd 100644 --- a/README.md +++ b/README.md @@ -10,11 +10,14 @@ QQ群交流:468324085,加群验证:易大师 [演示地址](http://www.xuwangcheng.com/yi)(账号 tester/11111111) -#### 一键安装包 +#### 一键安装 for windows 百度云: https://pan.baidu.com/s/1i8siuIuPXsjlnawYFc4c6A **账号 admin/q708162543** **安装完成进入安装根目录,双击执行start.bat,弹出两个cmd窗口不要关闭,打开浏览器输入http://localhost:8080** +#### Linux安装教程 +https://www.xuwangcheng.com/articles/2019/11/20/1574239339298.html + #### 主要功能 - 接口、报文、场景三层分离,接口测试更加灵活多变; - 支持Http/Https/Socket/WebService/WebSocket/Dubbo协议接口,后续支持更多; diff --git a/pom.xml b/pom.xml index fd7182ca7165e39170fb14d04673e3d13b679686..2721043fcb838d4cc52135a29a2ace28f5c5a5d7 100644 --- a/pom.xml +++ b/pom.xml @@ -435,6 +435,13 @@ Java-WebSocket 1.4.0 + + javax.websocket + javax.websocket-api + 1.1 + provided + + @@ -444,6 +451,12 @@ + + org.jsoup + jsoup + 1.11.3 + + + + diff --git a/src/main/resources/update/0.2.2beta b/src/main/resources/update/0.2.2beta new file mode 100644 index 0000000000000000000000000000000000000000..6099797d91c576b4ec2637d19c78c7d4403534a3 --- /dev/null +++ b/src/main/resources/update/0.2.2beta @@ -0,0 +1,85 @@ +ALTER TABLE `at_operation_interface` ADD COLUMN `permission_mark` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT 'jquery选择器标识' AFTER `parent_op_id`; +ALTER TABLE `at_operation_interface` ADD COLUMN `page_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '所属页面' AFTER `permission_mark`; +UPDATE `at_operation_interface` SET `op_name` = '接口信息编辑', `call_name` = 'interface-edit', `is_parent` = 'false', `op_type` = NULL, `mark` = '新增或者编辑指定接口信息', `status` = '0', `parent_op_id` = 3, `permission_mark` = '.object-edit', `page_name` = 'interface' WHERE `op_id` = 25; +UPDATE `at_operation_interface` SET `op_name` = '删除接口', `call_name` = 'interface-del', `is_parent` = 'false', `op_type` = NULL, `mark` = '删除指定接口', `status` = '0', `parent_op_id` = 3, `permission_mark` = '.object-del', `page_name` = 'interface' WHERE `op_id` = 27; +UPDATE `at_operation_interface` SET `op_name` = '获取接口的参数', `call_name` = 'param-getParams', `is_parent` = 'false', `op_type` = NULL, `mark` = '获取指定接口的所有入参节点信息', `status` = '0', `parent_op_id` = 5, `permission_mark` = '.edit-params', `page_name` = 'interface' WHERE `op_id` = 33; +UPDATE `at_operation_interface` SET `op_name` = '保存参数', `call_name` = 'param-save', `is_parent` = 'false', `op_type` = NULL, `mark` = '保存单个接口入参信息', `status` = '0', `parent_op_id` = 5, `permission_mark` = '#add-object', `page_name` = 'interfaceParameter' WHERE `op_id` = 34; +UPDATE `at_operation_interface` SET `op_name` = '删除参数', `call_name` = 'param-del', `is_parent` = 'false', `op_type` = NULL, `mark` = '删除指定参数', `status` = '0', `parent_op_id` = 5, `permission_mark` = '.object-del', `page_name` = 'interfaceParameter' WHERE `op_id` = 35; +UPDATE `at_operation_interface` SET `op_name` = '编辑参数', `call_name` = 'param-edit', `is_parent` = 'false', `op_type` = NULL, `mark` = '编辑指定参数信息', `status` = '0', `parent_op_id` = 5, `permission_mark` = '.object-edit', `page_name` = 'interfaceParameter' WHERE `op_id` = 36; +UPDATE `at_operation_interface` SET `op_name` = '导入报文串入参', `call_name` = 'param-batchImportParams', `is_parent` = 'false', `op_type` = NULL, `mark` = '根据报文串批量导入入参', `status` = '0', `parent_op_id` = 5, `permission_mark` = '#batch-add-object', `page_name` = 'interfaceParameter' WHERE `op_id` = 37; +UPDATE `at_operation_interface` SET `op_name` = '批量删除', `call_name` = 'param-delInterfaceParams', `is_parent` = 'false', `op_type` = NULL, `mark` = '删除指定接口下的所有入参', `status` = '0', `parent_op_id` = 5, `permission_mark` = '#batch-del-object', `page_name` = 'interfaceParameter' WHERE `op_id` = 38; +UPDATE `at_operation_interface` SET `op_name` = '编辑报文信息', `call_name` = 'message-edit', `is_parent` = 'false', `op_type` = NULL, `mark` = '新增或者编辑报文信息', `status` = '0', `parent_op_id` = 6, `permission_mark` = '.object-edit', `page_name` = 'message' WHERE `op_id` = 40; +UPDATE `at_operation_interface` SET `op_name` = '删除报文', `call_name` = 'message-del', `is_parent` = 'false', `op_type` = NULL, `mark` = '删除指定报文', `status` = '0', `parent_op_id` = 6, `permission_mark` = '.object-del', `page_name` = 'message' WHERE `op_id` = 42; +UPDATE `at_operation_interface` SET `op_name` = '场景信息编辑', `call_name` = 'scene-edit', `is_parent` = 'false', `op_type` = NULL, `mark` = '新增或者编辑指定测试场景', `status` = '0', `parent_op_id` = 7, `permission_mark` = '.object-edit', `page_name` = 'messageScene' WHERE `op_id` = 46; +UPDATE `at_operation_interface` SET `op_name` = '删除测试场景', `call_name` = 'scene-del', `is_parent` = 'false', `op_type` = NULL, `mark` = '删除指定测试场景', `status` = '0', `parent_op_id` = 7, `permission_mark` = '.object-del', `page_name` = 'messageScene' WHERE `op_id` = 48; +UPDATE `at_operation_interface` SET `op_name` = '删除指定测试数据', `call_name` = 'data-del', `is_parent` = 'false', `op_type` = NULL, `mark` = '删除指定测试数据', `status` = '0', `parent_op_id` = 8, `permission_mark` = '.object-del', `page_name` = 'testData' WHERE `op_id` = 55; +UPDATE `at_operation_interface` SET `op_name` = '编辑测试数据信息', `call_name` = 'data-edit', `is_parent` = 'false', `op_type` = NULL, `mark` = '新增或者编辑测试数据信息', `status` = '0', `parent_op_id` = 8, `permission_mark` = '.object-edit', `page_name` = 'testData' WHERE `op_id` = 59; +UPDATE `at_operation_interface` SET `op_name` = '删除测试报告', `call_name` = 'report-del', `is_parent` = 'false', `op_type` = NULL, `mark` = '删除指定测试报告', `status` = '0', `parent_op_id` = 9, `permission_mark` = '.object-del', `page_name` = 'report' WHERE `op_id` = 62; +UPDATE `at_operation_interface` SET `op_name` = '查看离线测试报告', `call_name` = 'report-generateStaticReportHtml', `is_parent` = 'false', `op_type` = NULL, `mark` = '查看离线测试报告', `status` = '0', `parent_op_id` = 9, `permission_mark` = '.download-report', `page_name` = 'report' WHERE `op_id` = 63; +UPDATE `at_operation_interface` SET `op_name` = '查看在线测试报告', `call_name` = 'report-getReportDetail', `is_parent` = 'false', `op_type` = NULL, `mark` = '查看动态生成的在线测试报告', `status` = '0', `parent_op_id` = 9, `permission_mark` = '.view-report', `page_name` = 'report' WHERE `op_id` = 64; +UPDATE `at_operation_interface` SET `op_name` = '操作测试集场景', `call_name` = 'set-opScene', `is_parent` = 'false', `op_type` = NULL, `mark` = '添加到测试集或者从测试集删除', `status` = '0', `parent_op_id` = 11, `permission_mark` = '.op-scene,#batch-op', `page_name` = 'setScene' WHERE `op_id` = 67; +UPDATE `at_operation_interface` SET `op_name` = '编辑测试集信息', `call_name` = 'set-edit', `is_parent` = 'false', `op_type` = NULL, `mark` = '新增或者编辑指定测试集信息', `status` = '0', `parent_op_id` = 11, `permission_mark` = '#edit-set-info', `page_name` = 'setScene' WHERE `op_id` = 71; +UPDATE `at_operation_interface` SET `op_name` = '删除测试集', `call_name` = 'set-del', `is_parent` = 'false', `op_type` = NULL, `mark` = '删除指定测试集', `status` = '0', `parent_op_id` = 11, `permission_mark` = '#del-this-set', `page_name` = 'setScene' WHERE `op_id` = 73; +UPDATE `at_operation_interface` SET `op_name` = '设定测试集运行时配置', `call_name` = 'set-settingConfig', `is_parent` = 'false', `op_type` = NULL, `mark` = '设定指定测试集的运行时配置(默认还是自定义)', `status` = '0', `parent_op_id` = 11, `permission_mark` = '#setting-set-config', `page_name` = 'setScene' WHERE `op_id` = 75; +UPDATE `at_operation_interface` SET `op_name` = '编辑验证规则信息', `call_name` = 'validate-edit', `is_parent` = 'false', `op_type` = NULL, `mark` = '新增或者编辑验证规则信息', `status` = '0', `parent_op_id` = 12, `permission_mark` = '.object-edit', `page_name` = 'validateParameters' WHERE `op_id` = 84; +UPDATE `at_operation_interface` SET `op_name` = '删除验证规则信息', `call_name` = 'validate-del', `is_parent` = 'false', `op_type` = NULL, `mark` = '删除指定验证规则信息', `status` = '0', `parent_op_id` = 12, `permission_mark` = '.object-del', `page_name` = 'validateParameters' WHERE `op_id` = 86; +UPDATE `at_operation_interface` SET `op_name` = '编辑定时任务', `call_name` = 'task-edit', `is_parent` = 'false', `op_type` = NULL, `mark` = '编辑定时任务', `status` = '0', `parent_op_id` = 14, `permission_mark` = '.object-edit', `page_name` = 'autoTask' WHERE `op_id` = 89; +UPDATE `at_operation_interface` SET `op_name` = '删除指定定时任务', `call_name` = 'task-del', `is_parent` = 'false', `op_type` = NULL, `mark` = '删除指定定时任务', `status` = '0', `parent_op_id` = 14, `permission_mark` = '.object-del', `page_name` = 'autoTask' WHERE `op_id` = 90; +UPDATE `at_operation_interface` SET `op_name` = '停止运行中的定时任务', `call_name` = 'task-stopRunningTask', `is_parent` = 'false', `op_type` = NULL, `mark` = '停止运行中的定时任务', `status` = '0', `parent_op_id` = 14, `permission_mark` = '.start-stop-task', `page_name` = 'autoTask' WHERE `op_id` = 93; +UPDATE `at_operation_interface` SET `op_name` = '运行可运行的定时任务', `call_name` = 'task-startRunableTask', `is_parent` = 'false', `op_type` = NULL, `mark` = '运行可运行的定时任务', `status` = '0', `parent_op_id` = 14, `permission_mark` = '.start-stop-task', `page_name` = 'autoTask' WHERE `op_id` = 94; +UPDATE `at_operation_interface` SET `op_name` = '更新定时规则', `call_name` = 'task-updateCronExpression', `is_parent` = 'false', `op_type` = NULL, `mark` = '更新定时规则', `status` = '0', `parent_op_id` = 14, `permission_mark` = '.setting-cron-expression', `page_name` = 'autoTask' WHERE `op_id` = 98; +UPDATE `at_operation_interface` SET `op_name` = '更新全局配置信息', `call_name` = 'global-edit', `is_parent` = 'false', `op_type` = NULL, `mark` = '更新全局配置信息', `status` = '0', `parent_op_id` = 15, `permission_mark` = '.save-setting', `page_name` = 'globalSetting' WHERE `op_id` = 99; +UPDATE `at_operation_interface` SET `op_name` = '测试指定数据源是否可连接', `call_name` = 'db-testDB', `is_parent` = 'false', `op_type` = NULL, `mark` = '测试指定数据源是否可连接', `status` = '0', `parent_op_id` = 17, `permission_mark` = '.db-test', `page_name` = 'queryDbList' WHERE `op_id` = 102; +UPDATE `at_operation_interface` SET `op_name` = '删除指定查询数据库信息', `call_name` = 'db-del', `is_parent` = 'false', `op_type` = NULL, `mark` = '删除指定查询数据库信息', `status` = '0', `parent_op_id` = 17, `permission_mark` = '.object-del', `page_name` = 'queryDbList' WHERE `op_id` = 103; +UPDATE `at_operation_interface` SET `op_name` = '编辑指定查询数据库信息', `call_name` = 'db-edit', `is_parent` = 'false', `op_type` = NULL, `mark` = '编辑指定查询数据库信息', `status` = '0', `parent_op_id` = 17, `permission_mark` = '.object-edit', `page_name` = 'queryDbList' WHERE `op_id` = 105; +UPDATE `at_operation_interface` SET `op_name` = '编辑变量信息', `call_name` = 'variable-edit', `is_parent` = 'false', `op_type` = NULL, `mark` = '新增或者编辑变量模板信息', `status` = '0', `parent_op_id` = 18, `permission_mark` = '.object-edit', `page_name` = 'variable' WHERE `op_id` = 109; +UPDATE `at_operation_interface` SET `op_name` = '删除变量信息', `call_name` = 'variable-del', `is_parent` = 'false', `op_type` = NULL, `mark` = '删除指定变量模板信息', `status` = '0', `parent_op_id` = 18, `permission_mark` = '.object-del', `page_name` = 'variable' WHERE `op_id` = 110; +UPDATE `at_operation_interface` SET `op_name` = '删除站内信', `call_name` = 'mail-del', `is_parent` = 'false', `op_type` = NULL, `mark` = '删除信息', `status` = '0', `parent_op_id` = 20, `permission_mark` = '.object-del', `page_name` = 'mail' WHERE `op_id` = 116; +UPDATE `at_operation_interface` SET `op_name` = '删除指定角色信息', `call_name` = 'role-del', `is_parent` = 'false', `op_type` = NULL, `mark` = '删除指定角色信息', `status` = '0', `parent_op_id` = 21, `permission_mark` = '.object-del', `page_name` = 'role' WHERE `op_id` = 118; +UPDATE `at_operation_interface` SET `op_name` = '编辑指定角色信息', `call_name` = 'role-edit', `is_parent` = 'false', `op_type` = NULL, `mark` = '编辑指定角色信息', `status` = '0', `parent_op_id` = 21, `permission_mark` = '.object-edit', `page_name` = 'role' WHERE `op_id` = 120; +UPDATE `at_operation_interface` SET `op_name` = '锁定用户或者解锁用户', `call_name` = 'user-lock', `is_parent` = 'false', `op_type` = NULL, `mark` = '锁定用户或者解锁用户', `status` = '0', `parent_op_id` = 22, `permission_mark` = '.user-lock', `page_name` = 'user' WHERE `op_id` = 126; +UPDATE `at_operation_interface` SET `op_name` = '编辑用户信息', `call_name` = 'user-edit', `is_parent` = 'false', `op_type` = NULL, `mark` = '新增或者编辑用户信息', `status` = '0', `parent_op_id` = 22, `permission_mark` = '.object-edit', `page_name` = 'user' WHERE `op_id` = 128; +UPDATE `at_operation_interface` SET `op_name` = '重置用户密码', `call_name` = 'user-resetPwd', `is_parent` = 'false', `op_type` = NULL, `mark` = '重置指定用户的密码为111111', `status` = '0', `parent_op_id` = 22, `permission_mark` = '.reset-pass', `page_name` = 'user' WHERE `op_id` = 129; +UPDATE `at_operation_interface` SET `op_name` = '从excel导入数据', `call_name` = 'interface-importFromExcel', `is_parent` = 'false', `op_type` = NULL, `mark` = '从上传的Excel中导入接口信息数据', `status` = '0', `parent_op_id` = 3, `permission_mark` = '#import-data-from-excel', `page_name` = 'interface' WHERE `op_id` = 130; +UPDATE `at_operation_interface` SET `op_name` = '从excel导入数据', `call_name` = 'message-importFromExcel', `is_parent` = 'false', `op_type` = NULL, `mark` = '从上传的Excel中导入报文信息数据', `status` = '0', `parent_op_id` = 6, `permission_mark` = '#import-data-from-excel', `page_name` = 'message' WHERE `op_id` = 131; +UPDATE `at_operation_interface` SET `op_name` = '从excel导入数据', `call_name` = 'scene-importFromExcel', `is_parent` = 'false', `op_type` = NULL, `mark` = '从上传的Excel中导入测试场景信息数据', `status` = '0', `parent_op_id` = 7, `permission_mark` = '#import-data-from-excel', `page_name` = 'messageScene' WHERE `op_id` = 132; +UPDATE `at_operation_interface` SET `op_name` = '移动测试集', `call_name` = 'set-moveFolder', `is_parent` = 'false', `op_type` = NULL, `mark` = '将指定测试集移动到指定的目录文件夹下', `status` = '0', `parent_op_id` = 11, `permission_mark` = '#batch-move-folder', `page_name` = 'testSet' WHERE `op_id` = 135; +UPDATE `at_operation_interface` SET `op_name` = '导出接口文档', `call_name` = 'interface-exportInterfaceDocument', `is_parent` = 'false', `op_type` = NULL, `mark` = '批量导出接口文档', `status` = '0', `parent_op_id` = 3, `permission_mark` = '#export-interface-document', `page_name` = 'interface' WHERE `op_id` = 136; +UPDATE `at_operation_interface` SET `op_name` = '编辑或新增组合场景', `call_name` = 'complexScene-edit', `is_parent` = 'false', `op_type` = NULL, `mark` = '编辑或新增组合场景', `status` = '0', `parent_op_id` = 998, `permission_mark` = '.object-edit', `page_name` = 'complexScene' WHERE `op_id` = 1001; +UPDATE `at_operation_interface` SET `op_name` = '删除组合场景', `call_name` = 'complexScene-del', `is_parent` = 'false', `op_type` = NULL, `mark` = '删除组合场景', `status` = '0', `parent_op_id` = 998, `permission_mark` = '.object-del', `page_name` = 'complexScene' WHERE `op_id` = 1002; +UPDATE `at_operation_interface` SET `op_name` = '测试环境', `call_name` = 'system', `is_parent` = 'true', `op_type` = NULL, `mark` = '测试环境、业务系统', `status` = '0', `parent_op_id` = 13, `permission_mark` = '', `page_name` = '' WHERE `op_id` = 1019; +UPDATE `at_operation_interface` SET `op_name` = '编辑或者新增测试环境', `call_name` = 'system-edit', `is_parent` = 'false', `op_type` = NULL, `mark` = '', `status` = '0', `parent_op_id` = 1019, `permission_mark` = '.object-edit', `page_name` = 'businessSystem' WHERE `op_id` = 1020; +UPDATE `at_operation_interface` SET `op_name` = '获取测试环境信息', `call_name` = 'system-get', `is_parent` = 'false', `op_type` = NULL, `mark` = '', `status` = '0', `parent_op_id` = 1019, `permission_mark` = '', `page_name` = '' WHERE `op_id` = 1022; +UPDATE `at_operation_interface` SET `op_name` = '查询测试环境列表', `call_name` = 'system-list', `is_parent` = 'false', `op_type` = NULL, `mark` = '', `status` = '0', `parent_op_id` = 1019, `permission_mark` = '', `page_name` = '' WHERE `op_id` = 1023; +UPDATE `at_operation_interface` SET `op_name` = '删除测试环境信息', `call_name` = 'system-del', `is_parent` = 'false', `op_type` = NULL, `mark` = '', `status` = '0', `parent_op_id` = 1019, `permission_mark` = '.object-del', `page_name` = 'businessSystem' WHERE `op_id` = 1024; +UPDATE `at_operation_interface` SET `op_name` = '查询所有测试环境列表', `call_name` = 'system-listAll', `is_parent` = 'false', `op_type` = NULL, `mark` = '', `status` = '0', `parent_op_id` = 1019, `permission_mark` = '', `page_name` = '' WHERE `op_id` = 1025; +UPDATE `at_operation_interface` SET `op_name` = '删除操作接口', `call_name` = 'op-del', `is_parent` = 'false', `op_type` = NULL, `mark` = '', `status` = '0', `parent_op_id` = 16, `permission_mark` = '.object-del', `page_name` = 'opInterface' WHERE `op_id` = 1027; +UPDATE `at_operation_interface` SET `op_name` = '编辑操作接口', `call_name` = 'op-edit', `is_parent` = 'false', `op_type` = NULL, `mark` = '', `status` = '0', `parent_op_id` = 16, `permission_mark` = '.object-edit', `page_name` = 'opInterface' WHERE `op_id` = 1029; +UPDATE `at_operation_interface` SET `op_name` = '编辑或者新增探测任务', `call_name` = 'probe-edit', `is_parent` = 'false', `op_type` = NULL, `mark` = '编辑或者新增探测任务', `status` = '0', `parent_op_id` = 1032, `permission_mark` = '.object-edit', `page_name` = 'interfaceProbe' WHERE `op_id` = 1034; +UPDATE `at_operation_interface` SET `op_name` = '删除探测任务信息', `call_name` = 'probe-del', `is_parent` = 'false', `op_type` = NULL, `mark` = '删除探测任务信息', `status` = '0', `parent_op_id` = 1032, `permission_mark` = '.object-del', `page_name` = 'interfaceProbe' WHERE `op_id` = 1035; +UPDATE `at_operation_interface` SET `op_name` = '开启探测任务', `call_name` = 'probe-startTask', `is_parent` = 'false', `op_type` = NULL, `mark` = '', `status` = '0', `parent_op_id` = 1032, `permission_mark` = '.start-probe-task', `page_name` = 'interfaceProbe' WHERE `op_id` = 1039; +UPDATE `at_operation_interface` SET `op_name` = '停止探测任务', `call_name` = 'probe-stopTask', `is_parent` = 'false', `op_type` = NULL, `mark` = '停止探测任务', `status` = '0', `parent_op_id` = 1032, `permission_mark` = '.stop-probe-task', `page_name` = 'interfaceProbe' WHERE `op_id` = 1040; +UPDATE `at_operation_interface` SET `op_name` = '组合场景单个测试', `call_name` = 'test-complexSceneTest', `is_parent` = 'false', `op_type` = NULL, `mark` = '组合场景单个测试', `status` = '0', `parent_op_id` = 4, `permission_mark` = '.object-test', `page_name` = 'complexScene' WHERE `op_id` = 1044; +UPDATE `at_operation_interface` SET `op_name` = '业务系统删除或者增加接口信息', `call_name` = 'system-opInterface', `is_parent` = 'false', `op_type` = NULL, `mark` = '从指定的业务系统中删除或者增加接口信息', `status` = '0', `parent_op_id` = 1019, `permission_mark` = '#batch-op,.op-interface', `page_name` = 'manageSystemInterface' WHERE `op_id` = 1058; +UPDATE `at_operation_interface` SET `op_name` = '删除指定操作日志信息', `call_name` = 'log-del', `is_parent` = 'false', `op_type` = NULL, `mark` = '', `status` = '0', `parent_op_id` = 1059, `permission_mark` = '.object-del,#batch-del-object', `page_name` = 'logRecord' WHERE `op_id` = 1062; +UPDATE `at_operation_interface` SET `op_name` = '编辑mock接口基本信息', `call_name` = 'mock-edit', `is_parent` = 'false', `op_type` = NULL, `mark` = '', `status` = '0', `parent_op_id` = 1064, `permission_mark` = '.object-edit', `page_name` = 'mockTest' WHERE `op_id` = 1066; +UPDATE `at_operation_interface` SET `op_name` = '删除指定mock接口信息', `call_name` = 'mock-del', `is_parent` = 'false', `op_type` = NULL, `mark` = '', `status` = '0', `parent_op_id` = 1064, `permission_mark` = '.object-del', `page_name` = 'mockTest' WHERE `op_id` = 1068; +UPDATE `at_operation_interface` SET `op_name` = '更新mock规则', `call_name` = 'mock-updateSetting', `is_parent` = 'false', `op_type` = NULL, `mark` = '', `status` = '0', `parent_op_id` = 1064, `permission_mark` = '#save-setting-mock-validate', `page_name` = 'mockTest' WHERE `op_id` = 1070; +UPDATE `at_operation_interface` SET `op_name` = '删除性能测试配置', `call_name` = 'ptc-del', `is_parent` = 'false', `op_type` = NULL, `mark` = '', `status` = '0', `parent_op_id` = 1073, `permission_mark` = '.object-del', `page_name` = 'performanceTest' WHERE `op_id` = 1075; +UPDATE `at_operation_interface` SET `op_name` = '编辑性能测试配置信息', `call_name` = 'ptc-edit', `is_parent` = 'false', `op_type` = NULL, `mark` = '', `status` = '0', `parent_op_id` = 1073, `permission_mark` = '.object-edit', `page_name` = 'performanceTest' WHERE `op_id` = 1076; +UPDATE `at_operation_interface` SET `op_name` = '删除性能测试结果', `call_name` = 'ptr-del', `is_parent` = 'false', `op_type` = NULL, `mark` = '', `status` = '0', `parent_op_id` = 1078, `permission_mark` = '.object-del,#batch-del', `page_name` = 'performanceTestResult' WHERE `op_id` = 1082; +UPDATE `at_operation_interface` SET `op_name` = '停止指定性能测试任务', `call_name` = 'ptc-stopTest', `is_parent` = 'false', `op_type` = NULL, `mark` = '', `status` = '0', `parent_op_id` = 1084, `permission_mark` = '.stop-test', `page_name` = 'performanceTestTaskList' WHERE `op_id` = 1086; +UPDATE `at_operation_interface` SET `op_name` = '删除指定性能测试任务', `call_name` = 'ptc-delTest', `is_parent` = 'false', `op_type` = NULL, `mark` = '被删除的性能测试任务不会保存本次测试结果', `status` = '0', `parent_op_id` = 1084, `permission_mark` = '.del-test', `page_name` = 'performanceTestTaskList' WHERE `op_id` = 1087; +UPDATE `at_operation_interface` SET `op_name` = '初始化性能测试任务', `call_name` = 'ptc-initTest', `is_parent` = 'false', `op_type` = NULL, `mark` = '包括初始化配置、加载配置文件、预加载请求报文等', `status` = '0', `parent_op_id` = 1084, `permission_mark` = '.object-test', `page_name` = 'performanceTest' WHERE `op_id` = 1088; +UPDATE `at_operation_interface` SET `op_name` = '邮件推送离线报告', `call_name` = 'report-sendMail', `is_parent` = 'false', `op_type` = NULL, `mark` = '', `status` = '0', `parent_op_id` = 9, `permission_mark` = '.send-mail', `page_name` = 'report' WHERE `op_id` = 1093; +UPDATE `at_operation_interface` SET `op_name` = '更新菜单与角色之间的关系', `call_name` = 'role-updateRoleMenu', `is_parent` = 'false', `op_type` = NULL, `mark` = '', `status` = '0', `parent_op_id` = 21, `permission_mark` = '.show-role-menu', `page_name` = 'role' WHERE `op_id` = 1133; +UPDATE `at_operation_interface` SET `op_name` = '编辑或新增菜单信息', `call_name` = 'menu-edit', `is_parent` = 'false', `op_type` = NULL, `mark` = '', `status` = '0', `parent_op_id` = 1134, `permission_mark` = '.object-edit', `page_name` = 'menu' WHERE `op_id` = 1135; +UPDATE `at_operation_interface` SET `op_name` = '删除指定菜单信息', `call_name` = 'menu-del', `is_parent` = 'false', `op_type` = NULL, `mark` = '', `status` = '0', `parent_op_id` = 1134, `permission_mark` = '.object-del', `page_name` = 'menu' WHERE `op_id` = 1138; +DELETE FROM `at_operation_interface` WHERE `op_id` = 81; +DELETE FROM `at_operation_interface` WHERE `op_id` = 82; +UPDATE at_busi_menu_info SET status='0' WHERE menu_id=27; +ALTER TABLE `at_test_config` ADD COLUMN `public_data` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL COMMENT '属于该测试集的公共测试数据,json串存储' AFTER `mail_copy_address`; +ALTER TABLE `at_test_config` ADD COLUMN `public_header` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL COMMENT '属于该测试集的公共请求头,只对HTTP/HTTPS有效,json串存储' AFTER `public_data`; +ALTER TABLE `at_scene_validate_rule` ADD COLUMN `config_id` int(11) NULL DEFAULT NULL COMMENT '所属测试配置' AFTER `validate_id`; +ALTER TABLE `at_scene_validate_rule` ADD INDEX `at_scene_validate_rule_fk_config_id`(`config_id`) USING BTREE; +ALTER TABLE `at_scene_validate_rule` ADD CONSTRAINT `at_scene_validate_rule_fk_config_id` FOREIGN KEY (`config_id`) REFERENCES `at_test_config` (`config_id`) ON DELETE RESTRICT ON UPDATE RESTRICT; \ No newline at end of file diff --git a/src/main/webapp/WEB-INF/web.xml b/src/main/webapp/WEB-INF/web.xml index ef5d1431a0a79a0d874910738eb5c548edc567f8..ed91172c1068fa9586b912fe344d85ae2765ba12 100644 --- a/src/main/webapp/WEB-INF/web.xml +++ b/src/main/webapp/WEB-INF/web.xml @@ -1,100 +1,121 @@ - - yi - - login.html - - - 180 - - - log4jConfigLocation - classpath:log4j.properties - - - - - org.springframework.web.util.Log4jConfigListener - - - - contextConfigLocation - classpath:applicationContext.xml - - - org.springframework.web.context.ContextLoaderListener - - - yi.master.listener.InitWebListener - - - - - DruidWebStatFilter - com.alibaba.druid.support.http.WebStatFilter - - exclusions - *.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/* - - - + + yi + + login.html + + + 180 + + + log4jConfigLocation + classpath:log4j.properties + + + log4jRefreshInterval + 60000 + + + contextConfigLocation + classpath:applicationContext.xml + + + + + org.springframework.web.util.Log4jConfigListener + + + + + org.springframework.web.context.ContextLoaderListener + + + + yi.master.listener.InitWebListener + + + + + + + DruidWebStatFilter + com.alibaba.druid.support.http.WebStatFilter + + exclusions + *.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/* + + + + + DruidWebStatFilter + /* + + + + + DruidStatView + com.alibaba.druid.support.http.StatViewServlet + + + + DruidStatView + /druid/* + + + + + encodingFilter + org.springframework.web.filter.CharacterEncodingFilter + + encoding + UTF-8 + + + forceEncoding + true + + - DruidWebStatFilter - /* - - - - - DruidStatView - com.alibaba.druid.support.http.StatViewServlet - + encodingFilter + /* + + + + + + + + + + + + + + + + openSessionInView + org.springframework.orm.hibernate4.support.OpenSessionInViewFilter + + sessionFactoryBeanName + sessionFactory + + + + openSessionInView + /* + + + + + struts2 + org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter + + + struts2 + /* + + - - DruidStatView - /druid/* - - - - - encodingFilter - org.springframework.web.filter.CharacterEncodingFilter - - encoding - UTF-8 - - - forceEncoding - true - - - - encodingFilter - /* - - - openSessionInView - org.springframework.orm.hibernate4.support.OpenSessionInViewFilter - - sessionFactoryBeanName - sessionFactory - - - - openSessionInView - /* - - - struts2 - org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter - - - struts2 - /* - - - - \ No newline at end of file diff --git a/src/main/webapp/index.html b/src/main/webapp/index.html index 31a217c40aba90c701b36c4abad41010bb83529e..b9827cb10b16f3a3ae0501ae3275464080c77957 100644 --- a/src/main/webapp/index.html +++ b/src/main/webapp/index.html @@ -87,9 +87,6 @@ - - -
@@ -103,340 +100,15 @@ - - + + + + \ No newline at end of file diff --git a/src/main/webapp/index.js b/src/main/webapp/index.js new file mode 100644 index 0000000000000000000000000000000000000000..54e62b9a54e81e44e2d983c38f869b493253eb21 --- /dev/null +++ b/src/main/webapp/index.js @@ -0,0 +1,271 @@ +//方便子页面调用 +var loadMenuFun; + +//菜单信息 +var menuJson; + +//////////////////////////////////可全局用到的信息 +//当前登陆用户的权限信息列表 +var currentUserPermissionList; +//首页地址 +var homeUrl; +//用户id +var userId; +//第三方token登陆 +var token; +//退出时返回的页面 +var backUrl; + +//全部的handlebars模版,子页面调用 +var templates; +//全部的html模板,子页面调用 +var htmls; +////////////////////////////////// +$(document).ready(function() { + //打开welcome页面 + $('iframe').attr("src", "welcome.html"); + + /***********通过外部token登录的方式打开首页****************/ + token = GetQueryString("token"); + backUrl = GetQueryString("backUrl"); + backUrl = (backUrl == null ? "login.html" : "http://" + backUrl); + if (token != null && token != "") { + $(".redirect-to-page").hide(); + } + /******************************************************/ + + $(".openIframeNew").on("click",function(){ + Hui_admin_tab(this); + }); + + + /*******************初始化子iFrame中的模板和远程子页面html代码***************************/ + //模板id + templates = initHandlebarsTemplate(); + + + //页面名 + htmls = loadChildrenHtml(["interfaceParameter-viewTree", + "messageScene-test", + "messageScene-validateFullJson", + "messageScene-validateKeyword", + "role-power", + "viewWindow"]); + /*****************************************************/ +}); + + +/*************预先编译子iframe中的模板***************/ +function initHandlebarsTemplate () { + var loadingIndex = layer.msg('正在初始化系统...', {icon:16, shade:0.45, time:999999999}); + var templates = {}; + $("#templates-page").load("./resource/template/customTemplate.htm", function() { + $("#templates-page > script").each(function(i, n){ + templates[$(n).attr('id')] = Handlebars.compile($(n).html()); + }); + layer.close(loadingIndex); + }); + return templates; +} + +/*****加载子页面代码到内存*******/ +function loadChildrenHtml (options) { + if (options == null || typeof options != 'object') { + return false; + } + var htmls = {}; + $.each(options, function (i, n) { + $("#children-page").append('
'); + $("#" + n).load("./resource/template/" + n + ".htm", function() { + htmls[n] = $("#" + n).html(); + $("#" + n).html(''); + }); + }); + return htmls; +} + +/********************加载菜单***************************/ +loadMenuFun = function() { + $.get(REQUEST_URL.MENU.GET_USER_MENUS, function(data){ + if (data.returnCode == 0) { + menuJson = data.data; + var systemSwitchDom = $('#system-type-name').siblings('ul'); + var defaultTypeKey = null; + $.each(menuJson, function(systemKey, content){ + defaultTypeKey == null && (defaultTypeKey = systemKey); + systemSwitchDom.append('
  • ' + content.name + '
  • '); + }); + + $("#menu-page").load("./resource/template/menuTemplate.htm", function(){ + templates['menu-template'] = Handlebars.compile($("#menu-page > script").html()); + switchMenu(getCookie('menuType') == null ? defaultTypeKey : getCookie('menuType'), true, defaultTypeKey); + $(".switch-system").click(function(){ + var name = switchMenu($(this).attr('system-type')); + name && (layer.msg('已切换至系统:' + name, {time:2000})); + }); + }) + } + }); +} +/** + * 根据配置切换菜单显示 + * @param menuType + * @param init + * @param defaultTypeKey + * @returns {*} + */ +function switchMenu(menuType, init, defaultTypeKey) { + if (menuType == null) { + menuType = "interface"; + } + if (menuType == getCookie('menuType') && !init) { + return null; + } + if (menuJson[menuType] == null) { + menuType = defaultTypeKey; + } + $("#menu").html(templates['menu-template'](menuJson[menuType]['menu'])); + //重新初始化菜单效果 + $.Huifold(".menu_dropdown dl dt",".menu_dropdown dl dd","fast",3,"click"); + //第一个菜单为打开状态 + $("#menu dt:eq(0)").click(); + //如果切换的是其他的系统菜单,则关闭全部的Tab选项卡 + //$("#min_title_list li i").trigger("click"); + setCookie("menuType", menuType); + $("#system-type-name").html(menuJson[menuType]['name'] + ''); + return menuJson[menuType]['name']; +} + + + +/***********修改密码*********/ +function to_changePasswd() { + layer.prompt({ + formType: 1, + value: '', + title: '验证旧密码' + }, function(value, index, elem){ + layer.close(index); + $.post(REQUEST_URL.USER.VERIFY_PASSWORD, {password: value}, function (data) { + if (data.returnCode == 0) { + layer.prompt({ + formType: 1, + value: '', + title: '请输入新密码' + }, function(value1, index1, elem){ + layer.close(index1); + layer.confirm('确定要将密码修改为"' + value1 + '"吗?', {icon:0, title:'警告'}, function(index2) { + layer.close(index2); + $.get(REQUEST_URL.USER.MODIFY_PASSWORD,{password:value1}, function(data) { + if (data.returnCode == 0) { + layer.msg('密码修改成功,设置自动登录的需要重新输入密码!', {icon:1, time:1500}); + } else { + layer.alert(data.msg, {icon: 5}); + } + }); + + }); + }); + }else{ + layer.alert(data.msg, {icon:5}); + } + }); + }); +} + +/***********手动点击logout会清除登录信息cookie*********/ +function to_logout(){ + $.get(REQUEST_URL.LOGIN.LOGOUT,function(data){ + if(data.returnCode==0){ + clearCookie("username"); + clearCookie("password"); + window.location.href = backUrl; + } + }); +} + +/***********切换用户*********/ +function to_changeUser(){ + var loginHtml ='
    '+ + '
    '+ + ''+ + '
    '+ + ''+ + '
    '+ + '
    '+ + '
    '+ + ''+ + '
    '+ + ''+ + '
    '+ + '
    '+ + '
    ' + + '' + + '
    ' + + ' ' + + '' + + '
    ' + + '
    ' + + '
    '+ + '
    '+ + ' '+ + ''+ + '

    '+ + '
    '+ + '
    '+ + '
    '; + + var index = layer.open({ + title:'切换用户', + type: 1, + area: ['569px', '317px'], + content: loginHtml, + success:function(layero, index){ + $("#loginBtn").click(userLogin); + //监听键盘回车事件 + $(layero).keyup(function (event) { + var keyCode = event.which; + if(keyCode == 13){ + $("#loginBtn").click(); + } + }); + + $("#verifyCode").siblings('img').click(function(){ + var that = this; + $.get(REQUEST_URL.LOGIN.CREATE_VERIFY_CODE, function(data){ + if (data.returnCode == 0) { + $(that).attr('src', 'data:image/png;base64,' + data.data); + } + }); + }); + + $("#username").trigger("focus").trigger("select"); + $("#verifyCode").siblings('img').click(); + } + }); +} + +/**切换用户时的登录页面*/ +function userLogin(){ + var username = $("#username").val(); + var password = $("#password").val(); + var verifyCode = $("#verifyCode").val(); + var tipMsg = $("#loginTip"); + if(username != "" && username != null && password != "" && password != null && verifyCode != "" && verifyCode != null){ + $.post(REQUEST_URL.LOGIN.LOGIN,{ + username:username, + password:password, + verifyCode: verifyCode + },function(data){ + if(data.returnCode==0){ + location.reload(); + }else if (data.returnCode==2){ + layer.alert(data.msg, {icon: 4}); + }else { + tipMsg.text(data.msg); + } + }); + }else{ + tipMsg.text("请填写完整再提交登录"); + } +} \ No newline at end of file diff --git a/src/main/webapp/js/ajaxErrorHandler.js b/src/main/webapp/js/ajaxErrorHandler.js new file mode 100644 index 0000000000000000000000000000000000000000..2954415662c089dbd1f60507eeba07421a66cf96 --- /dev/null +++ b/src/main/webapp/js/ajaxErrorHandler.js @@ -0,0 +1,20 @@ +//设置jQuery Ajax全局的参数 +$.ajaxSetup({ + error: function (jqXHR, textStatus, errorThrown) { + layer.closeAll('dialog'); + switch (jqXHR.status) { + case(403): + let needrestart = jqXHR.getResponseHeader("needrestart"); + if (needrestart != null && needrestart == "true") { + top.layer.alert("系统升级完成,请联系管理重启服务器!", {offset: '60px', title: "升级完成提示!", icon: 0, closeBtn: 0}, function(index, layero){ + return; + }); + return; + } + + break; + default: + break; + } + } +}); \ No newline at end of file diff --git a/src/main/webapp/js/bak/explanationMarks.json b/src/main/webapp/js/bak/explanationMarks.json deleted file mode 100644 index c4c91009c56ef3de3e9eea9666286da241fbdbd2..0000000000000000000000000000000000000000 --- a/src/main/webapp/js/bak/explanationMarks.json +++ /dev/null @@ -1,33 +0,0 @@ -{ - "parameterizedFilePath":{ - "title":"关于参数化文件的说明", - "content":"上传的参数化文件需为 txt 格式。
    第一行为参数化节点路径(路径名称大小写敏感,请与参数标识符保持一致),从第二列开始为参数化数据,默认数据分隔符为英文下逗号,你可以自行设定不同的分隔符。" - }, - "mock-validate-path":{ - "title":"Mock入参验证节点路径的填写说明", - "content":"根据入参报文的格式不同,该项需要填写不同的内容:
    JSON、XML: 完整的入参节点路径,例如ROOT.INFO.USERNAME;
    URL: 留空;
    不限格式: 例如Socket报文,可使用关联规则来获取。
    对于URL参数和请求头,此处可忽略。" - }, - "settingMailStyle":{ - "title":"自定义推送邮件的模板", - "content":"你可以自定义设定定时任务和探测任务的推送的邮件模板,模板类型为Html,同时可以在模板中插入相关测试结果变量。" - }, - "webStepConfig":{ - "title":"测试步骤配置", - "html":true, - "content":"explanation-mark-webstep-config", - "width":915, - "height":500 - }, - "webTestConfig":{ - "title":"Web自动化运行时配置说明", - "content":"1、如果你的浏览器driver文件路径没有放置到环境变量下,请在此配置, 请填写全路径,注意填写的是自动化执行客户端所在机器上的driver路径 .
    2、如何你的浏览器不是安装在默认路径或者安装的是绿色版,请指定各浏览器的执行bin文件的绝对路径(其他同上)。" - }, - "webCustomVariableSetting":{ - "title":"Web自动化自定义变量说明", - "content":"在测试用例、测试用例集、用例与用例集的关联对象中可以配置自定义的变量,变量以key-value形式保存(其中value可以使用全局变量),自定义的变量可以在下属的测试步骤中使用:
    优先级 用例集自定义变量 > 用例与用例集关联对象自定义变量 > 用例自定义变量" - }, - "webSuiteCaseSetting":{ - "title":"测试集用例自定义 配置说明", - "content":"执行顺序:默认按照设定的数字大小来排序,数字越小的先执行,越大的后执行。
    分组名:在进行分布式执行时,会将组名相同的用例分配到同一个远程执行机执行。
    跳过标记:方便在不需要执行某个用例时排除而不是删除掉。" - } -} \ No newline at end of file diff --git a/src/main/webapp/js/bak/messageProcess.json b/src/main/webapp/js/bak/messageProcess.json deleted file mode 100644 index 33c7cbe787544b388bd5ff533c21a7fdd7c54941..0000000000000000000000000000000000000000 --- a/src/main/webapp/js/bak/messageProcess.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "ShanXiOpenApi":{ - }, - "AnhuiApp":{ - } -} \ No newline at end of file diff --git a/src/main/webapp/js/bak/protocol.json b/src/main/webapp/js/bak/protocol.json deleted file mode 100644 index c0492a0e4bd27d9081c358117233e17c09cc9a80..0000000000000000000000000000000000000000 --- a/src/main/webapp/js/bak/protocol.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "HTTP":{ - "Headers":{ - }, - "Querys":{ - }, - "Authorization":{ - }, - "Method":"POST", - "ConnectTimeOut":"", - "ReadTimeOut":"", - "RecEncType":"UTF-8", - "EncType":"UTF-8" - }, - "HTTPS":{ - "Headers":{ - }, - "Authorization":{ - }, - "Method":"POST", - "ConnectTimeOut":"", - "ReadTimeOut":"", - "RecEncType":"UTF-8", - "EncType":"UTF-8" - }, - "Socket":{ - "ConnectTimeOut":"", - "ReadTimeOut":"" - }, - "WebService":{ - "ConnectTimeOut":"", - "Namespace":"", - "Method":"", - "Username":"", - "Password":"" - } -} diff --git a/src/main/webapp/js/bak/readme.txt b/src/main/webapp/js/bak/readme.txt deleted file mode 100644 index 03a5bc769922bb2662bed73ff5bcdc013e57f0bd..0000000000000000000000000000000000000000 --- a/src/main/webapp/js/bak/readme.txt +++ /dev/null @@ -1,8 +0,0 @@ -explanationMarks.json 页面表单的说明文档 -HttpRequestHeader.json http常用的请求头说明 -HttpResponseHeader.json http常用的响应头说明 -menu.json 首页菜单数据 -messageProcess.json 接口报文后置处理器参数定义 -protocol.json 接口报文的格式定义 -webStepParameter.json Web自动化测试步骤的一些选择参数说明 -zh_CN.txt Datatables的本地化文件-中文 \ No newline at end of file diff --git a/src/main/webapp/js/bak/requestUrls.js b/src/main/webapp/js/bak/requestUrls.js deleted file mode 100644 index 148f714eb0f69b7a4116d51aa18ca142d28ad527..0000000000000000000000000000000000000000 --- a/src/main/webapp/js/bak/requestUrls.js +++ /dev/null @@ -1,297 +0,0 @@ -var BATCH_AUTO_TEST_URL = "test-scenesTest"; //批量测试 测试集或者全量 -var GET_TEST_CONFIG_URL = "test-getConfig";//获取当前用户的测试配置 -var UPDATE_TEST_CONFIG_URL = "test-updateConfig";//更新指定测试配置 -var CHECK_DATA_URL = "test-checkHasData";//测试之前检查指定的测试集中所有的测试场景是否有足够的测试数据 -var TEST_SCENE_URL = "test-sceneTest";//单场景测试 -var TEST_COMPLEX_SCENE_URL = "test-complexSceneTest";//测试组合场景 - -var PARAMS_GET_URL = "param-getParams"; //根据interfaceId来 获取parameters -var PARAM_SAVE_URL = "param-save"; //保存新增的接口参数 -var PARAM_DEL_URL = "param-del"; //删除指定参数 -var PARAM_GET_URL = "param-get"; -var PARAM_EDIT_URL = "param-edit"; //编辑参数的指定属性 -var PARAM_JSON_IMPORT_URL = "param-batchImportParams"; //导入json串 -var PARAM_DEL_ALL_URL = "param-delInterfaceParams";//删除指定接口下的所有参数 - - -var INTERFACE_LIST_URL = "interface-list"; //获取接口列表 -var INTERFACE_CHECK_NAME_URL = "interface-checkName"; //检查新增接口名是否重复 -var INTERFACE_EDIT_URL = "interface-edit"; //接口编辑 -var INTERFACE_GET_URL = "interface-get"; //获取指定接口信息 -var INTERFACE_DEL_URL = "interface-del"; //删除指定接口 -var INTERFACE_IMPORT_FROM_EXCEL_URL = "interface-importFromExcel";//从已经上传完成的excel中导入接口数据 -var INTERFACE_EXPORT_DOCUMENT_EXCEL_URL = "interface-exportInterfaceDocument";//批量导出接口文档 -var INTERFACE_GET_PARAMETERS_JSON_TREE_URL = "interface-getParametersJsonTree";//获取jsonTree数据 -var INTERFACE_UPDATE_CHILDREN_BUSINESS_SYSTEMS_URL = "interface-updateChildrenBusinessSystems";//更新接口下属报文场景等的测试环境信息 - - - -var MESSAGE_LIST_URL = "message-list"; //获取报文列表 -var MESSAGE_EDIT_URL = "message-edit"; //报文信息编辑 -var MESSAGE_GET_URL = "message-get"; //获取指定报文信息 -var MESSAGE_DEL_URL = "message-del"; //删除指定报文 -var MESSAGE_FORMAT_URL = "message-format";//格式化报文串 -var MESSAGE_VALIDATE_JSON_URL = "message-validateJson";//报文串验证 -var MESSAGE_IMPORT_FROM_EXCEL = "message-importFromExcel";//从已经上传完成的excel中导入接口数据 -var MESSAGE_CREATE_MESSAE_BY_NODES_URL = "message-createMessage"; - - -var SCENE_LIST_URL = "scene-list"; //获取场景列表 -var SCENE_EDIT_URL = "scene-edit"; //场景编辑 -var SCENE_GET_URL = "scene-get"; //获取指定场景信息 -var SCENE_DEL_URL = "scene-del"; //删除指定场景 -var SCENE_GET_TEST_OBJECT_URL = "scene-getTestObject"; //获取场景的测试数据和测试地址 -var SCENE_LIST_NO_DATA_SCENES_URL = "scene-listNoDataScenes"; //获取指定测试集中没有测试数据的测试场景列表 -var SCENE_IMPORT_FROM_EXCEL = "scene-importFromExcel";//从已经上传完成的excel中导入场景数据 -var SCENE_UPDATE_RESPONSE_EXAMPLE = "scene-updateResponseExample";//更新返回示例 -var SCENE_GET_REQUEST_MSG_JSON_TREE_URL = "scene-getRequestMsgJsonTree";//获取请求入参节点树信息 -var SCENE_GET_RESPONSE_MSG_JSON_TREE_URL = "scene-getResponseMsgJsonTree";//获取请求入参节点树信息 - - -var GET_SETTING_DATA_URL = "data-getSettingData"; //获取当前场景所属报文的所有可编辑入参节点 包含其他信息 -var IMPORT_DATA_VALUES_URL = "data-importDatas";//批量导入测试数据 -var DATA_LIST_URL = "data-list"; //获取指定测试场景数据列表 -var DATA_EDIT_URL = "data-edit"; //测试数据编辑 -var DATA_GET_URL = "data-get"; //获取指定测试数据信息 -var DATA_DEL_URL = "data-del"; //删除指定测试数据 -var DATA_CHECK_NAME_URL = "data-checkName"; //验证数据标记是否重复 -var GET_SETTING_DATA_URL = "data-getSettingData";//获取设置参数数据时需要用到的相关数据 -var CREATE_NEW_DATA_MSG_URL = "data-createDataMsg";//根据传入的json数据字符串和场景id生成新得带有数据的报文 -var DATA_CHANGE_STATUS_URL = "data-changeStatus";//修改指定数据状态 -var DATA_UPDATE_PARAMS_DATA_URL = "data-updateParamsData";//修改设置数据内容 - -var REPORT_LIST_URL = "report-list";//测试报告列表 -var REPORT_GET_URL = "report-get";//获取指定测试报告信息 -var REPORT_DEL_URL = "report-del";//删除指定测试报告 -var REPORT_DOWNLOAD_STATIS_HTML = "report-generateStaticReportHtml";//获取静态测试报告路径(不存在就后台执行生成) -var REPORT_GET_DETAILS_URL = "report-getReportDetail";//获取生成完整测试报告所需数据 -var REPORT_SEND_MAIL_URL = "report-sendMail";//将生成的离线报告进行邮件推送 - -var RESULT_LIST_URL = "result-list";//获取测试结果列表 -var RESULT_GET_URL = "result-get";//获取指定测试结果详情信息 - - -var SET_OP_SCENE_URL = "set-opScene";//操作测试场景,添加到测试集或者从测试集删除 -var LIST_MY_SETS_URL = "set-getMySet";//获取测试集列表 -var SET_SCENE_LIST_URL = "set-listScenes";//展示存在测试集或者不存在于测试集的测试场景 -var SET_LIST_URL = "set-list"; //获取测试集列表 -var SET_EDIT_URL = "set-edit"; //测试集信息编辑 -var SET_GET_URL = "set-get"; //获取指定测试集信息 -var SET_DEL_URL = "set-del"; //删除指定测试集 -var SET_NAME_CHECK_URL = "set-checkName"; //验证测试集名称是否重复 -var SET_RUN_SETTING_CONFIG_URL = "set-settingConfig";//配置测试集运行时配置 -var SET_GET_CATEGORY_NODES_URL = "set-getCategoryNodes";//获取测试集目录树 -var SET_MOVE_TO_FOLDER = "set-moveFolder"; //将指定测试集移动到指定的目录文件夹下 - -//组合场景信息 -var COMPLEX_SCENE_LIST_URL = "complexScene-list"; -var COMPLEX_SCENE_GET_URL = "complexScene-get"; -var COMPLEX_SCENE_EDIT_URL = "complexScene-edit"; -var COMPLEX_SCENE_DEL_URL = "complexScene-del"; -var COMPLEX_SCENE_LIST_SET_SCENES_URL="complexScene-listSetScenes";//获取指定测试集的组合场景 -var COMPLEX_SCENE_ADD_TO_SET_URL = "complexScene-addToSet";//添加组合场景到指定测试集 -var COMPLEX_SCENE_DEL_FROM_SET_URL = "complexScene-delFromSet";//从测试集中删除组合场景 -var COMPLEX_SCENE_LIST_SCENES_URL = "complexScene-listScenes";//获取组合场景中的所有测试场景 -var COMPLEX_SCENE_UPDATE_CONFIG_INFO_URL = "complexScene-updateConfigInfo";//更新配置信息 -var COMPLEX_SCENE_ADD_SCENE_URL = "complexScene-addScene";//添加测试场景到组合场景 -var COMPLEX_SCENE_DEL_SCENE_URL = "complexScene-delScene";//从组合场景中删除测试场景 -var COMPLEX_SCENE_SORT_SCENES_URL = "complexScene-sortScenes";//测试场景执行顺序排序 -var COMPLEX_SCENE_UPDATE_SCENE_CONFIG_URL = "complexScene-updateSceneConfig";//更新指定测试场景的配置信息 -var COMPLEX_SCENE_LIST_SAVE_VARIABLES_URL = "complexScene-getSaveVariables";//获取组合场景中指定的保存变量名称 - -//场景验证 -var VALIDATE_GET_URL = "validate-getValidate";//获取指定测试场景的验证规则(只限全文验证和边界验证) -var VALIDATE_FULL_EDIT_URL = "validate-validateFullEdit";//全文验证规则更新 -var VALIDATE_RULE_LIST_URL = "validate-getValidates"; //获取验证规则列表 -var VALIDATE_RULE_EDIT_URL = "validate-edit";//新增或者编辑验证规则 -var VALIDATE_RULE_GET_URL = "validate-get";//获取指定验证规则信息 -var VALIDATE_RULE_DEL_URL = "validate-del";//删除指定验证规则 -var VALIDATE_FULL_RULE_GET_URL = "validate-getValidate";//获取全文验证规则 -var VALIDATE_RULE_UPDATE_STATUS = "validate-updateValidateStatus";//更新验证规则状态 - -//定时任务 -var TASK_CHECK_NAME_URL = "task-checkName";//验证测试任务是否重名 -var TASK_EDIT_URL = "task-edit";//编辑定时任务 -var TASK_DEL_URL = "task-del";//删除指定定时任务 -var TASK_LIST_URL = "task-list";//定时任务列表 -var TASK_GET_URL = "task-get";//获取指定定时任务列表 -var TASK_STOP_TASK_URL = "task-stopRunningTask";//停止运行中的定时任务 -var TASK_ADD_RUNABLE_TASK_URL = "task-startRunableTask";//运行可运行的定时任务 -var TASK_START_QUARTZ_URL = "task-startQuartz";//开启quartz定时器 -var TASK_STOP_QUARTZ_URL = "task-stopQuartz";//停止quartz定时器 -var TASK_GET_QUARTZ_STATUS_URL = "task-getQuartzStatus";//获取quartz定时器当前的状态 -var TASK_UPDATE_CRON_EXPRESSION_URL = "task-updateCronExpression";//更新定时规则 - -var GLOBAL_SETTING_EDIT_URL = "global-edit";//全局配置编辑 -var GLOBAL_SETTING_LIST_ALL_URL = "global-listAll";//获取全部的全局配置 - -var OP_INTERFACE_LIST_URL = "op-listOp"; //操作接口列表 -var OP_INTERFACE_DEL_URL = "op-del"; //删除操作接口 -var OP_INTERFACE_GET_URL = "op-get"; //获取操作接口详细信息 -var OP_INTERFACE_EDIT_URL = "op-edit"; //编辑操作接口 -var OP_INTERFACE_DEIT_GET_NODE_TREE_URL = "op-getNodeTree";//获取节点树数据 -var OP_INTERFACE_LIST_ALL_URL = "op-listAll"; //获取全部的操作接口 - -var QUERY_DB_LINK_TEST_URL = "db-testDB";//测试指定查询数据库是否可连接 -var QUERY_DB_DEL_URL = "db-del";//删除指定查询数据库信息 -var QUERY_DB_LIST_URL = "db-list"//查询数据库列表 -var QUERY_DB_EDIT_URL = "db-edit"//编辑指定查询数据库信息 -var QUERY_DB_GET_URL = "db-get";//获取指定查询数据库信息 -var QUERY_DB_LIST_ALL_URL = "db-listAll";//获取所有当前可用的查询数据数据信息 - - -var MAIL_LIST_URL = "mail-list";//信息列表 -var MAIL_DEL_URL = "mail-del";//删除信息 -var MAIL_CHANGE_STATUS = "mail-changeStatus";//改变已读状态 - -var ROLE_DEL_URL = "role-del";//删除指定角色信息 -var ROLE_GET_NODES_INTERFACE_URL = "role-getInterfaceNodes";//获取当前所有操作接口,并标记哪些是当前角色拥有的 -var ROLE_GET_NODES_MENU_URL = "role-getMenuNodes"; //获取当前所有菜单,并标记哪些是当前角色拥有的 -var ROLE_EDIT_URL = "role-edit";//编辑指定角色信息 -var ROLE_LIST_URL = "role-list";//角色信息列表 -var ROLE_GET_URL = "role-get";//指定角色信息 -var ROLE_UPDATE_POWER_URL = "role-updateRolePower";//更新操作接口与角色之间的关系(角色的权限信息) -var ROLE_UPDATE_MENU_URL = "role-updateRoleMenu";//更新菜单与角色之间的关系 -var ROLE_LIST_ALL_URL = "role-listAll";//展示所有角色 - -var USER_LIST_URL = "user-list";//用户列表 -var USER_LOCK_URL = "user-lock";//锁定用户或者解锁用户 -var USER_GET_URL = "user-get";//获取用户信息 -var USER_EDIT_URL = "user-edit";//编辑用户信息 -var USER_RESET_PASSWD_URL = "user-resetPwd";//重置指定用户的密码为111111 - - -var GLOBAL_VARIABLE_LIST_URL = "variable-listAll"; -var GLOBAL_VARIABLE_EDIT_URL = "variable-edit"; -var GLOBAL_VARIABLE_DEL_URL = "variable-del"; -var GLOBAL_VARIABLE_GET_URL = "variable-get"; -var GLOBAL_VARIABLE_CHECK_NAME_URL = "variable-checkName";//检查key是否重复 -var GLOBAL_VARIABLE_UPDATE_VALUE_URL = "variable-updateValue";//更新指定变量模板的value值 -var GLOBAL_VARIABLE_CREATE_VARIABLE_URL = "variable-createVariable";//生成变量结果 - -var BUSINESS_SYSTEM_EDIT_URL = "system-edit";//编辑或者新增测试环境信息 -var BUSINESS_SYSTEM_GET_URL = "system-get";//获取测试环境信息 -var BUSINESS_SYSTEM_LIST_URL = "system-list";//查询测试环境列表 -var BUSINESS_SYSTEM_LIST_ALL_URL = "system-listAll";//查询所有测试环境列表 -var BUSINESS_SYSTEM_DEL_URL = "system-del";//删除测试环境信息 - -var BUSINESS_SYSTEM_INTERFACE_LIST_URL = "system-listInterface";//根据mode来查询当前测试环境包含的或者不包含的接口信息 -var BUSINESS_SYSTEM_OP_INTERFACE_URL = "system-opInterface";//从指定的测试环境中删除或者增加接口信息 - -var PROBE_TASK_GET_URL = "probe-get"; -var PROBE_TASK_EDIT_URL = "probe-edit"; -var PROBE_TASK_DEL_URL = "probe-del"; -var PROBE_TASK_LIST_ALL_URL = "probe-listAll"; -var PROBE_TASK_LIST_URL = "probe-list"; -var PROBE_TASK_UPDATE_CONFIG = "probe-updateConfig"//更新探测配置 -var PROBE_TASK_START_URL = "probe-startTask";//开启任务 -var PROBE_TASK_STOP_URL = "probe-stopTask";//停止任务 -var PROBE_TASK_GET_SINGLE_REPORT_DATA_URL = "probe-getProbeResultReportData"; -var PROBE_TASK_GET_PROBE_RESULT_SYSNOPSIS_VIEW_DATA_URL = "probe-getProbeResultSynopsisViewData"; -var PROBE_TASK_BATCH_ADD_URL = "probe-batchAdd"; - -var UPLOAD_FILE_URL = "file-upload";//上传文件 -var DOWNLOAD_FILE_URL = "file-download";//下载文件 - - -//系统日志记录 -var LOG_RECORD_LIST_URL = "log-list"; -var LOG_RECORD_GET_URL = "log-get"; -var LOG_RECORD_DEL_URL = "log-del"; - -//接口mock功能 -var INTERFACE_MOCK_LIST_URL = "mock-list"; -var INTERFACE_MOCK_EDIT_URL = "mock-edit"; -var INTERFACE_MOCK_GET_URL = "mock-get"; -var INTERFACE_MOCK_DEL_URL = "mock-del"; -var INTERFACE_MOCK_CHECK_NAME_URL = "mock-checkName"; -var INTERFACE_MOCK_UPDATE_STATUS_URL = "mock-updateStatus"; -var INTERFACE_MOCK_UPDATE_SETTING_URL = "mock-updateSetting"; -var INTERFACE_MOCK_PARSE_MESSAGE_TO_CONFIG_URL = "mock-parseMessageToConfig"; -var INTERFACE_MOCK_PARSE_MESSAGE_TO_NODES_URL = "mock-parseMessageToNodes"; - - -//性能测试配置 -var PERFORMANCE_TEST_CONFIG_EDIT_URL = "ptc-edit"; -var PERFORMANCE_TEST_CONFIG_LIST_URL = "ptc-list"; -var PERFORMANCE_TEST_CONFIG_DEL_URL = "ptc-del"; -var PERFORMANCE_TEST_CONFIG_GET_URL = "ptc-get"; - -var PERFORMANCE_TEST_TASK_LIST_URL = "ptc-listTest" //获取当前用户的性能测试任务列表 -var PERFORMANCE_TEST_TASK_STOP_URL = "ptc-stopTest";//停止指定性能测试任务 -var PERFORMANCE_TEST_TASK_DEL_URL = "ptc-delTest";//删除指定性能测试任务-并且不会保存测试结果 -var PERFORMANCE_TEST_TASK_INIT_URL = "ptc-initTest";//初始化性能测试任务 -var PERFORMANCE_TEST_TASK_ACTION_URL = "ptc-actionTest";//开始执行性能测试任务 -var PERFORMANCE_TEST_TASK_VIEW_URL = "ptc-viewTest";//查看性能测试任务的实时状态 - -//性能测试结果 -var PERFORMANCE_TEST_RESULT_LIST_URL = "ptr-list"; -var PERFORMANCE_TEST_RESULT_GET_URL = "ptr-get"; -var PERFORMANCE_TEST_RESULT_DEL_URL = "ptr-del"; -var PERFORMANCE_TEST_RESULT_ANAYLZE_URL = "ptr-anaylzeView";//分析结果 -var PERFORMANCE_TEST_RESULT_SUMMARIZED_URL = "ptr-summarizedView";//汇总结果到excel -var PERFORMANCE_TEST_RESULT_DETAILS_LIST_ALL_URL = "ptr-detailsList";//详细结果查看 - - -/*************************************WEB自动化**************************************************************/ -//web自动化-山西-模块管理 -var WEB_SCRIPT_MODULE_LIST_URL = "webModule-list"; -var WEB_SCRIPT_MODULE_GET_URL = "webModule-get"; -var WEB_SCRIPT_MODULE_DEL_URL = "webModule-del"; -var WEB_SCRIPT_MODULE_EDIT_URL = "webModule-edit"; -var WEB_SCRIPT_MODULE_CHECK_NAME_URL = "webModule-checkName"; //检查moduleCode是否重复 - -//web自动化-山西-任务管理 -var WEB_SCRIPT_TASK_LIST_URL = "webTask-list"; -var WEB_SCRIPT_TASK_DEL_URL = "webTask-del"; - - -//元素对象管理 -var WEB_ELEMENT_LIST_ALL_URL = "element-listAll"; -var WEB_ELEMENT_LIST_URL = "element-list"; -var WEB_ELEMENT_GET_URL = "element-get"; -var WEB_ELEMENT_DEL_URL = "element-del"; -var WEB_ELEMENT_EDIT_URL = "element-edit"; -var WEB_ELEMENT_MOVE_URL = "element-move"; -var WEB_ELEMENT_COPY_URL = "element-copy"; - - -//测试用例 -var WEB_CASE_LIST_ALL_URL = "webcase-listAll"; -var WEB_CASE_LIST_URL = "webcase-list"; -var WEB_CASE_GET_URL = "webcase-get"; -var WEB_CASE_DEL_URL = "webcase-del"; -var WEB_CASE_EDIT_URL = "webcase-edit"; -var WEB_CASE_CHANGE_BROSWER_TYPE_URL = "webcase-changeBroswerType"; -var WEB_CASE_UPDATE_CONFIG_JSON_URL = "webcase-updateConfig"; - -//测试步骤 -var WEB_STEP_LIST_ALL_URL = "webstep-listAll"; -var WEB_STEP_LIST_URL = "webstep-list"; -var WEB_STEP_GET_URL = "webstep-get"; -var WEB_STEP_DEL_URL = "webstep-del"; -var WEB_STEP_EDIT_URL = "webstep-edit"; -var WEB_STEP_UPDATE_CONFIG_URL = "webstep-updateConfig"; - -//测试用例集 -var WEB_SUITE_LIST_ALL_URL = "websuite-listAll"; -var WEB_SUITE_LIST_URL = "websuite-list"; -var WEB_SUITE_GET_URL = "websuite-get"; -var WEB_SUITE_DEL_URL = "websuite-del"; -var WEB_SUITE_EDIT_URL = "websuite-edit"; -var WEB_SUITE_CHANGE_BROSWER_TYPE_URL = "websuite-changeBroswerType"; -var WEB_SUITE_UPDATE_CONFIG_JSON_URL = "websuite-updateConfig"; -var WEB_SUITE_LIST_CASE_URL = "websuite-listCase"; -var WEB_SUITE_OP_CASE_URL = "websuite-opCase"; -var WEB_SUITE_CASE_UPDATE_SETTING_URL = "websuite-updateCaseSetting"; - -//运行时配置 -var WEB_CONFIG_GET_URL = "webconfig-get"; -var WEB_CONFIG_EDIT_URL = "webconfig-edit"; - -//菜单相关 -var BUSI_MENU_EDIT_URL = "menu-edit"; -var BUSI_MENU_GET_URL = "menu-get"; -var BUSI_MENU_LIST_ALL_URL = "menu-listAll"; -var BUSI_MENU_DEL_URL = "menu-del"; -var BUSI_MENU_GET_USER_MENUS_URL = "menu-getUserMenus"; diff --git a/src/main/webapp/js/bak/webStepParameter.json b/src/main/webapp/js/bak/webStepParameter.json deleted file mode 100644 index 4ff1859daecf15d80e34d5479d74447e2db587d7..0000000000000000000000000000000000000000 --- a/src/main/webapp/js/bak/webStepParameter.json +++ /dev/null @@ -1,147 +0,0 @@ -{ - "dataType":{ - "string":{ - "dataType":true, - "text":"字符串常量", - "example":"xuwangcheng14@163.com", - "mark":"普通的字符串,根据操作类型不同可能代表不同含义,请根据操作类型的说明来填写." - }, - "keyboard":{ - "dataType":true, - "text":"键盘组合按键", - "example":"Keys.ENTER 模拟键盘Enter按键", - "mark":"模拟键盘按键,支持组合按键,常用键如下:
    回车键 Keys.ENTER
    删除键 Keys.BACK_SPACE
    空格键 Keys.SPACE
    制表键 Keys.TAB
    回退键 Keys.ESCAPE
    刷新键 Keys.F5
    更多按键说明请参考说明文档!" - }, - "gloablVariable":{ - "dataType":true, - "text":"全局变量", - "example":"${__current_timestamp}", - "mark":"等同于字符串常量,但是需要在 全局变量 模块中提前定义." - }, - "regexp":{ - "dataType":true, - "text":"正则表达式", - "example":"[0-9]{1,3}", - "mark":"根据正则表达式来生成指定的字符串." - }, - "attribute":{ - "dataType":true, - "text":"元素属性/文本值", - "example":"name", - "mark":"获取选择的指定元素上的指定属性的值,其中text表示该元素的文本值." - }, - "saveVariable":{ - "dataType":true, - "text":"测试变量", - "example":"order_id", - "mark":"在本次测试中定义的、保存的上下文变量,如果有同名的变量,取值优先级如下:
    同个测试用例中不同步骤保存的变量 > 不同测试用例中步骤保存的值 > 测试集中定义的变量 > 测试用例中定义的变量." - }, - "dbSql":{ - "dataType":true, - "text":"数据库取值", - "example":"select order_id from order_info where order_type='0' and user_id=<user_id> and op_time>${__current_date};", - "mark":"可选择指定的数据源执行指定的SQL查询,如果返回多条记录,则只会取第一条内容,如果一条结果中包含多列也只会去第一列内容.
    同时在SQL语句你可以使用 <user_id> 格式来表示测试变量,同时可以使用全局变量." - } - - }, - "opType":{ - "open":{ - "opType":true, - "text":"打开", - "mark":"打开一个正确的浏览器地址", - "requiredData":"可选 如果填入该值,则会使用该处地址", - "validateData":"不需要" - }, - "check":{ - "opType":true, - "text":"检查", - "mark":"判断获取到的内容和预期值是否匹配", - "requiredData":"需要 该值可以为任何类型", - "validateData":"需要 该值可以为任何类型,如果该值类型为正则表达式,则会进行正则匹配来验证" - }, - "action":{ - "opType":true, - "text":"执行用例片段", - "mark":"执行一个用例片段", - "requiredData":"不需要", - "validateData":"不需要" - }, - "script":{ - "opType":true, - "text":"执行js脚本", - "mark":"执行一段JS脚本", - "requiredData":"不需要", - "validateData":"不需要" - }, - "input":{ - "opType":true, - "text":"输入", - "mark":"向输入框输入文本内容", - "requiredData":"需要 该值可为任何类型", - "validateData":"不需要" - }, - "save":{ - "opType":true, - "text":"保存值", - "mark":"获取内容并保存,可以获取窗口标题、当前浏览器地址、元素文本、元素属性等", - "requiredData":"可选 当元素类型为TAG时,如果该值为空,默认取元素的文本内容;如果该值不为空,则该值为元素的属性名称", - "validateData":"不需要" - }, - "click":{ - "opType":true, - "text":"点击", - "mark":"点击元素", - "requiredData":"不需要", - "validateData":"不需要" - }, - "hover":{ - "opType":true, - "text":"鼠标悬停", - "mark":"将鼠标移动到某个元素上", - "requiredData":"不需要", - "validateData":"不需要" - }, - "alertCancel":{ - "opType":true, - "text":"弹出框-取消", - "mark":"对于系统级(非页面元素)的弹出框(包含警告框、确认框、对话框),进行取消操作", - "requiredData":"不需要", - "validateData":"不需要" - }, - "alertConfirm":{ - "opType":true, - "text":"弹出框-确认", - "mark":"对于系统级(非页面元素)的弹出框(包含确认框、对话框),进行确认操作", - "requiredData":"不需要", - "validateData":"不需要" - }, - "alertClose":{ - "opType":true, - "text":"弹出框-关闭", - "mark":"对于系统级(非页面元素)的弹出框(包含警告框、确认框、对话框),进行关闭操作", - "requiredData":"不需要", - "validateData":"不需要" - }, - "alertInput":{ - "opType":true, - "text":"对话框-输入", - "mark":"对于系统级(非页面元素)的对话框,进行输入操作,默认自动点击确认按钮", - "requiredData":"需要", - "validateData":"不需要" - }, - "upload":{ - "opType":true, - "text":"上传文件", - "mark":"进行文件上传操作", - "requiredData":"需要 该值为文件的绝对路径(文件应该位于执行机中而不是服务器上)", - "validateData":"不需要" - }, - "slide":{ - "opType":true, - "text":"滑动", - "mark":"拖动元素在 x,y 方向上移动移动一段距离", - "requiredData":"需要 例如:x=500,y=100,代表在x/y轴上个拖动500px的距离", - "validateData":"不需要" - } - } -} \ No newline at end of file diff --git a/src/main/webapp/js/dcits.js b/src/main/webapp/js/dcits.js index dcd5395e00d93519b55a6bfbc21fb0d3f75ad4cd..3e7d9d0658870d85988a96a8fe8fa7dc9258bab1 100644 --- a/src/main/webapp/js/dcits.js +++ b/src/main/webapp/js/dcits.js @@ -53,11 +53,13 @@ var advancedQueryFormHtml = "";//高级查询页面代码,防止重复渲染 * */ /********************************************/ +var thisPageName; +var thisPagePermissionList; $(function() { //加载对应的js文件 var r = (window.location.pathname.split("."))[0].split("/"); - r = r[r.length-1] + ".js"; - dynamicLoadScript(r); + thisPageName = r[r.length-1]; + dynamicLoadScript(thisPageName + ".js"); }); /** @@ -75,16 +77,20 @@ var publish = { df1.done(function(){ var df = $.Deferred(); df.done(function(){ + //自定义数据渲染 that.renderData(that.renderParams.customCallBack); - //防止事件被绑定多次 + //事件代理绑定,防止事件被绑定多次 (that.renderParams.ifFirst == true) && (that.initListeners(that.renderParams.eventList)); - }); + }); + + //渲染之前的自定义初始化 if (that.renderParams.renderType == "list") { that.renderParams.listPage.beforeInit(df); } else if (that.renderParams.renderType == "edit") { that.renderParams.editPage.beforeInit(df); } }); + if (that.renderParams.ifFirst == true) { that.renderTemplate(df1,that.renderParams.templateCallBack); } else { @@ -115,6 +121,7 @@ var publish = { * columnsJson:不参与排序的列 * dtOtherSetting:DT其他的自定义设置 * dtAjaxCallback:DataTables在每次通过ajax.reload返回之后的回调 + * dtDrawCallback: DataTables每次重绘之后的回调 * exportExcel:是否在工具栏添加 导出到excel 的按钮工具 默认为true * dblclickEdit:开启双击行打开编辑页面 默认为true * @@ -213,7 +220,8 @@ var publish = { beforeInit:function(df) { df.resolve(); }, - dtAjaxCallback:function() {}, + dtAjaxCallback:function() {}, + dtDrawCallback:function() {}, tableObj:null, columnsSetting:{}, columnsJson:[], @@ -354,7 +362,7 @@ var publish = { if (p.userDefaultRender == true) { if (p.renderType == "list") { var l = p.listPage; - table = initDT(l.tableObj, l.listUrl, l.columnsSetting, l.columnsJson, l.dtOtherSetting); + table = initDT(l.tableObj, l.listUrl, l.columnsSetting, l.columnsJson, l.dtOtherSetting, l.dtDrawCallback); /***添加导入excel插件按钮**/ if (l.exportExcel) { @@ -376,8 +384,11 @@ var publish = { } e.ifUseValidate && formValidate(e.formObj, e.rules, e.messages, null, e.closeFlag, e.ajaxCallbackFun, e.beforeSubmitCallback); } - } - callback(p); + } + + //权限按钮的显示和隐藏 + controlButtonShowByPermission(); + callback(p); }, /** * 统一绑定监听事件 @@ -394,11 +405,68 @@ var publish = { } }; +/** + * 控制权限按钮的显示或者隐藏 + * @param domObj + */ +function controlButtonShowByPermission (domObj) { + //跳过超级管理员用户 + if (top.userId == SUPER_ADMIN_USER_ID) { + return; + } + if (thisPagePermissionList == null) { + //获取当前页面权限 + $.ajax({ + type:"post", + url:REQUEST_URL.OP_INTERFACE.LIST_BY_PAGE_NAME, + data:{pageName: thisPageName}, + async:false, + success:function(json) { + if (json.returnCode == RETURN_CODE.SUCCESS) { + thisPagePermissionList = json.data; + } else { + layer.alert(json.msg, {icon:5}); + } + } + }); + } + + if (thisPagePermissionList.length == 0) { + return; + } + + if (domObj == null) { + domObj = $(document); + } + + $.each(thisPagePermissionList, function(i, n) { + if (n.permissionMark == null || n.permissionMark == '') { + return true; + } + let marks = n.permissionMark.split(','); + $.each(marks, function(t, mark) { + let button; + try { + button = domObj.find(mark); + } catch(err) {} + if (button != null && button.length > 0) { + if (top.currentUserPermissionList[n.opId] == null + || n.status == '1') { + //删除按钮 + button.remove(); + } + } + }); + }); +} + //设置jQuery Ajax全局的参数 $.ajaxSetup({ - error: function (jqXHR, textStatus, errorThrown) { + error: function (jqXHR, textStatus, errorThrown) { + //关闭所有弹窗/loading等 layer.closeAll('dialog'); $(".page-container").spinModal(false); + loading(false); switch (jqXHR.status) { case(500): layer.alert("服务器系统内部错误", {icon:5}); @@ -480,7 +548,7 @@ $.fn.delegates = function(configs) { * @param columnsJson 不参与排序的列 jsonArray * @returns table 返回对应的DataTable实例 */ -function initDT (tableObj, ajaxUrl, columnsSetting, columnsJson, dtOtherSetting) { +function initDT (tableObj, ajaxUrl, columnsSetting, columnsJson, dtOtherSetting, dtDrawCallback) { var data = []; var table = $(tableObj) /*//发送ajax请求时 @@ -504,10 +572,11 @@ function initDT (tableObj, ajaxUrl, columnsSetting, columnsJson, dtOtherSetting) data = json.data; }) - /* //重绘完毕 + //重绘完毕 .on('draw.dt', function () { //初始化和刷新都会触发 - publish.renderParams.listPage.dtAjaxCallback(); - })*/ + controlButtonShowByPermission($('.table')); + typeof dtDrawCallback === 'function' && dtDrawCallback(); + }) //初始化完毕 .on( 'init.dt', function () { //刷新表格不会触发此事件 只存在一次 //添加动态拖拽改变列宽的插件 @@ -1058,25 +1127,45 @@ function layer_show (title, url, w, h, type, success, cancel, end, other) { url="/404.html"; }; if (w == null || w == '' || w >= maxWidth) { - w = maxWidth * 0.8 + w = maxWidth * 0.86 }; if (h == null || h == '' || h >= maxHeight) { - h= (maxHeight * 0.86) ; + h= (maxHeight * 0.9) ; }; + + if (w == null || w == '') { + w = '86%'; + } else { + if (w > maxWidth) { + w = '86%'; + } else { + w = w + 'px'; + } + }; + if (h == null || h == '') { + h= '90%' ; + } else { + if (h >= maxHeight) { + h= '90%' ; + } else { + h = parseInt((h / maxHeight) * 100) + '%'; + } + }; + if (type == null || type == '') { type = 2; } index = layer.open($.extend(true, { type: type, - area: [w + 'px', h + 'px'], + area: [w, h], fix: false, //不固定 - maxmin: false, - shade:0.4, - anim:5, - shadeClose:true, + maxmin: false,//禁止最大化最小化 + shade:0.4,//遮罩 + anim:5,//动画效果 + shadeClose:true,//可以通过点击遮罩关闭 title: title, content: url, - offset:'30px', + offset:'30px',//距上边距 success:function(layero, index){ $(layero).find('#layerIndex').val(index); success && success(layero, index); @@ -1677,6 +1766,73 @@ function layerMultipleChoose (options) { } +/** + * 自定义打开一个数据配置的页面 + * @param options + */ +function customDataSettingView (options) { + let defaultOptions = { + title: '配置数据', + remark: null, + layerWidth:580, + layerHeight:450, + data: {}, + saveCallback:function(data, layerIndex) { + layer.close(layerIndex); + } + }; + if (typeof options == 'object') { + $.extend(true, defaultOptions, options); + } + + layer_show(defaultOptions.title, templates['custom-data-setting-view']({remark: defaultOptions.remark, data: defaultOptions.data, title: defaultOptions.title}) + , defaultOptions.layerWidth, defaultOptions.layerHeight, 1, function(layero, index){ + //新增一堆key-value + $(layero).find('#custom-data-setting-add-variable').click(function() { + $(layero).find("#custom-data-setting-variables").append('
    ' + + '
    ' + + '
    ' + + '
    '); + }); + + //删除全部数据 + $(layero).find('#custom-data-setting-clear-all-varibale').click(function() { + layer.confirm('确认删除下列全部的数据吗?', {title:'警告'}, function(i){ + $("#custom-data-setting-variables").html(''); + layer.msg('全部删除成功!', {icon:1, time:1600}); + layer.close(i); + }); + }); + + //删除一项数据 + $(layero).delegate('#custom-data-setting-variables a', 'click', function() { + let that = this; + layer.confirm('确认删除该项数据吗?', {title:'警告'}, function(i) { + $(that).parent('.formControls').parent('.row').remove(); + layer.msg('删除成功!', {icon:1, time:1600}); + layer.close(i); + }); + }); + + //点击保存数据 + $(layero).find('#update-custom-data').click(function() { + let configObj = {}; + $("#custom-data-setting-variables").children('.row').each(function(i){ + let key = $(this).find('input').eq(0).val(); + let value = $(this).find('input').eq(1).val(); + if (strIsNotEmpty(key) && strIsNotEmpty(value)) { + configObj[key] = value; + } + }); + + typeof defaultOptions.saveCallback == 'function' && defaultOptions.saveCallback(configObj, index); + }); + }); + + +} + /** * 从form控件保存指定的值 */ @@ -1922,6 +2078,7 @@ function isJSON(str) { } } console.log('It is not a string!') + return false; } /*********************判断两个json对象是否一样*****************************/ diff --git a/src/main/webapp/js/globalConstant.js b/src/main/webapp/js/globalConstant.js index 918ab84b7f1c99abcfeef5741829f6fab0e53f5a..c17313984f7539c909b6b3fee4292eea35c8b047 100644 --- a/src/main/webapp/js/globalConstant.js +++ b/src/main/webapp/js/globalConstant.js @@ -1,13 +1,17 @@ //全局常量和配置 - //返回值 var RETURN_CODE = { SUCCESS: 0, NO_LOGIN: 7 } +//超级管理员用户 +var SUPER_ADMIN_USER_ID = 1; //请求路径 var REQUEST_URL = { + WEB_SOCKET: { + PUSH_MAIL_NUM: "/push/mail", + }, //登陆相关 LOGIN: { LOGOUT: "user-logout", @@ -137,7 +141,8 @@ var REQUEST_URL = { EDIT:"validate-edit", LIST: "validate-getValidates", FULL_RULE_GET: "validate-getValidate", - RULE_UPDATE_STATUS: "validate-updateValidateStatus" + RULE_UPDATE_STATUS: "validate-updateValidateStatus", + GET_CONFIG_VALIDATE_RULES: "validate-getConfigValidates", }, //定时任务 TASK: { @@ -168,7 +173,8 @@ var REQUEST_URL = { EDIT:"op-edit", LIST: "op-listOp", GET_NODE_TREE: "op-getNodeTree", - LIST_ALL: "op-listAll" + LIST_ALL: "op-listAll", + LIST_BY_PAGE_NAME: "op-listByPageName" }, //查询数据源 QUERY_DB: { @@ -197,7 +203,8 @@ var REQUEST_URL = { GET_NODES_MENU: "role-getMenuNodes", UPDATE_POWER: "role-updateRolePower", UPDATE_MENU: "role-updateRoleMenu", - LIST_ALL: "role-listAll" + LIST_ALL: "role-listAll", + GET_USER_PERMISSION_LIST: "role-getUserPermissionList" }, //用户 USER: { @@ -264,7 +271,8 @@ var REQUEST_URL = { UPDATE_STATUS: "mock-updateStatus", UPDATE_SETTING: "mock-updateSetting", PARSE_MESSAGE_TO_CONFIG: "mock-parseMessageToConfig", - PARSE_MESSAGE_TO_NODES: "mock-parseMessageToNodes" + PARSE_MESSAGE_TO_NODES: "mock-parseMessageToNodes", + PARSE_SCENE_TO_MOCK_INFO: "mock-parseSceneToMockInfo" }, //性能测试 PERFORMANCE_TEST: { @@ -397,7 +405,7 @@ var EXPLANATION_MARK = { //接口自动化相关 -//报文处理类型参数设置 +//报文处理器参数设置 var MESSAGE_PROCESS = { "ShanXiOpenApi":{ "pemFilePath":"" @@ -410,6 +418,13 @@ var MESSAGE_PROCESS = { } } +//接口可Mock类型 +var MESSAGE_MOCK_TYPE = { + "HTTP":"HTTP", + "Socket": "Socket", + "WebSocket": "WebSocket" +} + //接口协议-调用参数配置信息 var MESSAGE_PROTOCOL = { "HTTP":{ @@ -609,3 +624,24 @@ var WEB_STEP_PARAMETER = { } } } + + +function createWebSocket (path) { + if (top.homeUrl == null || top.homeUrl == '') { + return null; + } + let url = (top.homeUrl).replace('https', 'ws').replace('http', 'ws'); + let ws; + if ('WebSocket' in window){ + ws = new WebSocket(url + path); + } + else if ('MozWebSocket' in window){ + ws = new MozWebSocket(url + path); + } + else{ + console.error("该浏览器不支持websocket"); + return null; + } + + return ws; +} \ No newline at end of file diff --git a/src/main/webapp/js/handlebarsHelpers.js b/src/main/webapp/js/handlebarsHelpers.js new file mode 100644 index 0000000000000000000000000000000000000000..3ac2827b783f3138a3fb5d47870ec6bb3fb10e60 --- /dev/null +++ b/src/main/webapp/js/handlebarsHelpers.js @@ -0,0 +1,84 @@ +/*****************************Handlebars预定义helper***********************************/ +/**null转换空字符串**/ +Handlebars.registerHelper('inputValue', function(value, defaultValue){ + if (value == null || value.length == 0) { + value = defaultValue; + } + + return value; +}); + +/**结果标签展示**/ +Handlebars.registerHelper('resultLabelView', function(status){ + var color = ""; + var flag = ""; + if (status == "0") { + color = "success"; + flag = "SUCCESS"; + } else if (status == "1") { + color = "danger"; + flag = "FAIL"; + } else { + color = "default"; + flag = "STOP"; + } + + return '' + flag + ''; +}); + +/** + * 比对实现 + */ +Handlebars.registerHelper('if_eq', function(v1, v2, opts) { + if(v1 == v2) + return opts.fn(this); + else + return opts.inverse(this); +}); + + +/** + * 验证路径 + */ +Handlebars.registerHelper('validate_path', function(v1) { + if (v1 && !isJSON('{' + v1 + '}')) { + return v1 + "."; + } + + return ""; +}); + +/** + * 获取地址栏参数 + * @param name + * @returns + */ +function GetQueryString(name) { + var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)"); + var r = window.location.search.substr(1).match(reg); + if (r != null) + return decodeURIComponent(r[2]); + return null; +} + +/** + * 判断是否为json格式字符串 + * @param str + */ +function isJSON(str) { + if (typeof str == 'string') { + try { + var obj=JSON.parse(str); + if(typeof obj == 'object' && obj ){ + return true; + }else{ + return false; + } + + } catch(e) { + console.log('error:'+str+'!!!'+e); + return false; + } + } + console.log('It is not a string!') +} \ No newline at end of file diff --git a/src/main/webapp/js/json/HttpRequestHeader.json b/src/main/webapp/js/json/HttpRequestHeader.json index 90e870356532a7729d67f8a85e876d7aeda2338a..377e27fdbf6a22bb45ab366972c3c84d8db14450 100644 --- a/src/main/webapp/js/json/HttpRequestHeader.json +++ b/src/main/webapp/js/json/HttpRequestHeader.json @@ -1,96 +1,98 @@ { "returnCode": 0, - "error": "", - "rootPid": 1, - "data": [{ - "attributes": null, - "defaultValue": "", - "mark": "请求头", - "parameterId": 1, - "parameterIdentify": "RequestHeader", - "parameterName": "", - "parentId": 0, - "path": "TopRoot", - "type": "Map" - },{ - "attributes": null, - "defaultValue": "", - "mark": "请求头,标名请求主机器名,可为IP也可为域名,http1.1后强制使用,用此请求信息,可在服务端做WEB虚拟机,实现一机多WEB服务", - "parameterId": 2, - "parameterIdentify": "Host", - "parameterName": "", - "parentId": 1, - "path": "TopRoot.RequestHeader", - "type": "String" - },{ - "attributes": null, - "defaultValue": "", - "mark": "请求、响应体的数据字节大小", - "parameterId": 3, - "parameterIdentify": "Content-Length", - "parameterName": "", - "parentId": 1, - "path": "TopRoot.RequestHeader", - "type": "String" - },{ - "attributes": null, - "defaultValue": "", - "mark": "请求头,可接受的文本压缩算法,如: gzip, deflate", - "parameterId": 4, - "parameterIdentify": "Accept-Encoding", - "parameterName": "", - "parentId": 1, - "path": "TopRoot.RequestHeader", - "type": "String" - },{ - "attributes": null, - "defaultValue": "", - "mark": "请求头,支持语言,客户端浏览器的设置,如:zh-cn,zh;q=0.8,en-us;q=0.5,en;q=0.3", - "parameterId": 5, - "parameterIdentify": "Accept-Language", - "parameterName": "", - "parentId": 1, - "path": "TopRoot.RequestHeader", - "type": "String" - },{ - "attributes": null, - "defaultValue": "", - "mark": "请求头,浏览器信息,如:Mozilla/5.0 (Macintosh; Intel Mac OS X 10.7; rv:12.0) Gecko/20100101 Firefox/12.0,细心会注册到IE也会用Mozilla,这是一个历史问题,早期WEB服务器貌似有问题,只支持Mozilla,微软IE做为 后起之秀只能伪装成Mozilla", - "parameterId": 6, - "parameterIdentify": "User-Agent", - "parameterName": "", - "parentId": 1, - "path": "TopRoot.RequestHeader", - "type": "String" - },{ - "attributes": null, - "defaultValue": "", - "mark": "请求头,服务器或客户端在上次设置的COOKIE,包括作用域名(.360buy.com),过 期时间,键与值。大部分WEB服务器都会在第一次访问时在响应头上加Set-Cookie, (指某些网站为了辨别用户身份、进行session跟踪而储存在用户本地终端上的数据(通常经过加密))如:BAIDUID=49415814CDBBB4CE65EC50EE4BB65E9A:FG=1; expires=Wed, 07-Nov-42 07:03:34 GMT; path=/; domain=.baidu.com", - "parameterId": 7, - "parameterIdentify": "Cookie", - "parameterName": "", - "parentId": 1, - "path": "TopRoot.RequestHeader", - "type": "String" - },{ - "attributes": null, - "defaultValue": "", - "mark": "从一个连接打开一个新页面,新页面的请求一般会加此信息,标名是从哪里跳过来的,所有的页面的打开历史链就可被挖掘出来,有利于分析用户行为与CPS分成", - "parameterId": 8, - "parameterIdentify": "Referer", - "parameterName": "", - "parentId": 1, - "path": "TopRoot.RequestHeader", - "type": "String" - },{ - "attributes": null, - "defaultValue": "", - "mark": "请求的数据类型:text/html;charset=gbk", - "parameterId": 9, - "parameterIdentify": "Content-Type", - "parameterName": "", - "parentId": 1, - "path": "TopRoot.RequestHeader", - "type": "String" - }] + "data":{ + "error": "", + "rootPid": 1, + "data": [{ + "attributes": null, + "defaultValue": "", + "mark": "请求头", + "parameterId": 1, + "parameterIdentify": "RequestHeader", + "parameterName": "", + "parentId": 0, + "path": "TopRoot", + "type": "Map" + },{ + "attributes": null, + "defaultValue": "", + "mark": "请求头,标名请求主机器名,可为IP也可为域名,http1.1后强制使用,用此请求信息,可在服务端做WEB虚拟机,实现一机多WEB服务", + "parameterId": 2, + "parameterIdentify": "Host", + "parameterName": "", + "parentId": 1, + "path": "TopRoot.RequestHeader", + "type": "String" + },{ + "attributes": null, + "defaultValue": "", + "mark": "请求、响应体的数据字节大小", + "parameterId": 3, + "parameterIdentify": "Content-Length", + "parameterName": "", + "parentId": 1, + "path": "TopRoot.RequestHeader", + "type": "String" + },{ + "attributes": null, + "defaultValue": "", + "mark": "请求头,可接受的文本压缩算法,如: gzip, deflate", + "parameterId": 4, + "parameterIdentify": "Accept-Encoding", + "parameterName": "", + "parentId": 1, + "path": "TopRoot.RequestHeader", + "type": "String" + },{ + "attributes": null, + "defaultValue": "", + "mark": "请求头,支持语言,客户端浏览器的设置,如:zh-cn,zh;q=0.8,en-us;q=0.5,en;q=0.3", + "parameterId": 5, + "parameterIdentify": "Accept-Language", + "parameterName": "", + "parentId": 1, + "path": "TopRoot.RequestHeader", + "type": "String" + },{ + "attributes": null, + "defaultValue": "", + "mark": "请求头,浏览器信息,如:Mozilla/5.0 (Macintosh; Intel Mac OS X 10.7; rv:12.0) Gecko/20100101 Firefox/12.0,细心会注册到IE也会用Mozilla,这是一个历史问题,早期WEB服务器貌似有问题,只支持Mozilla,微软IE做为 后起之秀只能伪装成Mozilla", + "parameterId": 6, + "parameterIdentify": "User-Agent", + "parameterName": "", + "parentId": 1, + "path": "TopRoot.RequestHeader", + "type": "String" + },{ + "attributes": null, + "defaultValue": "", + "mark": "请求头,服务器或客户端在上次设置的COOKIE,包括作用域名(.360buy.com),过 期时间,键与值。大部分WEB服务器都会在第一次访问时在响应头上加Set-Cookie, (指某些网站为了辨别用户身份、进行session跟踪而储存在用户本地终端上的数据(通常经过加密))如:BAIDUID=49415814CDBBB4CE65EC50EE4BB65E9A:FG=1; expires=Wed, 07-Nov-42 07:03:34 GMT; path=/; domain=.baidu.com", + "parameterId": 7, + "parameterIdentify": "Cookie", + "parameterName": "", + "parentId": 1, + "path": "TopRoot.RequestHeader", + "type": "String" + },{ + "attributes": null, + "defaultValue": "", + "mark": "从一个连接打开一个新页面,新页面的请求一般会加此信息,标名是从哪里跳过来的,所有的页面的打开历史链就可被挖掘出来,有利于分析用户行为与CPS分成", + "parameterId": 8, + "parameterIdentify": "Referer", + "parameterName": "", + "parentId": 1, + "path": "TopRoot.RequestHeader", + "type": "String" + },{ + "attributes": null, + "defaultValue": "", + "mark": "请求的数据类型:text/html;charset=gbk", + "parameterId": 9, + "parameterIdentify": "Content-Type", + "parameterName": "", + "parentId": 1, + "path": "TopRoot.RequestHeader", + "type": "String" + }] + } } \ No newline at end of file diff --git a/src/main/webapp/js/json/HttpResponseHeader.json b/src/main/webapp/js/json/HttpResponseHeader.json index 278312fbb32d0a343f05c5c64ceea91cb49471e0..ba5c2719fe571611eb9c84ab0ac4a153c4e422f9 100644 --- a/src/main/webapp/js/json/HttpResponseHeader.json +++ b/src/main/webapp/js/json/HttpResponseHeader.json @@ -1,76 +1,78 @@ { "returnCode": 0, - "error": "", - "rootPid": 1, - "data": [{ - "attributes": null, - "defaultValue": "", - "mark": "响应头", - "parameterId": 1, - "parameterIdentify": "ResponseHeader", - "parameterName": "", - "parentId": 0, - "path": "TopRoot", - "type": "Map" - },{ - "attributes": null, - "defaultValue": "", - "mark": "响应的数据类型:text/html;charset=gbk", - "parameterId": 2, - "parameterIdentify": "Content-Type", - "parameterName": "", - "parentId": 1, - "path": "TopRoot.ResponseHeader", - "type": "String" - },{ - "attributes": null, - "defaultValue": "", - "mark": "响应的数据体大小", - "parameterId": 3, - "parameterIdentify": "Content-Length", - "parameterName": "", - "parentId": 1, - "path": "TopRoot.ResponseHeader", - "type": "String" - },{ - "attributes": null, - "defaultValue": "", - "mark": "如果为文本、HTML信息,则使用的编码方式", - "parameterId": 4, - "parameterIdentify": "Content-Encoding", - "parameterName": "", - "parentId": 1, - "path": "TopRoot.ResponseHeader", - "type": "String" - },{ - "attributes": null, - "defaultValue": "", - "mark": "当前服务器日期", - "parameterId": 5, - "parameterIdentify": "Date", - "parameterName": "", - "parentId": 1, - "path": "TopRoot.ResponseHeader", - "type": "String" - },{ - "attributes": null, - "defaultValue": "", - "mark": "服务器名", - "parameterId": 6, - "parameterIdentify": "Server", - "parameterName": "", - "parentId": 1, - "path": "TopRoot.ResponseHeader", - "type": "String" - },{ - "attributes": null, - "defaultValue": "", - "mark": "第一次访问或服务设置COOKIE时,响应头里会有此信息, 如,BAIDUID=49415814CDBBB4CE65EC50EE4BB65E9A:FG=1; expires=Wed, 07-Nov-42 07:03:34 GMT; path=/; domain=.baidu.com", - "parameterId": 7, - "parameterIdentify": "Set-Cookie", - "parameterName": "", - "parentId": 1, - "path": "TopRoot.ResponseHeader", - "type": "String" - }] + "data": { + "error": "", + "rootPid": 1, + "data": [{ + "attributes": null, + "defaultValue": "", + "mark": "响应头", + "parameterId": 1, + "parameterIdentify": "ResponseHeader", + "parameterName": "", + "parentId": 0, + "path": "TopRoot", + "type": "Map" + },{ + "attributes": null, + "defaultValue": "", + "mark": "响应的数据类型:text/html;charset=gbk", + "parameterId": 2, + "parameterIdentify": "Content-Type", + "parameterName": "", + "parentId": 1, + "path": "TopRoot.ResponseHeader", + "type": "String" + },{ + "attributes": null, + "defaultValue": "", + "mark": "响应的数据体大小", + "parameterId": 3, + "parameterIdentify": "Content-Length", + "parameterName": "", + "parentId": 1, + "path": "TopRoot.ResponseHeader", + "type": "String" + },{ + "attributes": null, + "defaultValue": "", + "mark": "如果为文本、HTML信息,则使用的编码方式", + "parameterId": 4, + "parameterIdentify": "Content-Encoding", + "parameterName": "", + "parentId": 1, + "path": "TopRoot.ResponseHeader", + "type": "String" + },{ + "attributes": null, + "defaultValue": "", + "mark": "当前服务器日期", + "parameterId": 5, + "parameterIdentify": "Date", + "parameterName": "", + "parentId": 1, + "path": "TopRoot.ResponseHeader", + "type": "String" + },{ + "attributes": null, + "defaultValue": "", + "mark": "服务器名", + "parameterId": 6, + "parameterIdentify": "Server", + "parameterName": "", + "parentId": 1, + "path": "TopRoot.ResponseHeader", + "type": "String" + },{ + "attributes": null, + "defaultValue": "", + "mark": "第一次访问或服务设置COOKIE时,响应头里会有此信息, 如,BAIDUID=49415814CDBBB4CE65EC50EE4BB65E9A:FG=1; expires=Wed, 07-Nov-42 07:03:34 GMT; path=/; domain=.baidu.com", + "parameterId": 7, + "parameterIdentify": "Set-Cookie", + "parameterName": "", + "parentId": 1, + "path": "TopRoot.ResponseHeader", + "type": "String" + }] + } } \ No newline at end of file diff --git a/src/main/webapp/login.html b/src/main/webapp/login.html index 3fb117921070ff6fbf08ef5ed2dc325cb83e53e5..da1eb508f8f02f54e632657e1b1ebdb391f6f5ab 100644 --- a/src/main/webapp/login.html +++ b/src/main/webapp/login.html @@ -62,11 +62,13 @@
    - + + + - - + + diff --git a/src/main/webapp/resource/user/mail.js b/src/main/webapp/resource/user/mail.js index 394782c661c6ff6ff403308020858548954bbe03..bcafa14ef51de91666bf471b1c13a6843e236e72 100644 --- a/src/main/webapp/resource/user/mail.js +++ b/src/main/webapp/resource/user/mail.js @@ -67,11 +67,15 @@ var columnsSetting = [ var eventList = { "#batch-del-object":function(){ var checkboxList = $(".selectMail:checked"); - batchDelObjs(checkboxList, REQUEST_URL.MAIL.GET); + batchDelObjs(checkboxList, REQUEST_URL.MAIL.GET, null, null, function() { + (top['welcome']).getMailNum(); + }); }, "#batch-setting-read":function(){ var checkboxList = $(".selectMail:checked"); - batchOp (checkboxList, REQUEST_URL.MAIL.CHANGE_STATUS, "处理", null, "mailId", {statusName:"readStatus", status:"0"}) + batchOp(checkboxList, REQUEST_URL.MAIL.CHANGE_STATUS, "处理", null, "mailId", {statusName:"readStatus", status:"0"}, function() { + (top['welcome']).getMailNum(); + }); }, ".object-del":function(){ var data = table.row( $(this).parents('tr') ).data(); diff --git a/src/main/webapp/welcome.html b/src/main/webapp/welcome.html index 477a131eb9a51dee1ef93073e57759594505b5e7..7c68ff5aa28cc5a2c3ee66bb74d277ff54369471 100644 --- a/src/main/webapp/welcome.html +++ b/src/main/webapp/welcome.html @@ -90,131 +90,11 @@

      

    - - + + + \ No newline at end of file diff --git a/src/main/webapp/welcome.js b/src/main/webapp/welcome.js new file mode 100644 index 0000000000000000000000000000000000000000..36cb71fed0414980f7d96dc959451c38a113e561 --- /dev/null +++ b/src/main/webapp/welcome.js @@ -0,0 +1,165 @@ +$(document).ready(function(){ + //获取登陆之后的相关信息 + queryLoginInfo(); + + //获取权限列表 + $.get(REQUEST_URL.ROLE.GET_USER_PERMISSION_LIST, function (json) { + if (json.returnCode == RETURN_CODE.SUCCESS) { + top.currentUserPermissionList = json.data; + } else { + layer.alert('获取用户权限信息出错,请重新登陆!'); + } + }); + + //检查系统版本 + $.get(REQUEST_URL.GLOBAL_SETTING.CHECK_SYSTEM_VERSION, function(json){ + if (json.returnCode == 0) { + if (json.data.newVersion != null && json.data.newVersion != json.data.version) { + $("#version").html('有新版本可以升级'); + } + } else { + console.error("检查系统版本失败:" + json.msg); + } + }); +}); + +/** + * 获取登陆之好的相关信息:包括用户信息,全局配置,测试统计数据等 + */ +function queryLoginInfo(){ + var userInfo = {}; + var lastLoginTime = ""; + var df = $.Deferred(); + df.done(function(){ + if (!($.isEmptyObject(userInfo))) { + //加载目录信息 + parent.loadMenuFun(); + //获取配置 + getSetting(); + //获取统计信息 + getStatisticalQuantity(); + //获取未读邮件信息 + queryMailNum(); + + //填充页面基本信息 + $("#group_name").text(userInfo.role.roleGroup); + $("#real_name").text(userInfo.realName); + $("#last_login_time").text(lastLoginTime); + parent.$("#role_name").text(userInfo.role.roleName); + parent.$("#real_name").text(userInfo.realName); + if (userInfo.role.roleName != "admin") { + parent.$(".adminPower").css("display","none"); + } + + + } + }); + + //获取登陆用户信息 + $.post(REQUEST_URL.LOGIN.GET_LOGIN_USER_INFO, {token:parent.token}, function(data) { + if (data.returnCode == RETURN_CODE.SUCCESS) { + userInfo = data.data.user; + lastLoginTime = data.data.lastLoginTime; + parent.homeUrl = data.data.homeUrl; + parent.userId = userInfo.userId; + df.resolve(); + } else if (data.returnCode == RETURN_CODE.NO_LOGIN) { + var username = getCookie("username"); + var password = getCookie("password"); + if (username != null && password != null && parent.token == null) { + $.post(REQUEST_URL.LOGIN.LOGIN,{ + username:username, + password:password + }, function(data) { + if (data.returnCode == RETURN_CODE.SUCCESS) { + userInfo = data.data.user; + lastLoginTime = data.data.lastLoginTime; + parent.homeUrl = data.data.homeUrl; + parent.userId = userInfo.userId; + df.resolve(); + } else { + parent.window.location.href = parent.backUrl; + } + }); + } else { + parent.window.location.href = parent.backUrl; + } + }else{ + parent.window.location.href = parent.backUrl; + } + }); +} + +/** + * 获取全局配置并设置到页面 + */ +function getSetting() { + $.get(REQUEST_URL.GLOBAL_SETTING.GET_WEB_SETTINGS, function(data) { + if(data.returnCode == 0){ + data = data.data; + $("#notice").html(data.notice); + $("#copyright").html(data.copyright); + $("#siteName").html(data.siteName); + parent.$("#siteName").html(data.siteName); + parent.$("#version").text("V" + data.version); + } + }); +} + +/** + * ajax请求查询用户未读邮件数量 + */ +function getMailNum(){ + $.get(REQUEST_URL.MAIL.GET_NO_READ_MAIL_NUM, function(data) { + if (data.returnCode === RETURN_CODE.SUCCESS && data.data !== 0) { + parent.$(".noReadMailNum").text(data.data); + } else { + parent.$(".noReadMailNum").text(""); + } + }); +} + +/** + * 查询未读邮件数量,默认使用webSocket,否则使用ajax轮询 + */ +function queryMailNum () { + //第一次获取 + getMailNum(); + + let userId = parent.userId; + let ws = createWebSocket('/push/mail/' + userId); + + if (ws == null) { + setInterval(getMailNum, 90000); + return; + } + + ws.onmessage = function(event) { + if (event.data !== 0) { + parent.$(".noReadMailNum").text(event.data); + } + } + + parent.window.onbeforeunload = function(event) { + ws.close(); + } +} + + + +/** + * 获取测试统计数据 + */ +function getStatisticalQuantity() { + $.get(REQUEST_URL.GLOBAL_SETTING.GET_STATISTICAL_QUANTITY, function(data) { + if(data.returnCode == 0){ + $.each(data.data, function(itemName, countInfo) { + $("td[count-type='" + itemName + "']").eq(0).text(countInfo.totalCount); + $("td[count-type='" + itemName + "']").eq(1).text(countInfo.todayCount); + $("td[count-type='" + itemName + "']").eq(2).text(countInfo.yesterdayCount); + $("td[count-type='" + itemName + "']").eq(3).text(countInfo.thisWeekCount); + $("td[count-type='" + itemName + "']").eq(4).text(countInfo.thisMonthCount); + }); + } + }); +} \ No newline at end of file diff --git a/update.md b/update.md index 9c17ede6f4bc4da27742a3b923616276e0217bfc..aa3fd5980977879a115e7a69a640c9d1067c491c 100644 --- a/update.md +++ b/update.md @@ -1,3 +1,36 @@ +~~1、增加websocket接口mock;~~ +~~2、默认不展示web自动化测试模块;~~ +3、增加初级的测试数据池功能; +4、增加历史数据报表功能。 +5、优化数据验证、数据库验证等功能; +6、支持对数组的取值,设定值; +7、增加测试集全局配置:头信息、验证规则、测试集变量等功能; +8、完善操作说明手册, +~~10、一键安装包 for linux;~~ +~~11、更加方便安全的版本更新方案;~~ +12、主页和论坛; +~~13、支持直接从接口的报文列表中新增Mock接口;~~ +~~14、测试集中可以更加方便的管理组合场景,而不是直接打开新的tab窗口;~~ +~~15、权限控制可以显示隐藏按钮。~~ +~~16、重写部分功能,使用websocket交互。~~ +9、支持从yapi/rap/postman/swagger/各种规范的日志文件中导入接口; +17、对文件上传类接口的支持。 + + + +### v0.2.2beta +#### 2019.11.28 +- 新增:更加简便安全的版本更新方案(只需要更新到最新War包即可); +- 新增:webSocket类型的接口Mock,支持选择指定的接口场景来新增接口Mock信息(支持Http/Socket/WebSocket协议); +- 新增:角色权限控制支持精确到前端按钮级别(仅支持部分主要功能的按钮); +- 新增:测试集公共变量/公共请求头/公共验证规则; +- 更新:前后端部分交互采用WebSocket技术; +- 更新:默认不显示WebUI测试相关模块(暂时废弃,不更新了); +- 修复:前端弹出窗口大小没有跟随浏览器大小动态改变而导致显示异常的问题 +- 修复:组合场景配置异常问题。 + + + ### v0.2.1beta #### 2019.11.17 - 修复:HTTP协议使用GET请求如果参数值为空的情况会导致无法正确的拼接查询参数到URL后面的问题;