首页 > 代码库 > 接口测试基础
接口测试基础
1. 什么是接口测试
接口测试是验证系统组件间接口数据交互的测试。重点是检查数据的交换,传递和控制管理过程,以及系统间的相互逻辑依赖关系等。接口测试属于功能测试,
是通过接口文档上的调用地址、请求参数、拼接报文,然后发送请求,检查返回结果。
2. 接口测试必要性
可以发现页面操作发现不了的bug
检查系统的异常处理能力
检查系统的安全性、稳定性
前端发生变化,接口测试好了,后端无需再做改动
3. 接口测试流程
需求评审,熟悉业务和需求
开发提供接口文档
编写接口测试用例
用例评审
执行测试
提交测试报告
3.1 接口文档必备要素
接口说明
调用url
请求参数
请求方式
请求参数、参数类型、请求参数说明
返回参数说明
3.2 接口请求报文拼接方式
url拼接
url拼接规则为:Url?param1=value1¶m2=value2
问号前面是请求url,后面是请求参数和参数值,多个参数用&连接
如:https://api.douban.com/v2/book/search?q=邹伟伟
json串
需要测试工具完成,如postman、jmeter等。其传参方式符合json的组合规则。
3.3 接口类型
http api接口
Http api 接口是走http协议,通过路径来区分调用的方法,请求报文都是key-value形式,返回报文一般都是json串,请求方式有get、post等方式,
这两种为最常用的请求方式。
webservice接口
Webservice 接口是走soap协议通过http传输,请求报文和返回报文都是xml格式,需要通过工具才能进行测试。
数据库访问接口
数据库访问接口是走jdbc方式连接数据,对数据库进行增删改查操作,需要使用工具进行测试。
3.3.1 get、post区别
get使用url或cookie传参,post将数据存放在body中
get的url在长度上有限制,post数据可以很大
post比get更安全,因为数据在地址栏上不可见
一般get用于获取数据,post用于发送数据
3.3.2 http状态码
200 2开头表示请求发送成功
300 3开头表示重定向
400 4开头表示客户端发送请求有语法错误
401 访问页面未授权
403 无权访问
404 无此页面
500 5开头表示服务器异常
500 服务器内部异常
504 服务器端超时,未返回结果
4. 接口测试用例设计
4.1 接口测试用例设计规则
通过性验证(按照接口规范)
参数组合(多参数时)
安全验证
绕过验证(卖家传个普通用户id)
绕过身份授权(修改商品价格)
关键参数未加密
密码安全规则
异常数据(不按接口文档要求)
根据业务逻辑
4.2 接口测试用例模板要素
要至少要包含项目、模块、用例id、用例描述、请求url、请求方式、请求数据、预期结果、请求报文、返回报文、测试结果、测试人员等。如下图示:
5. 接口测试工具
5.1 postman
postman是chrome的扩展插件,用于发送http请求和网页调试。界面如下图示:
请求方法,发送请求的方式,下拉有很多种,一般都是get和post,依据接口文档做选择
请求url,接口url地址
传参方式:
key-value :直接在请求url后面拼接,或者在【body】-【form-data】下添加即可
json串 : 以json形式发送请求的,在【body】-【raw】里添加json串即可,但需要选择【JSON】格式,如下图示:
有时需要添加header、cookie、authorization、文件上传的,只需要在对应字段下添加即可,如下图示:
根据接口说明文档,需要哪种参数,按照截图添加即可。
5.2 jmeter
jmeter是apache公司基于java开发的一款开源压力测试工具,是一个较轻量的测试工具。运行需要安装jdk环境,jmeter为免安装软件,
解压后直接运行jmeter执行脚本即可。它也是跨平台的,支持在windows、linux、macos上使用。
5.2.1 jmeter-http接口脚本基本流程
添加线程组
添加http请求
在http请求中写入url、路径、请求方式、参数
添加查看结果树
调用接口、查看返回值
具体操作见下图示:
有时还需添加cookie和header,只需在【配置元件】里添加【HTTPCookie管理器】和【HTTP信息头管理器】即可,其配置如图示:
cookie的名称、值依据接口文档填写,域需要填写HTTP请求页里的【服务器名称或ip】。
header的名称、值依据接口文档填写。
添加【查看结果树】
【添加】-【监听器】-【查看结果树】,具体界面如下图示:
通过【查看结果树】可以查看请求数据,也可查看服务器的响应数据,以此来判断测试结果。
5.2.2 jmeter-参数化
jmeter参数化有三种方式:
用户定义的变量
这种是为了方便管理参数,只能有一个值,比如ip地址。
在线程组中添加一个用户定义的变量,然后写key、value就可以,key是参数名,value是具体值,调用时使用${key},其中key就是变量名称。
如下图中变量名称是ip:
函数生成器
可参照一定规则生成数据,比如生成随机数、时间等。
函数助手可按照规则生成一些参数,常用的参数有随机数__Random、获取当前时间__time、唯一值__UUID。
随机数__Random,可在指定范围内取随机数
获取当前时间__time,获取当前系统时间,具体格式为:yyyy-MM-dd HH:mm:ss
唯一值__UUID,每次生成一个随机的uuid,都是唯一值
从文件中读取
事先写好数据,然后从文件中读取数据,比如登录接口的账号、密码。
从文件中读取,需要三个步骤:读取文件、取文件内容里的参数,赋予一个名字、使用值
从文件读取的话,需要在线程组里添加【CSV Data Set Config】,如下图示:
5.2.3 jmeter断言
断言是用来检查返回接货对不对的,如果对,就代表请求返回正确;如果没有的话,就代表请求结果与预期不一致,并以此来作验证测试是否通过。
添加方法:【添加】-【断言】-【响应断言】,添加后的界面如下图示:
5.2.4 jmeter-关联
关联是获取到服务器返回的值,保存起来,给别的请求使用,做一些其他处理。
jmeter关联是通过正则表达式提取器来完成的添加方式为:
【添加】-【后置处理器】-【正则表达式提取器】,字段详解见下图示:
通过上面的关联,其他请求使用时,调用${code}就可以获取到关联数据。
5.2.5 jmeter-mysql操作
要操作mysql需要引入第三方jar包,因为jmeter本身不能直接连接mysql,操作mysql需要如下步骤:
在测试计划里导入jdbc的jar包
创建数据库连接配置(mysql的url、端口号、账号、密码等)
写sql语句,执行sql
查看结果
具体操作见下图示:
【测试计划】-【Add directory or jar to classpath】下导入jdbc的jar包
【添加】-【配置元件】-【JDBC Connection Configuration】
配置mysql连接池名称,要与后面sql请求的【Variable Name】一致
数据库的url:
jdbc:mysql://192.168.1.116:3307/bugfree?allowMultiQueries=true
数据库驱动:
指定数据库类型是mysql、orcle、sqlserver等,驱动列表如下:
账号密码:
所连接数据库的账号、密码。
5.2.6 测试结果查看
【添加】-【监听器】-【聚合报告】,具体参数解释见下图示:
查看结果需关注的几个指标:
tps,每秒处理的请求数,tps越高说明服务器处理能力越好
响应时间,每个请求的处理时间
并发用户数,即并发量
5.2.7 jmeter-linux下运行
linux下运行jmeter是在jmeter的bin目录下执行jmeter.sh脚本,命令如下:
sh jmeter.sh -n –t a.jmx -l res.jtl
-n 代表以没有图形化界面启动
-t 代表后面是测试脚本
a.jmx 就是做好的测试脚本
-l 代表后面是测试结果
res.jtl 就是测试结果文件
若要在查看结果树中查看测试结果,只需在【查看结果树】视图中导入这个res.jtl文件即可。
5.2.8 jmeter 添加负载机
压测过程中,当并发较大,一台机器已经启动不了那么多并发时,需要添加负载机。
首先在做压力机的机器上启动jmeter的代理:
jmeter的bin目录下有一个jmeter-server,启动它即可,此文件就是jmeter代理。
然后在控制机上添加压力机ip:
jmeter的bin目录下有一个jmeter.properties,打开后找到remote_hosts模块,添加ip后重新启动jmeter,就可以在jmeter里看到压力机了。
接口测试基础