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

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

事件驱动的特点

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

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

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

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

事件驱动的难点

事件依赖

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

结果依赖

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

资源竞争

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

事件管理

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

事件驱动的基本流程

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

调度器

调度器的作用有二

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

计划任务池

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

锁服务

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

数据暂存器

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

你可能感兴趣的:(自动化测试平台化,事件驱动,关键字驱动)