zoukankan      html  css  js  c++  java
  • 使用 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 

  • 相关阅读:
    抽奖代码
    org.hibernate.AssertionFailure: null id in com.you.model.User entry (don't flush the Session after a
    Cannot add or update a child row: a foreign key constraint fails
    SyntaxError:identifier starts immediately after numeric literal
    too much recursion
    微信处理红包
    minerd
    minerd
    kill常用
    阿里云centos 6安装Nginx+PHP+MySQL
  • 原文地址:https://www.cnblogs.com/ychun/p/14320781.html
Copyright © 2011-2022 走看看