3) 生成对象库
生成对象库的过程就是在加载“钩子”后,把有进行过操作的窗体的相关属性按照之前定义好的格式记录入对象库,对象库的格式就是一个树形结构的数据类型,完全按照窗体对象的层次关系写入对象库,每个对象必须有唯一的 ID 进行标识,以防止出现在回放的过程中出现对象定位错误的现象。这里需要用到的函数如: EnumWindowsProc, EnumChildProc, GetWindow 等和获取对象属性的函数: GetClassName, GetWindowText, GetWindowRect等。
4) 运行的“脚本”
在解析我们自己定义的脚本结构时需要对操作的衔接、对象 ID 在两个文件中的正确匹配、和控制回放都要考虑清楚,因为这个过程是整个工具最重要的中枢,它负责把所有的东西都连接起来。这部分代码是写入在 AutoRun 的类中的。
5) 容错的处理
在脚本回放的过程常会有异常窗体的弹出或者目标对象迟迟没有出现,可能还会有很多想不到的意外情况总是在影响着脚本的回放的正确性和健壮性,因为运行的过程会再起一个线程专门进行容错的处理,对一些异常的窗体一般都进行关闭操作,以防止造成脚本运行中断。
以上工作都做完之后,在主函数中进行如下调用:
再加上这句:
#pragma comment (linker, "/subsystem:\"windows\" /entry:\"mainCRTStartup\"")
将进程隐藏掉(看起来就更专业了 ^_^ )。
到这里所有的工作都做完了,再回顾一下工具使用的整个流程,先添加对象至对象库,再编辑“脚本”如前面所附“脚本”的图,其中这幅图里的过程是操作 WINDOWS 计算器完成 1+2+...+9+10 的计算,然后再给计算器的输出框写入字符串“运行结束”以标记运行完成,运行一下马上就给看到结果,按照上面做的这个脚本运行后的结果,截图为证:
前面那幅是在运行到点击7、 + 后的时候,后面那幅是运行结束后的。这就是一个单击完成的整个过程,其它的操作都类似。还差的一个就是“脚本”的编辑界面,做成这个,就有了一个属于自己最简单的功能回归测试工具。
[ 后记 ] :本文只是简单的和大家探讨了一下自动化测试工具的实现原理和一个简化的不能再简化的轻量级自动化测试工具建立,如果要做一个可以应用的的测试工具这些是远远不够的,所以希望通过此文能让大家对流行的商业工具有一个和平常不一样的认识,更好的理解、认识、使用这些工具,为做好日常的工作服务。
相关链接: