所谓事件驱动,就是不再以测试用例为基本单位,而是将所有的测试步骤、验证操作都作为一个系统中发生的事件来对待,如果将一个系统的所有操作都定义为单独的事件,那么就会有一个完整的事件库,测试用例开发者便可以从库中获取想要执行的事件来组装新的测试用例

事件驱动的特点

  • 事件发生的时机是可以控制的
  • 多个事件串联起来就形成了事件流,定义事件流可以使顺序的、分支的、循环的,甚至定时的、随机的,并发的

事件驱动和关键字驱动的区别

事件驱动和关键字驱动有非常相似的地方,都是用过一定的关键字来描述一段操作过程,然后通过组合不同的关键字来执行不同顺序的测试操作,但设计目的和实现方式却完全不同

  • 事件驱动中的事件通常以类为单位,可以提供事件的各种属性,而关键字驱动一般以函数为单位
  • 事件驱动的事件应该运行在独立的线程甚至进程内,所以事件的执行是可以并发执行的,而关键字驱动一般运行在单线程中
  • 事件流可以在执行时修改、动态的添加执行的事件,而关键字驱动一般在测试前已经确定了执行的流程,无法动态修改
  • 事件驱动一般用于长时间测试、以及模拟用户的现场测试,关键字驱动测试一般应用在功能测试和部分系统测试

事件驱动的难点

事件依赖

依赖关系的解决很大程度上是控制事件颗粒度的问题,在切割事件的时候,通常将依赖性比较强的步骤组合成一个事件来执行,尽可能减少事件执行对外部的依赖,还可以将一些依赖关系比较强步骤或较多的单一事件进行二次封装形成一个典型事件,然而完全的解决依赖关系是不可能的,无论颗粒度多细

结果依赖

在有些场景下,我们要得到的最终结果,会依赖于事件流中每个事件的结果

资源竞争

如果事件是可以并发的,那么一定会涉及到资源竞争,所以就需要引入锁机制来保证资源同一时刻只能被一个线程或进程访问

事件管理

类似于关键字驱动,事件驱动的每一个时间单元应该被有序的管理起来,供用例开发者方便的获取所需要的事件进行组合

事件驱动的基本流程

事件驱动的逻辑模块可以分为4个部分:调度器、计划任务池、锁服务以及数据暂存器

调度器

调度器的作用有二

  • 从事件描述数据中获取事件的名称和参数信息,从事件仓库中查找相应的类并对其进行实例化,最后输出到执行计划队列中
  • 轮询当前的事件描述数据有无更新,比如是否新的事件加入或者有已经存在的事件被修改或删除

计划任务池

调度器实例化的事件实例会被放入计划任务池当中,实际的测试执行者可以通过计划任务池查看当前未执行的事件的信息,调度器可以修改未执行的事件
任务定时器,池子里的事件会按照预定的方式被触发执行
任务执行完成后,就可以根据任务的属性判断该任务是单次任务还是定时任务,如果是单次任务,则将任务从任务池中移除,如果是多次任务,则需要将任务重新设置执行时间,再次放回到池子中去

锁服务

锁服务提供给各事件注册,其本质是一个key-value的数据表,事件通过将锁的名称写入数据表中来表示对某个资源的锁操作,当其他线程访问到相同的资源时,需要先检查其名称是否在该数据表内

数据暂存器

数据暂存器本质上也是一个key-value的数据表,事件开发者可以自由地定义其中储存的数据,并以此作为事件的数据进行输出

自动化测试平台化[v1.0.0][事件驱动理论]相关推荐

  1. 自动化测试平台化[v1.0.0][模块化设计]

    模块化设计是一种拆分的设计思想,将一个产品拆分为很小的功能,根据需求将一些功能要素组合而形成一个相对独立的子系统,并通过特定的标准接口和外界通信,如此可以将不同功能的子系统进行不同形式的组装,形成不同 ...

  2. 自动化测试平台化[v1.0.0][Django模型]

    设计系统表 Django提供了完善的模型层,来创建和存取数据,它包含你所储存数据的必要字段和行为,每个模型对应数据库中唯一的一张表,模型避免了我们直接对数据库的操作 每个模型是一个Python类,集成 ...

  3. 自动化测试平台化[v1.0.0][自动化测试基本需求]

    随着软件发展到不同的阶段对自动化会有不同的测试需求,因此也产生了多种测试类型,然而万变不离其宗,一切皆可自动化 单元测试 单元测试也可以看做是代码层的测试,而但凡成熟的语言都附有单元测试框架,例如Ja ...

  4. 自动化测试平台化[v1.0.0][微服务化测试平台]

    微服务字面上理解一个是微,另一个是服务,用大白话描述就是每个模块负责很小的功能范围视为微,而服务则是通过API的形式向其他模块提供服务 在早期的单体架构中,整个网站都运行在一套服务器集群上,共享计算机 ...

  5. ZLMS教学管理平台系统V1.2.0最新版本发布,支持纯Web视频直播点播,还带运营在线支付功能!完全免费提供!...

    ZLMS教学管理平台系统V1.2.0最新版本发布,支持纯Web视频直播,点播!还带在线支付功能! ZLMS 开发团队在综合参考了各方面的合理建议之后,经过两个多月的紧张开发及测试,终于发布V1.2.0 ...

  6. 开源进展|区块链跨链协作平台WeCross v1.1.0发布

    WeCross是完全开源的区块链跨链协作平台,致力于促进跨行业.机构和地域的跨区块链信任传递和商业合作,有助于实现异构区块链系统之间安全可信的互操作. 2020年12月,WeCross v1.0.0正 ...

  7. 支持飞书国际版,DataEase开源数据可视化分析平台v1.16.0发布

    11月7日,DataEase开源数据可视化分析平台正式发布v1.16.0版本. 在这一版本中,DataEase上线了新的"应用"版块.在"应用"版块中,用户可以 ...

  8. 测试用例支持思维导图编辑模式,MeterSphere开源持续测试平台v1.8.0发布丨Release Notes

    3月25日,MeterSphere一站式开源持续测试平台正式发布v1.8.0版本.v1.8.0版本是2021年农历春节后的第一个版本,经过近两个月的迭代,我们为大家带来了众多的功能更新及优化. 测试用 ...

  9. 新增版本管理及版本对比,接口测试结果增加误报标记,MeterSphere开源持续测试平台v1.17.0发布

    2022年1月27日,MeterSphere一站式开源持续测试平台正式发布v1.17.0版本. 在这一版本中,我们新增了版本管理及版本对比相关功能(X-Pack),用户可以为功能用例.接口定义.接口自 ...

最新文章

  1. #1074 : 字体设计
  2. python在哪里写代码比较适合-AI辅助写代码,Python之父都爱不释手的工具
  3. MongoDB学习(翻译7)
  4. 通过命令行使用 JAX-WS调用webservice
  5. 机器学习从入门到精通系列之BP神经网络理论知识详解
  6. 大咖分享,带你洞悉畅销游戏背后的数字化运营落地实践
  7. Mysql(9)——排序的方法order by与limit的用法
  8. iOS Hacker 越狱后如何使用 root 运行应用
  9. Orleans学习总结(一)--入门认识
  10. (90)FPGA面试题-使用Verilog实现可预置初值的7进制循环计数器
  11. windows 系统更新 WSUS的安装与部属
  12. 计算机教育工作,计算机教育教学工作总结
  13. python函数调用的例子_Python案例|混用C函数
  14. php mysql 拖拉 报表_php+mysql 生成统计报表
  15. 微信小程序在线旅游信息管理+后台管理系统
  16. 服务器系统补丁失败,Windows Server 2016安装累积更新补丁失败
  17. Gradle - 简介
  18. Going Deeper with Contextual CNN for Hyperspectral Image Classification
  19. dist文件夹、src文件夹、dest文件夹是什么意思?
  20. 苹果开售官翻iPhone XR机型 最多比新机便宜120美元

热门文章

  1. matlab pg,pGLT Matlab代码分析
  2. 大数据时代的海量数据存储、和高并发解决方案总结
  3. xml 转 java_XML转换为JAVA
  4. iptables 打开端口_如何在iptables中打开端口?
  5. 万字逐行解析与实现Transformer,并进行德译英实战(一)
  6. java中类型转换的规则_java 强制类型转换的规则是什么?
  7. Java使用JDBC步骤
  8. 图片识别技巧,OCR文字识别软件了解下
  9. App页面提示样式小总结
  10. linux下的oracle中文乱码,linux系统中oracle出现中文乱码怎么办