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!---------------------------------------------------------------------------------------------------
原文地址:https://www.cnblogs.com/ww-xiaowei/p/10642929.html