Robot Framework与Web界面自动化测试:简单例子

摘要:
下面我们对RobotFramework简称rf。那么什么是自动化测试呢?那我们看看利用RobotFramework怎么写用例。openbrowser是关键字,表示打开浏览器;http://localhost/nau/login是第一个参数,是要打开的页面url;ff是第二个参数,代表要用的浏览器类型,其中ff表示是firefox浏览器,gc表示是chrome浏览器,ie表示是InternetExplorer浏览器。其中inputpassword为关键字。successLogin2openbrowserhttp://localhost/nau/loginffinputtextid=useridxxxinputpasswordid=passwordyyyclickbuttonid=loginBtn${value}gettextid=useridShouldBeEqual${value}xxxclosebrowser和上个用例相比,区别就是检查语句。errorLoginopenbrowserhttp://localhost/nau/loginffinputtextid=useridxxxinputpasswordid=passwordyyy123clickbuttonid=loginBtnWaitUntilPageContains用户名或密码错误closebrowser相比前面的用例,区别还是验收语句。

假设环境已经搭建好了。这里用RIDE( Robot Framework Test Data Editor)工具来编写用例。下面我们对Robot Framework简称rf。

我们先考虑下一个最基本的登录功能的测试用例。

一、自动化测试 与 人工测试

在开始编写用例之前,我们先来思考下自动化测试和人工测试的区别。对于web页面的人工测试,我们想下,如果去测试,怎么操作呢?不外乎如下的基本动作:

1)打开浏览器

2)输入url (前提web服务器要正常启动运行着)

3)等待页面显示出来

4)用眼睛看页面显示的内容是否与自己想象的一致,如果一致,认为功能正常,否则,会认为程序有问题。

5)通过鼠标、键盘执行相关的操作,通过页面的变化和内容显示继续进行检查功能是否正常。

那么什么是自动化测试呢?其本质就是将人的操作过程(打开浏览器、输入url、鼠标点击、键盘输入等)以及验收标准(在人脑中验收)转换为测试代码。

有了测试代码,就可以让其自动运行了。

二、登录用例设计

一个登录功能,想象下如果是人工测试,那基本的测试过程一般如下:

1)打开浏览器、输入登录url

2)输入用户名、密码(也许还有别的输入项,如验证码,则取决于程序本身),点击登录按钮

3)如果是正确的用户名密码,应该出来相应的页面;如果是错误的,应该出来错误页面或错误提示信息。

那我们看看利用Robot Framework怎么写用例。

三、 用例编写

1、成功登陆的用例1

successLogin
open browserhttp://localhost/nau/login ff
input textid=userid xxx
input passwordid=password yyy
click buttonid=loginBtn
Wait Until Element Is Visibleid=userid
close browser

下面我们看下上面代码的含义

1)successLogin是用例名,是自己取的

2)后面的语句,每句都是 “关键字+参数(0个或多个)”的格式,其中蓝色的词组就是关键字。这个例子的关键字是rf框架中的内置关键字。

用户可以定义自己的关键字。

open browserhttp://localhost/nau/login ff

这句代码的含义,其实看上去就能理解。open browser是关键字,表示打开浏览器;http://localhost/nau/login是第一个参数,是要打开的页面url;ff是第二个参数,代表要用的浏览器类型,其中ff表示是firefox浏览器,gc表示是chrome浏览器,ie表示是Internet Explorer浏览器。这里我们用的是firefox浏览器。

input text id=userid xxx

这句代码,input text是关键字,表示要在html组件(如文本框)中输入信息,id=userid是第一个参数,用于定位用来输入的html组件,这里的id表示通过元素的id来定位,userid就是元素的id值。如果页面中存在一个id为userid的输入框,则就能找到。 xxx是第二个参数,表示要输入的值。想象下,如果是人工操作,就是在界面中找到这个输入框,敲击键盘输入xxxx这几个字符。

看到这里,我们可以把关键字当作一个函数(其实它本质上就是一个函数),后面跟的是函数参数,有的关键字有参数,有的没有。

input password id=password yyy

这句代码,也非常好理解了,就是在密码框中输入密码了。其中input password为关键字。

click button id=loginBtn

这句代码,看上去也明白了,click button是关键字,表示点击按钮;id=loginBtn是第一个参数,用于定位要点击的按钮,这里也是用id来定位的。

Wait Until Element Is Visible id=userid

前面的几句代码,进行的相关的操作,这句代码就是检查操作结果。如果登录成功,会出现新的页面,并且页面上应该有个元素会显示用户的登录名。

这里的Wait Until Element Is Visible是关键字,顾名思义,就是等待元素可见;id=userid就是要显示的元素,这里同样是通过id定位。

实际上这个检查是不完善的,这里只是检查了是否有id为userid的元素,但元素的内容呢(正常内容应该是xxx),没有检查。这点我么在下个用例介绍。

close browser

上面是这个用例的最后一个语句。这很好理解了,就是关闭浏览器。close browser是关键字,该关键字没有参数。

执行该用例。如果系统存在用户名为xxx和密码为yyy的用户,则该用例就会成功。

2、成功登陆用例2

上面是一个最基本的用例。上面用例存在一个问题,就是检查用例成功的标准是看希望的html元素是否存在。但很多时候不仅需要判断希望的元素是否存在,还需要判断元素的内容是否符合预期。就上面这个用例,希望id为userid的元素的内容是xxx。那用例应该如何写呢?

successLogin2
open browser http://localhost/nau/login ff
input text id=userid xxx
input password id=password yyy
click button id=loginBtn
${value} get text id=userid
Should Be Equal ${value}xxx
close browser

和上个用例相比,区别就是检查语句(上面红色的2行)。

其中${value} get text id=userid的含义是 利用关键字get text获取id为userid元素的内容放到变量${value}中。

而Should Be Equal ${value}xxx语句,Should Be Equal是关键字,用来断言两个参数的值是否相等,如果不等,则表示失败。

3、失败登录用例

上面是验证成功登录的用例。那应该也有验证登录失败的用例。其思路差不多,就是当登录失败后的页面是啥。通过代码来进行检查。

我们假设登录失败后会出现一个新的页面,页面中有文本 “用户名或密码错误”字样。那么用例就可以这么写。

errorLogin
open browser http://localhost/nau/login ff
input text id=userid xxx
input password id=password yyy123
click button id=loginBtn
Wait Until Page Contains 用户名或密码错误
close browser

相比前面的用例,区别还是验收语句。上面的验收语句一看就明白,Wait Until Page Contains是关键字,用于检查页面中是否包含预期的信息。

4、自定义关键字

可以看出,上面3个用例,前面的4个语句,区别只是输入的参数 用户名和密码的值区别,我们自然会想到,可以把这4个语句封装成一个关键字,包含两个参数用户名和密码。

关键字定义如下:

login
[Arguments] ${username} ${password}
open browser http://localhost/boot/login ff
input text id=userid ${username}
input password id=password ${password}
click button id=loginBtn

使用该关键字的用例如下

loginSuccessWithKeywords
loginxxxyyy
${value} get text id=userid
Should Be Equal ${value}xxx
close browser

loginErrorWithKeywords
loginxxxyyy123
Wait Until Page Contains 用户名或密码错误
close browser

5、用例的setup和teardown

每个用例,从整个实现讲。一般包括如下三大部分:

1)执行条件设置部分(setup部分):因为用例的执行,通常需要一些条件。如前面的登录成功用例,需要用户已经存在。

2)用例执行部分:包括该用例进行的操作,对结果的验证

3)清理部分(teardown部分):在自动化测试中,我们希望用例执行后,对当前环境不会有任何破坏。因此一般需要做些清理工作,包括第一部分条件设置对系统造成的影响和用例执行过程中对系统造成的影响。

rf对这也提供了支持,可以把一个用例分成三部分。虽然我们写成一部分,从最终效果上讲没区别。但分开了,会更加符合逻辑,用例也非常清楚。

对于我们这个登录用例,可以看出,每个用例完成的最后一步都要关闭浏览器,这里用的是close browser。

因为各个用例都是公共的,我们可以把这放到用例包的teardown中。

*** Settings ***
Test Teardown close browser

这样每个用例的最后语句close browser都不需要了。

把一些语句放到teardown中,还有一个好处是,无论用例执行部分出现什么问题,最后的teardown都会保证被执行。

三、小结

本篇文章,我们通过一个登录例子来介绍了rf在web界面自动化测试上的基本应用。虽然比较简单,但已经把用例编写最核心的概念和步骤做了介绍。其它功能的用例与之区别在于用例的复杂程度区别(比如准备测试条件、用例执行步骤、结果验证的复杂性、用例执行影响的清理)。

免责声明:文章转载自《Robot Framework与Web界面自动化测试:简单例子》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇linux makefile字符串操作函数 替换subst、模式替换patsubst、去首尾空格strip、查找字符串findstring、过滤filter、反过滤filter-out、排序函数sort、取单词word、取单词串wordlist、个数统计words【存储】RAID磁盘阵列选择下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

七天开发安卓软件(二)

今天决定在eclipse上安装插件,但苦于全是英文,自己安装过于费劲。 在网上找了一圈教程。试着自己安装SDK和ADT,但在ADT安装过程中,异常缓慢,大概安装了一个多小时还没装完,我百度了一下,原来是错误勾选了在线下载,导致了这个情况。取消勾选后很快就完成了。   在检查是否完成的时候,发现自己的eclipse版本与教程不同,怀疑自己是不是安装成功了。...

Total Commander如何设置自定义快捷键在当前目录打开ConEmu

Total Commander,简称TC,原名Windows Commander,是Windows平台下功能最强大的全能文件管理器。 自从使用了TC基本上就很少再打开Window的文件夹了,因为TC不仅内置了很多功能,而且还有很多的插件可以扩展,所以大部分功能都可以直接在该软件里实现. TC提供了基本上所有的自定义功能,如自定义快捷键等,在TC的Ctrl...

六.ansible批量管理服务

期中集群架构-第六章-ansible批量管理服务介绍====================================================================== 01. 批量管理服务知识介绍a. ansible是一个基于Python开发的自动化运维工具b. ansible是一个基于ssh协议实现远程管理的工具c. ansib...

【react+antd】前端读取本地文件内容(txt)

场景:xxx血压计测量数据之后,需要将测量的数据直接显示在pc后台管理平台相应的表格中 准备:一台xxx血压计,数据线,相关血压计桌面软件,pc 血压计相关说明:测量时,将数据线和pc连接,打开血压计桌面软件,点击连接设备,连接成功,开始测量,测量完成,桌面软件会显示相应的值:比如 收缩压 舒张压 心率 脉搏等,数据会存到本地的某个文件下,txt文本形式,...

20189222 《网络攻防实践》安全工具、库的简介以及使用教程

安全工具简介 Wireshark Wireshark(前称Ethereal)是一个网络封包分析软件。网络封包分析软件的功能是撷取网络封包,并尽可能显示出最为详细的网络封包资料。Wireshark使用WinPCAP作为接口,直接与网卡进行数据报文交换。 网络封包分析软件的功能可想像成 "电工技师使用电表来量测电流、电压、电阻" 的工作 - 只是将场景移植到网...

iOS: Crash文件解析(一)

iOS Crash文件的解析(一)   开发程序的过程中不管我们已经如何小心,总是会在不经意间遇到程序闪退。脑补一下当你在一群人面前自信的拿着你的App做功能预演的时候,流畅的操作被无情地Crash打断。联想起老罗在发布Smartisan OS的时候说了,他准备了10个手机,如果一台有问题,就换一台,如果10台后挂了他就不做手机了。好了不闲扯了,今天就跟大...