接口测试+postman+Jmeter用法
接口测试
什么是接口测试
接口测试:接口测试就是功能测试,向服务端发的请求或者获取数据,
例如:新浪微博,新浪为客户端(client),新浪的服务器为服务端(server)
a:刷微博,即从客户端向服务端获取数据
b:发微博,即客户端向服务端插入数据
c:修改微博,即客户端向服务端发送数据,即修改后的内容
d:删微博,即服务端向客户端发送删除数据的请求
以上,都是通过接口来连接客户端与服务端的。
接口测试第一步需要做什么?
首先要取得接口文档,接口文档一般都是由开发提供的,
接口文档中会提供至少三种信息:接口地址(url)、请求参数(get、post)、请求参数,一般还会提供返回参数,如下:
接口返回的数据类型是什么?
接口返回的数据类型都是json格式的,那么什么是json呢?
json:json是一种通用的数据类型,所有语言都认识它,即任何语言接口返回的都是json格式的,如:Java PHP .net Python ruby C
json格式如下:键值对的存在 key-value
接口常用请求方式有什么?
get与post请求方式
get请求
直接用浏览器就可以访问,不需要借助外部工具,在浏览器中输入url即可
如何传参数:在url后面加一个问号?+参数名+值,其中如果要传多个参数的话,中间用&连接
例如:hfhfhh/stu_info?参数1=值1&参数2=值2,如下图所示:
post请求
post请求不可以通过浏览器直接访问,需要借助工具来进行接口的访问,如postman、jmeter
post常用的传参方式:key-value、json格式、上传文件。如果接口文档里不特别说明是什么传参的方式的话,那么就是key-value形式传参。
get与post区别
1、get请求只有请求头,没有请求体,如下图postman中所示:请求的cookie是在headers里面的,而参数是在url里面的,body是置灰的,即没有请求体
post请求既有请求头,也有请求体
get请求如下图:
post请求如下图:
2、get请求没有post请求安全,因为get请求参数是在url里面传的,参数是可见的,而post请求参数是在body里面传的,不可见。但是post请求参数还是可以用抓包工具抓到,所以也没有那么安全
3、get请求有参数的大小限制,post请求没有参数大小的限制(在以前浏览器版本低的时候,有参数大小的限制,现在浏览器版本很高了,就没有这个限制了)
4、get请求一般用来获取数据,而post一般则用来发送数据
设计接口测试用例
设计思路:
1、正常的:按照接口文档上面来
2、异常的:不按照接口文档上面来
3、根据业务逻辑设计不同的场景
测试用例里面需要写什么?
项目 模块 url 请求方式 请求参数 预期结果 实际结果 状态
cookie与session
什么是cookie?
cookie是保存在用户浏览器端的一个键值对。
例如:登陆一个网站,就会把cookie保存在浏览器端,即保存登录名与密码,等你关掉网站,再次进去的时候,不需要再次登陆,就可以直接访问了,这就是浏览器保存了cookie的结果
什么是session?
session是保存在服务端的键值对。
例如:登陆网站之后,浏览器会保存cookie,而服务端会保存session,当再次访问网站的时候,服务端会把session里的键值对和浏览器端的cookie进行对比,如果一致就不需要重新登陆了,直接就可以访问,如果不一致则需要重新登陆
注意:cookie与session都有失效时间,至于时间的长短是在代码里面设置的。
postman
postman是用来发送http请求接口的测试工具,可以用来发送get与post请求
在postman中发get请求
例:
请求如下图:
在postman中发post请求
1、入参是key-value型的
postman中如下:
2、入参是json型的。
如何判断入参是json型的:接口文档中会标识出来,如果不特意标识,那么默认就是key-value型的,如下图,接口文档中已特意标出是json型的
postman中请求如下:
json类型参数在postman中如何传?
在body下面的选择raw,就可以传json格式的了
3、在postman中上传文件
4、传cookie
传cookie需要知道:请求方式、url、cookie值、请求参数
例如:获取某个QQ群里的成员信息
step1:获取url,url如下:https://qun.qq.com/member.html#gid=QQ群号
step2:按f12,选择network下的XHR,XHR下面的都是请求的接口,有利于接口测试,所以直接选择XHR就行了,下面以search_group_members这个接口为例
step3:获取请求方式与url
step4:获取cookie
step5:获取请求参数
step6:在postman中可以调接口了,cookie存在Headers里面,如下
参数放在body里
step7:发请求
postman中 form-data、x-www-form-urlencoded、raw、的区别
form-data:可以上传键值对,也可以上传文件
x-www-form-urlencoded:可以上传键值对,不可以上传文件
raw:可以上传json格式的参数
postman中Globals用法
step1:点击小齿轮下的Manage Environments
step2:选择Globals
step3、添加一个ke与value,例如key=ip,value=ip地址,添加完后点击 save,配置完成
step4、如何运用刚才配置的Gloabals
在url中不用写IP地址了,用{{ip}}代替即可,其中ip根据自己在globals中定义的key的名字而变化
jmeter
定义:Java开发的开源的性能测试工具,即需要安装jdk才可以使用jmeter
jmeter的http接口测试
step1、添加线程组,线程组可以理解为一个容器,之后的测试都在线程组里面执行,
其中,线程数:即为并发数,如果要测试100个用户同时登陆,那么现成数设置为100即可
Ramp-Up Period(in seconds):为在XX秒之内执行这个线程
循环次数:想要循环几次就填几
step2、添加http请求,选择线程组,点击右键
step3、配置http请求,如下图
step4、添加监听器,即查看结果树,可以看发送的请求与响应的数据
当查看结果树中存在乱码时如何解决?
如下图
解决办法:在jmeter的bin目录下,找到jmeter的配置文件,jmeter.properties最下面一行加上sampleresult.default.encoding=UTF-8后,保存,然后重新打开jmeter,再次执行接口文件,就可以了
当body data里面中文乱码如何解决
如下图
解决办法:
在jemeter的bin目录下,找到jmeter的配置文件,jmeter.properties最下面一行加上jsyntaxtextarea.font.family=Hack
后,保存,然后重新打开jmeter,再次执行接口文件,就可以了
数据库存在乱码如何解决?
在http请求配置页面中Content encoding=utf-8,即可
上传文件
参数化
1 、__random:函数助手里面的__random取一个范围内的随机数
注册接口
step1
step2
step3
step4:
2、__time:函数助手里面的__time取当前时间戳
时间戳:从计算机诞生那一天到现在过了多少秒
3、__UUID生成的字符串很长
--CSV Data Set Config
配置方式:右键--->添加--->配置原件--->csv Data Set Config
注意:如果不写绝对路径,可以只写文件名,那么需要把文件放在jmeter的bin目录下即可,那么就可以直接写文件名就可以了
然后去编辑登陆接口如下,此时username不可以写死,需要写名字集,格式 ${名字集},如下图:
关联
从上一个接口里面获取到结果传递给下一个接口
例如:抽奖接口的请求参数就要从登录接口的返回参数中取
step1、取登陆接口返回的userid与sign
配置如下:
从登陆接口返回的参数中取userID与sign
返回参数如下:
step2、JSON Extractor 配置如下,其中$.login_info.userId定义如下:
$代表登录接口返回的参数中最外边的大括号,.代表大括号里面的内容,login_info代表从返回参数中找到login_info,.代表返回参数中的login_info里的信息,userId代表在login_info取到userId的值
step3、配置抽奖接口:
用户定义变量
配置:线程组--->添加--->配置原件--->用户定义的变量
配置:,名称与值,例如名称为 ip
应用:
在http请求中配置IP的地方改写成上边配置的变量即可,就不用每次都输入IP地址了
格式:$(定义的变量)
压测
例如:要测试10秒之内1个用户登陆100次情况
思路:线程组中线程数设置100(代表一百个用户),10秒
聚合报告
压测,需要关注返回的TPS、响应时间,通过聚合报告就可以看
TPS:服务器每秒钟处理的事物数,即请求数
响应时间:从发出去请求到服务端处理完返回给客户端的时间
如下图:
响应断言
jmeter在接口测试过程中,有时需要响应断言来判断接口测试得到的接口返回值是否正确。
响应断言 :对服务器的响应接口进行断言校验。
1. 首先,选中某个线程,然后右键,选择添加—>断言—>响应断言 ,得到如图所示的响应断言界面。
Apply to:默认选择 Main sample only即可
要测试的响应字段:默认选择 响应文本 即可
模式匹配规则:选择“包括”即可,即返回的参数中包括添加的 要测试的模式里的内容即可
要测试的模式:输入 我们要匹配的响应接口(即接口测试结果的期望值或者其他期望值)
应用如下: