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 ...
随机推荐
- 爬虫3 requests基础2 代理 证书 重定向 响应时间
import requests # 代理 # proxy = { # 'http':'http://182.61.29.114.6868' # } # res = requests.get('http ...
- gradle根据不同渠道设置不同的开屏启动页
需求:根据不同渠道,app的开屏启动页不一样 思路:因为app的启动页是在清单文件配置的,而清单文件最后是要和main里面的清单文件合并的,所以每个渠道都要配一个清单文件,在里面设置 然后在Andro ...
- Spring BPP中优雅的创建动态代理Bean
一.前言 本文章所讲并没有基于Aspectj,而是直接通过Cglib以及ProxyFactoryBean去创建代理Bean.通过下面的例子,可以看出Cglib方式创建的代理Bean和ProxyFact ...
- 学生成绩管理系统C++
今天晚上终于做完了学生成绩管理系统!激动!开心!!!哈哈哈~~~~ 总共298行代码,第一次写这么多. 其中遇到了好多困难,也烦恼了好久,不过最终都解决了! 做了之后果然,满满的成就感!抑制不住的兴奋 ...
- 一: WCF的服务端与客户端在通信时有三种模式:请求响应模式、数据报模式和双工通讯模式。
说一下基本知识, 1.如果想要将当前接口作为wcf服务器,则一定要加上[ServiceContract] 契约 2.要想将方法作为wcf服务方法发布给外部调用,则一定要加上 [Operatio ...
- SpringBoot集成阿里巴巴Druid监控
druid是阿里巴巴开源的数据库连接池,提供了优秀的对数据库操作的监控功能,本文要讲解一下springboot项目怎么集成druid. 本文在基于jpa的项目下开发,首先在pom文件中额外加入drui ...
- 关于ugc的一点思考
ugc会使互联网繁荣,但依赖大众用户创造的内容质量上会存在参差不齐,这是ugc本身存在的问题. 就拿技术论坛或社区来说,好的内容不少,但质量不好的内容也很多.社区在引导用户发言的同时,也应 对用户创造 ...
- 牛客国庆集训派对Day1.B.Attack on Titan(思路 最短路Dijkstra)
题目链接 \(Description\) 给定\(n,m,C\)及大小为\((n+1)(m+1)\)的矩阵\(c[i][j]\).平面上有\((n+1)(m+1)\)个点,从\((0,0)\)编号到\ ...
- BZOJ.5249.[九省联考2018]iiidx(贪心 线段树)
BZOJ LOJ 洛谷 \(d_i\)不同就不用说了,建出树来\(DFS\)一遍. 对于\(d_i\)不同的情况: Solution 1: xxy tql! 考虑如何把这些数依次填到树里. 首先对于已 ...
- Python——运算符
Python算术运算符 以下假设变量: a=10,b=20: 运算符 描述 实例 + 加 - 两个对象相加 a + b 输出结果 30 - 减 - 得到负数或是一个数减去另一个数 a - b 输出结果 ...