robotframework-自动化测试-实例12(C/S架构-AutoIt)

前情介绍:
在做自动化测试的时候,通常现在都是针对于B/S架构系统的测试,因为现在Saas很流行嘛,都希望即开即用型,也就是说只要我有一个浏览器,有网络,到任何地方都可以使用此系统,比如简书,打开www.jianshu.com就可以查看文章,编辑文章,发表文章。

但是,也有很多C/S架构的软件存在,因为毕竟直接从电脑或者移动端加载程序会更快速,而且还有可能的是你是离线状态,没有网络的情况下就更需要C/S的软件了。还是以简书为例子,你也可以安装它的客户端,没有网络的环境下也可以进行文章的编辑,等有网络的情况下再进行发布。

所以大家会发现一些工具类的软件会更倾向于C/S架构。如果要对此类软件进行自动化测试的实现,你会发现之前很好用的Selenium2Library库已经起不了什么作用了,因为它没有浏览器,没有网页元素,你也就无从操作。

这时就需要用到另一个强大库AutoItLibrary

AutoItLibrary.png

需求:
测试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.png

AutoItLibrary的对象操作大体上有几大主要部分,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
  1. 此次的测试中有一个测试集的概念,里面包含了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/

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,117评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,328评论 1 293
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,839评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,007评论 0 206
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,384评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,629评论 1 219
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,880评论 2 313
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,593评论 0 198
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,313评论 1 243
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,575评论 2 246
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,066评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,392评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,052评论 3 236
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,082评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,844评论 0 195
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,662评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,575评论 2 270

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,100评论 18 139
  • Selenium 2 自动化测试实例 更新中... 目录: [TOC] [1. 自动化测试基础][2. 测试环境搭...
    BigJeffWang阅读 10,365评论 1 51
  • 随记 如果说遇见你是上天的安排,那么我接受这遇见。如果我说我们不曾拥有过,那又何来的失去呢?我们不争不抢,不...
    可可西敏阅读 154评论 0 0
  • 因为很多宝宝春季或者换季的时候很容易出现红啊、痒啊、痛啊、脱屑或者灼热等不舒服的过敏情况。所以今天就来给大家讲解一...
    Alinda艾琳达阅读 532评论 0 0
  • 很久很久以前我听过一句话 孤单是一个人的狂欢 那么孤独呢? 很多人很多文章都在写孤独,好像孤独是一个不可避免又很了...
    熊猫Danny阅读 556评论 0 6