接口测试工具postman和jmeter使用说明
一、什么是接口测试?
接口测试就是功能测试,其实比功能测试还简单,不需要关注界面显示、功能按钮是否有效等。
主要包括如下参数:
1、接口请求的URL
2、请求参数
3、请求方式,如get\post\put\delete
二、接口测试工具-postman
1、get请求
不需要借助任何的工具,在浏览器里面就可以发请求;多个参数用&连接
2、post请求
需要借助辅助工具发请求
1)form-data格式
2)如果接口文档中写了是json的话,那就要选raw里面的json,传json。
json是一种通用的数据类型。key-value
![](https://img2018.cnblogs.com/blog/1602053/201903/1602053-20190320212557379-12942798.jpg)
3)cookie和session
cookie:就是保存在客户端的一个键值对,即key-value
session:就是保存在服务器端的一个键值对,即key-value
比如,学生金币充值接口实现流程:
(1)获取sessionid,先登录,获取session,key是sign
(2)从查询学生信息的接口里面随便找一个学生的stu_id
(3)调用金币充值的接口,传入cookie和stu_id,充值gold
4)如果是上传文件的话,那就把参数类型改成file
![](https://img2018.cnblogs.com/blog/1602053/201903/1602053-20190320212907256-631413056.jpg)
form-data:支持上传附件
x-www-form-urlencoded:只能key|value格式,不能上传附件
5)http协议
是客户端和服务器端通信的协议。
包括如下内容:
(1)url:表示资源的路径
(2)请求头:Request Headers,一些额外的信息,用的是什么浏览器,cookie
(3)请求体:具体的数据
6)get和post的区别
(1)get只有请求头,没有请求体,它的参数是写在url里面;url?username=xxx&password=xxx
下面的其实都没什么区别
(2)get请求一般用来向服务器获取数据,post请求用来向服务器发送数据
(3)get请求有参数长度限制(现在的浏览器基本没有限制),post请求没有
(4)get请求没有post请求安全
7)如何测试接口?
(1)需要接口说明文档
(2)设计一条正确的用例,是否能正常返回结果
(3)按照业务逻辑进行测试,正常or异常,和功能测试设计的用例是一样的
三、性能测试工具-jmeter
如何使用jmeter测试接口?
1、添加“线程组”
![](https://img2018.cnblogs.com/blog/1602053/201903/1602053-20190320213611939-142012667.jpg)
2、在线程组下,添加HTTP请求
![](https://img2018.cnblogs.com/blog/1602053/201903/1602053-20190320213635197-138867931.png)
3、get请求,填写HTTP请求信息,主要包括服务器名称或IP、端口号、方法、路径、参数等
![](https://img2018.cnblogs.com/blog/1602053/201903/1602053-20190320213705426-1671652064.png)
此时运行并不能看到结果,与在postman中不同,需要添加监听器
4、查看运行结果,需要添加“察看结果树”
![](https://img2018.cnblogs.com/blog/1602053/201903/1602053-20190320213740670-1226755328.png)
再运行,则能在察看结果数中查看执行结果
![](https://img2018.cnblogs.com/blog/1602053/201903/1602053-20190320213807217-398242596.png)
6、在HTTP请求中,服务器名称和IP是一样的,每次填写很麻烦,可以通过添加“HTTP请求默认值”的方式,
![](https://img2018.cnblogs.com/blog/1602053/201903/1602053-20190320213840731-246844505.png)
添加服务器名称和IP的默认值,当然此处可以根据实际情况填写,比如如果存在一些公用的参数等
![](https://img2018.cnblogs.com/blog/1602053/201903/1602053-20190320213914020-1849701526.png)
这样在同一个线程组中,HTTP请求中会获取默认值,无需每次填写
![](https://img2018.cnblogs.com/blog/1602053/201903/1602053-20190320213939529-1633552837.png)
7、post方法,json类型,注意需要填写Content encoding为utf-8,否则插入的数据会变成乱码
![](https://img2018.cnblogs.com/blog/1602053/201903/1602053-20190320214145904-1331423439.png)
8、cookie信息
添加HTTP请求,添加完成后运行,会提示未登录,需要传cookie信息
HTTP Cookie管理器和HTTP信息头管理器均支持传cookie信息
方法一、HTTP Cookie管理器填写如下,名称为登录用户名,值为登录接口中返回的sign值,域为服务器域名
方法二、HTTP信息头管理器
比如QQ群的cookie有很多内容,如果使用上述方法需要一个个填写,比较麻烦,可以通过添加“HTTP信息头管理器”
9、文件上传
![](https://img2018.cnblogs.com/blog/1602053/201903/1602053-20190320214348544-1608413986.png)
如果提示MIME类型不能为空,可以填写txt进行传值
10、jmeter参数化
参数的引用:${}
1)random
2)time
时间戳:
从计算机诞生那一天到现在过了多少秒
${__time(,)} 时间戳
${__time(yyyyMMddHHmmss,)} 格式化的时间
3)文件参数化
![](https://img2018.cnblogs.com/blog/1602053/201903/1602053-20190320214906214-1541195801.png)
Filename:参数文件的绝对路径
File encoding:文件编码
Variable Names(comma-delimited):变量名称
Delimiter(use '\t' for tab):多列的分隔符
Recycle on EOF:假如数据用完了,是否需要重新开始,True需要重新开始取数据
Stop thread on EOF:如果数据用完了是否需要停止线程
Sharing mode:参数化适用于哪个线程组
11、断言
自动帮你校验结果返回的是否正确
![](https://img2018.cnblogs.com/blog/1602053/201903/1602053-20190320214741158-209075777.png)
12、关联
比如学生金币充值的接口是需要传cookie的,这个cookie是从登录中来的,获取登录接口的sign值
1)登录 获取到sessionid
2)把session传给下一个接口
(1)添加“后置处理器-JSON Extrator”
![](https://img2018.cnblogs.com/blog/1602053/201903/1602053-20190320214629698-1415158413.png)
配置信息如下:
![](https://img2018.cnblogs.com/blog/1602053/201903/1602053-20190320214650528-1337152500.png)
在学生金币充值接口中传递的cookie信息如下:
![](https://img2018.cnblogs.com/blog/1602053/201903/1602053-20190320214710136-1941519618.png)
13、如果是https的请求,只需要在协议中填写https
![](https://img2018.cnblogs.com/blog/1602053/201903/1602053-20190320214827216-2075219062.png)