自动化测试是测试领域不可缺少的一部分,至少我是这么认为,以前也多多少少接触过一些自动化相关知识,不过都没有实际操作和练习过,最近一个月接触到RobotFramework,并且采用了这个用python编写的功能自动化测试框架来测试我们公司系统,接下来就是学习过程中的一些笔记,若有错误的地方还请提出,谢谢!
1:首先简短介绍下RobotFramework这个东西到底是什么
Robot Framework是一款python编写的功能自动化测试框架。具备良好的可扩展性,支持关键字驱动,可以同时测试多种类型的客户端或者接口,可以进行分布式测试执行。主要用于轮次很多的验收测试和验收测试驱动开发(ATDD)。Robot Framework是开源软件,由Nokia Siemens Networks开发并提供支持。
2:RobotFramework具有那些特性
1.测试用例使用文本文件(TXT或者TSV文件)保存,使用制表符分隔数据。可以方便的使用任何文本编辑器,或者EXCEL编辑测试用例。也可以使用HTML格式创建用例。
2.测试用例中支持变量使用,可以使用IF语句和FOR循环语句。
3.可以利用“标签”功能对测试用例进行分类和有选择执行。
4.支持关键字驱动、数据驱动和行为驱动。
5.利用已有的关键字,测试人员可以创建自己需要的关键字,形成更高级别的行为。
6.测试执行报告和日志是HTML格式,容易阅读。
7.Robot Framework并不是一款像QTP一样的自动化测试工具。它是一个自动化测试框架,或者说是一个自动化测试平台。
8.提供了测试执行事件的监听接口,并且可以自定义接口中的脚本。例如,某个用例执行前,“start_test”接口中的脚本就会被执行;用例执行结束后,“end_test”接口中的脚本就会被执行。而测试人员可以自定义“start_test”、“end_test”这两个接口的脚本。
9.提供了命令行接口和XML格式的输出。可以与版本管理工具结合,进行持续集成。
10.Robot Framework是通过测试库识别被对象、操纵被测对象,有很多自带的或者第三方的开源测试库
例如:使用“selenium2Library”库测试web客户端。此外还可以测试java客户端、Win32客户端、SSH协议的字符终端等。
11.测试人员可以使用Python和java创建自己需要的测试库。
3:编写脚本工具RIDE
RIDE是一款专门用来编辑Robot Framework用例的软件,用Python编写并且开源。RIDE可以从Robot Framework官网找到最新的下载链接。(具体安装过程和用法会在后面的文章给出),其实还有其他的编写工具,这里只是笔者用的RIDE编写,看个人爱好。4:Keywords参考库
RobotFramework有很多可以参考的库,但是我只是用到了BuiltIn和Selenium2Library,里面提供了写脚本的一些关键字,但是Wait Until Element Is Visible这个关键字用不了,原因我也不知道为什么。
5:RobotFramework 关键字(因时间有限,我会一点一点的累加的,另外我是用Xpath写的脚本)
open browser | url, browser=firefox, alias=None,remote_url=False,desired_capabilities=None, ff_profile_dir=None
打开浏览器 | url表示你需要打开的网页地址 | browser表示你用什么浏览器打开这个网页 | 后面的 内容可以为空,所以忽略。
Set Browser Implicit Wait | seconds
设置浏览器等待时间(单位为秒)| seconds 表示浏览器等待的时间
input text | locator, text
向文本框输入值 | locator 表示定位器 | text 表示您要输入的文本内容
Click Button | locator
单击按钮时间 | locator表示定位器
Click Link | locator
单击A标签 | locator表示定位器
Click Element | locator
单击某个标签 | locator表示定位器
Element should contain | expected, message=
验证元素被定位器包含文本预期 | expected 表示期望值的locator | Message 表示你想要的消息
这个例子是说明了用户名和密码为空的情况下是否有提示‘用户不存在’
Close All Browsers
关闭所有浏览器
unselect frame
集前帧与当前帧(回到顶部的frame,避免frame找不到元素,所以从最顶部的grame开始定位,特别是大 模块之间的定位)
Select frame | locator
设置feame被定位为当前你要定位的frame | locator表示定位器(关键属性为帧id和名称)
Select From List By Value | locator, *values
从列表中选择值 | locator表示定位器 | *values表示您要定位的值
Select From List By label | locator, *lable
从列表中选择你要的定位的标签 | locator表示定位器 | *lable表示您要定位的标签
(lable可以是多个值)
Wait Until Keyword Succeeds | timeout, retry_interval, name, *args
等到指定的关键字成功或给定的超时过期。| timeout 表示超时 | retry_interval 表示重新操作的间隔 时间 | name表示要等待的关键字名称 | *args 表示所需等待加载的locator
Element Should Be Visible | locator message=
验证元素是被定位器可见的 | locator表示定位器 | message可忽略
注:继上一步"快速添加"后等待10sec(秒)间隔时间为0sec,然后验证元素是否被定位器可见,这样就 能解决浏览器快速切换模块导致页面加载找不到当前元素的情况了。
Drag And Drop By Offset | source, xoffset, yoffset
用于拖拽的按钮 | source 表示我的元素 | xoffset表示横向偏移量 | yoffset 表示纵向偏移量
Set Selenium Speed | seconds
设置操作脚本等待时间 | seconds 等待时间值,单位秒
注:这个Keyword一旦操作,后面的每个脚本执行的步骤都会等待0.3秒。
choose file | locator , filepath
查看文件 | 定位器 | 路径
例:Choose File |logo_1 | ${logoFilePath}
Run Keyword And Return Status | name | *args
运行关键字,并返回一个状态(true、false) | *args自定义变量
Table Column Should Contain |table_locator, col, expected, loglevel=INFO
列表应该包含,通常用来查找某个字符 | table_locator 列表定位器 |col表示列 | expected预期 值 | loglevel表示日志,级别
Element Should Be Visible | locator, message=
表示元素应该可见,用来定位元素的,和click有本质的区别,首先是要可见的,返回true和false,如果为 false的话就说明是不可用的element,而click element是一个点击的动作 | locator表示定位器 | message 表示返回的一个消息,这个消息可以用来覆盖一个默认的错误消息,也可为空。
should be true | condition, msg=None