在整个事件驱动的设计中,事件是可以在执行的过程中被装载的,从而满足我们的需要的轮询机制来判断事件是否有变化,保存事件描述信息可以使用JSON文件或者数据,如下代码所示
{
"events": [
{
"package": "product.event.demo_event",
"name": "DemoEvent1",
"args": {"devices": ["ap1"]},
"background": false,
"start_time": "2020-3-13 18:59:00",
"loop": 1
},
{
"package": "product.event.demo_event",
"name": "DemoEvent2",
"args": {"devices": ["sta1"]},
"background": true,
"start_time": "2020-3-13 18:59:00",
"interval": 60
}
]
}
如此格式的文件作为一个基础的输入,在测试执行开始的时候被保存到一个新的文件中,作为执行期间轮询的文件,并为每个事件加上一个is_loaded的Flag标志位,已经装载的事件的标志位为True,测试执行过程中,测试人员就可以通过修改这个文件来让时间产生变化,如果is_loaded为False,轮询代码发现标志位为False的事件后,就将事件装载进调度器
如果使用数据库,则需要创建两张表,一张表用于存放预设的数据表,另一张表作为执行时候的表,在执行开始的时候生成一个uuid,将预设表中的事件装载进执行表,并且带上uuid,如此不同的测试用例就可以轮询其相应的uuid的事件,同时还可以把测试结果写入数据表中
事件描述信息中的参数和测试环境有关,一般在使用事件驱动的时候,已经提前知道了目标环境,因此参数中与资源相关的部分会使用资源名,这样在测试用例开始执行的时候先获取所有的测试资源,再根据事件描述信息中的参数将具体的资源实例保存到时间的arguments属性中即可