利用Python开发Monkey测试脚本(一)
Monkey测试通过模拟大量随机的鼠标和键盘行为,来实现一顿乱点的测试。我们不需要设计特定的用例,特定的场景,甚至不需要预选定义任何行为,只是随机模拟,大量胡乱操作即可。当然,猴子也有聪明的猴子和笨的猴子,聪明的猴子,不单可以乱点,而且可以避免一些意外的发生,让测试工作能够正常可靠的执行下去。而笨猴子则不管不顾的,把操作系统搞崩溃也不是不可能的。
关于Monkey测试
Monkey测试当然也被称做猴子测试,其来由是假设一只猴子来操作电脑,肯定是面对电脑和系统一顿乱敲乱点,谁也无法预测究竟会发生什么意想不到的事情。而在测试的过程中,测试工程师通常执行的测试是预先设计好测试用例,应用于特定场景的。这种情况当然适用于绝大多数情况,但是这种预先定义好的场景,通常是由测试工程师人为设定的,但是在某此特殊情况下,却不一定奏效。所以,我们需要有另外的测试方法,来完成一种比较另类的测试,以覆盖更多可能的情况甚至不正常的情况。Monkey测试便能够很好的帮助我们弥补这样的场景。
Monkey测试通过模拟大量随机的鼠标和键盘行为,来实现一顿乱点的测试。我们不需要设计特定的用例,特定的场景,甚至不需要预选定义任何行为,只是随机模拟,大量胡乱操作即可。当然,猴子也有聪明的猴子和笨的猴子,聪明的猴子,不单可以乱点,而且可以避免一些意外的发生,让测试工作能够正常可靠的执行下去。而笨猴子则不管不顾的,把操作系统搞崩溃也不是不可能的。
所以,在真正实施Monkey测试的过程中,虽然随机操作是其核心所在,但是我们也需要考虑一些环境问题,比如我们如果只是为了测试某个应用程序A,那么就应该只限定其界面在应用程序A的窗口范围。而如果不小心随机操作打开了其它应用或者操作到了非程序A窗口,我们应该放弃操作,或者是让程序A的窗口再次得到焦点。当然,前面的章节我们已经为大家提到了基于图像识别的自动化测试技术的开发与应用,在Monkey测试的过程中,我们也同样可以将这种技术结合起来,让猴子变得更加聪明,以确保其运行过程中的稳定流畅。
Monkey测试的实现思路
在上一章节中,我们已经掌握了使用PyWin32的方法来模拟常用的鼠标和键盘事件。那么这当然也是Monkey测试的核心基础,有了这样的前提,我们开发Monkey测试脚本的时候,更多的注意力就可以放在如何设计随机操作,以及提高其稳定性方面加强即可。
那么我们可以先简单梳理一下常用的操作大概有哪些:
(1) 键盘操作:数字或字母的单字符键入。
(2) 键盘操作:特殊符号的单字符键入。
(3) 键盘操作:常用的组合按照,如Alt+F4, Ctrl+V等。
(4) 鼠标操作:鼠标左键单击。
(5) 鼠标操作:鼠标左键双击。
(6) 鼠标操作:滚动滚轮。
(7) 鼠标操作:鼠标右键单击。
(8) 其它操作:针对不同的系统,不同的设备,可能提供的各类操作,如长按,滑动,缩放等。
当我们列出来了所有可能的操作以后,我们只需要生成随机的操作序列即可完成Monkey测试的基本功能。但是上述的操作只是基本操作,只能实现一只笨猴子可以实现的操作序列,还不足以支撑一个猴子测试的正常运行,所以我们还得考虑一些可靠性和异常处理的情况,至少需要考虑以下几点:
(1) 必须保持当前操作的窗口在最顶端,否则会直接操作到其它窗口。
(2) 必须保证所有的操作是在被测系统对应的窗口区域内进行,不能操作到系统其它窗口。
(3) 为了保证窗口始终在最顶端,我们可以通过图像识别对比的方式进行二次判断确认,一旦发现当前屏幕截图中没有出现需要的容器的模板图片,则停止操作并报错。当然,某些简单的情况,我们也可以直接通过窗口的标题进行判断比对。
(4) 如果出现进程崩溃的情况,必须要报错并且停止操作。
(5) 最好每操作几步截图一次,或者发现窗口没有在最前端时进行截图,保留测试现场的情况,供后面需要时分析错误的来源。
(6) 针对每一次的操作,最好提供一个日志记录,便于后续分析定位问题用。
当然,在调试Monkey测试脚本的过程中,笔者建议一定在一台干净的虚拟机环境调试,不要在实体机上操作,因为整个过程中的胡乱操作我们是很难预计会发生什么事情的,比如把重要数据删除了,把某个软件删除了,打开了很多其它应用程序等。所以在虚拟机环境中操作,即使把系统搞坏了,还原一台虚拟机就好。
下期推送:利用Python开发Monkey测试脚本(二)