Robot Framework自动化测试

本文介绍使用 RobotFramework 和 Selenium 实现 Web UI 自动化的基础流程,包括环境搭建、基本用例编写、元素定位技巧、Selenium API 使用等,并探讨关键字驱动及分层思想提升测试效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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图标。双击启动,界面如下:

  

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

 

 

创建测试项目                                          

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

Name 输入项目名称。

Type 选择Directory

 

 

创建测试套件                                            

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

Name 输入项目名称。

Type 选择File

 

 

创建测试用例                                                  

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

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

 

 

导入selenium2library库                         

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

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

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

 

 

编写用例                                                      

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

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

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

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

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

 

 

运行测试用例                                                

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

 

运行信息:

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

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

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

 

 

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

错误:

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自动化测试(二)---元素定位

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可以看作一个人的身份证号和姓名。当然,这些属性值是否唯一要看前端工程师如何设计了。

百度搜索框和搜索按钮

复制代码
……
<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="百度一下">
……
复制代码

根据上面的例子,百度输入框可以取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 就可以通过这种层级关系找到元素。

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

复制代码
<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">
复制代码

 

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自动化测试(三)---Selenium API

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

Robot  Framework  Selenium  API

 

说明:

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

 

 

 

一、浏览器驱动

 

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

 

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

 

 

 

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

 

${width}

${height}

get window size

log

${width}

 

log

${height}

 

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

 

 

 

十八、验证

 

open browser

http://www.baidu.com

chrome

${title}

Get Title

 

should contain

${title}

百度一下,你就知道

 

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

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

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

 

如果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}

 

 

查看结果:

 

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

 

 

循环2

@{a}

create list

aaa

bbb

:FOR

${i}

in

@{a}

 

log

${i}

 

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

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

 

 

说明:

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

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

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

 

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

 

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

 

Robot  Framework 关键字                      

 

1、创建资源

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

输入资源名称:

 

 

 

2、创建关键字

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

 

 输入关键字的名称:

 

 

 

3编辑关键字

 

分析:

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

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

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

 

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

 

 

 

4、添加创建的资源

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

 

 

5、调用关键字

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

 

 

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

 

 

继续分层的设计:

 

 

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


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值