目录
一、postman简介
1、postman介绍
2、postman特点
3、postman下载与安装
(1)下载
(2)安装
4、postman注册登录
5、postman卸载
二、postman工具初识
1、界面导航说明
2、发送第一个请求
(1)创建一个工程目录
(2)创建collection集合
(3)创建一个接口请求
(4)拼装一个接口请求参数
(5)发送请求
三、接口测试流程
1、接口测试分类
(1)测试外部接口
(2)测试内部接口
2、接口测试重点
3、接口测试流程
四、执行接口测试
1、postman元素含义
(1)请求
(2)响应
(3)调试
2、实例演示
(1)获取鉴权码access token接口
(2)获取公众号已创建的标签接口
(3)创建标签接口
(4)文件上传接口
(5)删除标签接口
(6)编辑标签接口
五、接口关联
1、JSON提取器
(1)取值并设置全局变量
(2)使用全局变量
2、正则表达式提取器
六、环境变量和全局变量
1、环境变量
(1)设置环境变量
(2)修改请求ip地址
(3)切换环境进行测试
2、全局变量
七、动态参数
1、系统自带的动态参数
2、自定义动态参数
八、Postman业务闭环用例
1、实例介绍
2、效果图展示
(1)获取鉴权码
(2)新建标签
(3)编辑标签
(4)查询标签
(5)删除标签
九、断言
1、断言定义
2、常见断言
3、八种断言写法
4、常用断言应用
(1)Status code:Code is 200
(2)Response body:Contains string
5、断言随机数
十、postman批量运行测试用例
十一、postman的参数化(CSV、JSON)
1、适用场景
2、接口信息
3、接口用例设计
4、数据驱动实现(参数化)
(1)data.csv文件设置
(2)data.json文件设置
(3)接口传参设置
(4)批量执行用例
(5)执行结果
十二、Cookie鉴权
1、cookie定义
2、cookie查找
3、cookie分类
(1)会话Cookie
(2)持久Cookie
4、Cookie的鉴权原理
5、Postman实现Cookie鉴权
十三、Mock测试
1、Mock定义
2、Mock目的
3、Mock意义
4、Mock应用场景
5、Mock服务
6、Postman创建Mock服务
7、Postman访问Mock服务
(1)GET请求Mock示例
(2)POST请求Mock示例
十四、处理加/解密接口
1、市面上加密技术
2、案例应用
(1)新建用户接口
(2)用户名密码进行加密
(3)发起请求
十五、Newman工具介绍
1、工具安装
(1)安装Node.js
(2)安装newman
newman安装报错
(3)安装newman-reporter-html
2、导出postman案例脚本
(1)接口案例导出
(2)环境变量导出
(3)全局变量导出
(4)导出结果
3、newman执行测试
(1)newman参数设置
(2)newman启动测试
(3)newman生成测试报告
面试题
一、postman简介
1、postman介绍
postman是一个接口测试工具,在做接口测试的时候,postman相当于一个客户端,它可以模拟用户发起的各类HTTP请求,将请求数据发送至服务端,获取对应的响应结果,从而验证响应中的结果数据是否和预期值相匹配;并确保开发人员能够及时处理接口中的bug,进而保证产品上线之后的稳定性和安全性。
它主要是用来模拟各种HTTP请求的(如:get/post/delete/put…等等),postman与浏览器的区别在于有的浏览器不能输出json格式,而postman可以更直观看到接口返回的结果。
2、postman特点
- 简单易用的图形化用户界面
- 支持保存接口请求的历史记录
- 使用测试集合Collection可以更有效的管理组织接口
- 支持团队之间同步接口数据
- 做接口功能性的测试
3、postman下载与安装
(1)下载
直接在官网下载即可
Download Postman | Get Started for Free

(2)安装
双击打开安装包直接进行安装

4、postman注册登录
刚打开时,需要注册新用户,点击【Create Acount】进行注册

输入邮箱、用户名、密码,点击注册

如图所示,即登录成功

5、postman卸载
postman如果需要卸载的话,右键图标打开文件所在位置,退回到AppData文件夹,删除local、Roaming文件夹下的postman文件夹即可

二、postman工具初识
1、界面导航说明
由于界面纯英文显示,第一次接触postman的小伙伴可能不太熟悉,这里以主界面的图做注解,来说明下各个元素的含义(后面会详细介绍到)

2、发送第一个请求
第一次使用postman时,这里以一个百度翻译接口为例:发起一个get类型的请求
(1)创建一个工程目录
注意:如果没有特别的要求,只需要创建一次即可

(2)创建collection集合
collection是postman管理接口请求的基本单位,首先就是把他创建出来,我们在自己的工程下,点击【+】号,再点击【Blank collection】创建空集合后,可进行重命名

(3)创建一个接口请求
在新建的空集合下右键点击【Add request】,新建一个接口请求,即接口用例,新建后也可重命名

(4)拼装一个接口请求参数
对于一个接口请求来说,需要三部分内容:
- 请求地址:https://fanyi-api.baidu.com/api/trans/vip/translate
- 请求方式:get
- 请求参数:params
入参示例:
q=apple
from=auto
to=zh
appid=20190630000313415
salt=888888
sign=a9adc2d687fbacecc3b5059b9ccedc95

(5)发送请求
点击url地址栏后面的send按钮发送请求

返回结果如下:
{
"from": "en",
"to": "zh",
"trans_result": [
{
"src": "apple",
"dst": "苹果"
}
]
}
三、接口测试流程
1、接口测试分类
(1)测试外部接口
是被测系统和外部系统之间的接口(一般只需要正常调用即可)
(2)测试内部接口
是被测系统内部各个模块之间的接口
- 内部接口提供给内部系统使用(一般只需要正常调用即可)
- 内部接口提供给外部系统使用(测试必须非常全面)
2、接口测试重点
测试接口参数传递的正确性,接口功能的正确性以及各种异常情况下系统的容错能力、接口的权限控制、接口的兼容性
3、接口测试流程
(1)拿到api接口文档(可以找开发拿,也可以抓包自己创建,也可以录制后自己创建),熟悉接口文档业务、接口地址、接口鉴权(鉴定是否有访问接口的权限)方式、接口入参、出参、是否有完善的错误码机制
(2)编写接口测试用例
正例:输入正常的入参,接口能够正常返回(get/post)
反例:
- 鉴权反例:必填、错误的鉴权码、鉴权码已过期…
- 参数反例:必填,参数类型异常、参数长度异常…
- 错误码反例
- 其他场景:黑名单、接口调用次数限制、分页场景
- 接口的兼容性:一个接口是否能兼容多个版本的前端
(3)使用接口测试工具postman/jmeter/apifox执行接口测试,提供bug以及bug验证
(4)Postman+Newman+Jenkins+git实现持续集成并且生成报告
四、执行接口测试
1、postman元素含义

以上图为例,对各个元素进行拆解
(1)请求
请求有四大块组成:请求方式、请求路径、请求头、请求参数
请求方式和请求路径这里就不多做解释了

Params:get请求传参
Authorization:鉴权
Headers:请求头
- accept:客户端接收的数据类型
- content-type:客户端发送给服务器的数据类型
- user-agent:客户端的类型
- xmlhttprequest:异步请求
- …
Body:post请求传参

- none:没有参数
- from-data:文件上传以及键值对(两种请求,可选)
- x-www-form-urlencoded:表单请求(键值对)
- raw:使用原始数据格式请求(JSON、XML、HTML、Text、JavaScript)
- binary:二进制文件上传
- GraphQL:不怎么使用,可忽略
Pre-request Script:请求之前的脚本
Tests:请求之后的脚本
Settings:设置
Cookies:Postman用于自动管理Cookie的功能
(2)响应

Body:返回的值
- Pretty:以不同的格式查看返回结果
- Raw:以文本格式查看返回结果
- Preview:以网页格式查看返回结果
Cookies:响应的Cookie
Headers:响应头
Test Results:断言的结果
(3)调试
Console:控制台,用于调试,位于界面左下角
2、实例演示
这里的实例在后续的内容描述中都会用到
(1)获取鉴权码access token接口
- 请求方式:GET
- 请求路径:https://api.weixin.qq.com/cgi-bin/token
- 请求参数:
grant_type=client_credential
appid=wx74a8627810cfa308
secret=e40a02f9d79a8097df497e6aaf93ab80

如图所示,点击send发起请求,下边为响应,即接口返回了一个token
(2)获取公众号已创建的标签接口
- 请求方式:GET
- 请求路径:https://api.weixin.qq.com/cgi-bin/tags/get
- 请求参数:
access_token=ACCESS_TOKEN
参数【access_token】取值需要从“获取鉴权码access token接口”中接口返回的值获取

注意:因为接口2用到了接口1返回的结果,因此存在接口关联的情况,也就是需要把接口1的值提取出来放在接口2的参数值中,具体内容见第五章
(3)创建标签接口
- 请求方式:POST
- 请求路径:https://api.weixin.qq.com/cgi-bin/tags/create?access_token={{token}}
- 请求参数:
json格式
{"tag":{"name":"陕西西安"}}


(4)文件上传接口
- 请求方式:POST
- 请求路径:https:///api.weixin.qq.com/cgi-bin/media/uploadimg?access_token={{token}}
- 请求参数:
media=文件附件

返回格式如下,这里可以根据返回地址查看浏览器中上传的图片
{"url":"http:\/\/mmbiz.qpic.cn\/mmbiz_jpg\/GXkibaAlg9h9tgVicG4UrkHUyDAvgicOPfbGkTcytsfQUsgfgh2L9jAEN8X8qEnvjOOcKRgsxoEMwH4FPWPY4y0nw\/0"}

(5)删除标签接口
- 请求方式:POST
- 请求路径:https://api.weixin.qq.com/cgi-bin/tags/delete?access_token={{token}}
- 请求参数:
{"tag":{"id":15475}}

这里的id取值也可以直接使用全局变量【tag_id】,删除新建的标签,使接口形成一个业务闭环案例
(6)编辑标签接口
- 请求方式:POST
- 请求路径:https://api.weixin.qq.com/cgi-bin/tags/update?access_token={{token}}
- 请求参数:
{
"tag": {
"id": {{tag_id}},
"name": "陕西西安{{$timestamp}}"
}
}
这里的id直接使用全局变量【tag_id】,要修改标签信息,则需要先获取到目标标签的id,这里的目标标签则是新建的标签,因此在新建标签接口请求后获取其返回结果的id作为全局变量,在编辑标签接口中调用即可


五、接口关联
1、JSON提取器
(1)取值并设置全局变量
首先获取到目标接口中的token值,将其设置为全局变量,以便别的接口能调用到该值
注意:接口返回值设置为全局变量时可以点击右边的【Set a global variable】按钮功能直接调用方法

//打印用于调试
console.log(responseBody);
//把返回的字符串转成JSON对象
var jsobj = JSON.parse(responseBody);
//取值并设置为全局变量
pm.globals.set("token", jsobj.access_token);
//console.log(jsobj.access_token);
(2)使用全局变量
在需要的接口里面通过{{token}}取得全局变量的值
{{token}}

2、正则表达式提取器
根据正则表达式获取到接口中的token值,将其设置为全局变量,其他步骤同方式1一致
//正则表达式提取器
console.log(responseBody);
//通过正则表达式匹配值(match匹配)
var datas = responseBody.match(new RegExp('"access_token":"(.*?)"'));
console.log(datas[1]);
//设置成全局变量
pm.globals.set("token",datas[1] );

六、环境变量和全局变量
全局变量:在所有的接口里面都可以访问的变量
环境变量:在当前环境里面可以访问的变量
1、环境变量
(1)设置环境变量

(2)修改请求ip地址
把所有请求中的ip地址改成获取环境变量的方式,如下图所示
{{ip}}

(3)切换环境进行测试
在postman右上角选择不同的环境即可,这里环境可选项就是在【Environments】中新建的环境

注意:不同环境中的变量必须是一致的,变量值不一致
2、全局变量
【Environments】中的Globals即为全局变量统称,点击它就会看到全局变量了,具体构建全局变量可参考第五章

七、动态参数
1、系统自带的动态参数
{{$timestamp}} //动态时间戳
{{$randomInt}} //动态0-100的整型
{{$guid}} //动态的guid字符串
2、自定义动态参数
//自定义动态参数生成随机数
var times = Date.now();
pm.globals.set("times", times);
//定时5秒再执行
const sleep = (milliseconds) => {
const start = Date.now();
while(Date.now() <= start + milliseconds) {}
};
sleep(5000);
八、Postman业务闭环用例
我们以第四章的实例来做讲解

一个完整的接口业务闭环案例如下步骤:
- 获取鉴权码
- 新建标签
- 编辑标签
- 查询标签
- 删除标签
1、实例介绍
拿到鉴权码,新建标签后,获取新建的标签id,根据该id对标签进行修改,修改后全量查询标签,接着再根据id删除该标签,这样就形成了一个完整的闭环
2、效果图展示
各个接口详图展示如下,仅作参考(与第四章的实例构建差别不大,这里不清晰的话可以返回上面根据请求路径自己创建)
(1)获取鉴权码


(2)新建标签


(3)编辑标签

(4)查询标签

(5)删除标签

九、断言
1、断言定义
所谓断言,就是对返回的响应结果,做正误判断,如果结果符合设定的预期则判定为pass,如果结果与预期不符则判定为fail。
断言主要是在Test操作框内进行设置,使用JavaScript语言编写,断言的结果在下方响应内容的TestResult内。
2、常见断言

- Status code:Code is 200----------------------------------检查返回的状态码是否为200
- Response body:Contains string-------------------------检查返回的数据中包括有指定的字符串
- Response body:JSON value check---------------------检查json中的其中一个字段的值
- Response body:Is equal to a string---------------------检查返回的值等于一个指定的字符串
- Response headers:Content-Type header check----检查是否包含响应头Content-Type
- Response time id less than 200ms----------------------检查请求耗时小于200ms
- Status code:Successful POST request-----------------检查返回的状态码是否在数组中
- Status code:Code name has string----------------------检查状态信息是指定的字符串
有背景底色的为常用断言
3、八种断言写法
//--------------------断言---获取鉴权码access token接口---
pm.test("检查返回状态码为200", function () {
pm.response.to.have.status(200);
});
pm.test("检查返回的结果中包含指令字符串", function () {
pm.expect(pm.response.text()).to.include("access_token");
});
pm.test("检查json中其中一个字段的值", function () {
var jsonData = pm.response.json();
pm.expect(jsonData.字段名).to.eql(7200);
});
//-----------在编辑标签接口中加的断言-----------------------------
pm.test("检查返回的值等于一个指定的字符串", function () {
pm.response.to.have.body('{"errcode":0,"errmsg":"ok"}');
});
//--------------------------------------------------------------
pm.test("检查是否包含响应头Content-Type", function () {
pm.response.to.have.header("Content-Type");
});
pm.test("检查请求耗时小于300ms", function () {
pm.expect(pm.response.responseTime).to.be.below(300);
});
pm.test("检查返回的状态码是否在数组中", function () {
pm.expect(pm.response.code).to.be.oneOf([200, 202]);
});
pm.test("检查状态信息是指定的字符串", function () {
pm.response.to.have.status("OK");
});
4、常用断言应用
(1)Status code:Code is 200
在创建标签接口中加检查返回的状态码的断言,断言即在请求之后,如下图所示:
//状态断言
pm.test("Status code is 200", function () {
pm.response.to.have.status(200);
});

(2)Response body:Contains string
检查返回的数据中是否包含指定的字符串,创建标签接口返回的结果中包含id和name,其中name为字符串格式,因此我们可以给该接口加断言
//检查返回结果是否包含指定字符串
pm.test("Body matches string", function () {
pm.expect(pm.response.text()).to.include("陕西西安"+pm.globals.get("times"));
});

注意:这里获取到的随机数【times】是因为设置了前置脚本-自定义动态参数,因此断言中可以获取到接口返回结果中文后的随机数
//自定义动态参数生成随机数
var times = Date.now();
pm.globals.set("times", times);

5、断言随机数
一旦需要断言随机数,那么必须使用自定义动态参数
注意事项:
- 在断言中不能使用【{{}}】的方式取全局变量,要通过【pm.globals.get(“times”)】方式获取全局变量
- 在断言中取数据文件的值,不能使用【pm.globals.get(“times”)】方式,需要使用【文件名.文件字段名】
十、postman批量运行测试用例
在自己创建的collection集合右上角点击【Run collection】,打开批量执行窗口,设置执行次数以及间隔时长,点击执行



十一、postman的参数化(CSV、JSON)
1、适用场景
当一个接口需要测试多个场景用例:正向用例、反向异常用例,可以使用数据驱动的形式实现
2、接口信息
以【获取鉴权码access token接口】为例,该接口有三个必传参数:grant_type、appid、secret
3、接口用例设计
| 正向用例 | 反向用例 |
| grant_type、appid、secret必填 | grant_type无值,appid、secret必填 |
| grant_type、secret必填,appid无值 | |
| grant_type、appid必填,secret无值 |
4、数据驱动实现(参数化)
(1)data.csv文件设置
| grant_type | appid | secret |
| client_credential | wx74a8627810cfa308 | e40a02f9d79a8097df497e6aaf93ab80 |
| wx74a8627810cfa308 | e40a02f9d79a8097df497e6aaf93ab80 | |
| client_credential | e40a02f9d79a8097df497e6aaf93ab80 | |
| client_credential | wx74a8627810cfa308 |

(2)data.json文件设置
[
{"grant_type":"client_credential","appid":"wx74a8627810cfa308","secret":"e40a02f9d79a8097df497e6aaf93ab80"},
{"grant_type":"","appid":"wx74a8627810cfa308","secret":"e40a02f9d79a8097df497e6aaf93ab80"},
{"grant_type":"client_credential","appid":"","secret":"e40a02f9d79a8097df497e6aaf93ab80"},
{"grant_type":"client_credential","appid":"wx74a8627810cfa308","secret":""},
]

(3)接口传参设置
变量名与文件中的变量名一致,变量值直接调用全局变量(文件中的变量都默认为全局变量)

(4)批量执行用例
在自己创建的collection集合右上角点击【Run collection】,打开批量执行窗口,选择csv或者json文件,选择后会自动带入执行次数,再勾选要测试的接口,点击执行


(5)执行结果
正例测试通过,反例发送请求时报错

十二、Cookie鉴权
1、cookie定义
存储在客户端的一小段文本信息,格式为键值对的形式
2、cookie查找
以下面的网页为例,打开谷歌浏览器,右键点击检查【F12】,查看界面cookie


3、cookie分类
(1)会话Cookie
保存在内存,当浏览器关闭之后会自动删除cookie
(2)持久Cookie
保存在磁盘,当浏览器关闭之后不会清除,只有在失效时间到了之后才会清除
注意:Cookie的值是在服务端设置,在客户端存储,可以设置Cookie的失效时间
4、Cookie的鉴权原理
(1)当客户端第一次访问服务器的时候,服务器就会生成Cookie信息,并且通过响应里的Set-Cookie将Cookie值传输给客户端,客户端接收并自动存储Cookie值。
(2)当客户端第二次访问服务器的时候,客户端就会自动读取本地的cookie,然后根据主机IP或者域名添加对应的cookie,从而实现鉴权
5、Postman实现Cookie鉴权
Postman会自动完成cookie鉴权,无需手动完成。
获取cookie以后,postman发请求不用自己手动添加cookie,他会自动帮我们填写cookie在请求头上


十三、Mock测试
1、Mock定义
Mock是一种比较特殊的测试技巧,可以在没有依赖项的情况下进行接口或单元测试,通常情况下,Mock与其他方法的区别是,用于模拟代码依赖对象,并允许设置对应的期望值
2、Mock目的
因项目中任务的不同分工,会出现每个人的任务进度不一样的情况,就会出现模块A开发完成,但其依赖项模块B还未完成,这时候如果进行集成测试时,就会出现两个模块无法有效完成工作。针对这种情况,Mock服务便应运而生。Postman中的Mock服务器可以减轻团队开发中这种不同步的情况。
3、Mock意义
在API开发的前期,构建Mock集合可以帮助团队之间进行清晰有效沟通,并尽快就预期结果达成一致,在实际开发过程中,所有人员可以同步并行工作,减少因相互依赖而导致延期的风险
4、Mock应用场景
- 前后端联调
- 调用第三方接口测试错误场景
- demo演示
5、Mock服务
Mock不是一个真实的服务,仅是一个被伪装成真实服务的假服务,通过Mock,可以测试我们API并检验结果是否正确。
Postman可以创建两种类型的Mock服务
- 私有Mock:私有Mock服务需要在请求头中添加Postman API key,如X-Api-Key:postman API key
- 公有Mock:公有Mock服务可以被任何人访问,在使用过程中不需要添加Postman API key
6、Postman创建Mock服务
(1)点击左侧图标【Mock Servers】,点击【Create Mock Server】,在右侧填写相应的Mock服务器参数,并点击【Next】,如下所示

(2)填写Mock服务器的相关信息并点击【Create Mock Server**】**

(3)在创建Mock Server成功后,会出现如下界面

7、Postman访问Mock服务
不需要做任何配置,创建Mock服务后,postman会自动创建集合以及环境变量,直接发送请求即可(切换至Collections,发送请求)
(1)GET请求Mock示例

(2)POST请求Mock示例

十四、处理加/解密接口
1、市面上加密技术
(1)对称式加密:DES,AES,Base64加密
(2)非对称式加密:RSA加密 (BEJSON网址可用)
非对称式加密也叫双钥加密(公钥和私钥【公钥加密,私钥解密】/【私钥加密,公钥解密】)
(3)只加密不解密:MD5,SHA1,SHA3
(4)混合加密(自定义加密方式):使用多种加密方式
(5)接口签名Sign
2、案例应用
这里以一个简单的用户登录接口为例,讲解如何测试加/解密,接口文档中有描述用哪种加密技术(这里是我的本地接口,想要实操的小伙伴可以自己搭建)
(1)新建用户接口
- 请求方式:POST
- 请求路径:http://127.0.0.1:8787/dar/user/login
- 请求参数:user_name、passwd
(2)用户名密码进行加密
在前置脚本中使用Base64位进行加密,分别对入参【user_name和passwd】取值进行加密
//Base64位加密
//把需要加密的值转换成utf-8的编码格式
var us = CryptoJS.enc.Utf8.parse("test01");
var pw = CryptoJS.enc.Utf8.parse("admin123");
//对转换后的值做Base64加密
var bs64_us = CryptoJS.enc.Base64.stringify(us);
var bs64_pw = CryptoJS.enc.Base64.stringify(pw);
//设置为全局变量
pm.globals.set("bs64_us", bs64_us.toString().toUpperCase());
pm.globals.set("bs64_pw", bs64_us.toString().toUpperCase());
(3)发起请求
如图所示,用户登录成功
十五、Newman工具介绍
Newman 是一款基于Node.js开发的,专为 postman 而生的命令行工具,通过命令行执行
通过 Newman 执行脚本,可以在 Jenkins 上实现 postman 接口测试持续集成,是一种非常简单方便进行接口测试的方法
1、工具安装
(1)安装Node.js
下载地址:下载 | Node.js 中文网 (nodejs.cn)
下载后一路next ,安装后,打开cmd,输入node -v ,看到输出node的版本信息,即代表安装成功,环境变量设置也正确
注意:安装的时候多等待一会,不要着急点击取消
(2)安装newman
点击【win+R】,输入cmd打开命令行,直接在命令行输入安装命令即可安装
//安装命令
npm install -g newman

验证是否安装成功
//验证命令
newman -v

newman安装报错
安装newman时如果遇到了如下报错,CERT_HAS_EXPIRED是一个由Node.js和npm抛出的错误,表示你正在尝试访问的服务器的SSL证书已经过期

解决办法:
1、清除npm缓存
npm cache clean --force
2、取消ssl验证:
npm config set strict-ssl false
3、再进行安装(1)正常安装:
npm install -g newman(2)npm镜像源安装:
npm install -g newman --registry=https://registry.npm.taobao.org
如果上面的步骤还是安装失败的话,再试试更换镜像源
npm config set registry http://registry.cnpmjs.org
npm config set registry http://registry.npm.taobao.org
(3)安装newman-reporter-html
使用命令安装 html 报告模板,方便查看测试用例执行结果
//安装html报告模板
npm install -g newman-reporter-html
2、导出postman案例脚本
这里需要导出接口用例、环境变量以及全局变量三部分内容
(1)接口案例导出

(2)环境变量导出

(3)全局变量导出

(4)导出结果
导出文件都为json格式,这里要注意的是,文件命名不要用中文命名

3、newman执行测试
(1)newman参数设置
| 参数 | 用法 |
| -e | – environment 后面跟环境变量文件 |
| -g | – global 后面跟全局变量文件 |
| -n | – iteration-count 后面跟迭代次数 |
| -d | – iteration-data 指定用于迭代的数据源文件 |
| -r | – reporters 后面跟数据结果 |
| html | 将结果生成为html文件,指定生成到具体目录需要配合 --reporter-html-export 文件名 使用 |
(2)newman启动测试
使用指令newman run xxx.postman_collection.json 即可启动测试,我这里以上边的导出文件做示例,输入指令:
newman run "e:\\newmans\\yongli.json" -e "e:\\newmans\\huanjing.json" -g "e:\\newmans\\quanju.json"

(3)newman生成测试报告
输入指令后生成测试报告【report.html】
newman run "e:\\newmans\\yongli.json" -e "e:\\newmans\\huanjing.json" -g "e:\\newmans\\quanju.json" -r cli,html,json,junit --reporter-html-export "e:\\newmans\\report.html"

面试题
1、GET请求和POST请求的区别是什么?
答:
(1)GET请求一般用于获取数据,POST请求一般用于提交数据
(2)传参的方式不一样
# GET请求在接口地址里面以【?】的方式传参,多个参数之间用【&】分隔
# POST是在body当中传参
(3)POST请求比GET请求安全
(4)GET请求只发一个数据报文,POST请求发送两个数据报文
这两年,IT行业面临经济周期波动与AI产业结构调整的双重压力,确实有很多运维与网络工程师因企业缩编或技术迭代而暂时失业。
很多人都在提运维网工失业后就只能去跑滴滴送外卖了,但我想分享的是,对于运维人员来说,即便失业以后仍然有很多副业可以尝试。
运维网工测试副业方向
运维,千万不要再错过这些副业机会!
第一个是知识付费类副业:输出经验打造个人IP
在线教育平台讲师
操作路径:在慕课网、极客时间等平台开设《CCNA实战》《Linux运维从入门到精通》等课程,或与培训机构合作录制专题课。
收益模式:课程销售分成、企业内训。
技术博客与公众号运营
操作路径:撰写网络协议解析、故障排查案例、设备评测等深度文章,通过公众号广告、付费专栏及企业合作变现。
收益关键:每周更新2-3篇原创,结合SEO优化与社群运营。
第二个是技术类副业:深耕专业领域变现
企业网络设备配置与优化服务
操作路径:为中小型企业提供路由器、交换机、防火墙等设备的配置调试、性能优化及故障排查服务。可通过本地IT服务公司合作或自建线上接单平台获客。
收益模式:按项目收费或签订年度维护合同。
远程IT基础设施代维
操作路径:通过承接服务器监控、日志分析、备份恢复等远程代维任务。适合熟悉Zabbix、ELK等技术栈的工程师。
收益模式:按工时计费或包月服务。
网络安全顾问与渗透测试
操作路径:利用OWASP Top 10漏洞分析、Nmap/BurpSuite等工具,为企业提供漏洞扫描、渗透测试及安全加固方案。需考取CISP等认证提升资质。
收益模式:单次渗透测试报告收费;长期安全顾问年费。
比如不久前跟我一起聊天的一个粉丝,他自己之前是大四实习的时候做的运维,发现运维7*24小时待命受不了,就准备转网安,学了差不多2个月,然后开始挖漏洞,光是补天的漏洞奖励也有个四五千,他说自己每个月的房租和饭钱就够了。

为什么我会推荐你网安是运维人员的绝佳副业&转型方向?
1.你的经验是巨大优势: 你比任何人都懂系统、网络和架构。漏洞挖掘、内网渗透、应急响应,这些核心安全能力本质上是“攻击视角下的运维”。你的运维背景不是从零开始,而是降维打击。
2.越老越吃香,规避年龄危机: 安全行业极度依赖经验。你的排查思路、风险意识和对复杂系统的理解能力,会随着项目积累而愈发珍贵,真正做到“姜还是老的辣”。
3.职业选择极其灵活: 你可以加入企业成为安全专家,可以兼职“挖洞“获取丰厚奖金,甚至可以成为自由顾问。这种多样性为你提供了前所未有的抗风险能力。
4.市场需求爆发,前景广阔: 在国家级政策的推动下,从一线城市到二三线地区,安全人才缺口正在急剧扩大。现在布局,正是抢占未来先机的黄金时刻。

运维网工测试转行学习路线

(一)第一阶段:网络安全筑基
1. 阶段目标
你已经有运维经验了,所以操作系统、网络协议这些你不是零基础。但要学安全,得重新过一遍——只不过这次我们是带着“安全视角”去学。
2. 学习内容
**操作系统强化:**你需要重点学习 Windows、Linux 操作系统安全配置,对比运维工作中常规配置与安全配置的差异,深化系统安全认知(比如说日志审计配置,为应急响应日志分析打基础)。
**网络协议深化:**结合过往网络协议应用经验,聚焦 TCP/IP 协议簇中的安全漏洞及防护机制,如 ARP 欺骗、TCP 三次握手漏洞等(为 SRC 漏扫中协议层漏洞识别铺垫)。
**Web 与数据库基础:**补充 Web 架构、HTTP 协议及 MySQL、SQL Server 等数据库安全相关知识,了解 Web 应用与数据库在网安中的作用。
**编程语言入门:**学习 Python 基础语法,掌握简单脚本编写,为后续 SRC 漏扫自动化脚本开发及应急响应工具使用打基础。
**工具实战:**集中训练抓包工具(Wireshark)、渗透测试工具(Nmap)、漏洞扫描工具(Nessus 基础版)的使用,结合模拟场景练习工具应用(掌握基础扫描逻辑,为 SRC 漏扫工具进阶做准备)。
(二)第二阶段:漏洞挖掘与 SRC 漏扫实战
1. 阶段目标
这阶段是真正开始“动手”了。信息收集、漏洞分析、工具联动,一样不能少。
熟练运用漏洞挖掘及 SRC 漏扫工具,具备独立挖掘常见漏洞及 SRC 平台漏扫实战能力,尝试通过 SRC 挖洞搞钱,不管是低危漏洞还是高危漏洞,先挖到一个。
2. 学习内容
信息收集实战:结合运维中对网络拓扑、设备信息的了解,强化基本信息收集、网络空间搜索引擎(Shodan、ZoomEye)、域名及端口信息收集技巧,针对企业级网络场景开展信息收集练习(为 SRC 漏扫目标筛选提供支撑)。
漏洞原理与分析:深入学习 SQL 注入、CSRF、文件上传等常见漏洞的原理、危害及利用方法,结合运维工作中遇到的类似问题进行关联分析(明确 SRC 漏扫重点漏洞类型)。
工具进阶与 SRC 漏扫应用:
-
系统学习 SQLMap、BurpSuite、AWVS 等工具的高级功能,开展工具联用实战训练;
-
专项学习 SRC 漏扫流程:包括 SRC 平台规则解读(如漏洞提交规范、奖励机制)、漏扫目标范围界定、漏扫策略制定(全量扫描 vs 定向扫描)、漏扫结果验证与复现;
-
实战训练:使用 AWVS+BurpSuite 组合开展 SRC 平台目标漏扫,练习 “扫描 - 验证 - 漏洞报告撰写 - 平台提交” 全流程。
SRC 实战演练:选择合适的 SRC 平台(如补天、CNVD)进行漏洞挖掘与漏扫实战,积累实战经验,尝试获取挖洞收益。
恭喜你,如果学到这里,你基本可以下班搞搞副业创收了,并且具备渗透测试工程师必备的「渗透技巧」、「溯源能力」,让你在黑客盛行的年代别背锅,工作实现升职加薪的同时也能开创副业创收!
如果你想要入坑黑客&网络安全,笔者给大家准备了一份:全网最全的网络安全资料包需要保存下方图片,微信扫码即可前往获取!
因篇幅有限,仅展示部分资料,需要点击下方链接即可前往获取
优快云大礼包:《黑客&网络安全入门&进阶学习资源包》免费分享
(三)第三阶段:渗透测试技能学习
1. 阶段目标
全面掌握渗透测试理论与实战技能,能够独立完成渗透测试项目,编写规范的渗透测试报告,具备渗透测试工程师岗位能力,为护网红蓝对抗及应急响应提供技术支撑。
2. 学习内容
渗透测试核心理论:系统学习渗透测试流程、方法论及法律法规知识,明确渗透测试边界与规范(与红蓝对抗攻击边界要求一致)。
实战技能训练:开展漏洞扫描、漏洞利用、电商系统渗透测试、内网渗透、权限提升(Windows、Linux)、代码审计等实战训练,结合运维中熟悉的系统环境设计测试场景(强化红蓝对抗攻击端技术能力)。
工具开发实践:基于 Python 编程基础,学习渗透测试工具开发技巧,开发简单的自动化测试脚本(可拓展用于 SRC 漏扫自动化及应急响应辅助工具)。
报告编写指导:学习渗透测试报告的结构与编写规范,完成多个不同场景的渗透测试报告撰写练习(与 SRC 漏洞报告、应急响应报告撰写逻辑互通)。
(四)第四阶段:企业级安全攻防(含红蓝对抗)、应急响应
1. 阶段目标
掌握企业级安全攻防、护网红蓝对抗及应急响应核心技能,考取网安行业相关证书。
2. 学习内容
护网红蓝对抗专项:
-
红蓝对抗基础:学习护网行动背景、红蓝对抗规则(攻击范围、禁止行为)、红蓝双方角色职责(红队:模拟攻击;蓝队:防御检测与应急处置);
-
红队实战技能:强化内网渗透、横向移动、权限维持、免杀攻击等高级技巧,模拟护网中常见攻击场景;
-
蓝队实战技能:学习安全设备(防火墙、IDS/IPS、WAF)联动防御配置、安全监控平台(SOC)使用、攻击行为研判与溯源方法;
-
模拟护网演练:参与团队式红蓝对抗演练,完整体验 “攻击 - 检测 - 防御 - 处置” 全流程。
应急响应专项: -
应急响应流程:学习应急响应 6 步流程(准备 - 检测 - 遏制 - 根除 - 恢复 - 总结),掌握各环节核心任务;
-
实战技能:开展操作系统入侵响应(如病毒木马清除、异常进程终止)、数据泄露应急处置、漏洞应急修补等实战训练;
-
工具应用:学习应急响应工具(如 Autoruns、Process Monitor、病毒分析工具)的使用,提升处置效率;
-
案例复盘:分析真实网络安全事件应急响应案例(如勒索病毒事件),总结处置经验。
其他企业级攻防技能:学习社工与钓鱼、CTF 夺旗赛解析等内容,结合运维中企业安全防护需求深化理解。
证书备考:针对网安行业相关证书考试内容(含红蓝对抗、应急响应考点)进行专项复习,参加模拟考试,查漏补缺。
运维网工测试转行网络攻防知识库分享
网络安全这行,不是会几个工具就能搞定的。你得有体系,懂原理,能实战。尤其是从运维转过来的,别浪费你原来的经验——你比纯新人强多了。
但也要沉得住气,别学了两天Web安全就觉得自己是黑客了。内网、域渗透、代码审计、应急响应,要学的还多着呢。
如果你真的想转,按这个路子一步步走,没问题。如果你只是好奇,我劝你再想想——这行要持续学习,挺累的,但也是真有意思。
关于如何学习网络安全,笔者也给大家整理好了全套网络安全知识库,需要的可以扫码获取!
因篇幅有限,仅展示部分资料,需要点击下方链接即可前往获取
优快云大礼包:《黑客&网络安全入门&进阶学习资源包》免费分享
1、网络安全意识

2、Linux操作系统

3、WEB架构基础与HTTP协议

4、Web渗透测试

5、渗透测试案例分享

6、渗透测试实战技巧

7、攻防对战实战

8、CTF之MISC实战讲解

关于如何学习网络安全,笔者也给大家整理好了全套网络安全知识库,需要的可以扫码获取!
因篇幅有限,仅展示部分资料,需要点击下方链接即可前往获取


1403

被折叠的 条评论
为什么被折叠?



