欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 文旅 > 美景 > 接口测试笔记

接口测试笔记

2025/3/12 5:27:22 来源:https://blog.csdn.net/weixin_74301566/article/details/146162954  浏览:    关键词:接口测试笔记

3、Postman

Postman介绍

Postman介绍

  • Postman是一款非常流行的支持HTTP/HTTPS协议的接口调试与测试工具,其功能非常强大,能够发送任何类型的HTTP请求(GET, HEAD, POST,PUT…),附带任何数量的参数HTTP headers支持不同的认证机制

主要功能

主要功能包括

  • 模拟各种http requests
  • Collection功能
  • 人性化的Response整理
  • 内置测试脚本管理
  • 设定变量与环境

Postman简单介绍

HTTP请求:method,url ,headers ,body

Postman发起接口请求
  • 在接口测试中,接口请求信息中,重点需要关注四大信息:接口URL地址、请求方法、请求头以及请求参数
  • 接口的响应中,测试关注的重点在于响应的正文,同时可能对响应头和状态码进行校验
Postman获取响应
  • Postman请求发起之后得到响应结果,包括响应主体、响应头、cookies、状态码、请求时间、报文数据大小等信息
  • 而接口测试,主要就是对响应得到的信息进行验证,是否与用例设计预期相符

Post请求的body 分类

使用Content-Type来指定不同格式的请求信息,在请求头里设置,默认为text/html

Content-Type

Postmanbody格式

作用

multipart/form-data

form-data

表单的数据处理为一条消息,由boundary隔离,既可以上传多个文件(包括二进制文件),也可以上传键值

application/x-www-from-urlencoded

x-www-from-urlencoded

将表单内的数据转换为键值对,

比如,name=tom&age = 23

text/plain

raw

可以上传任意格式的文本,可以上传text

JSONxmlhtml

application/octet-stream

binary

只可以上传二进制数据,一次只能上传一个

文件

GraphQL 

针对 Graph(图状数据)进行查询

  • 请求前脚本(pre-request scripts)设置请求前置操作如设置变量等
  • 请求后(Tests)对状态码、响应头、响应正文等信息进行断言操作

JSON介绍

JSON(JavaScript Object Notation )轻量级的数据交换语言,以文字为基础,且易于阅读。

  • 对象(object):一个对象以“{”开始,并以“}”结束。每个对象包含一系列排序的名称/值对,每个名称/值对之间使用“,”区分。
  • 名称/值(collection):名称和值之间使用“:”隔开,一般的形式是:{key1:value,key2:value2}

JSON数据类型

数值(整数或浮点数)

示例:”age”:86
”price”:123.78
“temperature “:-3.5
“speed_of_light”:3.12e12

null(空值)

null(空值)
示例:”name”:”tom”
”name”:null
”name”:””

注意:””表示的是空字符串,而null表示的才是空值

逻辑值(true或false)

示例:”student”:true

对象(在花括号中)

示例:”address”:{
            “line”: 123 yuhua road”,
             “city”:”shijiazhuang”,
                                    “postalCode”:”051220”,
            “country”:”China”
    }

数组(在方括号中)

示例:"employees": [
 { "firstName":"Bill" , "lastName":"Gates" }, 

{ "firstName":"George" , "lastName":"Bush" }, 

{ "firstName":"Thomas" , "lastName":"Carter" }
]

数据在键值对中

{“name”:”tom”}

数据由逗号分隔

{“name”:”tom”,

”phone”:”13899008877”}

方括号保存数组

{“name”:”tom”,

”phone”:”13899008877”,

“Education”:[{“school”:”AAA”,”profession”:”BB”}]}

花括号保存对象

{“name”:”tom”,”phone”:”13899008877”,

”address”:{

“line”: 123 yuhua road”,

  “city”:”shijiazhuang”,

                                         “postalCode”:”051220”,

country”:”China

}

}

使用PostMan测试HTTP请求

Get请求接口测试

HTTP请求格式-POST方法

请求(Request)

请求行

POST /xinhu/index.php?a=check&m=login

HTTP/1.1

请求头

Acceptext/html,application/xhtml+xml

Accept-Encoding: gzip, deflate

Accept-Language:zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3

Connection:keep-alive

Hostlocalhost:8032

请求正文

adminuser=YWRtaW4%3A&=123456&rempass=0&button=&jmpass=false&device=1517376146707&adminpass=MTIzNDU2

响应(Response)

状态行

HTTP1.1 200 OK

响应头

Connection:Keep-Alive
Content-Encoding:gzip
Content-Length:1234
Content-Type:text/html;charset=utf-8
Date:Mon, 05 Feb 2018 02:43:40 GMT

响应正文

{"success":true,"face":"http:\/\/localhost:8032\/xinhu\/upload\/face\/1.jpg"}                                                                                                                                                

                                                                                                                                                                                                  

POST请求接口测试

Cookie

跟踪会话,弥补HTTP协议无状态的不足

如何带上用户Cookie信息

发送一个请求时,可能会要求发送这个请求前,先做用户认证(登录)

PostMan内置参数

时间戳:{{$timestamp}}

  •     {"tag":{"name":"石家庄{{$timestamp}}"}}

随机生成整数0~1000:{{$randomInt}}

  •     {"tag":{"id":104,"name":"南京{{$randomInt}}"} }

生成随机的GUID的字符串:{{$guid}}

  •     {  "tag" : { "name" : "石家庄{{$guid}}" } }

环境变量和全局变量

  • 接口测试过程中,经常需要使用已经设定好的参数或者从其他接口的返回中获取变化的参数。Postman提供了变量的机制供这种场景使用。
  • Postman变量分为全局变量和环境变量两种,在接口请求中可以选择一组环境变量使用。而全局变量可供所有请求使用。使用变量名的格式为{{变量名}}调用变量的值。

  • 环境变量用于环境

//提取token的值
var jsonData=JSON.parse(responseBody)
console.log(jsonData.access_token)
pm.environment.set("token1", jsonData.access_token);

  • 全局变量用于用例

pm.globals.set("token1", jsonData.access_token);

断言

  • 断言响应的状态码是200,状态断言

pm.test("Status code is 200", function () {
    pm.response.to.have.status(200);
});

  • 断言响应正文中包括有一个指定的字符串,业务断言

pm.test("Body matches string", function () {
    pm.expect(pm.response.text()).to.include("string_you_want_to_search");
});

  • 断言响应正文做json检查,业务断言

pm.test("Your test name", function () {
    var jsonData = pm.response.json();
    pm.expect(jsonData.value).to.eql(100);
});

  • 断言响应正文等于一个字符串

pm.test("Body is correct", function () {
    pm.response.to.have.body("response_body_string");
});

  • 断言响应头包含指定的响应头

pm.test("Content-Type is present", function () {
    pm.response.to.have.header("Content-Type");
});

  • 断言接口请求的时间小于200ms

pm.test("Response time is less than 200ms", function () {
    pm.expect(pm.response.responseTime).to.be.below(200);
});

  • 断言请求返回的状态码在指定的范围内

pm.test("Successful POST request", function () {
    pm.expect(pm.response.code).to.be.oneOf([201, 202]);
});

  • 断言状态码信息包含指定的字符串

pm.test("Status code name has string", function () {
    pm.response.to.have.status("Created");
});

全局断言多用于状态断言

接口关联(面向场景的接口测试)

JSON提取器

var jsonData=JSON.parse(responseBody)
console.log(jsonData.access_token)
pm.globals.set("token1",jsonData.access_token);

正则表达式提取器

var flag_id = responseBody.match(new RegExp('"id":(.*?),'))[1]
console.log(flag_id)
pm.globals.set("flag_id ",flag_id);

responseBody代表响应正文

测试集与数据驱动

  为了更方便地管理接口请求的执行,可以通过postman测试集(collection)来完成测试的操作,每一个测试请求可以看成一个测试用例,collections能够一次管理多个测试用例来执行

批量执行

数据驱动

PostMan加密

常见加密方式三种方式:

  • 加密算法(MD5、RSA、DES、AES、SHA)
  • 自定义加密算法
  • 接口签名

CryptoJS 是一个纯 javascript 写的加密算法类库

  • var user=CryptoJS.MD5("admin").toString().toUpperCase();
  • var pass=CryptoJS.MD5("123456").toString().toUpperCase();
  • pm.globals.set("username",user)
  • pm.globals.set("password",pass)

Newman时一款基于node.js开发的可以运行Postman的工具,使用Newman可以直接从命令行运行和测试postman集合。
 

  • 安装node.js ||  node -v
  • 安装newman: npm install -g newman  ||  npm -v
  • 从PostMan测试集导出文件 .json
  • 命令行运行 newman run ***.json

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词