robot framework
参考网站
- http://robotframework-userguide-cn.readthedocs.io/zh_CN/latest/ExtendingRobotFramework/CreatingTestLibraries.html
- https://github.com/robotframework
- http://robotframework.org/robotframework/latest/RobotFrameworkUserGuide.html
- wxpython 2.8.12--https://sourceforge.net/projects/wxpython/files/wxPython/2.8.12.1/
- http://robotframework.org/Selenium2Library/Selenium2Library-1.8.0.html
概念-什么是自动化测试框架
- 自动化测试框架能干什么
- 每次写好的自动化的脚本的组织
- 有选择的执行脚本,不需要人手动执行
- 每个检查点是否通过的检查
- 通用的功能进行组织到模块中,供其它模块的使用
- 执行的结果输出报告形式
- 测试框架还能解决的问题
- 自动测试用例的实现方式
- 自动测试用例的开发支持--IDE&&库
- 和用例管理系统的集成
- 测试执行
- 相关测试套件(suite)和测试用例的执行原则,可以支持随意选择其中的测试用例的执行
- 初始化和清除:执行测试条件的预置条件,这一步对于程序来说非常重要
- 测试报告
RF功能和特点
1.测试人员开发测试数据文件(Test Data)对应一个个测试用例
- 测试数据文件里面使用的功能小模块叫关键字,由测试库(Test Library)实现
- robot framework加载测试库,并解释执行Test Data也就是测试用例,测试库一般需要自己开发
- 他提供简单易懂的表达式的“语言”来开发自动测试用例
- 用关键字(keyword)的形式来开发测试用例
- 标准库提供了常用的功能
- 第三方拓展库
- 开发者根据产品自行开发库
- 定义了灵活且易理解的测试用例执行控制(包括初始化和清楚环境)
- 有清晰的体制和报表功能,可以清楚的查看测试执行结果
- 开发人员划分
- 自动化框架、库开发者
- 自动化用例开发者
RF安装
- RF的安装
- pip install robotframework - i https://pypi.douban.com/simple/
- RIDE的安装 -- 不是必须的工具,可视化的编辑工具
- 一个简单的IDE
- pip install robotframework-ride - i https://pypi.douban.com/simple/
- wxpython的安装--RIDE依赖wxpython图像库最好用2.8.12.1,以上的版本不支持
- selenium2library的安装-- web自动化
- 支持slelenium的自动化的rf扩展库
4.上面的步骤做完后,使用win+r,输入ride.py,不能执行的时候需要关联python -
pip install robotframework-selenium2library
pycharm 的插件intellibot 的安装
- browse respositities 选择下载或者直接选择第三个按钮
-
intellibot 包下载地址:https://www.intellibotrobotics.com/
实战
实战1--使用RIDE图形化--官网文档地址:http://robotframework.org/Selenium2Library/Selenium2Library.html
- 设置RIDE
- 先自己创建一个文件,使用file-open dictory,选择创建的目录
- 自动识别library的关键字,做法:RIDE工具中修改tools-preference --defaulte file fotmat修改为 robot
- RIDE里面加入selenium2library的方法
- tools-->preference-->importing-->auto imports选择selenium2library的名字和地址
- 把webdriver的地址加到系统环境变量中,不包含exe的目录,修改好之后重新打开控制台,输入ride.py
- 右击->new suit ->file取名字--创建的是测试套件文件 or 选择目录,目录中可以包含测试套件的子目录和子套件文件,当文件有*表示没有保存
- 右击->new test case
- 使用edit,表格填写的方式,函数不是内置的需要申明,是内置的不需要申明
- 申明selenium2library:第一行输入ImportLi +(技巧)CTRL+ALTE+空格 自动搜索和补齐空格
- 设置库的名字:import library +selenium2library
- 设置访问地址:Open Browser +网址+浏览器
- 设置等待时间:Set Selenium Implicit Wait +5
- Import Text +id='kw'+ 搜索文本内容
- css查找,${firstRet}+Get Text+文本内容--意思是设置文本内容的变量为${firstRet}
- Should Contain +变量1-${firstRet}+变量2- 说明:变量1是否包含变量2的内容,should打头是检查点
- 执行-方法
- 方法1:勾选case,点击白色的运行符号,点击log,显示测试的结果;点击report,展示测试报告,出现错误时,直接在浏览器中打开Log和report的链接
- 方法2:点击run
套件和用例的结构
套件的概念
- 测试套件是测试用例的集合
- 功能相近的测试套件有可以组成更大的套件
-
树形结构,类似于文件的格式
`
*** Settings ***
Library Selenium2Library
*** Test Cases ***
测试1
Open Browser http://www.114time.com/ chrome
Set Selenium Implicit Wait 4
${date}= Get Text css=.date > b.year
log to console ${date}
Should Be Equal ${date} 2017
Close Browser
测试2
${var1} convert to integer 100
${var2} set variable 5
should be true $var1 * int($var2) == 500
`
套件(数据文件)文件的表
1. RF支持四种的表
- 分别为Settings,Variable,Test Case,Keywords
- 表名必须出现在第一单元中,表名大小写不敏感
-
Settings表,是这个测试套件的全局配置表,比如这个测试套件要使用的测试库,资源文件,测试套件的环境初始化(setup)和清除(tear down),该套件内的标签等等
*** Settings *** --大小写不敏感 - Test Case--用例的名字放在最前面
- 测试用例表里面的每个测试用例,大概可以分为
- 配置部分
-
主体部分
-
1. 用例配置部分
- [Documentation]--用例的文字说明
- [Tags]-该用例的标签
- [Setuo],[Teardown]--用例初始化和清楚操作
- [Template]--申明该模块是模板关键字驱动,本用例值包含测试数据
- [Timeup]--设置用例超时时间
-
2.主体部分主要是由关键字组成
- 关键字的来源:测试库、资源文件、测试用例所在的文件的关键字表
-
用例主体部分也包含变量赋值
4. Variable-测试套件中的全局变量表
- ${javahome}
5. Keywords用来定义测试套件中的关键字
RF关键字的写法
- 技巧:should be true 的用法和eval,should be true中的变能量的写法,直接是$+变量名
认识测试库
- 通常,关键字是由测试库提供的
- 测试库就是python 文件
- python 测试库里面的关键字的实现方式
- 类的方法
- 函数
- RF 脚本使用函数名、方法名
- rf 如何发现路径
- 和python 程序一样,sys.path
库的导入
- 除了builtin
- 一种是在settings表中进行导入 :library abc
- 一种是在测试用例中使用import library
- 库导入的时候可以有参数,可以查看官方文档,指导每次的导入的参数的意思
rf中的变量
1. rf中的变量,就是Python中的变量
-
它指向一个python对象
2. rf变量对应的是什么python对象,他就是什么类型的对象
3. rf中,对变量的不同的用法
- Scalar 方式
- ${var}-直接把变量所对应的python 对象传递给关键字对应的函数
- list 方式
- @{var} 展开list中的每个元素,作为多个参数传入
- dictionary 方式
-
&{var} 展开dict中的每个元素,作为多个参数传入
4. 访问环境变量 %{env_var}
-
collection 标准库
- 针对List和diction 的处理
- 创建并添加元素
- 数字变量${1},${2}
dialogs库
- 关键字get value from user 弹出一个对话框,得到键盘输入的数字
循环
- :For (inRange) +条件\ 直接是冒号+for
条件判断、初始化和清除
- run keyword if 关键字做条件判断
- 自动换行设置--Python中使用反斜杠进行换行 例如:\win;rf中使用将整体换行,使用三个点‘...加+换行内容’
- run keyword unless--当条件不成立的时候,执行if下面的语句
Evalute
- ${var}=set variable ${890}等价于 ${var}=evalute ${890}
- 复杂的表达式 :${var} = evalute 'hello '*10
初始化和清除
- setup是测试一个用例(套件)前面要做的事情
- tearup是测试后要做的事情
- 清除和初始化操作,每次放在都可以不影响后面的测试
- 测试套件目录,测试套件文件和测试用例都应该有自己的清除操作
- 所有的清除和初始化操作只能有一个关键字构成
6. 用例的setup和tearup
7. 套件中的setup和tearup
- 写在测试套件文件的settings
- 两种类型
- Suite setup/tearup--进入和退出这个suite执行用例前后必须执行且分别执行一次
- Test setup和tearup ---当suite本身没有setup和tearup才执行
- 测试套件的setup/tearup
- 在其init的初始化文件-init-.txt或者_init_.robot里面的settings表中
-
setup和tearup使用和上面的两种类型中的方法相同
遵循就近原则
关键字
- 用户关键字解决重复性的代码,把多个关键字组成一个'宏'关键字
-
定义好用户关键字后,该测试套件中里面就可以使用该用户关键,就和库关键一样
3. 写法
- Keywords表中定义,通用,和测试用例表中定义一样
- 把代码公共的部分提取出来,放进一个关键字中
- 使用参数解决公共部分不同的,使用[arguments]来进行配置
- [Arguments]
${name} ${desc} ${displayidx} -
[Return]表示有返回
资源文件-python中库的概念
共享变量和python测试库
变量表中声明变量
- 首先我们要创建Variable表
*** Variable
${MgLoginUrl1} http://www.1234.com
list变量----@{database} 127.0.0.1 3306
-1. @{database}[0]--去除列表中第一个元素
* Dict变量--&{user1} name=auto pw=123** - Variable中申明文件的地址,如果是在本问价的地址中,就直接写地址,不在本文件的地址中是a\b,使用相对路径查找
- Variable中申明的文件在其他文件或者模块中-----win+R 输入set Pythonpath=‘要查找的文件路劲’
- Variable中申明的文件在其他文件或者模块中-----win+R 输入robot -- Pythonpath ‘要查找的文件路劲’
Python拓展关键字
- Python模块作为测试库
- 模块文件名作为测试库的名字
- 比如Python模块中叫Mylibrary,对应的Python文件就是Mylibrary.py,那么测试库的名字就是Mylibrary
- 定义在Python模块文件中的函数,名称前有**_**前缀的不会作为关键字
python 扩展库的搜索规则
- 完全按照python的模块和搜索规则来的
- 如果在包内 pylib/login/rightpass.py
Settings
Library pylib.login.rightpass
- 在settings中声明资源文件和变量文件
- 路劲,目录之间的分隔符,不用点.,而是用斜杠/
- 在settings中声明测试库:
- 路劲,目录之间的分隔符,可以用点.,也可以用斜杠/
- 路径分隔符,用点后面不加py,用斜杠后面加.py
项目目录和执行参数
项目文件类型种类
- 用例套件文件、目录
- RF资源文件
- 测试库
-
变量文件
当资源文件的位置变了的时候,可以从跟了目录进行找
- Select from list by label 关键字可以从下拉框中找元素
-
run key word 可以让初始操作,有不一样的方法
结构优化
- 合并重复的初始化和清除操作
- 去掉多余的管理员登陆操作
-
合理充足目录结构
rf用例的执行
rf的命令格式
- robot [options] data_sourse
- options 是rf命令的选项,可以为空
- data_sourse是要执行的测试套件文件或者目录的路径。可以是绝对路径,也可以是相对路径,相对于当前shell的工作目录
- robot tests.robot
- robot path/to/my_tests/
- robot c:\robot\tests.robot
- 如果指定的是测试套件文件,则执行该文件中所有的测试用例
- 如果指定的是测试套件目录,则递归执行该目录下包含的所有的子目录。,里面所有的测试套件文件里面的用例
- 可以指定多个要执行的测试套件文件、目录,甚至用通配符有来表示多个测试,如下所示:
*** robot my_tests.robot you_tests.robot -----直接把两个测试文件连载一起
*** robot --name Example Path/to/tests/pattern_*.robot
- 可以指定多个要执行的测试套件文件、目录,甚至用通配符有来表示多个测试,如下所示:
- 多个测试数据的情况,本次测试的名字就是他们名字的相加
*** robot my_tests & you_tests -
用--name选项来指定本次测试名字,像上次第二行所示
*** robot --pythonpath .--name 回测测试 tc - 根据名称选择测试用例
-
可以通过--test--suite来指定执行哪些用例或者套件而且还支持通配符的方式
例如:
--test Example # 执行名为example的用例
--test mytest --test yourtest # 执行名为 mytest和yourtest 的用例
--test Example* # 执行名字以example开头的用例
--suite mysuite # 执行名为mysuite 的套件 - 可以在自动化的用例后面加用例的编号,该编号和测试用例的编号相同
使用参数文件,执行测试用例
如果有的时候,参数太长,我们通可以使用参数文件,我们可以把所有的参数都放在参数文件中,比如:
--pythonpath .
--name 回测测试
--test tc001
--test tc002
--test *tc003
tc
命令robot -A filename
添加ROBOT_LIBRARY_SCOPE='GLOBAL'来使得不需要每次调用库的时候,都实例化一次,执行class中的内容
should be true 的用法
- 使用这个关键字的时候,语法符合python的语法
- 变量${var},使用变量名用$var,去掉花括号,使用变量值用${var},保持不变
- 库名大小写敏感,关键字不敏感
- 库的导入可以添加参数,在类的初始参数的方法中,比如:
- 一般导入的库都是由类来实现