前情介绍:
在做自动化测试的时候,通常现在都是针对于B/S架构系统的测试,因为现在Saas很流行嘛,都希望即开即用型,也就是说只要我有一个浏览器,有网络,到任何地方都可以使用此系统,比如简书,打开www.jianshu.com就可以查看文章,编辑文章,发表文章。
但是,也有很多C/S架构的软件存在,因为毕竟直接从电脑或者移动端加载程序会更快速,而且还有可能的是你是离线状态,没有网络的情况下就更需要C/S的软件了。还是以简书为例子,你也可以安装它的客户端,没有网络的环境下也可以进行文章的编辑,等有网络的情况下再进行发布。
所以大家会发现一些工具类的软件会更倾向于C/S架构。如果要对此类软件进行自动化测试的实现,你会发现之前很好用的Selenium2Library库已经起不了什么作用了,因为它没有浏览器,没有网页元素,你也就无从操作。
这时就需要用到另一个强大库AutoItLibrary
AutoItLibrary.png- 练习环境配置
- 实例1(UI自动化-百度搜索)
- 实例2(有效登录)
- 实例3(无效登录)
- 实例4 ( Appium )
- 实例5 ( 连接mysql数据库)
- 实例6 ( GET/POST请求)
- 实例7(接口API测试)
- 实例8 (数据驱动)
- 实例9 (行为驱动)
- 实例10(接口加密)
- 实例11(Jenkins集成)
- Appium Error总结
- robotframework Error总结
需求:
测试Winodws自带的计算器
设计:
计算器的这个示例是官方自带的例子,主要就是利用到AutoItLibrary库来做Windows GUI的测试,同时AutoItLibrary库也可以处理比如一般的网页上的上传下载文件时弹出来的Windows弹窗之类的。(这部分的处理可以参见Selenium+Python上传文件方法大全)
实现:
1 . 安装AutoItLibrary
先安装Pywin32(pip install pywin32 或者直接下载)
再安装AutoItLibrary(pip install AutoItLibrary) 或者直接下载)
64位的机器:除了安装上面2个之外,还不得不再安装一个AutoItV3(最新的官网下载地址:http://www.autoitscript.com/site/autoit-news/autoit-v3-3-10-0-released/ )。一般情况下装完这个就能用了。
2 . AutoIt的使用(预备知识)
当成功安装AutoItLibrary之后,在你的硬盘某个盘根目录会多一个Robotframework的目录,具体哪个盘取决于你的User目录在哪个盘,例如我的是在C盘,因此多出来的这个目录就在如下路径:
C:\RobotFramework\Extensions\AutoItLibrary
这里是一些辅助工具,比如AutoItX.chm是帮助文档,AutoItLibrary.html是测试库的关键字文档说明,Au3Info.exe是最重要的识别对象的工具了。
在Finder Tool的位置有个十字星,可以用鼠标拖动到你需要识别的对象上,比如计算器中的输入框,就像下图这样:
AutoIt.pngAutoItLibrary的对象操作大体上有几大主要部分,Window操作、Control操作、Mouse操作、Process操作、Run操作、Reg操作还有一些其他的操作。
我们看到的窗口就是Window,窗口上的按钮、文本框等就是Control。所以在通常要去操作Control时,一般需要先激活窗口,再操作控件。
3 . 在已装好AutoItLibrary的机器上可以在对应的目录下去寻找一个官方test的例子,比如 C:\RobotFramework\Extensions\AutoItLibrary\tests
Example.png双击里面的RobotIDE.bat就可以看到当前的计算器测试的RF脚本。
录制_2017_08_01_11_07_50_0.gif- 此次的测试中有一个测试集的概念,里面包含了7个测试用例,分别是加减乘除,Hex的加减和输入异常时候的处理。
首先我们来看一下上面这个测试加法的例子,上代码
*** Test Case ***
*** Setting ***
Documentation Tests the AutoItLibrary by using various AutoIt keywords on the GUI of the Windows Calculator application.
Suite Setup Start Calculator
Suite Teardown Stop Calculator
Test Setup Clear Calculator
Library AutoItLibrary ${OUTPUTDIR} 10 ${True}
Library Collections
Library String
Variables CalculatorGUIMap.py
*** Test Case ***
Integer Addition
[Documentation] Get "The Answer" by addition.
Click Buttons 4 1 + 1 =
Win Wait 计算器 42
${Ans} = Get Answer
Should Be Equal As Numbers ${Ans} 42
在测试集最开始的初始化时候有一个Start Calculator的关键字文件写的很有规律,让我们一起来看看:
Start Calculator
[Documentation] Start the Windows Calculator application and set the default settings that the rest of the tests expect.
Run calc.exe
Wait For Active Window 计算器
Get Calculator Version
Select Calculator Menu Item View Scientific
Wait For Active Window 计算器 度
Comment We want "Digit Grouping" off but there's no way to examine the check beside the menu item. So we need to try recognizing some displayed digits to see if its on or off and then change it if necessary.
Send 12345
${Result} ${ErrMsg} = Run Keyword And Ignore Error Win Wait 计算器 12345 3
Run Keyword If "${Result}" == "FAIL" Select Calculator Menu Item View Digit grouping
Win Wait 计算器 12345
Click Button Clear
需要注意的地方:
1 [Documentation]的标识注释,相当于doctesting的作用。
2 Run 是AutoItLibrary库中的关键字,后面跟的参数就是你需要运行的程序的名称,有时候需要带上绝对路径。
3 Wait For Active Window 也是AutoItLibrary库中的关键字,表示一直等待到Title为计算器的窗口出现。(这里对中英文有区别,如果你的系统自带为中文的显示,则此处需要为中文才能运行通过)
4 Get Calculator Version 为自己写的关键字,作用是获取 计算器的版本(不同的Windows版本上的计算器版本可能不一样)
5 Select Calculator Menu Item 自定义关键字,选取菜单上的选项,此处为View Scientific,此处有一个关键字可以传参的方式
6 Comment 加注释
7 Run Keyword If Bult-in关键字,对条件进行判断,如果为True,则执行关键字
Select Calculator Menu Item,同时带参数 View Digit group
再往下挖,看看Select Calculator Menu Item关键字文件是如何发挥作用的,同样上代码
Select Calculator Menu Item
[Arguments] ${MenuItem}
[Documentation] The Windows Calculator application doesn't really use a Windows GUI Menu to implement its menus. Therefore AutoIt can't see the menus as menu GUI objects. The only way to access the Calculator menus is via the ALT key sequences. In Win XP the Calculator menu ALT key letters are underlined, and thus available, all the time. Microsoft, in their wisdom, changed this in Win Vista so that you have to press the ALT key and "wait a bit" before the ALT key letters are underlined on the GUI. When they're not underlined, they don't work. Since AutoIt can send ALT key sequences VERY FAST, a sequence such as !VS (ALT+V+S) doesn't work on Win Vista, while it does work on Win XP. To get around this problem, and to make menu item selection more "tester friendly" we provide this keyword. It takes the name of a menu item as defined in the MENUMAP dictionary in the CalculatorGUIMap.py file. The MENUMAP dictionary items translate the application oriented menu name into the sequence of ALT keys to access that menu item. To make this work on Win XP and Win Vista, this keyword sends the ALT key first, waits a bit, then sends the sequence of keys from the MENUMAP. Complicated, but welcome to the wierd world of Windows GUI testing!
${AltKeys} = Get From Dictionary ${MENUMAP} ${MenuItem}
Send {ALTDOWN}
Sleep 1
Send ${AltKeys}
Send {ALTUP}
注意点:
[Arguments],此处为传入的参数
${AltKeys} 此参数是从字典中获取值,而字典的键是另一个参数${MENUMAP}(刚运行的时候我一度认为这个地方是写错了,直到我看到导入的CalculatorGUIMap.py文件,${MENUMAP}参数实际是在Get Calculator Version的时候已经得到了赋值)
比较有意思的是,在这个示例中,充分的使用了AutoIt来识别Windows窗口中的各个控件的值,从而达到控制C/S控件的目的。
button5.png到现在为止,可以看到RF框架下几乎涵盖了各种软件的自动化测试需求,不得不说是一个很成熟,很强大的框架。
附录:
AutoIt一个很好用的论坛:http://www.autoitx.com/
网友评论