1. 前言

本篇是第一系列(Http接口自动化)的第五课程,如果对系列课程大纲不清楚的,可以查看《RobotFramework系列免费课程-开课了~》

前面我们介绍了,在真正实施前,需先定好多人协作过程中约定的接口用例规范,以及开始时,接口项目如何结构化分层,那么今天,我们来聊聊,用RobotFramework如何编写接口用例及如何对用例断言。

2. 开始前的准备

在写接口用例前,除了前面几节介绍的接口框架环境准备、接口用例规范的制定、项目分层这几点外,在真正开始写用 例之前,还有一环节是必须的,就是拿到接口的开发文档,可以理解就是一份接口的契约文件。

接口开发文档获取一般来讲,直接找对应接口开发的人员拿就可以了,这种方式虽然最简单直接,但在这里笔者并不推荐,正确提倡的做法,在每次接口提测时,需要由开发人员提供提测单且在提测单中,注明详细的提测要求,注意事项以及接口文档地址等,整个流程可以用gitlab完美串连起来,既想要的内容有了,而且流程也规范了。

注:以前笔者的公司接口开发文档以md格式编写,在gitlab上以版本管理的形式进行集中式管理。

3. 接口编写套路

3. 1、分析接口文档

本文用上述截图的接口为例:【获取热门作品列表 get /mfx/play/cdn/opus/getHeatValueOpusList】

由上图可知,该接口如下信息:

接口作用:获取某app首页热门作品列表

接口类型:Get

接口入参:2个,page(第几页)、pageSize(一页有多少个)

接口响应:为Json串,详细自行查看。

3.2、设计接口用例

按照之前介绍的《RobotFrameWork接口设计规范》中可知,常规接口在设计用例时,至少需包括三类,常规值用例、异常值用例、接口数据校验用例:

3.3 、写接口用例

数据准备(接口入参)-> 构造请求-> 响应断言

 

3.3. 1 准备数据(接口入参)

 

看过我之前的文章就知道,这里说的准备数据,对应的就是RobotFramework中的测试用例层(之前强调过在RF中,用例中尽量只存放接口入参数据)

3.3.2  构造请求

 

构造请求应该来说是整个接口用例流程中的最难的点,因为公司为了防止第三方随意刷接口或者破坏接口,都会根据产品后端特性,对请求设置各类加密方法,一般来讲,需要知道产品私钥key及加密流程和方法。

3.3.3  响应断言

 

拿到请求返回的响应体后,根据所需,校验期望的数据是否存在响应体中,通常最常见的就是校验预期的code值是否包括在响应返回数据中。

4. 接口用例如何断言

接口用例设计好之后,如何能让用例能发挥价值主要取决于断言如何来写,接口自动化用例的最终目的是通过接入研发体系的CI持续集成中,通过接口每日巡检尽早地发现因接口变更导致的异常 。那么如何发现异常 ,简单来说,就是期望接口返回的数据与接口实际返回的数据不一致。而这个过程就需要通过合理地在接口用例中使用断言来实现。

那么有人会问,接口断言我加了啊?不就是校验接口返回的code值是否是成功的吗?我相信至少有一部分人在设计接口用例断言时,只有且仅有校验接口的返回code值,虽然code值的断言是需要的,但不能仅仅只通过这一种断言方式来做为接口是否有异常的判断依据。

那么接口断言,需要有几种呢,从上面接口用例设计的截图中大家也能看出,一般来说至少需要有三种:正常code断言(正常返回的code值)、异常断言(异常的code值和异常的msg错误信息)、接口关键数据断言(校验具体返回的数据字段值)

4.1 正常code断言

 

4.2 异常code、msg断言

 

 

4.3 接口数据断言

 

 

小技巧:

1、接口数据断言时,可以不需要用具体的值进行比较,比如想判断歌曲id返回,不需要拿具体的sondId的值与xxx数值进行比较,因为对于这类返回的字段来讲,歌曲id都会要求是大于0的数值,所以断言时比较返回的数据是否是大于0即可,对于返回的字符串字段而言,比如userLogo用户头像字段,比如返回的userLogo用户头像数据不为空即可。当然如果有些特殊场景,需要用具体的数值比较,可另当别论。

2、字段数据校验常规的做法是把所需的字段的值先取回来,再对每个字段的值加断言比较,那么如果返回的响应体,字段比较多,比如有几十个返回的字段,那这个工作也是非常耗时的。这里推荐的做法是可以写一个公共数据递归校验方法,比如:

5. 教程目录大纲(已更新)

RobotFrameWork系列免费课程大纲介绍

RobotFrameWork环境搭建(基于HTTP协议的接口自动化)

RobotFrameWork接口设计规范

RobotFramwWork接口项目分层及通用控制方式

6. 下节预告

《RobotFrameWork测试数据管理》

详见可:阅读原文

如想更深入学习RF接口设计内容或有疑问可给笔者留言

或加笔者微信号: jinjian_762357658

RobotFrameWork编写接口测试及如何断言的更多相关文章

  1. 如何使用RobotFramework编写好的测试用例

    如何使用Robot Framework编写优秀的测试用例 概述 命名 测试套件命名 测试用例命名 关键字命名 setup和teardown的命名 文档 测试套件文档 测试用例文档 用户关键字文档 测试 ...

  2. 使用robotframework做接口测试之一——准备工作

    最近发现做接口测试的朋友越来越多了,打算写一个系列的rf+requests做接口测试(主要是Http接口)的文档,可以帮助新入门的同学对接口测试有个大概的了解,同时也是敦促自己做总结的一种手段.希望经 ...

  3. 使用robotframework做接口测试5——一个用例中调多个接口

    凡是涉及一点点有接口关联的,都可能下一个接口需要上一个接口的某个返回值作为入参,最直接的例子,就是登录依赖.用接口做业务性的测试,也绝对离不开接口依赖的,业务都是一系列接口串联的结果,有时候一个接口操 ...

  4. Jmeter接口测试使用beanshell断言json返回

    一般情况下响应断言就能解决很多问题,但是返回复杂的json时就需要用到beanshell断言. 举个例子 免费的接口API www.sojson.com/api/beian/sojson.com ho ...

  5. Django——test文件编写接口测试

    用自己建立的小网页来做接口测试,在Django的tests.py写下如下 test_login_page为用get方式登录login路径,根据回复验证是否查看到页面 test_login_action ...

  6. 使用robotframework做接口测试4——搞定接口签名及密码加密

    接口签名是我做接口测试撞到的第一块石头,刚到新公司,本来想默默憋出来一个大招,然后碰到了签名接口,直接给跪了.于是只好找开发哥哥帮忙,把签名算法的java文件拿到,一行行对着用python实现了一遍. ...

  7. 使用robotframework做接口测试三——保持登录状态

    调用登录接口登录了,其他的接口怎么保持登录状态呢?  首先来看一看,web端或者说客户端是怎么样用cookie/token等保持登录状态的.一般来说,cookie都会在登录接口由服务端返回,而且会是在 ...

  8. 使用robotframework做接口测试二——处理响应数据

    初使用RequestsLibrary做接口测试时,你会不会感到困惑,为什么会有${resp.content}, ${resp.status_code}这样的写法,这个status_code什么鬼,f5 ...

  9. robotframework编写用例

    ** Test Cases *** Test With Settings [Documentation] Another dummy test # 用于指定测试用例文档 [Tags] dummy ow ...

随机推荐

  1. FastAdmin 基本知识流程一栏

      fastadmin进阶 安装:出现登陆页无法显示:可能是php的gd2扩展未开启 FastAdmin 在 Nginx 中的配置 用的是AdminLTE后台模板require.js.less.Bow ...

  2. MongDB-基础

    首先吐槽一下,MongDB用到了JS的引擎,只要涉及到了JS,语法就变得又臭又长,真是无语 还有,MongDB的安装真是麻烦,我用的是win10环境,怎么装都报服务错误,redis一装就可以用,希望m ...

  3. SQL-内连接、外连接(左、右)、交叉连接

    本文测试基于以下两个表,student(左) \ teacher(右),使用数据库MariaDB,图形化界面HeidiSQL. 连接查询的概念:根据两个表或多个表的列之间的关系,从这些表中查询数据,即 ...

  4. 在notepad++中修改换行符

    在notepad++中编辑时,将按tab键设置为插入4个空格而不是tab字符

  5. RabbitMQ路由模式

    生产者 import com.rabbitmq.client.Channel; import com.rabbitmq.client.Connection; import utils.Connecti ...

  6. java项目中Excel文件的导入导出

    package poi.excel; import java.io.IOException; import java.io.InputStream; import java.io.OutputStre ...

  7. 如何避免Android程序的ANR?

    In Android, the system guards against applications that are insufficiently responsive for a period o ...

  8. [NOIp2018提高组]赛道修建

    [NOIp2018提高组]赛道修建 题目大意: 给你一棵\(n(n\le5\times10^4)\)个结点的树,从中找出\(m\)个没有公共边的路径,使得第\(m\)长的路径最长.问第\(m\)长的路 ...

  9. mongoose 根据_id更新数据

    let photoId = mongoose.Types.ObjectId(`${virtual.productId[0]}`) await model.photo.findByIdAndUpdate ...

  10. React Native小白入门学习路径——二

    万万没想到,RN组仅剩的一个学长也走了,刚进实验室没几天就被告知这样的事情,一下子还真的有点接受不了,现在RN组就成了为一个没有前辈带的组了,以后学习就更得靠自己了吧.唉,看来得再努力一点了. 这一周 ...