Slickflow.NET 开源工作流引擎高级开发(二) -- 流程快速测试增值服务工具介绍
前言:流程是由若干个任务节点组成,流转过程就是从一个节点转移到下一个节点,通常需要不断切换用户身份来完成流程的测试,这样使得测试效率比较低下,本文从实战出发,介绍常见的两种快速测试方法,用于提升流程测试和实施的效率。
1. 流程快速测试介绍
流程引擎的核心功能是保证流程正常流转,流程是由若干个节点组成,真实的业务系统是每个用户完成各自的任务后,分发给下一步任务节点,再由下一步的任务接收人员办理任务,以此循环前进,直至流程流转结束。
如果按照这样的测试策略,每一步都需要变换用户身份来完成功能测试,这样造成的效率确实是比较低下,所以引擎开发人员需要找出能够快速测试的方法,不断提升流程测试的效率,自动化的测试策略的提出就是一个可行的方案。
2. 流程快速测试的解决方案
在自动化测试方法提出之前,能够想到的就是让流程可以在每一个任务节点上自动运行流转,这就需要装载一些测试数据,保证流转运行的接口能够读取到这些数据,然后驱动流程向下流转。本文首先提出了脚本自动化测试和用户身份模拟的两种办法来解决。
2.1 流程脚本自动化测试
每次在流程引擎新版本发布时候,需要确保流程的基本流转功能能够正常运行,然后由于工作流模式(Workflow Patten)已经包括的模型类型大概有几十种以上,如何保证新版本发布后,不影响每一个工作流模型都能够正常运行呢?假如每一个模式都逐一去做测试,又是比较费时费力的工作。
所以可行的办法就是通过脚本化测试,一次全部集中测试,覆盖所有的工作流模式和功能接口方法,这样就可以确保新版本的顺利发布。在Slickflow引擎测试中,由于WebApi接口的大量使用,测试人员认为可以建立基于WebApi接口的自动化测试,这一思路也使得可以针对Slickflow.Engine的不同版本测试,尤其是包含了.Net, .Net Core和.Net SAAS三个不同版本的自动化测试。如下图所示,通过WebApi的配置,就可以进行一次工作流模式的全覆盖测试。
WebApi接口需要的数据类型就是Json格式的数据,所以脚本文件就是Json数据。下面的代码就是一个简单的串行流程的Json数据。
//本JSON文件提供runner对象,能够测试串行流程的开始,运行到结束。
{
"CompanyID": "2",
"ProcessID": "3",
"ProcessName": "报价流程",
"ProcessGUID": "072af8c3-482a-4b1c-890b-685ce2fcc75d",
"AppInstanceID": "SEQ-P-1099",
//启动流程
//start process
"Start": {
"UserID": "10",
"UserName": "Long",
"CompanyID": "2",
"AppName": "SamplePrice",
"AppInstanceID": "SEQ-P-1099",
"ProcessGUID": "072af8c3-482a-4b1c-890b-685ce2fcc75d"
},
//业务员提交申请
//run process
"Apply": {
"UserID": "10",
"UserName": "Long",
"CompanyID": "2",
"AppName": "SamplePrice",
"AppInstanceID": "SEQ-P-1099",
"ProcessGUID": "072af8c3-482a-4b1c-890b-685ce2fcc75d",
"NextActivityPerformers": {
"eb833577-abb5-4239-875a-5f2e2fcb6d57": [
{
"UserID": 10,
"UserName": "Long"
}
]
}
},
//板房签字
//run process
"Sign": {
"UserID": "10",
"UserName": "Long",
"CompanyID": "2",
"AppName": "SamplePrice",
"AppInstanceID": "SEQ-P-1099",
"ProcessGUID": "072af8c3-482a-4b1c-890b-685ce2fcc75d",
"NextActivityPerformers": {
"cab57060-f433-422a-a66f-4a5ecfafd54e": [
{
"UserID": 10,
"UserName": "Long"
}
]
}
},
//业务员签字确认,流程结束
//run process
"Confirm": {
"UserID": "10",
"UserName": "Long",
"CompanyID": "2",
"AppName": "SamplePrice",
"AppInstanceID": "SEQ-P-1099",
"ProcessGUID": "072af8c3-482a-4b1c-890b-685ce2fcc75d",
"NextActivityPerformers": {
"b53eb9ab-3af6-41ad-d722-bed946d19792": [
{
"UserID": 10,
"UserName": "Long"
}
]
}
}
}
2.2 流程用户模拟测试
用户交互测试也是一种必不可少的测试过程,而且在交互过程中,可以跟踪和调试程序,真实系统的流转是需要用户身份的不断切换,但是不妨通过身份模拟来减少切换环节,通过对流程引擎接口的内部改造,证实是可以实现这一思路的。
如下图所示,一个集成测试的用户界面,左侧是流程定义记录,右侧上半部分是待办任务列表,下半部分是办结任务列表。功能接口主要是流程的启动、流转、退回和返送。功能测试人员通过选择流程定义记录,随时就能进行流程实例的启动、流转、退回和返送操作,不用重复的身份切换。
3. 流程图形的代码创建
客户有时候会提交自己的流程XML来进行测试,然而有些流程定义是比较复杂的业务流程,通常可能有几十个甚至上百个节点记录。引擎开发人员首先需要做到对流程图形的简化,但是通过流程设计器来创建流程图,有时候是比较慢,而代码创建流程图就反而容易和轻松一些。虽然代码方式不能完全取代流程设计器,但是对于程序开发人员,确实也需要这种快速构建流程图形的方法。
如下图所示,通过代码创建流程图的片段。这里是创建了一个带分支并行的流程图。
代码执行完成后,将会生成一条流程定义记录,通过设计器打开这条流程记录,流程的图形就会被展示出来,如下图所示:
试想一下,如果这个图形通过手工创建,拖拽节点,添加连线的方式,也是需要耗费一些时间的,而代码创建,就是一步生成,节省的时间的确可以是几十倍的时间。
4. 总结
本文总结了在测试过程中,如何快速测试的方法,这些辅助工具的开发和发布,是为了减少开发人员重复的工作量,提升流程开发的效率。
5. 备注
快速测试辅助模块作为增值服务(需额外购买获取)供企业客户选择,这些辅助工具并不是必需的核心功能模块,推荐给有需求的客户使用,是为了适应和改善企业客户的开发体验。也希望企业客户能够建立快速测试驱动的流程项目的开发测试和实施过程,从而整体提升软件开发效率和生产力。
Slickflow.NET 开源工作流引擎高级开发(二) -- 流程快速测试增值服务工具介绍的更多相关文章
- Slickflow.NET 开源工作流引擎高级开发(一) -- 流程外部事件的调用和变量存储实现
前言:流程实现基本流转功能外,通常也需要调用外部事件,用于和业务系统的交互,同时存储一些流程变量,用于追踪和记录业务数据变化对流程流转的影响. 1. 流程事件 流程执行过程中,伴随各种事件的发生,而且 ...
- Slickflow.NET 开源工作流引擎高级开发(三) -- 并行分支容器与会签工作流模式的组合
前言: 流程引擎的核心功能是负责解析流程定义XML和流转,业务环节的不断积累,让人们不断总结和抽象出一些模式,这些模式统称为工作流模式(Workflow Pattern).本文的重点就是介绍一种常见 ...
- Slickflow.NET 开源工作流引擎高级开发(六) -- WebTest 引擎接口模拟测试工具集
前言:引擎组件的接口测试不光是程序测试人员使用,而且也是产品负责人员需要用到的功能,因为在每一步流转过程中,就会完整模拟实际用户发生的场景,也就容易排查具体是程序问题还是业务问题,从而快速定位问题,及 ...
- Slickflow.NET 开源工作流引擎高级开发(五) -- 引擎和外部事件的交互
前言:引擎组件的基本职责是负责流程流转,但是在流转过程中,除了对内部控制逻辑进行实现外,也不可避免的要去调用或者响应外部事件.本文主要描述外部事件的类型,以及调用方法过程. 1. 外部事件的类型 外部 ...
- Slickflow.NET 开源工作流引擎高级开发(四) -- 硬核编码:代码式快速构建流程图
前言:通过设计器交互来创建流程图是比较常见的方式,这种方式是比较方便业务人员对流程的操作.然而,在需要流程模板,或者技术开发阶段以及一些自动化流程的处理过程中,使用代码快速创建流程图也是一种非常有必要 ...
- Slickflow.NET 开源工作流引擎快速入门之二: 简单并行分支流程代码编写示例
前言:对于急切想了解引擎功能的开发人员,在下载版本后,就想尝试编写代码,完成一个流程的开发和测试.本文试图从一个最简单的并行分支流程来示例说明,如何快速了解引擎代码的编写. 版本:.NET Core2 ...
- Slickflow.NET 开源工作流引擎基础介绍(二) -- 引擎组件和业务模块的交互
集成流程引擎的必要性 业务过程的变化是在BPM系统中常见的现象,企业管理层需要不断优化组织架构,改造业务流程,不可避免地带来了业务流程的变化,企业信息系统就会随之面临重构的可能性.一种直接的方式是改造 ...
- Slickflow.NET 开源工作流引擎基础介绍(二) -- 引擎组件和业务系统的集成
集成流程引擎的必要性 业务过程的变化是在BPM系统中常见的现象,企业管理层需要不断优化组织架构,改造业务流程,不可避免地带来了业务流程的变化,企业信息系统就会随之面临重构的可能性.一种直接的方式是改造 ...
- Slickflow.NET 开源工作流引擎基础介绍(九) -- .NET Core2.0 版本实现介绍
前言:.NET Core 是.NET Framework的新一代版本,是微软开发的第一个跨平台 (Windows.Mac OSX.Linux) 的应用程序开发框架(Application Framew ...
随机推荐
- java.uti.Random类nextInt方法中随机数种子为47的奇怪问题
一,问题描述 需要生成一个[0,1]的随机数.即随机生成 0 或者 1.使用java.util.Random类的 nextInt(int)方法,当构造Random类的对象并提供随机数种子时,发现了一个 ...
- Java SSM框架之MyBatis3(二)MyBatis之Mapper代理的开发方式
Mapper代理的开发规范 1. mapper接口的全限定名要和mapper映射文件的namespace值一致. 2. mapper接口的方法名称要和mapper映射文件的statement的id一致 ...
- jq无缝滚动效果插件(之前的那个升级改造加强版)
scroll滚动插件 支持上下左右,淡入淡出,滚动时间设置,动画时间设置,鼠标经过是否停止设置 默认配置参数可修改 $(".content").easysroll({ //默认配置 ...
- JavaScript1.6数组新特性和JQuery的几个工具方法
JavaScript 1.6 引入了几个新的Array 方法,具体的介绍见:New in JavaScript 1.6 .这些方法已经被写进了ECMA262 V5.现代浏览器(IE9/Firefox/ ...
- 工欲善其事必先利其器,用Emmet提高HTML编写速度
HTML代码写起来很费事,因为它的标签多. 一种解决方法是采用模板,在别人写好的骨架内,填入自己的内容.还有一种很炫的方法----简写法. 常用的简写法,目前主要是Emmet和Haml两种.这两种简写 ...
- 20155210潘滢昊 2016-2017-2 《Java程序设计》第8周学习总结
20155210 2016-2017-2 <Java程序设计>第8周学习总结 教材学习内容总结 认识NIO Channel: 衔接数据节点(与IO中的流对比) isOpen close R ...
- 五个案例让你明白GCD死锁(转)
转自:http://ios.jobbole.com/82622/ 死锁一直都是在使用多线程时,需要注意的一个问题.以前对同步.异步,串行.并行只有一个模糊的概念,想想也是时候整理一下了.再看看之前的博 ...
- unbind()清除指定元素绑定效果
定义和用法 unbind() 方法移除被选元素的事件处理程序. 该方法能够移除所有的或被选的事件处理程序,或者当事件发生时终止指定函数的运行. ubind() 适用于任何通过 jQuery 附加的事件 ...
- 第6月第19天 lua动态链接库(luaopen_*函数的使用) skynet
1. 给这个测试库取名为dylib,它包含一个函数add.lua中这样使用: local dylib = require "dylib.test" local c = dyl ...
- MacOS 下提示APP 损坏 无法安装 解决方法
sudo spctl --master-disable