RobotFrameWork编写接口测试及如何断言
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环境搭建(基于HTTP协议的接口自动化)
6. 下节预告
《RobotFrameWork测试数据管理》
详见可:阅读原文
如想更深入学习RF接口设计内容或有疑问可给笔者留言
或加笔者微信号: jinjian_762357658
RobotFrameWork编写接口测试及如何断言的更多相关文章
- 如何使用RobotFramework编写好的测试用例
如何使用Robot Framework编写优秀的测试用例 概述 命名 测试套件命名 测试用例命名 关键字命名 setup和teardown的命名 文档 测试套件文档 测试用例文档 用户关键字文档 测试 ...
- 使用robotframework做接口测试之一——准备工作
最近发现做接口测试的朋友越来越多了,打算写一个系列的rf+requests做接口测试(主要是Http接口)的文档,可以帮助新入门的同学对接口测试有个大概的了解,同时也是敦促自己做总结的一种手段.希望经 ...
- 使用robotframework做接口测试5——一个用例中调多个接口
凡是涉及一点点有接口关联的,都可能下一个接口需要上一个接口的某个返回值作为入参,最直接的例子,就是登录依赖.用接口做业务性的测试,也绝对离不开接口依赖的,业务都是一系列接口串联的结果,有时候一个接口操 ...
- Jmeter接口测试使用beanshell断言json返回
一般情况下响应断言就能解决很多问题,但是返回复杂的json时就需要用到beanshell断言. 举个例子 免费的接口API www.sojson.com/api/beian/sojson.com ho ...
- Django——test文件编写接口测试
用自己建立的小网页来做接口测试,在Django的tests.py写下如下 test_login_page为用get方式登录login路径,根据回复验证是否查看到页面 test_login_action ...
- 使用robotframework做接口测试4——搞定接口签名及密码加密
接口签名是我做接口测试撞到的第一块石头,刚到新公司,本来想默默憋出来一个大招,然后碰到了签名接口,直接给跪了.于是只好找开发哥哥帮忙,把签名算法的java文件拿到,一行行对着用python实现了一遍. ...
- 使用robotframework做接口测试三——保持登录状态
调用登录接口登录了,其他的接口怎么保持登录状态呢? 首先来看一看,web端或者说客户端是怎么样用cookie/token等保持登录状态的.一般来说,cookie都会在登录接口由服务端返回,而且会是在 ...
- 使用robotframework做接口测试二——处理响应数据
初使用RequestsLibrary做接口测试时,你会不会感到困惑,为什么会有${resp.content}, ${resp.status_code}这样的写法,这个status_code什么鬼,f5 ...
- robotframework编写用例
** Test Cases *** Test With Settings [Documentation] Another dummy test # 用于指定测试用例文档 [Tags] dummy ow ...
随机推荐
- python数据结构之希尔排序
def shell_sort(alist): n=len(alist) gap= int(n / 2) #步长 while gap>0: for i in range(gap,n): j=i w ...
- lvs负载均衡概述
- 使用SpringSecurity
前几天写了一个SpringBoot对拦截器的使用,在实际项目中,对一些情况需要做一些安全验证,比如在没有登录的情况下访问特定的页面应该解释的拦截处理.这一篇介绍使用SpringSecurity来做简单 ...
- input输入框限制20个字符,十个汉字
英文和数字为一个字符,汉字为两个字符 在 Web 开发中,经常要对表单元素的输入进行限制,比如说不允许输入特殊字符,标点.通常我们会监听 input 事件: inputElement.addEvent ...
- 码云,git使用 教程
码云,git使用 教程 code cloud, git use tutorials 作者:韩梦飞沙 Author:han_meng_fei_sha 邮箱:313134555@qq.com E-mail ...
- 实现winfrom进度条及进度信息提示
1.方法一:使用线程 功能描述:在用c#做WinFrom开发的过程中.我们经常需要用到进度条(ProgressBar)用于显示进度信息.这时候我们可能就需要用到多线程,如果不采用多线程控制进度条,窗口 ...
- [R] R dataframe 中对列使用sort或者order的注意
存在这样的需求: 针对每列的值, 对列进行排序. 这样处理过数据后, 在excel中对数据作图时, 使数据呈现有序. R中sort数据的时候, 如果数据中存在字符串, R会将数据转化为characte ...
- Book Lending Registration
<!DOCTYPE HTML> <HTML lang="|en"> <head> <meta charset="UTF-8&qu ...
- MySql中drop、truncate、delete的区别
1.drop:能对table和view 用法: drop table [is exists] 表1,表2,表3....: ①drop是DDL中删除表的操作,会删除表结构和所有数据,并释放空间. ②并 ...
- vim技巧5 常用操作
vim:set number:set nonumbern 移动命令键8l 向右移动八个字符3j 向下移动三行3G:移动到第三行行首10$:下移到10行,并定位到行尾:n1,n2s/word1/word ...