• robotframework(6)使用用户关键字实现:业务逻辑、测试用例、断言的分离


    在 Robot Framework-用户关键字的使用方法(6) 讲到了用户关键字的使用,

    这篇文章是对它的补充,我们都知道在自动化测试用例中,实现业务逻辑和测试数据的分离,使得代码结构更清晰,方便后期维护。

    ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------

        

    该接口的功能是:认证用户登录后显示5个菜单(新增菜单‘我的学校’)

    接口测试用例:

    1、用户未登录时,只显示4个

    2、租户的认证用户登录,显示5个

    3、租户的非认证用户登录,显示4个

    4、非租户的认证用户登录,显示4个

    流程:传参不同用户身份信息--》组装post请求--》对返回数据进行提取,验证是否满足预期

    我们会发现,每个场景都有‘发送请求(传递参数一样,值不一样)’、提取目标数据并判断是否满足预期(只有2种预期结果),所以有必要将公共部分写成函数(在RF中是用户关键字),进行调用。

    • 第一步:梳理接口请求

    post请求需要传入参数(用户信息),并将响应数据返回(set suite variable 或return)

    接口请求
              [Arguments]          ${userId}                 
              [Documentation]          ${userID} 查询我的门户
              #第一步 创建session
              ${url}          Create Session          api          ${host}          headers=&{headers}
              #第二步 组装请求参数
              &{data}          Create Dictionary          userID=${userID} #注意赋值时,左边字符串不用加引号,字符串名字与接口文档中的参数名一致         
              #第三步 组装请求
              ${resp}          Post Request          api          ${mySchool}          data=${data}
              Should Be Equal As Strings          ${resp.status_code}          200          [error]接口调用失败
              log          ${resp.content}    
    #${result} To Json ${resp.content} 如果返回是json格式的话,需要这样处理一下
          #第四步 返回相应数据
          [Return] ${resp}
    • 第二步 设计不同的用例场景,调用接口请求,并接收return的响应数据,把响应数据进行处理
    *** Test Cases ***
    01_未登录,首页无我的学校icon
          #第一步 调用接口请求,接收响应结果 ${result} 接口请求 userId=
          #第二步 调用断言时,传入响应数据 无我的学校icon断言 ${result} 02_开通门户的认证用户登录,首页无我的学校icon Login Success 138………… ${result} 接口请求 ${userId} 开通门户的认证用户,有我的学校icon断言 ${result} 03_未开通门户的认证用户登录,首页无我的学校icon Login Success 183………… ${result} 接口请求 ${userId} 无我的学校icon断言 ${result}
    • 第三步 编写断言
    无我的学校icon断言
              [Arguments]          ${result}
              ${modulelist}          Get From Dictionary          ${result}          moduleList
              ${cateGorylist}          Set Variable          ${modulelist[3]['cateGorylist']}
              ${len}          Get Length          ${cateGorylist} #获取list长度
              Should Be Equal As Integers          ${len}          4
              Dictionary Should Not Contain Value          ${cateGorylist[2]}          我的学校
    
    开通门户的认证用户,有我的学校icon断言
              [Arguments]          ${result}
              ${modulelist}          Get From Dictionary          ${result}          moduleList
              ${cateGorylist}          Set Variable          ${modulelist[3]['cateGorylist']}
              ${len}          Get Length          ${cateGorylist}
              Should Be Equal As Integers          ${len}          5
              Dictionary Should Contain Value          ${cateGorylist[2]}          我的学校 #同时验证包含关键词 我的学校

    ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

     这是用户登录的公共函数

      

       这是提交post请求,并将响应结果return给下一个函数使用。

      

     这是测试用例,调用login登录后,post请求时,传入login设置的全局变量,断言时,传入post设置的suite variable变量。

    ======================================================================================================================================================================

    这期间遇到的问题:

    Q1:调用post请求,传参时,参数传不进去,在fiddler中,看到webfrom是空的

    A:post请求时,create session时,加上header即可。(截图中有提示需要传入header)

     

    Q2:post请求 函数化时,传参个数不确定时,应该怎么来写这个函数?

    出于这样的场景:未登录时,该接口只需要传入APP的version,登录后,才需要传入user信息。

    后来将不需要传入的参数置为空了,即参数个数仍固定。

    注意:传入参数为空时,userid=  ,等号前面的名字与post请求定义时的名字要一样,不然报404错误。

     Q3:函数的return使用,是否适用?

    A:适用,就可以不用set suite variable

      

     ==========================================================================================

    常用方法:
    ${len}                        Get Length                 ${modList}
    Should Be True         ${len}<=4

    Should Be Equal As Strings      ${resp.status_code}         200     [error]接口调用失败
    log            ${resp.content}
    ${result}     To Json     ${resp.content}     #如果返回是json文件的话,需要这样处理一下
    [Return]    ${resp}

    -----------------------------------------Have a good day!---------------------------------------------------------------------------------------------------
  • 相关阅读:
    二、魔法函数
    Metaclasses
    一、python中的一切皆对象
    三、鸭子类型
    SQL进行排序、分组、统计的10个新技巧
    输入地址栏可以编辑页面的js
    项目开发中常用JS表单取值方法
    [导入]通用的分页存储过程
    107个常用Javascript语句
    [导入]事务处理
  • 原文地址:https://www.cnblogs.com/ww-xiaowei/p/10642929.html
Copyright © 2020-2023  润新知