使用 RobotFramework 测试接口-----ride使用 (注释、输出日志、运行测试、设置报告存储位置、控制台汉字乱码解决、创建变量与列表和字典、if语句、for循环。get请求、post请求、处理响应数据、断言。命令行运行)

1 、什么是 Robot Framework

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

2、 Robot Framework 的特点

  • Robot Framework 框架本身并不提供任何类型的测试,它只提供作为自动化测试框架 的基本功能,如用例的批量执行、测试报告的生成等。
  • 使用简单 ,可以像编写程序一样编写 Robot Framework 脚本。 
  • 易于使用,采用表格式语法,统一测试用例格式

 3、Robot Framework 框架组成

 4、导入包

 

5、注释

 6、输出日志

 

7、运行测试

--》设置运行的测试

 

--》Run 选项卡→Start(或者快捷键 F8)

8、设置报告存储位置

 

 

9、控制台汉字乱码解决

方式一:修 改 pythonlibsite-packages obotidecontrib estrunner estrunner.py 中 的 latin1 为 mbcs;重启 ride

mbcs(Multi-Bytes Character Set):多字节字符集,根据系统自动显示为本国语言的字符,在中文系统下表示 GB2312

方试二:

修改pythonLibsite-packages obotidecontrib estrunner estrunnerplugin.py的SYSTEM为OUTPUT

10、创建变量、列表和字典

 

 --》调节表格宽度

 

 4、if语句

 

5、for循环

--》简单for与in range

 --—》自定义关键字

 

 --》exit for loop

 

--》continue for loop

 提前进入下一轮循环

 

 上述变量与循环的代码

*** Test Cases ***
test01
    Log    hello
    ${uname}    set variable    zs    #存入变量uname
    ${age}    set variable    33    #存入变量age
    ${uname_type}    evaluate    type($uname)    #查看变量uname类型
    ${age_type}    evaluate    type($age)
    ${age_to_int}    evaluate    int($age)+20    #转str为int
    ${age_to_int_type}    evaluate    type($age_to_int)    #查看变量age_to_int类型
    ${ulist}    create list    zs    ls    ww
    Log    ${ulist}    #查看uist
    @{agelist}    create list    19    20    33
    Log    ${agelist}
    Comment    Log    @{agelist}    #写成@{agelist}会报错
    ${student}    create dictionary    stu_name=zs    stu_age=12    stu_class=chinese    #字典
    Log    ${student}

test02
    Log    if    #如果num<=0,就让获取num的负数,再赋值给num
    ${num}    set variable    -56
    ${num}    run keyword if    ${num}<=0    evaluate    -int($num)
    Log    ${num}
    Log    if_else
    ${age}    set variable    18
    ${msg}    run keyword if    ${age}<18    set variable    juveniles
    ...    ELSE    set variable    adult
    Log    ${msg}
    log    if_else if_else
    ${score}    set variable    22
    ${level}    run keyword if    ${score}>=90    set variable    A
    ...    ELSE IF    80<=${score}<90    set variable    B
    ...    ELSE IF    70<=${score}<80    set variable    C
    ...    ELSE    set variable    D
    Log    ${level}

testFor
    [Tags]    run
    Log    for_
    FOR    ${num}    IN    1    2    3
        log    ${num}
    END
    Log    for_in_range
    FOR    ${target}    IN RANGE    4    8
        log    ${target}
    END

testForj
    FOR    ${i}    IN RANGE    1    5
        forj    ${i}
    END

testExit
    @{ulist}    create list    2    5    6    8
    FOR    ${i}    IN    @{ulist}
        log    ${i}
        run keyword if    ${i}==5    exit for loop
    END

testNext
    FOR    ${num}    IN RANGE    11
        run keyword if    ${num}%2==0    continue for loop
        log    ${num}
    END

*** Keywords ***
forj
    [Arguments]    ${i}
    FOR    ${j}    IN RANGE    1    ${i}+1
        ${result}    evaluate    ${i}*${j}
        log    ${i}*${j}=${result}
        log    ${j}
    END
View Code

6、get请求

 

7、post请求

 

 8、处理响应数据

 

 json格式

 

获取json中的项

 

获得响应状态码

  ${响应结果.status_code}

获得响应 cookies

获得响应头

 

发送 cookies 数据

${响应结果} get request 会话名 /路径?参数=值&cookie 参数名=值

正则表达式查找数据

变量转存

 1  create session    webindex    http://192.168.109.205:1080/webtours
 2     ${res}    get request    webindex    /welcome.pl?signOff=true
 3     log    ${res.content}    #获取页面内容
 4     log    ${res.cookies}    #获取页面的cookies
 5     ${cookie}    get from dictionary    ${res.cookies}    MSO    #将cookies存到变量中
 6     log    ${cookie}    #输出cookie值
 7     ${res}    get request    webindex    /nav.pl?in=home&MSO=${cookie}    #发送 cookies 数据
 8     log    ${res.content}
 9     ${session}    get regexp matches    ${res.text}    userSession value=(.*)>    1    #获取useSession
10     log    ${session}[0]    #获取列表中的第一个
11     ${session}    convert to string    ${session}[0]    #将{session}[0]转为字符串
12     ${header}    create dictionary    Content-Type=application/x-www-form-urlencoded    #请求头
13     ${param}    create dictionary    username=zs1    password=1    userSession=${session}    #登录参数
14     ${res}    post request    webindex    /login.pl    data=${param}    headers=${header}    #发送登录请求
15     log    ${res.text}    #获取结果

 断言

-->equal

 

 

 --》contain

 

-->Should Match Regexp

${变量} Should Match Regexp 变量 1 (?i)left 正 则 表 达 式 模 式 right 断言失败消息

 

参数化

 1)使用列表参数化

 

2)使用文件数据参数化

--》创建模块,至少定义函数,建议使用参数和返回值。

1 def readFile(filename):
2     flist=[]
3     file=open(filename,'r')
4     for row in file :
5         flist.append(row.split())
6     return flist

--》将 py 文件(即自定义库)加载到ride ,在 RF 用导入 Library 的方式导入。

--》在用例中直接使用返回值、函数名、参数。使用循环处理行、列数据。

 

 --》实现读取文件进行登录

 完整代码

 1 testFile
 2     [Tags]    run
 3     ${filename}    set variable    E:/pythonDocument/robotTest/users.txt    #users.txt文件路径
 4     @{users}    readFile    ${filename}
 5     Comment    log    ${res}
 6     FOR    ${row}    IN    @{users}    #循环输出每行
 7         log    ${row}[0]	${row}[1]
 8         create session    webindex    http://192.168.109.201:1080/webtours
 9         ${res}    get request    webindex    /welcome.pl?signOff=true
10         Comment    log    ${res.content}    #获取页面内容
11         Comment    log    ${res.cookies}    #获取页面的cookies
12         ${cookie}    get from dictionary    ${res.cookies}    MSO    #将cookies存到变量中
13         Comment    Comment    log    ${cookie}    #输出cookie值
14         ${res}    get request    webindex    /nav.pl?in=home&MSO=${cookie}    #发送 cookies 数据
15         Comment    log    ${res.content}
16         ${session}    get regexp matches    ${res.text}    userSession value=(.*)>    1    #获取useSession
17         Comment    log    ${session}[0]    #获取列表中的第一个
18         ${session}    convert to string    ${session}[0]    #将{session}[0]转为字符串
19         ${header}    create dictionary    Content-Type=application/x-www-form-urlencoded    #请求头
20         ${param}    create dictionary    username=${row}[0]    password=${row}[1]    userSession=${session}    #登录参数
21         ${res}    post request    webindex    /login.pl    data=${param}    headers=${header}    #发送登录请求
22         Comment    log    ${res.text}    #获取结果
23         ${assert}    run keyword and continue on failure    Should Contain    ${res.text}    User password was correct - added a cookie with the user's default    -------login fail------
24         Comment    log    ${assert}
25     END
View Code

命令行运行

 

 --》

@Echo off
python -m robot.run %*

--》进入测试文件所在文件夹,运行某个测试用例

 --》运行当前文件夹下的所有用例

pybot.bat .

--> 运行当前目录下以.robot 为后缀名的测试文件

pybot   *.robot 

-->运行当前 test_a

pybot  test_a 

原文地址:https://www.cnblogs.com/ychun/p/14320781.html