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)自己写的三方库,需要经过测试,即单元测试