欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Postman接口&压力测试

程序员文章站 2024-03-21 23:28:16
...

一、Postman介绍

 

下面是在网上随便抓了一个请求地址来做演示,把请求地址填入地址栏,此请求为GET请求。点击Send发送请求,请求结果将会在下方显示出来。每次的请求历史数据,会被记录下来,但是经常使用的请求,还是保存一下,这么每次用的时候,选择就行了,及其方便。

 

另外,最好创建一个账号,这样数据将会永久保存下来,不至于重装了系统或者换了台电脑数据都没了的尴尬。

 

Postman接口&压力测试

 

保存的时候起个好听的名字

 

Postman接口&压力测试

 

Header会传输一些我们需要的一些通用的数据,定义好之后,每个接口几乎都是一样的。所以,把这些数据进行预置,这样就不用每新建一个请求,都要重复的添加Header了。

 

请求的时候,会把请求状态,请求的时间,以及返回的数据大小返回回来。这样一目了然。最常见的status就是200表示成功,400表示未找到资源。500开头的基本都是服务端异常等等。我之前写了一篇很详细的状态说明,请参见“HTTP状态码大全

 

Postman接口&压力测试

 

Postman接口&压力测试

 

点击params可以把url里的参数以列表的形式展现出来,方便编写

 

Postman接口&压力测试

 

还有一种更方便的编辑方式,点击Bulk Edit ,直接修改字符串的方式修改,而且可以复制粘贴,方便迁移到其它地方。而且这个功能在其它参数编辑的地方都适用。

 

Postman接口&压力测试

 

 

二、GET 和POST 的区别:

  • GET 使用URL 或Cookie 传参,而POST将数据放在Body 中。
  • GET的URL 在长度上会有限制,而POST没有。
  • POST比GET相对安全,因为在地址栏不可见。
  • 一般POST请求用来获取数据,POST请求用来发送数据。

1、Get请求:

Postman接口&压力测试

 

Postman接口&压力测试

参考开发提供的接口设计文档,提供传参数据录入。

2、post请求:

如常见基本认证的登录用的较多,用户名和密码也可以通过设置的环境变量获取。Postman支持不同的认证机制如: Basic、Digest、OAuth等),支持收到响应语法高亮(HTML\JSON\XML等)。

Postman接口&压力测试

 

下面举一个添加发布会接口例子开展:

Postman接口&压力测试

 

以post方式来看,几种参数发送方式:

Postman接口&压力测试

 

三、form-data、x-www-form-urlencoded、raw、binary的区别

 

1、x-www-form-urlencoded

 

当用户通过form表单提交数据的时候,例如:

 

<form method="post"action="http://api.test.com/user" >

    <inputtype="text" name="name">

    <inputtype="text" name="age">

</form>

 

提交时会向服务器端发出这样的数据(已经去除部分不相关的头信息),数据如下:

 

POST /user HTTP/1.1

Content-Type:application/x-www-form-urlencoded

Accept-Encoding: gzip, deflate

Host: api.test.com

Content-Length: 21

Connection: Keep-Alive

Cache-Control: no-cache

name=互扯程序&age=18

 

它的Content-Type是application/x-www-form-urlencoded,这表示消息内容会经过URL编码

 

2、form-data

Postman接口&压力测试

 

当需要上传文件(可以上传多个文件),并且有参数同时传递的时候,选择这个选项可以上传文件。

举个例子

 

<form method="post"action="http://api.test.com/user/upload.do" enctype=”multipart/form-data”>

    <inputtype="text" name="desc">

    <inputtype="file" name="pic">

</form>

 

浏览器将会发送以下数据:

 

POST /user/upload.do HTTP/1.1

Accept-Language: zh-cn,zh;q=0.5

Accept-Charset: GBK,utf-8;q=0.7,*;q=0.7

Connection: keep-alive

Content-Length: 60408

Content-Type:multipart/form-data; boundary=ZnGpDtePMx0KrHh_G0X99Yef9r8JZsRJSXC

Host: api.test.com

 

我们看到Content-Type:multipart/form-data;

 

当需要上传数据的时候,必须设置enctype=“multipart/form-data”,

 

enctype:规定在发送到服务器之前应该如何对表单数据进行编码,他有如下的三个值:

 

1. application/x-www-form-urlencoded。默认的编码方式。所有字符都会进行编码(空格转换为 "+" 加号,特殊符号转换为 ASCII HEX 值)。

2. multipart/form-data 。 指定传输数据为二进制类型,比如图片、mp3、文件。 不对字符编码。在使用包含文件上传控件的表单时,必须使用该值。

3. text/plain。纯文体的传输。空格转换为 “+” 加号,但不对特殊字符编码。

 

其实form表单在你不写enctype属性时,也默认为其添加了enctype属性值,默认值是enctype="application/x- www-form-urlencoded",所以上面注册用户的时候虽然没写,其实默认加上了。

 

3、raw

 

当需要给服务端传递json,xml等数据的时候选择raw,当选择了raw的时候,header里会自动加上

Content-Type: application/json

 

例如:

 

$.ajax({

‍    url:"/user/",

    data:JSON.stringify(user),

    method:"POST",

    contentType:"application/json",

    success: function(res){

        console.info("添加成功")

    }‍

});

 

 

 

 

Postman接口&压力测试

 

4、binary

 

只能上传一个文件,也不能添加参数。

 

Postman接口&压力测试

四、Pre-requestScript 的使用

 对于环境变量和全局变量的使用,除了上面所讲的方法外,也可以用Pre-requestScript 方法。

以login接口为例,在"Pre-requestScript"中设置环境变量 "username", "password",在Body 中选取"form-data" 格式,输入所需的key-value, value即为变量{{username}}, {{password}}。

Postman接口&压力测试

五、Tests使用(断言)

所谓断言,主要用于测试返回的数据结果进行匹配判断,匹配成功返回PASS,失败返回FAIL。

下图方法一,直接点击右侧例子函数,会自动生成出现在左侧窗口脚本,只需修改数据即可。

Postman接口&压力测试

方法二:直接自己写脚本,如下图所示:

Postman接口&压力测试

 

 常用tests用法如下:
1.检查response body中是否包含某个string
tests["Body matches string"] = responseBody.has("string_you_want_to_search");

注意:"Body matches string" 需唯一。

2.检测JSON中的某个值是否等于预期的值
var data = JSON.parse(responseBody);
tests["Your test name"] = data.value === 100;

JSON.parse()方法,把json字符串转化为对象。parse()会进行json格式的检查是一个安全的函数。 

如:检查json中某个数组元素的个数(这里检测programs的长度)
var data = JSON.parse(responseBody);
tests["program's lenght"] = data.programs.length === 5;

3.检查response body是否与某个string相等
4.转换XML body为JSON对象
var jsonObject = xml2Json(responseBody);

tests["Body is correct"] = responseBody === "response_body_string";

5.测试response Headers中的某个元素是否存在(如:Content-Type)
tests["Content-Type is present"] = postman.getResponseHeader("Content-Type"); 
//getResponseHeader()方法会返回header的值,如果该值存在

或者: 

tests["Content-Type is present"] = responseHeaders.hasOwnProperty("Content-Type");
上面的方法,不区分大小写。下面的方法,要区分大小写。

6.验证Status code的值

tests["Status code is 200"] = responseCode.code === 200;

7.验证Response time是否小于某个值
tests["Response time is less than 200ms"] = responseTime < 200;

8.name是否包含某个值
tests["Status code name has string"] = responseCode.name.has("Created");

9.POST 请求的状态响应码是否是某个值
tests["Successful POST request"] = responseCode.code === 201 || responseCode.code === 202;

10.很小的JSON数据验证器

var schema = {

"items": {

"type": "boolean"

}

};

var data1 = [true, false];

var data2 = [true, 123];

console.log(tv4.error);

tests["Valid Data1"] = tv4.validate(data1, schema);

tests["Valid Data2"] = tv4.validate(data2, schema);

 

压力测试

 

当你需要验证你的接口的抗压能力的时候,可以点击Runner,进行压力测试

 

Postman接口&压力测试

 

注意:压力测试只能以文件夹的方式执行多个接口,不能单独执行,如果想要测试某一个接口,就创一个文件夹,这个文件夹里只有一个要测试的接口。

 

Postman接口&压力测试

 

点击执行,并发执行了500次。每次再100毫秒内返回结果。

 

Postman接口&压力测试