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. 备注
快速测试辅助模块作为增值服务(需额外购买获取)供企业客户选择,这些辅助工具并不是必需的核心功能模块,推荐给有需求的客户使用,是为了适应和改善企业客户的开发体验。也希望企业客户能够建立快速测试驱动的流程项目的开发测试和实施过程,从而整体提升软件开发效率和生产力。
上一篇: 老生常谈重放攻击的概念(必看篇)