复杂业务场景“基因重组”组件
现状
随着业务参数配置中心所对接的参数越来越多,而且每个参数都包含一定的业务逻辑,系统自身的组件功能越来越丰富,同时业务参数配置中心也面临一些情况:
- 主流程、核心代码影响为全局的,组件开发都会涉及到主流程、核心代码的变化(比如:梯度组件、完整度组件、生命周期等),代码变化对现有已对接的参数有何影响未知
- 开发资源短缺、测试资源不稳定(自动系统上线已经有三个测试组进行交接,新人接手测试、对已有的版本只知甚少),给系统质量保证带来一定影响。
- 参数业务场景复杂度较高,各参数之间有依赖关系,开发自测及测试回归耗时、耗力。
- N录N核模式基于配置不同,带来的场景结果不同,每个参数场景太多,迭代版本时间有限,测试无发全覆盖。
- 特殊模式(比如:强制或非强制提交模式、生命周期交叉模式、批量事务支持模式、单录或批量衍生模式、触发流程时机模式、梯度组件模式、完整度组件模式、适配模式等等)需要外部资源(会服系统、结算库、做市商库等)配合才能实现,搭建外部资源太耗时、耗力。
- 如何让参数的场景:write once run everywhere ?
- 如何借助业务人员的UAT验收场景?如何有效利用集成测试的业务场景?
针对上面所面临的问题,开发出基于复杂业务场景“基因重组”组件,此组件的目的就是解决上面所面临的困境。并且此组件也可供系统测试中心所使用,把其所设计的测试场景用例一次录入,终生随时随地进行一键回归。
“基因重组”设计原理
抽象
每个业务参数的业务场景均不同,但是结合N录N核功能进行逻辑抽象后,一个业务场景可以拆分为N个场景片段,每个场景片段只包含一个执行功能。
|
重组
复杂业务场景也是由一个一个的普通业务场景组合而来,那么基于抽象出来的场景、场景片段、执行段进行重组、排列就可以构建一个复杂业务场景。
重用
基于抽象图可以看到,场景片段组成场景,场景片段同时也关联执行段。同一个场景片段、执行段,可以进行复用,出现在不同的场景里。
比如:
|
|
由图可知:
- 不同的场景,可以复用场景片段及执行段
- 不同的场景,相同的场景片段可以挂载不同的执行段
- 不同的场景,相同的场景片段执行顺序可以不同
- 同一场景中,不同的场景片段可以挂载相同的执行段
顺序
这里所说的“顺序”指的是执行片段所依赖的上下文顺序(类似多线程切换时,需要保存当前线程的上下文数据)。比如:当前执行段执行时所需要的前置条件。
|
执行段
定义
真正触发业务逻辑的执行者及断言结果。
分类
执行段基于N录N核模式又分为如下类型:
|
逻辑
执行片段自身逻辑:
|
结合场景片段后的逻辑为:
|
使用
此组件已经开发完成,研发这边已经录入近200个复杂业务场景,50条基础业务场景,后续也会继续录入。
执行:可以通过Bamboo自动执行,也可以手动运行程序。
开发完成后,也和系统测试中心沟通过,编写相应的使用手册,供其使用。
度量
程序代码每次变更,提交Pull Request,均会触发组件的执行,并把此次的每个场景的场景片段执行结果存入数据库,统计每个场景是否执行通过,若是不通过,会有相应的异常结果或者异常日志记录在库中,方便开发进行查看。从而反应出此次代码修订是否对已有参数的业务场景是否造成影响。
使用说明
主要步骤
- 明确要测试的业务场景
- 编排此业务场景的各个场景片段
- 识别各个场景片段的前置、后置处理
- 通过系统,执行各个场景片段,并把请求参数录入到数据库
- 填写各个执行段的预期
- 填写完,可手动触发一次,看执行结果是否符合预期
详细步骤
- 涉及到的数据库表
CC_TEST_BIZ_SCENE | 场景配置表 |
CC_TEST_BIZ_SCENE_PART | 场景片段配置表 |
CC_TEST_EXEC_SEGMENT_CONFIG | 执行段配置表 |
CC_TEST_RESULT | 执行结果统计表 |
- CC_TEST_BIZ_SCENE表
字段 | 说明 |
BIZ_SCENE_ID | 场景配置表主键 |
STATUS | 是否启用,1:启用,0:停用 |
REMARK | 场景详细描述 |
举例:
- CC_TEST_BIZ_SCENE_PART表
字段 | 说明 |
BIZ_SCENE_PART_ID | 业务场景片段ID |
SCENE_PART_BEFORE | 场景片段执行前逻辑 |
EXECU_SEGMENT_CONFIG_ID | 执行段配置ID |
SCENE_PART_AFTER | 场景片段执行后逻辑 |
BIZ_SCENE_ID | 所属业务场景ID |
SCENE_PART_ORDER | 场景片段序号,从1开始,同一个业务场景下,此字段递增 |
STATUS | 状态,是否启用。1:启用,0:不启用;默认值1 |
REMARK | 备注信息 |
- CC_TEST_EXEC_SEGMENT_CONFIG表
EXEC_SEGMENT_CONFIG_ID | 执行段主键 |
CURRENT_EXEC_USER | 当前执行人 |
BEFORE_SQL | 前置执行SQL |
EXEC_SEGMENT_TYPE | 执行段类型 |
BIZ_MAIN_PARAMS | 执行段参数,可通过浏览器F12获取 |
BIZ_OTHER_PARAMS | 执行段其他参数,json格式 |
ASSERT_STATUS | 执行段Http Status 断言码 |
ASSERT_SUCCESS | 执行段结果,json格式。{“success”:true,”message”:”xxxx”,”data”:”yyyyy”} |
AFTER_SQL | 后置执行SQL |
BATCH_FLAG | 是否批量标识,0:单录模式,1:批量模式 |
BEFORE_EXEC_SEGMENT_CONFIG_ID | 上下文的前置执行段配置ID |
REMARK | 备注 |
- CC_TEST_RESULT 表
TEST_ID | 测试ID,每一轮测试一个ID,从1开始累加,每次加1 |
EXECUTE_ID | 复杂测试的执行段ID或基础测试的测试流程参数配置ID |
SCENE_PART_ID | 测试场景片段ID,基础测试为测试流程参数配置ID |
SCENE_ID | 测试场景ID,基础测试为测试流程参数配置ID |
SUCCESS | 测试结果: 1 成功,0 断言失败, -1 异常失败 |
TEST_LOG | 测试日志,记录测试失败的信息或异常日志信息 |
TEST_TYPE | 测试类型: 1 基础测试, 2 复杂场景测试 |
TEST_RESULT | 测试结果信息 |
TEST_TIME | 测试时间 |
场景配置
具体可参照第五章节。以一个实际的实例进行了详细的描述说明。