Slickflow.NET 开源工作流引擎高级开发(二) -- 流程快速测试增值服务工具介绍

时间:2022-09-21 09:22:18

前言:流程是由若干个任务节点组成,流转过程就是从一个节点转移到下一个节点,通常需要不断切换用户身份来完成流程的测试,这样使得测试效率比较低下,本文从实战出发,介绍常见的两种快速测试方法,用于提升流程测试和实施的效率。

1. 流程快速测试介绍

流程引擎的核心功能是保证流程正常流转,流程是由若干个节点组成,真实的业务系统是每个用户完成各自的任务后,分发给下一步任务节点,再由下一步的任务接收人员办理任务,以此循环前进,直至流程流转结束。

如果按照这样的测试策略,每一步都需要变换用户身份来完成功能测试,这样造成的效率确实是比较低下,所以引擎开发人员需要找出能够快速测试的方法,不断提升流程测试的效率,自动化的测试策略的提出就是一个可行的方案。

Slickflow.NET 开源工作流引擎高级开发(二) -- 流程快速测试增值服务工具介绍

2. 流程快速测试的解决方案

在自动化测试方法提出之前,能够想到的就是让流程可以在每一个任务节点上自动运行流转,这就需要装载一些测试数据,保证流转运行的接口能够读取到这些数据,然后驱动流程向下流转。本文首先提出了脚本自动化测试和用户身份模拟的两种办法来解决。

2.1 流程脚本自动化测试

每次在流程引擎新版本发布时候,需要确保流程的基本流转功能能够正常运行,然后由于工作流模式(Workflow Patten)已经包括的模型类型大概有几十种以上,如何保证新版本发布后,不影响每一个工作流模型都能够正常运行呢?假如每一个模式都逐一去做测试,又是比较费时费力的工作。

所以可行的办法就是通过脚本化测试,一次全部集中测试,覆盖所有的工作流模式和功能接口方法,这样就可以确保新版本的顺利发布。在Slickflow引擎测试中,由于WebApi接口的大量使用,测试人员认为可以建立基于WebApi接口的自动化测试,这一思路也使得可以针对Slickflow.Engine的不同版本测试,尤其是包含了.Net, .Net Core和.Net SAAS三个不同版本的自动化测试。如下图所示,通过WebApi的配置,就可以进行一次工作流模式的全覆盖测试。

Slickflow.NET 开源工作流引擎高级开发(二) -- 流程快速测试增值服务工具介绍

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 流程用户模拟测试

用户交互测试也是一种必不可少的测试过程,而且在交互过程中,可以跟踪和调试程序,真实系统的流转是需要用户身份的不断切换,但是不妨通过身份模拟来减少切换环节,通过对流程引擎接口的内部改造,证实是可以实现这一思路的。
        如下图所示,一个集成测试的用户界面,左侧是流程定义记录,右侧上半部分是待办任务列表,下半部分是办结任务列表。功能接口主要是流程的启动、流转、退回和返送。功能测试人员通过选择流程定义记录,随时就能进行流程实例的启动、流转、退回和返送操作,不用重复的身份切换。

Slickflow.NET 开源工作流引擎高级开发(二) -- 流程快速测试增值服务工具介绍

3. 流程图形的代码创建

客户有时候会提交自己的流程XML来进行测试,然而有些流程定义是比较复杂的业务流程,通常可能有几十个甚至上百个节点记录。引擎开发人员首先需要做到对流程图形的简化,但是通过流程设计器来创建流程图,有时候是比较慢,而代码创建流程图就反而容易和轻松一些。虽然代码方式不能完全取代流程设计器,但是对于程序开发人员,确实也需要这种快速构建流程图形的方法。

如下图所示,通过代码创建流程图的片段。这里是创建了一个带分支并行的流程图。

Slickflow.NET 开源工作流引擎高级开发(二) -- 流程快速测试增值服务工具介绍

代码执行完成后,将会生成一条流程定义记录,通过设计器打开这条流程记录,流程的图形就会被展示出来,如下图所示:

Slickflow.NET 开源工作流引擎高级开发(二) -- 流程快速测试增值服务工具介绍

试想一下,如果这个图形通过手工创建,拖拽节点,添加连线的方式,也是需要耗费一些时间的,而代码创建,就是一步生成,节省的时间的确可以是几十倍的时间。

4. 总结

本文总结了在测试过程中,如何快速测试的方法,这些辅助工具的开发和发布,是为了减少开发人员重复的工作量,提升流程开发的效率。

5. 备注

快速测试辅助模块作为增值服务(需额外购买获取)供企业客户选择,这些辅助工具并不是必需的核心功能模块,推荐给有需求的客户使用,是为了适应和改善企业客户的开发体验。也希望企业客户能够建立快速测试驱动的流程项目的开发测试和实施过程,从而整体提升软件开发效率和生产力。

Slickflow.NET 开源工作流引擎高级开发(二) -- 流程快速测试增值服务工具介绍的更多相关文章

  1. Slickflow.NET 开源工作流引擎高级开发(一) -- 流程外部事件的调用和变量存储实现

    前言:流程实现基本流转功能外,通常也需要调用外部事件,用于和业务系统的交互,同时存储一些流程变量,用于追踪和记录业务数据变化对流程流转的影响. 1. 流程事件 流程执行过程中,伴随各种事件的发生,而且 ...

  2. Slickflow.NET 开源工作流引擎高级开发(三) -- 并行分支容器与会签工作流模式的组合

    前言:  流程引擎的核心功能是负责解析流程定义XML和流转,业务环节的不断积累,让人们不断总结和抽象出一些模式,这些模式统称为工作流模式(Workflow Pattern).本文的重点就是介绍一种常见 ...

  3. Slickflow.NET 开源工作流引擎高级开发(六) -- WebTest 引擎接口模拟测试工具集

    前言:引擎组件的接口测试不光是程序测试人员使用,而且也是产品负责人员需要用到的功能,因为在每一步流转过程中,就会完整模拟实际用户发生的场景,也就容易排查具体是程序问题还是业务问题,从而快速定位问题,及 ...

  4. Slickflow.NET 开源工作流引擎高级开发(五) -- 引擎和外部事件的交互

    前言:引擎组件的基本职责是负责流程流转,但是在流转过程中,除了对内部控制逻辑进行实现外,也不可避免的要去调用或者响应外部事件.本文主要描述外部事件的类型,以及调用方法过程. 1. 外部事件的类型 外部 ...

  5. Slickflow.NET 开源工作流引擎高级开发(四) -- 硬核编码:代码式快速构建流程图

    前言:通过设计器交互来创建流程图是比较常见的方式,这种方式是比较方便业务人员对流程的操作.然而,在需要流程模板,或者技术开发阶段以及一些自动化流程的处理过程中,使用代码快速创建流程图也是一种非常有必要 ...

  6. Slickflow.NET 开源工作流引擎快速入门之二: 简单并行分支流程代码编写示例

    前言:对于急切想了解引擎功能的开发人员,在下载版本后,就想尝试编写代码,完成一个流程的开发和测试.本文试图从一个最简单的并行分支流程来示例说明,如何快速了解引擎代码的编写. 版本:.NET Core2 ...

  7. Slickflow.NET 开源工作流引擎基础介绍(二) -- 引擎组件和业务模块的交互

    集成流程引擎的必要性 业务过程的变化是在BPM系统中常见的现象,企业管理层需要不断优化组织架构,改造业务流程,不可避免地带来了业务流程的变化,企业信息系统就会随之面临重构的可能性.一种直接的方式是改造 ...

  8. Slickflow.NET 开源工作流引擎基础介绍(二) -- 引擎组件和业务系统的集成

    集成流程引擎的必要性 业务过程的变化是在BPM系统中常见的现象,企业管理层需要不断优化组织架构,改造业务流程,不可避免地带来了业务流程的变化,企业信息系统就会随之面临重构的可能性.一种直接的方式是改造 ...

  9. Slickflow.NET 开源工作流引擎基础介绍(九) -- .NET Core2.0 版本实现介绍

    前言:.NET Core 是.NET Framework的新一代版本,是微软开发的第一个跨平台 (Windows.Mac OSX.Linux) 的应用程序开发框架(Application Framew ...

随机推荐

  1. 转~~~ DIV+CSS实现三角形提示框

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <link rel= ...

  2. qt--- vs

    qt with vs 1.安装vs2012: 2.下载Qt 5.2.0 for Windows 32-bit (VS 2012, 579 MB) 和 Visual Studio Add-in 1.2. ...

  3. 从零开始学ios开发(一):准备起航

    首先介绍一下自己的背景,本人09年研究生毕业,大学就不介绍了,反正是上海的一所211大学,学的是计算机科学与技术专业,学生时代,从事过ACM,没有什么太大的成就,中国的牛人是在太多,我的水平,估计连高 ...

  4. &lbrack;Guava学习笔记&rsqb;Strings&colon; 字符串处理

    我的技术博客经常被流氓网站恶意爬取转载.请移步原文:http://www.cnblogs.com/hamhog/p/3861502.html,享受整齐的排版.有效的链接.正确的代码缩进.更好的阅读体验 ...

  5. CSS随手记

    html5模板 <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <t ...

  6. &lbrack;转&rsqb; 让ctags支持Javascript

    mac下安装exuberant ctags mac 下自带ctags但是功能有限,要使用一些常用的功能需要安装exuberant ctags 下载exuberant ctags 安装exuberant ...

  7. JAVA之序列化A

    package SwingGui.sky.com; import java.io.*; public class GameSaverTest { public static void main(Str ...

  8. pyqt5&colon;标签显示文本框内容

    文本框(lineEdit)输入文本,标签(label)就会显示文本框的内容. 原理如下: 输入文本时,lineEdit控件发射信号textChanged(),label收到后触发setText()槽. ...

  9. Android Navigation Drawer&lpar;导航抽屉&rpar;

    Google I/O 2013 Android 更新了Support库,新版本的Support库中新加入了几个比较重要的功能. 添加 DrawerLayout 控件,支持创建  Navigation ...

  10. python 接口自动化测试--代码实现(七)

    数据库还原脚本: #! /usr/bin/python # coding:utf-8 import time from Engine.SqlEngine import MSSQL COUNT=1 de ...