• Robot Framework http接口测试


    https://blog.csdn.net/yin20100522/article/details/107415398

    https://www.jianshu.com/p/c3a9d20db4e5

    变量标识符 { }

    Robot Framework的变量分为标量, 列表和字典, 分别使用语法格式 ${SCALAR}@{LIST} 和 &{DICT} 来定义。

     

    标量(Scalar)变量是指用${}标识的变量。
    用例脚本中关键字之间使用4个空格进行间隔。

    ${name}    Set Variable    robotframework

     ]

    嵌套字典

     

    典变量用&{}标识,使用Create Dictionary来创建一个字典

    &{dict3}    Create Dictionary    name=李四    age=30

    先要安装requests,再安装requestsLibrary

    使用空格分隔时, 空格的数量是不定的, 最少需要2个, 可以尽量将数据对齐的更好看点. 当使用文本编辑器时, 这点相对TSV格式来说是一大优势, 因为TSV的对齐没法控制.

    关键字和参数之间推荐使用4个空格隔开.

    robot变量类型;
    值是通过${数值}来表示的,其中的数值可以是整形也可以是浮点型; 元组的表示${数值1,数值2,...}; 列表的定义@{列表名称};

    数字变量
    如下面例子中所示,变量语法能用来创建 整型 和 浮点型 数据。当一个关键字需要 真实的数字而非对应的数字字符串作为参数时,这种创建数字变量的方法是很有用的。

    *** Test Cases ***
    Example 1A
    Connect example.com 80 # Connect 获得两个字符串作为参数Example 1B
    Connect example.com ${80} # Connect 获得一个字符串和一个整数作为参数Example 2
    Do X ${3.14} ${‐1e‐4} # Do X 获得浮点数 3.14 和 ‐0.0001 作为参数
    ————————————————
    原文链接:https://blog.csdn.net/hxiongge/article/details/109240899

    发送和接受json:

    *** Test Cases ***
    testcaseJson 
        ${headers}    Create Dictionary    Content-Type=application/json;charset=UTF-8
        Create Session    httpbin    ${HOST}
        &{body}    Create Dictionary    aa=3  
        ${resp}    Post On Session   httpbin    /path   headers=${headers}    json=${body} 注意这里是json不是data.
        log    ${resp}
        ${json}  Set Variable  ${resp.json()}
        log    ${json}
        Log to console    ${json}

    可以用requests请求,也可以用Requestlibrary请求(前提一定要安装requests)

     

    http请求的7种方法

    get post delete head options patch put

    RequestsLibrary关键字

    关键字备注&参数
    Create Session 创建一个HTTP会话:alias, url, headers={}, cookies=None, auth=None, timeout=None, proxies=None, verify=False。
    url:即服务器的url。
    alias:使用Robot Framework的别名表示当前会话。
    header:使用默认的headers字段。
    auth:NTLM鉴权需用username&password格式。
    timeout:会话超时时长。
    proxies:代理服务器的url。
    verify:如果需要证书请求则置为true
    Delete All Sessions 删除全部的会话
    Delete Request alias, uri, data=(), headers=None, allow_redirects=None
    Get Request 根据提供的别名查找会话并在会话中发送GET请求
    alias, uri, headers=None, params={}, allow_redirects=None
    Post Request 根据提供的别名查找会话并在会话中发送POST请求
    alias, uri, data={}, headers=None, files={}, allow_redirects=None
    To Json 将文本转换成json对象 content pretty_print

    例子

     
    image.png


    作者:heyzql
    链接:https://www.jianshu.com/p/ea94fea6f37c
    来源:简书
    著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
    pip install requests
    pip install robotframework-requests



    Keyword 'RequestsLibrary.Get Request' is deprecated. Please use `GET On Session` instead.

    关键字介绍:
    1)Create Session:创建一个与服务器的会话
    参数说明:
    alias:别名。作为当前会话的标识符。
    url:服务器地址。基本地址,而不是接口的地址。
    2)Post Request:发送一个post请求,并返回一个响应对象。
    参数说明:
    alias:选择一个会话的别名。来自于 Create Session 关键字。
    url:接口地址。不包含服务器地址。
    data:post请求体数据。
    返回值:response 对象(requests 库的 response 对象)
    注意:post请求一定要添加消息头,否则会发送请求失败。
    3)Get Request:发送一个get请求,并返回一个响应对象。
    参数说明:
    alias:选择一个会话的别名。来自于 Create Session 关键字。
    url:接口地址。不包含服务器地址。
    data:post请求体数据。
    返回值:response 对象(requests 库的 response 对象)

    Response 对象,就是 python request 中的 Response 类。该类有什么方法这里就可以使用什么方法。
    stauts_code:当前 http 通信的状态码
    text:响应数据的响应数据部分 - 字符串
    json():转换成 json 对象。
    headers:消息头对象

     
     
     
    *** Settings ***
    Library    RequestsLibrary
    Suite Setup    Create Session    register
    http://xxx.xx.xx.xxx:8080
    
    *** Varibales ***
    &{data1}    mobilephone=13744441100    pwd=1234567890
    &{data2}    mobilephone=13744441100    pwd=${EMPTY}
    ${url}    XXXxxx/xxxxxx/xxxxxx/register
    
    *** Test Cases ***
    注册-get
        &{req_data}    Create Dictionary    mobilephone=13744441100  pwd=1234567890
        &{resp}    Get Request    register    ${url}  params=&{req_data}
        Log    ${resp.status_code}
        Log    ${resp.text}
        Log    ${resp.json()}
    
    注册-post
        &{req_data}    Create Dictionary    mobilephone=13744441100  pwd=1234567890
        &{header}    Create Dictionary    Content-Type=application/x-www-form-urlencoded
        &{resp}    Post Request    register    ${url}    &{req_data}    headers=${header}
        Log    ${resp.status_code}
        Log    ${resp.text}
        Log    ${resp.json()}
     

    变量作用域

    通常情况下,每个变量默认都是局部变量,但如果想让这个变量在各个用例中都可以使用,就需要赋值在Variables里面

    变量赋值位置作用域
    测试用例 在这个测试用例内部
    Variables 测试用例集(该文件所有用例均可使用)


    *** Variables ***
    ${hh}    121  
    @{list}    12    13    43    2 
    *** Test Cases ***
    用例4-获取列表第二位置的值
        Log    ${list[1]}
    用例5-RF变量
       Log    ${hh}   
       Log    ${list[2]} 
    外部变量.py文件
    
    data1 = "hello,RF"
    
    LIST__strings = ["one", "two", "three", "four", "five"]
    
    DICT__person_info = {"name":"xiao", "sex":"", "hobby":"sleep"}
    
    测试用例集.robot文件
    
    *** Settings ***
    Variables    外部变量.py
    *** Test Cases ***
    用例6-从变量文件中读取变量
        Log    ${data1}
        Log    ${strings[0]}      
        Log    ${person_info.sex}
    ————————————————
    版权声明:本文为CSDN博主「萌萌哒小宝宝」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
    原文链接:https://blog.csdn.net/qq_38889350/article/details/109770071

     资源文件 这一概念了:

    资源文件 其实就是RF层面的库文件(不能包含测试用例表),里面的内容为共享的变量和关键字

    导入资源文件

    新建一个 common.robot 文件
    common.robot

    *** Settings ***
    Library     SeleniumLibrary
    
    *** Keywords ***
    登录网易邮箱
        # 打开chrome浏览器访问163邮箱
        open browser    https://mail.163.com/       chrome
        sleep    5
        maximize browser window
        # 切换到iframe
        select frame    xpath=//iframe[contains(@id,'iframe')]
        # 用户名输入框中输入 用户名
        sleep    2
        input text    xpath=//*[@name="email"]     你的用户名
        sleep    2
        # 密码输入框中输入 密码
        input text    xpath=//*[@name="password"]   你的密码
        sleep    2
        # 点击登录按钮
        click element    xpath=//*[@id="dologin"]
        sleep    10
    
    关闭浏览器
        close browser
            

    通过在测试用例文件的Settings表中Resource common.robot导入资源文件,即可使用 资源文件 里共享的变量和关键字的内容

    *** Settings ***
    Library     SeleniumLibrary
    Resource    common.robot
    
    *** Test Cases ***
    网易邮箱2
        登录网易邮箱
        log to console    这里是用例主体部分
        关闭浏览器

    log to console 可以直接控制台打印

    在大多数时候,登录会变成测试套件的用例前置的内容,关闭浏览器是用例后置的内容,所以,通常在测试套件中,会这样来写

    test.robot

    *** Settings ***
    Library SeleniumLibrary
    Resource common.robot
    Suite Setup 登录网易邮箱
    Suite Teardown 关闭浏览器

    *** Test Cases ***
    用例1
    log to console 这里是用例主体部分

    用例2
    log to console 这里是用例主体部分

    使用 套件级别的 Suite Setup,将登录网易邮箱关键字作为前置内容,将关闭浏览器关键字作为后置内容,执行用例1和用例2前就已执行登录操作,用例1和用例2执行结束,关闭浏览器

    资源文件的作用是对用户关键字进行管理,将重复的内容提取出来,简化测试用例中的操作步骤


    原文链接:https://blog.csdn.net/qq_44614026/article/details/115450095

    首先需要声明使用Library:
    
    *** Settings ***
    Library    RequestsLibrary
    接下来定义访问的地址:
    
    *** Variables ***
    ${HOST}    http://localhost/myapi
    然后就可以写用例了:
    
    *** Test Cases ***
    API Test Example
        Create Session    my_session    ${HOST}
        ${headers}=    Create Dictionary    Accept=application/json    Content-Type=application/json    charset=utf-8
    
        # POST request with params
        ${data}=    Create dictionary    field1=value1    field2=value2
        ${response}=    Post Request    my_session    my-endpoint    headers=${headers}    data=${data}
    
        Should be equal as strings    ${response.status_code}    200
        Log    ${response} 
    这里使用的是POST方法,向api发送的键值对定义在data中,这里使用了创建键值对字典的关键字Create Dictionary。返回的对象定义在变量${response}中,使用Post Request可以执行访问。
    
    数据库相关测试
    8.Should Be Equal As Integers与Should not Be Equal As Integers

    转化成字符串类型在对比


    原文链接:https://blog.csdn.net/saber_sss/article/details/110558840

    https://blog.csdn.net/be5yond/article/details/54754954


    简单测试脚本

    *** Settings ***
    Documentation     Example using the space separated format.
    Library           OperatingSystem
    
    *** Variables ***
    ${MESSAGE}        Hello, world!
    
    *** Test Cases ***
    My Test
        [Documentation]    Example test.
        Log    ${MESSAGE}
        My Keyword    ${CURDIR}
    
    Another Test
        Should Be Equal    ${MESSAGE}    Hello, world!
    
    *** Keywords ***
    My Keyword
        [Arguments]    ${path}
        Directory Should Exist    ${path}
     

    自定义关键字

    使用Robotframework对Api接口进行测试,每次测试都需要先登录,为了减少重复的登录脚本,使用Robotframework自定义关键字简化登录过程的脚本。代码如下:

    *** Keywords ***
    登录到平台
        [Arguments]    ${host}    ${username}    ${password}
        Create Session    my_session    ${host}
        ${data}=    Create dictionary    UserName=${username}    Password=${password}
        ${response}=    POST On Session    my_session    url=/api/Account/Login    json=${data}
        Log    ${response}
        [Return]    my_session
    

    为了方便使用,我们使用中文作为关键字的名称。然后定义三个输入变量,${host}是需要登录的网址,${username}和${password}是用户名和密码。使用POST On Session实现登录,登录后返回登录过程创建的会话。这个关键字可以在测试用例中使用,比如:

    *** Test Cases ***
    TestLogin
        ${mysession}=    登录到平台    host=${HOST}    username=saleuser1    password=1
        ${datalist}=    Create dictionary    WorkFlow_Name=LeaveApply1
        ${responselist}=    POST On Session    ${mysession}    url=${GetActivateListUrl}    json=${datalist}
        Log    ${responselist}
    

    我们可以将自定义的关键字保存在资源文件中,便于在多个测试用例中共用。资源文件的结构与测试文件基本相同,只是没有测试用例,变量和自定义关键字部分完全相同。在测试文件的设置部分引用资源文件,比如:

    *** Settings ***
    Library           RequestsLibrary
    Resource          ../../Resources/flowresources.robot
    

    资源文件的位置相对于当前路径,路径中也可以包含变量,比如${RESOURCES}/common.tsv。
    如果多个资源文件中包含相同的自定义关键字,在使用这些关键字时,需要使用资源文件名作为前缀。如果多个资源文件中包含相同的变量,那么先加载的变量起作用。

    很多情况下,我们需要自定义关键字可以接收多个参数,且参数的个数不确定,这种情况下,可以将参数声明为列表,使用@修饰符,示例代码如下:

    MultiArguments
        [Arguments]    ${par1}    @{dic}
        Log    ${par1}
        FOR    ${v}    IN    @{dic}
            Log    ${v}
        END
    

    在上面的例子中${par1}是固定参数,后面的@{dic}是可变参数列表,在自定义关键字中采用循环处理列表中的参数。调用的示例如下:

    MultiArgumetns   para1  u1  u2  u3  u4
    

    为Robotframework开发自定义库

    Robotframework基于Python开发,我们使用Python开发自定义库,对Robotframework提供扩展。开发和使用都非常简单,由于python是解释语言,自定义库不需要编译部署等等步骤,使用任何文本编辑器都可以实现。这里通过实现一个简单的需求说明创建和使用过程。需求很简单,需要从一个字符串中获取flowid=后面的值。
    首先我们创建一个python文件,代码如下:

    def get_flow_id(url):
        idx = url.index('flowid=')+7
        le = len(url)
        flow_id = url[idx:le]
        return flow_id
    

    然后就可以在robot文件中引用这个库了,在Settings中增加:

    *** Settings ***
    Library           ../pylibs/getflowid.py
    

    这里库的位置相对于当前文件的位置。
    在测试用例或者关键字中就可以使用自定义库中定义的新关键字了,这里get_flow_id对应的新关键字是Get Flow Id,"_"符号被空格替换,并且后面的字符变为大写。下面是使用的示例:

    ${fid}    Get Flow Id    ${rurl}
    参考
    接:https://www.cnblogs.com/zhenl/p/15786035.html


  • 相关阅读:
    NOI 2019 网络同步赛 游记
    洛谷 P3695 CYaRon!语 题解 【模拟】【字符串】
    洛谷 P2482 loj #2885 [SDOI2010]猪国杀 题解【模拟】【贪心】【搜索】
    Spring MVC @ResponseBody返回中文字符串乱码问题
    Hibernate4中使用getCurrentSession报Could not obtain transaction-synchronized Session for current thread
    @Value取不到值引出的spring的2种配置文件applicationContext.xml和xxx-servlet.xml
    @RestController注解下返回到jsp视图页面
    Mysql引起的spring事务失效
    Eclipse中启动tomcat报错:A child container failed during start
    xshell不能输入中文,显示为??
  • 原文地址:https://www.cnblogs.com/youxin/p/16138688.html
Copyright © 2020-2023  润新知