接口测试:
就是功能测试。
接口测试的必要性:
接口测试可以发现一些页面上操作发现不了的bug
检查系统的异常处理能力
检查系统的安全性、稳定性
什么是接口?
接口一般有两种,一种是程序内部的接口,一种是系统对外的接口。
系统对外的接口:比如你要从别的网站或服务器上获取资源或信息,别人不会提供数据库给你,而是提供一个写好的方法,你引用他们的接口就能使用他们的方法,从而达到数据共享的目的。
程序内部的接口:方法与方法之间、模块与模块之间,程序内部抛出的接口。
一般测试人员测试的是系统对外的接口。接口其实就是各种操作数据库。
接口的分类:
常用的两种接口是webservice接口和http api接口。
webservice接口:走soap协议通过http传输,请求和返回的报文都是xml格式。
http api接口:走http协议,通过路径来区分调用的方法,请求报文是key-value形式,返回报文一般是json串,有get、post等请求方式。
通用的数据类型:json,使用json使得不同语言之间可以交互,接口返回的数据都是json格式的。
通过接口文档来测试接口。
接口文档包含的内容有:
1、请求url
2、请求方式(get、post)
3、请求参数
4、返回参数说明
5、请求、返回示例
6、状态码说明
接口测试的流程:
1、需求评审,熟悉业务和需求
2、开发提供接口文档
3、编写接口测试用例
4、用例评审
5、提测后开始测试
6、提交测试报告
get请求:没有请求体,只有请求头,get请求的参数只能写在url或者在cookie里面
post请求:有请求头和请求体,请求参数放在请求体里面
HTTP状态码:
400 开头 代表客户端发送请求有语法错误。401代表访问的页面没有授权、403表示没有权限、404代表没有这个页面
500开头 代表服务器又异常,500代表服务器内部异常、504代表服务器超时,没有返还结果
接口测试用例设计:
1)通过性验证:按照接口文档,正常传入参数,校验是否可以返回正确的结果
2)参数组合:
比如如果操作是添加学生信息,就必须传入必填的参数(比如,姓名、班级、性别)
如果操作是修改学生信息,就传入必填参数的某一个,比如,通过姓名删除
3)异常验证:不按照接口文档上要求输入参数,包括必填非必传、参数类型、入参长 度。比如某些必须参数不传入;应该输入整数类型的,传入字符串类型;长度是10的, 传入11
4)接口安全验证:
1、绕过验证:比如购买一个300元的商品,提交订单式,把商品价格改成3元、 -3元等,验证后端有没有做验证
2、绕过身份授权:比如修改商品,必须是卖家修改,如果传一个普通用户,验证 能否修改成功
3、参数是否加密:比如登录
4、密码安全规则:密码复杂程度验证
5)根据业务逻辑来设计测试用例
比如:根据系统业务来设计测试用例,比如,登录失败5次,需要等待15分钟再登录;
新注册用户需要过了实习期才能发帖等
postman测试接口:
1、get:http://xxx?参数=值&id=1 (get请求浏览器可以直接访问)
2、post请求:
3、json方式传参
请求URL:http://xxx/api/user/add_stu
请求方式:post、入参是json类型
4、文件上传接口:
5、需要添加cookie以及身份验证的接口
比如,这个请求先要先从登录接口中获取管理员的账号和sign ID
先登录获取signID:
再进行下一个请求的body填写,
并且需要在Header中添加一个Cookie,值是键值对:用户名=sign,
6、需要添加Header的请求,比如来源请求、User-Agent等
7、使用postman设置一个环境变量:
1:设置---Manage Envirments---Globals---Add
2:用{{ 变量名 }}代替设置的变量
3:环境切换
cookie与session:
cookie是存在客户端本地的键值对
session是存在服务器的键值对(存在redis里面)
cookie和session都是连用的,比如登录时,本地的cookie与服务器的做比对,匹配成功,就能继续操作
使用jmeter做接口测试
jmeter乱码:.bin/jmeter.properties中的sampleresult.default.encoding=utf-8打开注释,修改为utf-8
jmeter上传文件的接口测试:
jmeter3.3的版本,将文件的MIME类型写上
win10的系统,由于权限问题,可以将文件放在./bin目录下,“文件名称”处直接写文件名
接口签名:
为了防止别人恶意刷请求。它是一个加密后的字符串。
比如:http://api.xx.cn/register?user=xxx&passwd=xxx&sign=fc53d1abb3dea3,其中sign就是一个接口的签名,它是通过某个加密规则(比如username+时间戳+x)计算出来的,这样就能避免频繁发请求。
url编码:URL地址中,比如name1=va%26lu%3D
jmeter参数化的方式:
1、文件参数化
2、用户定义的变量
3、函数助手
①__random
②__time:
时间格式是:yyyy-MM-dd HH:mm:ss
jmeter关联:
json关联
JSON插件:后置处理器-JSON Path Extractor
比如需要获取到json串中的sign的值:
在登录请求下面通过JSON Path Extractor获取sign的值:
JSON表达式:
$.login_info.sign
$代表第一层{}
.login_info:代表第二层{}
在下一个请求中引用json的参数: