RF学习笔记
RF即robotframework,接口、web UI、app自动化都可以支持。文本形式编写测试用例(填表格),不是python语言(使用RF要遵循它自己的语法)。
关键字:都是函数
一、RF的几大概念
1、Settings:设置项,包括导入库、导入变量,设置变量、设置setup、teardown等。
用法示例:
*** Settings ***
Library DateTime 导入DateTime库
Resource keywords.robot 导入用户自定义关键字集
Variavles name 导入变量文件
Test Setup/Test Teardown 设置测试用例的setup/teardown
Suite Setup/Suite Teardown 设置测试套件的setup/teardown
Force Tags/Default Tags 设置标签
Test Timeout 设置测试用例运行超时时间
Documentation 添加说明
2、Library :库,提供了一系列关键字
3、KeyWords :关键字,即提供特定功能的函数。包括系统关键字和用户关键字
用法示例:
*** Keywords ***
keyword_name
keyword body
......
4、Resource :资源,用户关键字集合,用于管理用户关键字,一般用户自定义关键字都写在资源文件中
5、Variables :RF语法中的变量,单变量值和列表
6、TestCases/TestSuite :测试用例/测试套件
用法示例:
*** Test Cases ***
测试用例1
测试用例2
……
二、RF Variable:变量
1、变量类型:
1)纯值变量(只有一个值):${变量名}
==> 表示一个数据。作为参数传递,表示一个参数。
2)list变量:@{变量名}
==> 表示一组数据。作为参数传递时,有几个数据就是几个参数。
3)dict变量:&{变量名}
==> 表示一组键值对数据。作为参数传递时,有几个键值对就是几个参数。
注意??:关于变量声明,由于RF底层时python实现的,所以RF与python创建变量类似,变量不需要特定声明,只要有初始化赋值即可使用,默认情况下RF里的变量都是字符类型的。
2、变量赋值:
1)直接赋值:a = 1
2)函数的返回值
3、变量的取值:
4、变量的定义与作用域:
1)局部变量
2)全局变量
3)变量文件
示例1:设置局部变量为套件级别的变量 Set Suite Variable
示例2:定义当前套件全局有效的变量 ***Variable***
示例3:在变量文件中定义,然后引用变量文件中定义的变量,此处的变量文件指的是.py文件
三、RF语法与测试用例编写
在RF中,做任何事都是通过调用关键字来完成的,当然书写测试用例也是通过调用关键字来实现的。
那么RF的关键字从哪来呢?
==> 1)内置关键字:直接调用/先引入再调用
==> 2)第三方关键字:先安装-再引入-再调用
==> 3)自定义关键字:使用python语言实现
以上三种关键字可以统称为“系统关键字”
==> 4)用户关键字:不是通过代码实现的,用RF的语法编写的,主要用来表达业务,因此又叫业务关键字
?? 使用eclipse创建项目时,项目名不要含有下划线,会自动替换为空格
断言关键字,基本上都在标准库-BuiltIn中
?? RF中关键字的参数都是字符串,是不能执行的,顾不能像python语句一样,将关键字调用作为另一个关键字的参数
定义用户关键字示例:
保存后,将鼠标移至关键字名称上,可见关键字信息(来源、参数、说明等信息)
?? 关键字在RF中是不能单独执行的!
在测试用例中调用定义的用户关键字:
==> 用户关键字一般不在测试套件文件中定义,而是存放在资源文件中。
与测套件文件的区别:
资源文件的引入:
调用资源文件中的用户关键字:
异常处理:
一旦抛出异常,返回False,没有发现异常,返回True
==> 关键字:Run Keyword And Return Status
如果关键字运行成功并无异常,返回True;如果关键字运行有报错,则返回False
四、RF 用于Web UI自动化
SeleniumLibrary库:
PO模式示例:
RF-命令行参数
用例运行设置-重运行/参数化/用例的自动化收集/用例筛选 参考pytest的命令行参数的形式
robot命令
1)自动化收集用例:robot 项目目录 -- 在给定的项目目录下开始收集用例
2)识别机制:套件/测试套件/*** Test Cases ***
3)输出文件存放:默认存放在命令运行的目录,如上图为C盘Users/yxj,则会生成在此目录下,可能会出现权限不够的问题,顾一般先切换至项目所在路径下,再执行运行命令
4)用例筛选:
1?? 打标签名
2?? -i 标签名 运行参数设置 如:robot E:\rf\WebUITest -i smoke
==> 单用例打标签:
==> 整个套件下的用例都打标签:在settings中
5)重运行机制:等到所有测试用例执行完成后,会生成output.xml文件,然后根据文件,获取其中失败的用例,然后重运行这些用例,不能指定重运行的次数
1?? 先运行一次用例:robot 项目目录
2?? 再运行一次失败用例:robot -R 步骤1中生成的output.xml路径
3?? 重运行第二次:robot -R 步骤2中生成的output.xml路径
6)指定文件输出的路径:robot -d 目录
7)设置运行时变量(获取外部传参):命令行的形式,获取命令行设置的变量 robot -v name:value 项目目录
五、RF 接口自动化
1、安装
2、关键字:RequestsLibrary库的关键字可以分为一下三类
1)与服务端的会话
2)请求类型
3)响应结果转json
3、接口测试用例示例:略
4、RF实现数据驱动:通过将关键字设置为模板来实现
六、自定义RF扩展库
思考:通过类来实现还是函数来实现?
?? 自定义三方库的存放路径中最好不要含有中文(python3支持中文,但python2不支持)
1)库名、模块名、类名三者保持一致,这样在robot中导入时,就可以直接导入库名,避免一些路径上的问题
2)实现关键字的时候:类 或 .py中的函数
3)ROBOT_LIBRARY_VERSION = 1.0
ROBOT_LIBRARY_SCOPE= ‘GLOBAl’ 在运行过程中,示例对象的作用域,因为会在多个文件中引入,当scope为global时,只创建一个实例,全局有效
4)初始化函数__init__()一旦有参数,必须带有默认值
5)文档说明:”””文档内容”””
6)日志融合:引入robot的日志库,from robot.api import logger
7)自己写的三方库,需要经过测试,即单元测试