Robot Framework自动化测试

时间:2022-08-16 05:57:26

Robot Framework自动化测试(一)---第一个脚本

2014-07-27 18:18 by 虫师, 21720 阅读, 5 评论, 收藏编辑

 

  最近工具中用Robot Framework框架来做自动化,所以,花时间学习了一下。

 

=======所需环境===================

Python:

https://www.python.org/

RF框架是基于python 的,所以一定要有python环境。

 

Robot framework :

https://pypi.python.org/pypi/robotframework/2.8.5

  这个不是解释了,RF框架。虽然在做基于UI的自动化时,它展现出来的很像QTP,我之前也以为它和QTP差不多,仔细了解你会发展它能做的事情还是很多的。就像初学selenium 者,会误以为selenium 就是selenium IDE

 

wxPython :

http://www.wxpython.org/download.php

  Wxpython python 非常有名的一个GUI库,因为RIDE 是基于这个库开发的,所以这个必须安装。

 

Robot framework-ride

https://pypi.python.org/pypi/robotframework-ride

  RIDE就是一个图形界面的用于创建、组织、运行测试的软件。

 

Robot framework-selenium2library:

https://pypi.python.org/pypi/robotframework-selenium2library/1.5.0

  RF-seleniumlibrary 可以看做RF版的selenium 库,selenium webdriver)可以认为是一套基于web的规范(API),所以,RF appium 等测试工具都可以基于这套API进行页面的定位与操作。

----------------------

可以通过python pip工具包进行安装:

>pip install robotframework-selenium2library

 

如果初次接触上面的东西的话,觉得装的东西有点多。 如果之前有了解过python selenium的话就不会有这样的感觉。

 ================================================

  在你安装好RF-ride之后,桌面就会生成一个RIDE图标。双击启动,界面如下:

 Robot Framework自动化测试 

 下面我们就一步一步的创建第一条用例,至于细节不多解释,只是对RF框架写用例有个感性的认识。

 

 

创建测试项目                                          

 选择菜单栏file----->new Project

Robot Framework自动化测试

Name 输入项目名称。

Type 选择Directory

 

 

创建测试套件                                            

  右键点击“测试项目”选择new Suite 选项

Robot Framework自动化测试

Name 输入项目名称。

Type 选择File

 

 

创建测试用例                                                  

     右键点击“测试项目”选择new Test Case 

Robot Framework自动化测试

用例只需要输入用例name ,点击OK即可。

 

 

导入selenium2library库                         

      因为RF框架编写基于web 的测试用例,所以,我们需要selenium 的库支持。所以,我们在使用的过程中需要加载selenium2library库。

Robot Framework自动化测试

在“测试套件”的Edit标签页,点击“Library”按钮,弹出输入框,Name输入:Selenium2Library 点击OK 完。

如果导入的库显示为红色,表示导入的库不存在。如果是黑色则表示导入成功。

 

 

编写用例                                                      

   下面就可以开始写我们的用例了,可是怎么写呢?我们可以通过按F5 快捷键来查询脚本的关键字。如果你接触过QTP 或 selenium IDE 等自动化工具的话,应该会有一些思路。

Robot Framework自动化测试

   如上图,自动化脚本从打开浏览器开发,如上图,我想打开一个浏览器,想的是“open”为关键字进行搜索,结果找到了一个“Open Browser”的关键字,点击这个关键字,想显示它的用法和说明。

根据说明,我们来尝试创建这个打开浏览器的操作吧:

Robot Framework自动化测试

  “Open Browser”变蓝了,说明它是一个合法的关键字,后面有一个方框是红色的,表示这个参数不能缺省的。通过说明信息中,我发现它需要一个url 地址是必填的,当然还需要指定browser (默认不填为 friefox

  更多关键的使用,请参考相关API 文档。这里不过多介绍。按照上面的方法。创建百度搜索用例如下:

Robot Framework自动化测试

 

 

运行测试用例                                                

  勾选当前需要运行的测试用例,点击工具栏运行按钮,如果只运行单个用例的话,也可以切换到用例的Run标签页,点击“start”按钮。

Robot Framework自动化测试

 

运行信息:

Robot Framework自动化测试

  运行信息显示会生成三个文件:Output.xmlLog.htmlReport.html

  我们重点查看Log.htmlReport.html Log.html更关注脚本的执行过程的记录,Report.html更关注脚本的执行结果的展示。

赶快打开你的测试报告看看效果吧!

Robot Framework自动化测试

 

 

================================================================================

错误:

command: pybot.bat --argumentfile c:\users\keikei\appdata\local\temp\RIDEama2ym.d\argfile.txt --listener D:\Python27\lib\site-packages\robotide\contrib\testrunner\TestRunnerAgent.py:52418 E:robot\测试项目

解决:

将“C:\Python27\Scripts ”添加到PATH环境变量中。命令提示符号查看,RF版本。提示pybot 不是内部命令,说明环境变量设置有问题。

Robot Framework自动化测试

Robot Framework自动化测试(二)---元素定位

2014-08-09 17:58 by 虫师, 8245 阅读, 4 评论, 收藏编辑

 

说明:

   不要误认为Robot framework 只是个web UI测试工具,更正确的理解Robot framework是个测试框架,之所以可以拿来做web UI层的自动化是国为我们加入了selenium2API。比如笔者所处工作中,更多的是拿Robot framework来做数据库的接口测试,当然,需要先将相关的数据库包导入。

那么测试框架的本质是什么?个人觉得有以下几个方面。

1、比较

测试实质就是“比较”,在测试之前需要先写用例,假设经过各种操作之后会得到一个预期的结果,然后,在测试的过程中按照用例的步骤会得到一个实际的结果,拿实际结果与预期结果比较。从而且进一步判断用例的成功与失败。

2、用例的组织

为什么要组职用例,因为用例有很多条,我们或在一个文件中写多条用例,或多个文件中写多条用例,总之要很好的把这些用例组织起,自动化用例是给程序去跑的,所以,更应该规范的组织起来。

3、执行结果展示

用例跑完了,成功了,失败了?用例执行到哪一步失败了?总要把这些信息展示给用户吧。

=============

回到主题,在Robot framework中元素的定位。

  因为Robot framework 引入的selenium2 包,所以,假如我们学过selenium 的话,定位是一样的。因为没找到相关资料,所以,经过验证id name xpath css 四种定位方式是可以的,尤其后两种是“万能的”,所以可以解决99%的定位问题。

 

id name 定位                                     

  假如把一个元素看作一个人的话,id name可以看作一个人的身份证号和姓名。当然,这些属性值是否唯一要看前端工程师如何设计了。

百度搜索框和搜索按钮

Robot Framework自动化测试
……
<input id="kw1" class="s_ipt" type="text" maxlength="100" name="wd" autocomplete="off">
……
<input id="su1" class="bg s_btn" type="submit" onmouseout="this.className='bg s_btn'" onmousedown="this.className='bg s_btn s_btn_h'" value="百度一下">
……
Robot Framework自动化测试

根据上面的例子,百度输入框可以取id 或 name进行定位。(前提是idname的值在当页面上唯一)

id = kw1

name = wd

在Robot framework 中就是这样写的:

Input Text

id=kw1

robot framework学习

input text

name=wd

robot framework学习

Input text 用于输入框的关键字,“robot framework学习”是要给输入框输入的内容。

 

百度按钮只id数据可以利用:

Id=su1

Click Button

id=su1

 

Click Button是按钮点击的关键字。

 

 

xpath定位                               

  假如,一个人没身份证号没名字怎么找呢?想想你是怎么找朋友吃饭的,他手机不通,电话不回呢?直接上他家去呗,那你一定有他家住址,xxxxxxxx号。Xpath 就可以通过这种层级关系找到元素。

来看看百度输入框在整个页面上的位置吧:

Robot Framework自动化测试
<html>
    <head>
    <body link="#0000cc">
    <div id="wrapper" style="display: block;">
        <div id="debug" style="display:block;position:absolute;top:30px;right:30px;border:1px solid;padding:5px 10px;"></div>
        <div id="u">
        <div id="head">
        <div id="content" style="display: block;">
            <div id="u1" style="display: block;">
            <div id="m">
                <p id="lg">
                <p id="nv">
                <div id="fm">
                    <form id="form1" class="fm" action="/s" name="f1">
                        <span class="bg s_ipt_wr">
                            <input id="kw1" class="s_ipt" type="text" maxlength="100" name="wd" autocomplete="off">
Robot Framework自动化测试

 

1、Xpath的绝对路径:

Xpath = /html/body/div[1]/div[4]/div[2]/div/form/span[1]/input 

我们可以从最外层开始找,html下面的body下面的div下面的第4div下面的....input标签。通过一级一级的锁定就找到了想要的元素。

 

2、Xpath的相对路径:

绝对路径的用法往往是在我们迫不得已的时候才用的。大多时候用相对路径更简便。

 

2.1、元素本身:

Xpath同样可以利用元素自身的属性:

Xpath = //*[@id=’kw1’]

//表示某个层级下,*表示某个标签名。@id=kw1 表示这个元素有个id等于kw1 

当然,一般也可以制定标签名:

Xpath = //input[@id=’kw1’]

元素本身,可以利用的属性就不只局限为于idname ,如:

Xpath = //input[@type=’text’]

Xpath = //input[@autocomplete=’off’]

但要保证这些元素可以唯一的识别一个元素。

 

2.2、找上级:

  当我们要找的一个人是个刚出生的婴儿,还没起名子也没有入户口(身份证号),但是你会永远跟在你父亲的身边,你的父亲是有唯一的名字和身份证号的,这样我们可以先找到你父亲,自然就找到你的。

元素的上级属性为:

<form id="form1" class="fm" action="/s" name="f1">
  <span class="bg s_ipt_wr">
    <input id="kw1" class="s_ipt" type="text" maxlength="100" name="wd" autocomplete="off">

找爸爸:

xpath = //span[@class=’bg s_ipt_w’]/input

如果爸爸没有唯一的属性,可以找爷爷:

xpath = //form[@id=’form1’]/span/input

这样一级一级找上去,直到html ,那么就是一个绝对路径了。

 

2.3、布尔值写法:

  如果一个人的姓名不是唯一的,身份证号也不是唯一的,但是同时叫张三 并且 身份证号为123 的人却可以唯一的确定一个人。那么可以这样写:

Xpath = //input[@id=’kw1’ and @name=’wd’]

可以and ,当然也可以or :

Xpath = //input[@id=’kw1’ or @name=’wd’]

or的实际意义不太。我们一般不需要说,找的人名字或者叫张三,或者身份证号是123 也可以。

 

Robot framework 中的写法:

Input Text

xpath = //*[@id=’kw1’]

robot framework学习

input text

xpath = //span[@class=’bg s_ipt_w’]/input

 

robot framework学习

input text

xpath = //input[@id=’kw1’ and @name=’wd’]

 

robot framework学习

 

 

CSS定位                           

   Css的定位更灵活,因为他它用到的更多的匹配符和规格。

http://www.w3school.com.cn/cssref/css_selectors.asp

选择器

例子

例子描述

.class

.intro

选择 class="intro" 的所有元素。

#id

#firstname

选择 id="firstname" 的所有元素。

*

*

选择所有元素。

element

p

选择所有 <p> 元素。

element,element

div,p

选择所有 <div> 元素和所有 <p> 元素。

element element

div p

选择 <div> 元素内部的所有 <p> 元素。

element>element

div>p

选择父元素为 <div> 元素的所有 <p> 元素。

element+element

div+p

选择紧接在 <div> 元素之后的所有 <p> 元素。

[attribute]

[target]

选择带有 target 属性所有元素。

[attribute=value]

[target=_blank]

选择 target="_blank" 的所有元素。

[attribute~=value]

[title~=flower]

选择 title 属性包含单词 "flower" 的所有元素。

[attribute|=value]

[lang|=en]

选择 lang 属性值以 "en" 开头的所有元素。

 

同样以百度输入框的代码,我们来看看CSS如何定位。

<form id="form1" class="fm" action="/s" name="f1">
  <span class="bg s_ipt_wr">
    <input id="kw1" class="s_ipt" type="text" maxlength="100" name="wd" autocomplete="off">

id定位:

css=#kw1

class定位:

css=.s_ipt

其它属性:

css=[name=wd]

css=[type=text]

css=[autocomplete=off]

父子定位:

css=span > input

css=form > span > input

根据标签名定位:

css=input

 

Robot framework 中的写法:

Input Text

css=#kw1

robot framework学习

input text

css=.s_ipt

robot framework学习

input text

css=[name=wd]

robot framework学习

 

  同样一个元素,根基CSS的不同规则,可能有几十上百种写法。CSS更灵活强大,但是相比xpath 的学习成本为更高。但是cssxpath 两种定位方式是一定要学会一种,不然你的自动化工作更无法开展。

 Robot Framework自动化测试

 

Robot Framework自动化测试(三)---Selenium API

2014-09-12 11:20 by 虫师, 9917 阅读, 0 评论, 收藏编辑

Robot  Framework  Selenium  API

 

说明:

   此文档只是将最常用的UI 操作列出。更多方法请查找selenium 关键字库。

 Robot Framework自动化测试

 

 

一、浏览器驱动

 

通过不同的浏览器执行脚本。

 

Open Browser

Htpp://www.xxx.com

chrome

 

浏览器对应的关键字:

firefox

FireFox

ff

internetexplorer

 

Internet Explorer

ie

googlechrome

 

Google Chrome

 

gc

chrome

opera

Opera

phantomjs

PhantomJS

htmlunit

HTMLUnit

htmlunitwithjs

HTMLUnit with Javascipt support

android

Android

iphone

Iphone

safari

Safari

 

备注:

要想通过不同的浏览打开URL地址,一定要安装浏览器相对应的驱动。如chrome 的驱动:

chromedriver.exe 等。

浏览器默认为空时启动FireFox

 

二、关闭浏览器

 

关闭浏览器

Close Browser

 

 

关闭当前的浏览器。

 

关闭所有浏览器

Close All Browsers

 

 

关闭所有打开的浏览器和浏览器缓存重置。

 

 

三、浏览器最大化

 

Maximize Browser Window

 

 

 使当前打开的浏览器全屏。

 

四、设置浏览器宽、高

 

Get Window Size

800

600

以像素为单位,第一个参数800表示宽度,第二个参数600表示高度。

 

 

五、文本输入

 

Input Text

Xpath=//* [@]

输入信息

Xpath=//* [@] :表示元素定位,定位文本输入框。

 

 

 

六、点击元素

 

Click Element

Xpath=//* [@]

 

Xpath=//* [@] :表示元素定位,定位点击的元素。

 

 

 

七、点击按钮

 

Click Button

Xpath=//* [@]

 

Xpath=//* [@] :表示元素定位,定位点击的按钮。

 

 

 

八、注释

 

注释1

Comment

注释说明

 

 

注释2

# 注释说明

 

 

除了使用Comment 关键字进行注释外,Robot framework框架是基于python语言开发的,所以提供了python语言的注释“#”方式。

 

 

九、固定时间休眠

 

Sleep

42

 

Sleep

1.5

 

Sleep

2 minutes 10 seconds

 

Sleep表示执行到当前行固定休眠多长时间,以“秒”为单位。

42表示42秒;

1.5 表示1.5秒;

2 minutes 10 seconds 表示210秒。

 

 

十、等待元素出现在当前页面

 

Wait Until Page Contains Element

Xpath=//* [@]

42

error

Xpath=//* [@] :表示元素定位,这里定位出现的元素

42 : 表示最长等待时间。

Error : 表示错误提示,自定义错误提示,如:“元素不能正常显示”

 

 

 

十一、获取title

 

Get Title

 

 

获得当前浏览器窗口的title 信息。

 

这里只获取title 是没有意义的,我们通常会将获取的title 传递给一个变量,然后与预期结果进行比较。从而判断当前脚本执行成功。

 

 

 

十二、获取文本信息

 

Get Text

Xpath=//* [@]

 

 

Xpath=//* [@] : 定位文本信息的元素。

 

 

 

十三、获取元素属性值

 

Get Element Attribute

id=kw@name

 

 

id=kw@name : id=kw 表示定位的元素。@nam 获取这个元素的name属性值。

 

 

十四、cookie处理

 

获取cookie

get cookies

 

 

获得当前浏览器的所有cookie 

 

获得cookie

get cookie value

Key_name

 

Key_name : key_name 表示一对cookiekeyname 

 

删除cookie

delete cookie

Key_name

 

删除keyname cookie信息。

 

删除所有cookies

delete all cookies

 

 

删除当前浏览器的所有cookie

 

添加cookie

add cookie

Key_name

Value_name

添加一对cooke keyvalue

 

 

十五、声明变量

 

${a}

Set Variable

hello

定义变量ahello

 

${a}

${b}=

Set Variable

hello

world

定义变量ahello bworld 

 

 

 

十六、日志(输出)

 

${a}

Set Variable

Hello World

log

${a}

 

在测试报告中输出a变量的值hello word

 Robot Framework自动化测试

 

 

十七、获得浏览器窗口宽、高

 

${width}

${height}

get window size

log

${width}

 

log

${height}

 

获得浏览浏览器窗口宽、高,通过log 将宽高,打印到报告中。

 Robot Framework自动化测试

 

 

十八、验证

 

open browser

http://www.baidu.com

chrome

${title}

Get Title

 

should contain

${title}

百度一下,你就知道

 

Open Browser 通过chrome打开百度首页。

Get Title 获得浏览器窗口的titile ,并赋值给变量${title}

Should Contain 比较${title}是否等于“百度一下,你就知道”。

 Robot Framework自动化测试

如果item1 不包含 item2 一次或多次,那么失败。

 

 

 

十九、表单嵌套

 

Select Frame

Xpath=//* [@]

 

Unselect Frame

 

 

Select Frame 进入表单,Xpath=//* [@] 表示定位要进入的表单。

Unselect Frame 退出表单。

 

 

二十、下拉框选择

Unselect From List By Value

Xpath=//* [@]

vlaue

 

 

 

Xpath=//* [@] 定位下拉框;

Vlaue 选择下拉框里的属性值。

 

 

二十一、If分支语句

 

${a} 

Set variable

2

 

 

${b} 

Set variable

5

 

 

run keyword if

${a}>=1

log

a大于1

 

...

ELSE IF

${b}<=5

log

b小于等于5

...

ELSE

log

上面两个条件都不满足

 

 

首先定义两个变量分别为 

If 判断 大于等于,满足条件log 输出 “a大于1 ”;

不满足上面的条件,接着else if 判断b小于等于,满足条件log 输出 “b小于等于5”;

上面两个条件都不满足,else  log输出“上面两个条件都不满足”。

 

备注:注意sele if else前面的三个点点点(...

 

 

 

二十二、for 循环语句

 

循环1

:FOR

${i}

in range

10

 

log

${i}

 

 

查看结果:

 Robot Framework自动化测试

循环变量i 从0 循环10次。

 

 

循环2

@{a}

create list

aaa

bbb

:FOR

${i}

in

@{a}

 

log

${i}

 

@{a} 定义为一个字符串列表。

通过in 可遍历非整型(in range

 Robot Framework自动化测试

 

说明:

Log if 分支,for 循环并非selenium关键字库的提供的方法,是由BuiltIn包提供。


Robot Framework自动化测试(四)--- 分层思想

2014-09-13 16:46 by 虫师, 4297 阅读, 5 评论, 收藏编辑

谈到Robot  Framework 分层的思想,就不得不提“关键字驱动”。

 

关键字驱动: 通过调用的关键字不同,从而引起测试结果的不同。

在上一节的selenium API 中所介绍的方法其实就是关键字,如“open browser” 就是一个关键字。从底层去看它就是一个通过编程去现实的一个方法。

def  open_browser(url,browser):
     #通过browser找到相应的浏览器驱动,调用浏览器,借助python的httplib、urllib模块将url传递给浏览器。从而实现open brwoser 的目的。

通过上面的伪代码表述的“关键字”的底层其实还是程序定义的方法。

 

  回到分层的思想上,在程序设计的讲究设计模式,设计模式其实就是根据需求使用抽象与封装,其实就是分层思想。把一个实现过程分成不同多层。提高的灵活性,从而达到可扩展性和可维护性。

 

  再回到自动化的话题上,我们可以把操作步骤封装一个一个的方法(关键字),通过调用关键字来实现测试用例。

 

http://www.cnblogs.com/fnng/p/3871712.html

参考本系列的第一节创建一条百度搜索的测试用例。

Robot Framework自动化测试

我现在要写5条百度搜索的用例:

 Robot Framework自动化测试

   可以在Search测试套件下创建5条测试用例。其实对于每一条测试用例来说,只是搜索的内容不同,脚本步骤是完全一样的。这样做无疑增加的脚本的冗余,而且不便于维护。假如,百度输入框的定位方式变了,我不得不打开每一条用例进行修改。

 

我们可以过创建关键字的方式,从而实现分层的思想来解决这个问题。

 

Robot  Framework 关键字                      

 

1、创建资源

右键“测试项目”选择“new resource”创建资源。

Robot Framework自动化测试

输入资源名称:

 Robot Framework自动化测试

 

 

2、创建关键字

右键“业务关键字”选择“new User Keyword” 来创建用户关键字。

 Robot Framework自动化测试

 输入关键字的名称:

 Robot Framework自动化测试

 

 

3编辑关键字

 Robot Framework自动化测试

分析:

对于一个测试用例来说,用户关心的是输入什么内容,得到什么结果。

所以,对于“百度搜索”关键字来说,需要创建两个接口变量${search}${result} 两个变量,用于接收输入内容和预期结果。

点击Arguments输入框,定义变量,多个变量从用“|”隔开。

 

在百度用户中使用参数化变量。

 Robot Framework自动化测试

 

 

4、添加创建的资源

切换到测试套件(Search)页面,添加资源(业务关键字.txt

 Robot Framework自动化测试

 

5、调用关键字

现在就可以在测试用例中使用创建的关键字了(百度搜索)。

 Robot Framework自动化测试

 

对于每一条用例来说,调用“百度搜索”关键字,输入搜索内容,输入预期结果即可。不同关心用例是如何执行的。如果百度输入框的定位发生了变化,只用去修改“百度搜索”关键字即可,不用对每一条用例做任何修改。大大提高的用例的维护性和扩展性。

 

 

继续分层的设计:

 Robot Framework自动化测试

 

到此,Robot  Framework +selenium 自动化测试粗犷的讲完了。当然还有更多API 的使用,和细枝末节的设置没有介绍。但我们已经可以拿它来开展自动化工作了。