Robot Framework接口自动化框架

Robot Framework简介

1、什么是Robot Framework

  • 由Nokia Siemens Networks(诺基亚西门子)开发。
  • Robot Framework是一款基于python的功能自动化测试框架。
  • 可以同时测试多种类型的客户端和接口。
  • 主要用于轮次很多的验收测试和验收测试驱动开发(ATDD)。

2、RF的特点

(1)本身不提供任何类型测试,只提供测试框架的基本功能

(2)使用简单:使用表格语法,统一编写测试用例

                                也可像编程一样,编写RF脚本

(3)基于Python所以有丰富的库

(4)复用性高,可利用现有关键字组合新关键字

(5)支持各种变量,如字符串、列表、字典等,支持if和for语句

(6)提供标签功能,可以有选择性的执行测试用例

(7)输出的报告和日志是HTML格式,方便阅读分析

3、搭建RF环境

4、创建RF测试项目、测试套件、测试用例

对应 test project 、 test suite  、test case

(1)打开Ride

(2)创建测试项目、测试套件、测试用例

        

(3)导入包

(4)测试用例的基本结构

结果存入变量

操作名

操作别名或参数

url或参数

传递参数

5、RF脚本编写测试用例

5.1关键字

不区分大小写,建议大写

5.2注释

    • Comment messages
      • 快捷键:ctrl+#
      • 取消:ctrl+$
    • 行尾加
      • #注释文字

5.3输出日志

关键字log

    • Log message1,message2或变量1,变量2,… level=INFO
      • 在指定日志级别下记录message或变量值。
        • 文本不需要加引号。
        • 多个变量间以英文逗号间隔,多个变量结果输出在同一行中。
      • level可以省略,默认INFO。
        • 有效的日志级别有TRACE、DEBUG、INFO、HTML、WARN。

5.4执行测试

    • Run选项卡→Start
    • 快捷键F8
    • 设置报告存储位置
      • Robot Framework会生成三个文件,分别为output.xml、log.html和report.html。
        • output.xml是以XML格式记录测试结果,阅读起来不够直观,可以使用不同的语言读取XML文件中的测试结果,生成定制化的测试报告。
        • log.html和report.html相对来说要美观得多,log.html偏向于测试日志,记录脚本每一步的执行情况。report.html偏向于测试报告,总体展示测试用例的执行情况。通过浏览器打开log.html文件。
      • Run→Arguments
        • -o 路径\output.xml -l 路径\log.html -r 路径\report.html
    • 控制台汉字乱码
      • 修改python\lib\site-packages\robotide\contrib\testrunner\testrunner.py中的latin1为mbcs
        • mbcs(Multi-Bytes Character Set):多字节字符集
        • 根据系统自动显示为本国语言的字符,在中文系统下表示GB2312
      • 重启ride

5.5创建变量、列表、字典

    • ${变量名} set variable  变量值
      • $开头表示变量,不论数据是否使用[ ]、{ }
      • 变量不区分大小写,但不全是,最好一致
    • ${列表名} create list  值1 值2 值3 …
      • 数据中不需使用[ ]
      • 一个单元格一个数据,每个元素自动转字符串
      • 循环访问时建议将$换为@
    • ${字典名} create dictionary 关键字1=值1 关键字2=值2 ...
      • 数据中不需使用{ }
      • 一个单元格一对数据,每个元素值自动转字符串
      • 循环访问时建议将$换为&
    • 输出
      • 使用${变量/列表/字典名}
      • 结果为字符串形式

 

    • 查看和转换变量的数据类型
      • ${结果变量} evaluate type($变量名)
        • 变量名不能再加{ }
        • evaluate表示执行python表达式,并返回执行结果
      • ${结果变量} evaluate int($变量名)+-*/等操作表达式

 

5.6if语句

    • run keyword if 表达式 关键字 命令的参数1 参数2…
      • 表达式可以用
        • 0<=${变量名}<60的形式
    • ${变量名}    run keyword if    关键字    evaluate    表达式
      • 执行表达式,将结果存入变量
    • ${变量名} run keyword if 关键字1 set variable 值1 ELSE IF 关键字2 set variable 值2 … ELSE set variable 值n
      • ELSE IF需要大写,中间有空格。
      • 语句写在一行。

 

5.7for循环

    • 不支持while
    • 不支持多层(含两层)循环,只能重新定义关键字
    • :for ${变量} IN 值1 值2 值3

语句

      • 冒号不能省略
      • IN建议大写
      • 语句必须从第二列单元格写起
    • :for ${变量} IN RANGE 初值 终值

语句

      • IN RANGE建议大写,放在一个单元格中,中间有空格
      • 初值可以省略,默认从0开始
      • 初值和终值放在不同单元格中
      • 终值不被使用,而是到终值-1

    • 自定义关键字
      • 右击测试套件→New User Keyword
      • 可以设置进入的参数

    • exit for loop
      • @{列表名} create list 值1 值2 …

:for ${变量名} IN @{列表名}

  语句

  run keyword if '${变量名}'=='值' exit for loop

        • 建议使用@{列表名},字典使用&{字典名}
        • '${变量名}'=='值'
          1. 都要加引号
        • exit for loop可以根据条件退出循环
    • continue for loop
      • 提前进入下一轮循环

6、发送请求与处理响应

6.1创建会话

    • create session 会话名 url地址
      • 返回session对象,无需存储结果
      • url地址中携带http、域名或IP、端口号
        • 如http://wthrcdn.etouch.cn

6.2发送请求

使用 聚合数据  的天气预报接口举例

    • get请求
      • ${响应结果} get request 会话名 /路径?参数名=值
      • ${字典名} create dictionary 参数1=值1 参数2=值2

${响应结果} get request 会话名 /路径 params=${字典名}

        • params关键字不能省略

第一种传参:

 

 第二种传参:

    • post请求
      • &{headers字典名} create dictionary content-type=application/x-www-form-urlencoded

${响应结果} post request 会话名 /路径 data=${字典名} headers=${headers字典名}

        • 需将content-type存入headers,有时候不加会出错
        • data不能换成params

6.3处理响应数据

    • 获得响应正文
      • ${响应结果.content}
        • 二进制编码
      • ${响应结果.text}
        • unicode码形式的正文
      • ${响应结果.content.decode("utf-8")}
        • 转码为utf-8
      • json格式
        • ${json变量} to json ${响应结果.content} pretty_print=True
          1. 美化json显示
            1. pretty_print=True
      • 获取json中的的项
        • ${变量} get from dictionary ${json变量} 字典关键字
          1. get from dictionary表示根据字典关键值取值
          2. to json是不能使用pretty_print=True

 去掉美化显示

 

    • 获得响应状态码
      • ${响应结果.status_code}

log    ${res.status_code}

    • 获得响应cookies
      • ${响应结果.cookies}
        • 返回RequestsCookiesJar对象
        • 结果是字典形式,Cookie与for间的内容为cookies参数与值
      • ${响应结果.cookies}[参数名]
        • 获得某个cookies参数的值
        • 参数名区分大小写
        • 参数无需引号
      • ${cookie} get from dictionary ${响应结果.cookies} cookies参数名
        • 将取到的cookies存到自定义cookie变量

    • 获得响应头
      • ${响应结果.headers}
        • 也可在${响应结果.headers}中取到cookies
        • ${cookie} get from dictionary ${响应结果.headers} Set-cookie
          1. Set-cookie一般是关键字
        • ${cookie} fetch from left ${cookie} 右边的分割字符串
          1. 根据指定字符串拆分,然后去左边的串,结果重新存储
          2. 需要导入String包
    • 发送cookies数据
      • ${响应结果} get request 会话名 /路径?参数=值&cookie参数名=值

6.4正则表达式查找数据

    • ${结果} get regexp matches 源字符串 (?i)正则表达式 1
      • 需要导入String包
      • 源字符串必须是字符串格式
        • 如${响应结果.text}
      • (?i)
        • 忽略大小写
      • 正则表达式需要使用( )包含
        • 一对( )一个模式
      • 1表示匹配第几个模式,且只输出匹配到的字符串
      • 结果是列表形式
      • ${结果}[0]
        • 获得结果列表中的第1个
        • 结果是字符串形式

6.5变量转存

    • ${结果} convert to string 源变量
      • 将变量转换为字符串
      • 变量严格区分大小写

7、断言

    • ${变量} Should Be Equal 变量1 变量2 断言失败消息

ignore_case=True

      • 判断是否相等,变量1相当于实际结果,变量2相当于预期结果
      • 返回值接收变量可以省略
        • 断言成功时返回None,否则无返回值
        • 输出日志
          1. 断言失败信息+变量1!=变量2
      • ignore_case=True
        • 表示忽略大小写
    • ${变量} Should Contain item1 item2 断言失败消息

ignore_case=True

      • 断言item1中是否包含item2
        • 通过时返回None,否则无返回值
        • 失败时,输出断言失败消息与失败原因
    • ${变量} Should Match Regexp 变量1 (?i)left正则表达式模式right 断言失败消息
      • 搜索变量1中匹配正则表达式的字符串
        • (?i)表示忽略大小写
        • left表示模式左边的字符串,right表示模式右边的字符串
        • 模式一般需要使用( )包含,一对( )是一个模式
      • 若匹配,则返回列表,第一个元素是原数据,后面的元素是匹配到的数据
        • 若不匹配,则输出断言失败消息+失败原因
      • ${变量} Should Match Regexp 变量1 \\d{6}
        • 搜索变量1中一开始的连续6个数字字符串

8、参数化

8.1列表参数化

    • 获得省或直辖市的名称
      • ws.webxml.com.cn/WebServices/WeatherWS.asmx/getRegionProvince
    • 断言失败继续运行
      • ${断言的结果变量} run keyword and continue on failure 断言

8.2文件数据参数化

    • 创建模块,至少定义函数,建议使用参数和返回值。
    • 将py文件(即自定义库)拷贝到Python\Lib\site-packages下,在RF用导入Library的方式导入。
    • 在用例中直接使用返回值、函数名、参数。
    • 使用循环处理行、列数据。

9、命令行运行

    • 查找\Python\Scripts中是否有pybot.bat,如果没有,自行创建,输入:

@Echo off

python -m robot.run %*

    • 运行测试
      • pybot  test.robot
        • 运行指定文件
      • pybot *.robot
        • 运行当前目录下以.robot为后缀名的测试文件
      • pybot test_a
        • 运行当前test_a目录下的所有用例
      • pybot ./
        • 运行当前目录下的所有的测试文件

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值