Robot Framework接口自动化框架

  • Post author:
  • Post category:其他





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 ./

        • 运行当前目录下的所有的测试文件



版权声明:本文为qq_39064149原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。