记录用户交互以进行Tcl Tk测试自动化

时间:2018-10-02 06:04:15

标签: user-interface testing tcl tk

我想对我们的tcl tk应用程序进行一些有关用户交互的测试。由于该应用程序具有与CAD类似的部分,因此每个鼠标移动都与之相关,因此我想做一些事情,例如记录一些用户交互的所有事件。我的目标是稍后回放这些事件,并在每次程序更改时发现潜在的更改。甚至更好地确保GUI的行为始终相同,并产生始终相同的数据。

我知道,我可以生成一些回车动作和按钮事件,但是这与真实用户交互所生成的数千个事件不同。但是,对于我而言,拥有这数千个事件非常重要。

是否有可能实现这一目标?

2 个答案:

答案 0 :(得分:0)

使用bind记录特定类型的事件相对容易-您会发现<ButtonPress><ButtonRelease><Enter><Leave>,{{ 1}},<FocusIn><FocusOut><KeyPress>涵盖了您感兴趣的几乎所有内容,然后用<KeyRelease>进行播放。 (您需要记录有关每个事件的大量信息才能正确地重新生成它,但是其基础模型是名称相似的X事件的模型。)假设您不希望支持应用程序间的剪切和粘贴。或为了记录目的而拖放;这些使事情复杂化了很多。您可能会发生很多事件;记录到SQLite数据库可能很有意义。

但是,您应该仔细考虑要记录的应用程序的哪些部分。是否将应用程序外壳中位于CAD类区域之外的两个按钮的顺序按顺序交换,这有关系吗?对于大多数用户而言,只要您清楚按钮的作用(通过清晰的标签和图标)就不是很重要,但是对于重放记录的事件则可能会非常重要。相反,对于应用程序中那些简单按钮和编辑字段的部分,我记录它们的详细信息,而只是记录单击按钮的时间以及对文本内容的更改。条目等。实际上,它捕获了更高级别的事件,并且更容易正确重播。只有当用户位于该主CAD区域中时,您才需要完整的详细信息。

此外,请注意字体大小屏幕大小/缩放的更改。它们可以更改事物的布局方式,并且可能由于应用程序范围之外的系统级更改而发生。

答案 1 :(得分:0)

我们以您的描述方式开始:记录所有成千上万的运动事件等。包括对GUI应用程序也非常重要的精确定时。

这些录音很快变得太难维护了。鉴于UI更改,它们也过于脆弱。硬编码时间值所在的另一个问题。切换到功能更强大的计算机(或处于负载下的cpu)会中断执行。

我们引入的两个最大改进

  • 事件压缩:识别用户想要执行的高级操作(例如选择菜单项)。记录的 activateItem 命令将在重放时执行必要的工作(事件仿真)。

  • 同步功能:与其依赖诸如 waitForObject 之类的特定计时命令,不如等待对象的存在并准备进行交互。

但是,这需要几年时间才能流畅地工作。包括中央对象地图存储库,属性和屏幕截图验证,BDD中的高级测试描述等。随意看一下这项工作中产生的Squish for Tk产品。