随笔 - 51, 文章 - 1, 评论 - 41, 引用 - 0
数据加载中……

如何在自动测试中模拟设备在案例中的行为

        本文的标题“如何在自动测试中模拟设备在案例中的行为”包含:“自动测试”、“设备”、“模拟”和“案例中的行为”。自动测试和设备是一对矛盾,自动测试要求避免人工操作,设备(扫描枪、读卡器等)需要人工操作,克服该矛盾需要构建伪设备模拟设备行为。模拟完整的设备行为较困难,这里限定为模拟设备在案例中的行为。

        调用设备功能一般通过调用库函数实现,相同案例调用设备过程相同。可通过录制回放的方式模拟行为:

  • 录制,记录案例中库函数的调用信息,包括顺序、输入输出参数和返回值。
  • 回放,编写伪装库,按照日志记录的信息响应自动测试中该案例的调用。

        录制回放要求在同一个案例中库函数调用完全相同,该要求对需要跟踪设备状态的程序太严格,这样的程序一般会有两类调用逻辑,更新设备状态和执行设备动作,这两类相互穿插,因此很难保证库函数调用的完全相同。尽管如此案例有其稳定性,这里对设备调用进行约定,方便提取其稳定特性:

  • 库函数分成状态函数和动作函数,调用状态函数不引起设备状态变化(幂等),调用动作函数则可以引起设备状态变化。
  • 设备状态可以根据时间自行变化,前后两次状态函数(中间没有调用动作函数)返回结果不同。模拟的场景如设备门口有介质,一段时间后被人拿走。
  • 调用动作函数和状态自行变化的过程在同一个案例中相同。

基于上述约定对日志进行整理,标注调用动作函数的日志和状态自行变化的第二次状态函数的日志为重要日志,合并重要日志之间的其他状态函数日志。重要的状态函数日志和普通状态函数日志的区别是前者带有相对上一条重要日志的间隔时间。伪库的运行过程如下:

1. 记录重要日志变化时间,将当前重要日志指向第一个条重要日志。

2. 定时检查(可以在响应函数前执行)当前重要日志。

    a) 如果为动作函数日志,无动作

    b) 如果为状态函数日志,比较当前时间与重要日志变化时间之差是否大于间隔时间。

        * 大于,记录重要日志变化时间,将当前重要日志指向下一条。

        * 小于,无动作

    c) 如果为空(最后一条重要日志之后),无动作。

3. 如果调用函数是动作函数,则检查其是否与当前重要日志匹配。

    a) 匹配,则根据该日志响应,记录重要日志变化时间,将当前重要日志指向下一条。

    b) 不匹配,报错。

4. 如果调用函数是状态函数,则从当前重要日志(不含)向前查找

    a) 找到匹配的日志,根据该日志响应。

    b) 没有找到,报错。

posted on 2015-11-07 17:47 lemene 阅读(163) 评论(0)  编辑 收藏 引用


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   博问   Chat2DB   管理