赞
踩
Postman是一款优秀的HTTP接口测试软件,它最初是谷歌浏览器的插件,后来独立成PC软件,支持多平台(macOS / Windows / Linux)安装。测试对于开发人员开发高质量的应用不可或缺,对于后端开发,除了必要的单元测试之外,也应对HTTP接口层进行相应的测试,对于前端开发,除了对接口进行检验外,也可以Mock接口服务,达到与后端并行开发的目的。
准备:学习前需掌握基本的HTTP协议和请求响应模型
设置:在导航工具栏右侧打开设置面板
Postman对接口测试就是创建一个HTTP接口的请求(Request),然后发送请求,检验响应结果。在Postman中,每个请求(或请求集合)都自己的名称和描述。
我们可以把API接口签名定义为:Method + URL
,不管是普通接口还是RESTful风格设计的接口,两个不同的API不可能存在相同的请求方法和请求URL。
URL:在接口请求窗口直接输入URL,可以在 Params 标签页可以添加URL请求参数,如果是RESTful风格接口,可以使用:
添加 Path Variable:
https://api.library.com/:entity/
对于URL需要注意:
http://
EncodeURIComponent
来手动进行编码Headers:在 Headers 标签页中就可以管理请求头
点击
Presets
来管理常用的请求头,可以对请求头进行预设置,比如多个接口使用相同的请求头。
Method:在URL输入栏左侧下拉框设置请求方式。
可以在侧边栏
History
中查看请求历史记录
Postman提供几乎所有的请求体,在 Body 标签页中配置接口请求的请求体,在你选择不同的请求体格式时,Postman会自动添加对应的Content-Type
请求头,Binary形式的请求体不会自动添加。
None:(默认)没有请求体
Form-data:配置multipart/form-data
格式的请求体,支持文件上传
Urlencoded:配置与URL请求参数相同的编码格式,不支持文件上传
Raw:原生请求体,Postman不会对请求体做任何修改,除了替换变量之外
Binary:配置无法输入的内容,比如:文本、图像、音频、视频文件
使用Raw格式请求体可以选择不同内容格式来高亮显示请求体内容,比如XML、JSON等,还可以点击Beautify(
Ctrl+B
)来格式化内容。URL请求参数格式:
a=b&b=c&b=d
,GET请求是将参数使用?
号连接放置在URL后面,POST请求的Urlencoded方式则是将参数放置在请求体里。在输入参数的时候可以直接将
JSON
复制粘贴到参数表格中,可以快速输入参数。
在请求标签栏右侧单击 Cookies 可以管理请求的Cookie。
Authorization标签页用来配置接口权限请求头,支持多种权限:
响应是请求接口后的返回,Postman支持查看多种类型响应,JSON、XML、HTML等,支持格式化和预览功能。
Headers:在响应的 Headers 标签页中可以查看响应的请求头
响应时间:在响应的标签页右侧可以查看接口的响应时间
响应大小:在响应的标签页右侧可以查看接口的响应内存大小
Cookies:在响应的 Cookies 标签页查看接口响应的Cookie
Tests:在响应的 Test Results 标签页查看接口测试的结果
在 Body 标签页中查看响应的响应体,Postman也支持种查看格式。
Pretty:对响应体内容格式化显示,比如JSON、XML等
Raw:原生显示,Postman对响应体不会做任何修改
Preview:预览显示,Postman会对HTML响应进行渲染
在Pretty显示模式中,如果想要Postman自动格式化显示JSON、XML等响应体,确保接口响应返回相应的
Content-Type
,如果没有,你需要手动强制转换,也可以通过设置 Settings | General | REQUEST | Language detection 来设置默认返回类型。
点击标签页右侧的 Save 按钮可以保存请求该次的响应结果,保存后可以通过点击窗口右上角的 Examples 来查看该接口保存的响应结果。
接口保存的响应结果可以用作Mock时接口的返回结果。
Postman支持代理服务器功能,手机等客户端可以通过连接Postman代理服务器实现抓包功能。
点击导航栏右侧工具栏中的雷达按钮,通过配置端口和过滤规则,以及Target,一般设置为History,这样就可以在 History 请求历史记录里面查看拦截客户端的请求,这样简单的配置后,当前PC就可以当作代理服务器了,然后手机网络配置代理为当前PC的IP地址和前面配置的端口,就可以实现抓包。
Postman可以通过当前请求来生成各种语言的代码片段,点击请求的标签页右侧的 Code 来创建,通过选择左上角的下拉列表来选择不同的语言或框架。
Postman的集合可以对一组请求分类,也可以为一类请求创建文件夹。为什么要创建集合?
单击侧边栏的 + New Collection 或工具栏第一个 + New 按钮可以创建一个集合,创建集合的时候可以针对集合添加下面内容:
集合的授权、脚本和变量对该集合下的所有请求有效。针对集合的配置,可以抽象该集合下请求的公共配置,从而减少配置量,至于脚本的执行后面会说到。
单击集合右侧的 ▸图标打开集合的详情栏,集合名称下面存在以后按钮菜单和标签页,按钮菜单如下:
标签页如下:
单击集合右侧的菜单 … 打开集合的菜单项,除去与详情页相同的功能菜单外如下:
Postman中对请求、文件夹和集合添加描述时,可以使用Markdown语言来编写,支持插入图片等内容,在生成接口文档的时候就可以很好得展示描述内容。
版本管理和Git原理一样,在多人协作的时候,可以从主集合Fork一个一样的集合出来,各自维护,然后可以将各自的修改合并到主集合上,也可以从主集合上摘取最新的集合版本。你可以从个人的工作空间或团队的工作空间中Fork一个集合,前提是工作空间属于你或者你是团队工作空间的一个成员。
点击集合的菜单项选择 Create a fork 来创建一个Fork集合。
Fork集合的时候不会Fork集合的Mock数据和监控数据,如果你要使用需要重新创建。
在Fork集合后,如果主集合被其他人更新了,此时Fork集合和主集合就不会一样,在这种情况下,可以点击Fork集合的菜单选择 Merge changes 来拉取最新的修改。
在Fork集合后,如果你对Fork集合做了一个修改,想要将修改合并到主集合上面去,可以点击Fork集合的菜单选择 Merge changes 来操作。
在合并修改的时候有下面三个选择:
当两个或以上用户编辑了同一个请求、文件夹或集合时,在合并集合的时候会产生冲突,在这种情况下,我们在合并集合的时候需要先解决冲突在进行合并操作。
如果你对Git有所了解,对版本管理这一节掌握没有太大问题。
Postman可以导入和导出集合、环境、全局变量和请求头预配置,也可以通过文件和URL形式资源导入其他格式的API数据,比如Swagger、WADL等等。
Postman可以以JSON文件形式导出所有数据,包括各种元数据,你可以重新导入JSON文件来创建集合,或者使用Newman在命令行界面运行该JSON文件。
导出集合:点击集合菜单的 Export 来导出集合数据
导出环境:打开 Manage Environment 界面来配置和导出环境数据
导出数据:打开设置菜单,点击 Data | Export data | Download 来导出全部数据,包括所有集合、环境、全局变量和请求头预配置等数据。
Postman可以通过文件或URL资源来导入API数据,导入的数据格式可以是多种多样的,比如:
导入步骤:
Postman基于Node.js开发了一个强大的运行脚本平台,可以在请求和集合运行前后添加更多的动态操作,你可以使用它来编写测试用例、构建请求,你可以在下面两个事件执行的时候添加JavaScript代码:
console.log('...')
等打印日志的代码时,会在Postman的控制台输出,可以点击左下角的控制台(Ctrl+Alt+C
)图标打开:Postman的脚本执行原理是Postman基于Node.js开发,并自带一个沙箱环境来运行JavaScript脚本
前置脚本在发送请求之前执行,可以用来定义参数构建请求,比如在发送的请求中添加一个时间请求头:
在请求的 Pre-request Script 标签中编写下面代码:
pm.globals.set("timestampHeader", new Date());
在请求头 Headers 标签添加timestamp请求头,并使用{{timestampHeader}}
来使用变量
不管是全局变量还是环境变量,还是集合的变量,都可以在URL、表单、请求体等输入框通过
{{var}}
来使用变量。
使用JavaScript语言来为每个请求编写测试。
在Postman发送请求之后,可以访问响应对象 pm.response
,例如:
// pm.response.to.have pm.test("response is ok", function () { pm.response.to.have.status(200); }); // pm.expect() pm.test("environment to be production", function () { pm.expect(pm.environment.get("env")).to.equal("production"); }); // response 断言 pm.test("response should be okay to process", function () { pm.response.to.not.be.error; pm.response.to.have.jsonBody(""); pm.response.to.not.have.jsonBody("error"); }); // pm.response.to.be* pm.test("response must be valid and have a body", function () { pm.response.to.be.ok; pm.response.to.be.withBody; pm.response.to.be.json; });
在编写脚本的时候虽然你只需要记住很少的一些代码,Postman在编辑栏也提供了常用的代码片段,来帮助你更快的编写脚本。
在响应的 Tests 标签栏可以看到所有测试的结果。
在编辑集合或者文件夹的时候可以添加脚本。当你运行一个集合或文件夹时,里面包含多个请求,可以使用脚本来控制请求的工作流:
设置当前请求执行完的下一个请求
postman.setNextRequest("request_name");
设置当前请求执行完后停止请求
postman.setNextRequest(null);
使用 postman.setNextRequest()
注意的点:
postman.setNextRequest()
,Runner将按顺序执行后续请求下面是常用的测试脚本:
设置环境变量
pm.environment.set("variable_key", "variable_value");
设置嵌套对象环境变量
var array = [1, 2, 3, 4];
pm.environment.set("array", JSON.stringify(array, null, 2));
var obj = { a: [1, 2, 3, 4], b: { c: 'val' } };
pm.environment.set("obj", JSON.stringify(obj));
获取环境变量
pm.environment.get("variable_key");
获取嵌套对象环境变量
var array = JSON.parse(pm.environment.get("array"));
var obj = JSON.parse(pm.environment.get("obj"));
清除环境变量
pm.environment.unset("variable_key");
设置全局变量
pm.globals.set("variable_key", "variable_value");
获取全局变量
pm.globals.get("variable_key");
清除全局变量
pm.globals.unset("variable_key");
获取变量:从环境变量和全局变量中搜索
pm.variables.get("variable_key");
检验响应体中是否包含字符串
pm.test("Body matches string", function () {
pm.expect(pm.response.text()).to.include("string_you_want_to_search");
});
检验响应体中是否等于字符串
pm.test("Body is correct", function () {
pm.response.to.have.body("response_body_string");
});
检验响应的JSON的值
pm.test("Your test name", function () {
var jsonData = pm.response.json();
pm.expect(jsonData.value).to.eql(100);
});
检验是否存在Content-Type
pm.test("Content-Type is present", function () {
pm.response.to.have.header("Content-Type");
});
检验响应时间是否小于200毫秒
pm.test("Response time is less than 200ms", function () {
pm.expect(pm.response.responseTime).to.be.below(200);
});
检验状态码是否为200
pm.test("Status code is 200", function () {
pm.response.to.have.status(200);
});
检验状态码名称包含字符串
pm.test("Status code name has string", function () {
pm.response.to.have.status("Created");
});
检验状态码是否在某个范围内
pm.test("Successful POST request", function () {
pm.expect(pm.response.code).to.be.oneOf([201,202]);
});
使用TinyValidator校验JSON数据
var schema = {
"items": {
"type": "boolean"
}
};
var data1 = [true, false];
var data2 = [true, 123];
pm.test('Schema is valid', function() {
pm.expect(tv4.validate(data1, schema)).to.be.true;
pm.expect(tv4.validate(data2, schema)).to.be.true;
});
JSON校验
var Ajv = require('ajv'),
ajv = new Ajv({logger: console}),
schema = {
"properties": {
"alpha": {
"type": "boolean"
}
}
};
pm.test('Schema is valid', function() {
pm.expect(ajv.validate(schema, {alpha: true})).to.be.true;
pm.expect(ajv.validate(schema, {alpha: 123})).to.be.false;
});
base64解码
var intermediate,
base64Content,
rawContent = base64Content.slice('data:application/octet-stream;base64,'.length);
intermediate = CryptoJS.enc.Base64.parse(base64content);
pm.test('Contents are valid', function() {
pm.expect(CryptoJS.enc.Utf8.stringify(intermediate)).to.be.true;
});
发送异步请求:该函数可以用于前置脚本和测试脚本中
pm.sendRequest("https://postman-echo.com/get", function (err, response) {
console.log(response.json());
});
XML转换成JSON对象
var jsonObject = xml2Json(responseBody);
Postman脚本提供了简单实用的API用于测试和工作流。
require(moduleName:String):function → *
require
函数可以导入Postman沙箱内置的模块库,包含下列内置库:
_
object is for v3.10.1)一些NodeJS的模块也可以使用:
使用函数导入模块赋值给变量,例如:
var atob = require('atob'),
_ = require('lodash'),
arrayOfStrings,
base64Strings;
arrayOfStrings = ['string1', 'string2'];
base64Strings = _.map(arrayOfStrings, atob);
console.log(base64Strings);
pm:Object
pm
对象封装了有关脚本执行的所有信息,可以用来获取请求、响应信息,也可以获取和设置环境环境变量和全局变量。
pm.info:Object
pm.info
对象包含了脚本执行时的信息,比如请求名称,请求ID和迭代次数都保存在这对象中。
pm.info.eventName:String
:执行脚本名称,前置脚本:prerequest,测试脚本:testpm.info.iteration:Number
:Runner执行时的当前迭代计数pm.info.iterationCount:Number
:迭代执行时的迭代总数pm.info.requestName:String
pm.info.requestId:String
pm.sendRequest:Function
pm.sendRequest
函数可以用来发送HTTP/HTTPS的异步请求,异步请求,只是在后台处理一些繁重的复杂的逻辑,或是发送多个请求,而不要等待阻塞下一个请求,你可以使用回调函数来处理返回结果。该函数可以用于前置脚本和测试脚本中。
// 普通URL pm.sendRequest('https://postman-echo.com/get', function (err, res) { if (err) { console.log(err); } else { pm.environment.set("variable_key", "new_value"); } }); // 构建SDK请求 const echoPostRequest = { url: 'https://postman-echo.com/post', method: 'POST', header: 'headername1:value1', body: { mode: 'raw', raw: JSON.stringify({ key: 'this is json' }) } }; pm.sendRequest(echoPostRequest, function (err, res) { console.log(err ? err : res.json()); }); // 包含测试 pm.sendRequest('https://postman-echo.com/get', function (err, res) { if (err) { console.log(err); } pm.test('response should be okay to process', function () { pm.expect(err).to.equal(null); pm.expect(res).to.have.property('code', 200); pm.expect(res).to.have.property('status', 'OK'); }); });
参考:
pm.globals:VariableScope
pm.globals.has(variableName:String):function → Boolean
pm.globals.get(variableName:String):function → *
pm.globals.set(variableName:String, variableValue:String):function
pm.globals.unset(variableName:String):function
pm.globals.clear():function
pm.globals.toObject():function → Object
pm.environment:VariableScope
pm.environment.has(variableName:String):function → Boolean
pm.environment.get(variableName:String):function → *
pm.environment.set(variableName:String, variableValue:String):function
pm.environment.unset(variableName:String):function
pm.environment.clear():function
pm.environment.toObject():function → Object
pm.variables:VariableScope
在Postman中,所有的变量定义都是有优先级的,在当前迭代请求中定义的变量优先于在环境中定义的变量,而环境变量优先于全局变量。优先级:Iteration Data
> Environment
>Global
,在环境中或全局定义的变量都可以通过下面函数获取到。
pm.variables.get(variableName:String):function → *
pm.request:Request
pm.request
对象包含请求信息,例如:
pm.request.url:
Url
pm.request.headers:
HeaderList
pm.response:Response
pm.response
对象包含响应信息,例如:
pm.response.code:Number
pm.response.reason():Function → String
pm.response.headers:
HeaderList
pm.response.responseTime:Number
pm.response.text():Function → String
pm.response.json():Function → Object
pm.iterationData:VariableScope
pm.iterationData
对象在使用Runner运行集合或文件夹时通过数据文件导入的数据。
pm.iterationData.get(variableName:String):function → *
pm.iterationData.toObject():function → Object
pm.cookies:CookieList
cookies
对象可以获取到Cookies信息,例如:
pm.cookies.has(cookieName:String):Function → Boolean
检查在当前的请求域名中是否存在特定的Cookie
pm.cookies.get(cookieName:String):Function → String
获取特定Cookie的值
pm.cookies.toObject:Function → Object
以对象形式获取 Cookies的值
pm.test(testName:String, specFunction:Function):Function
你可以使用该函数来编写测试点,来检验响应是否符合预期:
pm.test("response should be okay to process", function () {
pm.response.to.not.be.error;
pm.response.to.have.jsonBody('');
pm.response.to.not.have.jsonBody('error');
});
pm.expect(assertion:*):Function → Assertion
pm.expect
是一个通用断言函数,使用ChaiJS expect BDD library标准,这个库可以让测试代码更具可读性。
pm.test('environment to be production', function () {
pm.expect(pm.environment.get('env')).to.equal('production');
});
pm.response.to.have.status(code:Number)
pm.response.to.have.status(reason:String)
pm.response.to.have.header(key:String)
pm.response.to.have.header(key:String, optionalValue:String)
pm.response.to.have.body()
pm.response.to.have.body(optionalValue:String)
pm.response.to.have.body(optionalValue:RegExp)
pm.response.to.have.jsonBody()
pm.response.to.have.jsonBody(optionalExpectEqual:Object)
pm.response.to.have.jsonBody(optionalExpectPath:String)
pm.response.to.have.jsonBody(optionalExpectPath:String, optionalValue:*)
pm.response.to.have.jsonSchema(schema:Object)
pm.response.to.have.jsonSchema(schema:Object, ajvOptions:Object)
pm.response.to.be.info
:检验1XX状态码pm.response.to.be.success
:检验2XX状态码pm.response.to.be.redirection
:检验3XX状态码pm.response.to.be.clientError
:检验4XX状态码pm.response.to.be.serverError
:检验5XX状态码pm.response.to.be.error
:检验4XX状态码或5XX状态码pm.response.to.be.ok
:检验状态码是否为200pm.response.to.be.accepted
:检验状态码是否为202pm.response.to.be.badRequest
:检验状态码是否为400pm.response.to.be.unauthorized
:检验状态码是否为401pm.response.to.be.forbidden
:检验状态码是否为403pm.response.to.be.notFound
:检验状态码是否为404pm.response.to.be.rateLimited
:检验状态码是否为429Postman支持设置各种不同作用域的变量,可以在脚本中引用这些变量,也可以在请求的URL、参数、请求体等地方使用{{var_name}}
来调用,Postman可以在集合中设置变量,可以创建环境抽象来设置变量,也可以设置作用域最大的全局变量。简而言之,使用变量可以:
所有变量的值都只能是字符串类型,如果有复杂的对象类型,可以使用JSON字符串来设置。例如:
var str = JSON.stringify(object); var obj = JSON.parse(str);
- 1
- 2
Postman中有5种作用域:
不同作用域有着不同的优先级,作用域的大小如下图所示,如果在两个作用域中有同名变量,取优先级大的作用域中的值,作用域越大,优先级越低。
使用{{variableName}}
在构建请求时的任务地方插入变量的值,比如接口的域名、参数、请求头等地方。例如:
在脚本中通过代码获取在各个作用域中设置的变量:
pm.environment.get()
和pm.environment.set()
来获取和设置环境变量pm.globals.get()
和pm.globals.set()
来获取和设置全局变量pm.variables.get()
可以从任何作用域中搜索值,使用pm.variables.set()
来设置变量在新建和编辑集合的时候,可以在Variables标签页里定义集合变量。
在使用 Runner 运行集合的时候,你可以导入CSV或者JSON数据文件,然后使用这些数据发送HTTP请求,这些数据的会根据字段名称导入为变量。这些变量在请求中一样可以使用{{variableName}}
来插入,在脚本中可以使用pm.iterationData.get("username")
来获取,例如:
Postman提供了几个内置变量来加强请求,你可以在请求的URL、请求头或请求体等地方通过{{...}}
来使用,这些变量包括:
{{$guid}}
:生成字符串UUID{{$timestamp}}
:生成当前时间的时间戳{{$randomInt}}
:生成0到1000的随机整数点击界面右上角的眼睛图标可以快速查看当前的环境变量和全局变量。
当测试API的时候,你可能需要在本地环境、开发环境、测试环境或者生产环境使用不同的变量设置,使用环境变量可以很容易的实现这一功能。
点击界面右上方的 Manage Environments 图标来管理环境变量和全局变量。
点击 Add 按钮添加环境变量,点击 Globals 按钮添加全局变量。
点击界面右上方的下拉列表框可以选择环境,选择不同的环境激活不同的变量组。
点击界面右上方的“眼睛”图标,可以快速浏览当前的环境变量和全局变量,点击 Edit 可以编辑。
下图描述了Postman中变量的工作方式:
变量使用示例:假设我们创建了三个集合C1、C2和C3,还创建了三个环境Dev、Staging和Prod,在三个环境中都存在一个URL变量,在不同的环境有不同的值。每个集合中有一个定义超时的变量,集合C1中的是10,C2中的是20,C3中的是30。定义一个全局变量重试次数为3,如下图所示。
现在,选择不同的环境就可以使用不同的URL,每个集合下的超时时间是不一样的,但与哪个环境无关,全局变量不管在哪个环境,哪个集合下都是一样的。
集合是一组请求,它可以针对不同环境运行,当运行集合或者文件夹的时候,这一组请求有序地运行,集合运行对于自动化测试API是非常有用的,你可以按照业务逻辑顺序一个接一个的执行请求,结合脚本形成的请求工作流更是提高了接口测试的机动性。
点击左上角的 Runner 按钮开启集合或文件夹运行。
选择相应的集合或者文件夹,并配置好运行规则,就可以批量运行请求了。
在运行集合的时候可以导入外部数据文件,文件格式可以是 json
也可以是 CSV
。这可以方便的导入更多的测试用例,增加测试的case覆盖度。
导入 CSV
数据格式:
path, value
post, 1
post, 2
post, 3
post, 4
在集合运行的时候,可以配置迭代次数,也就是一个集合或文件夹重复请求多少次。请求结果会统一处理,请求完成后查看结果如下,可以点击 Run Summary 查看结果统计。
当你在运行一个集合的时候,所有的请求都是按照集合中请求列表的顺序执行的,如果你需要按照自己的执行顺序,你可以使用 postman.setNextRequest()
来指定当前请求执行的下一个请求。使用该函数,将你的请求按照业务顺序串联起来,就会形成一个请求工作流,在自动化测试中非常有用。
Newman是Postman的集合运行命令行工具,可以使用它直接使用命令行运行Postman请求集合,你可以很简单的集成到你的持续集成服务器中,比如:Jenkins。
Newman使用Node.js构建,所以在安装使用之前,你需要在电脑上搭建Node环境,然后安装并使用:
# 安装 Newman
$ npm install -g newman
# 运行集合
$ newman run mycollection.json
# 查看命令帮助
$ newman run -h
你也可以在你的Node项目中使用Newman,只需安装后在代码中引入包即可:
var newman = require('newman'); // require newman in your project
// call newman.run to pass `options` object and wait for callback
newman.run({
collection: require('./sample-collection.json'),
reporters: 'cli'
}, function (err) {
if (err) { throw err; }
console.log('collection run complete!');
});
Postman支持请求接口生成API文档的功能,以便管理各个分类的接口,不过只支持在浏览器中查看。在集合的详情栏中点击 View in web 就可以实时查看该集合的接口文档。
Postman支持Mock服务功能,这在前端和后端协同开发的时候,并不需要前端开发人员等后端开发人员接口开发完成才能进行对接,可以实现前后端并行开发,可大大地降低开发延迟,这和别的Mock服务一样,只需要维护请求接口和接口响应示例。
创建一个Mock服务的步骤如下:
在创建Mock服务的时候要注意,如何维护接口的响应示例,因为别人请求Mock服务器的时候,返回正确的响应示例是很重要的,而Postman中对Mock接口的响应是通过 Examples 来维护的,可以直接点击 右上方的 Examples 来创建响应示例,也可以保存当前请求的响应创建来创建示例,点击 Save Response | Save as example。
在集合中创建好了请求和示例后,就可以在集合的详情页面创建Mock服务器了,创建好后会生成一个服务器URL,URL的格式为:https://{{mockId}}.mock.pstmn.io
,然后就可以请求Mock服务的接口了,例如请求路径为 /get
的接口:
https://b75a340e-4268-4b20-8f5f-3cfc8f37cec6.mock.pstmn.io/get
在使用Postman的时候,为了分开存放每个项目的请求集合,比如自己私人项目和公司项目,可以创建多个工作空间,每个工作空间的所有配置都是独立存在的,它们之间互不影响。Postman支持私人工作空间和团队工作空间,这两种类型的操作都一样,唯一不同的是团队工作空间可以有多个开发人员维护,在团队协作上功能更强大。点击界面上方的 Workspace 就可以配置和切换工作空间。
在前面的学习当中,我们掌握了Postman的大部分操作,下面讲解在实际工作当中怎样使用Postman是最高效的。我们会基于Postman的工作空间、环境变量、脚本等功能来完成接口的请求和测试。
使用不同的工作空间
上一节已经说过针对不同的项目创建不同的工作空间,分类维护请求集合。
使用不同的环境
对实际项目中的环境抽象,这些环境中的变量针对所有的集合有效,可以配置基于环境的变量,例如:
除了上面的配置外,还有别的基于环境的配置都可以在环境变量中配置。
不同的环境配置不同的 host 地址,可以是域名或者IP地址:
不同的系统使用不同的集合
每个系统使用独立的集合,可以维护针对集合的变量和脚本,例如:
每个系统的接口权限校验方式
每个系统的接口返回成功测试脚本
每个系统的服务器端口号
除了上面的之外,还有别的基于系统的配置都可以转换成针对某个请求集合的配置。
在某个系统下的全局测试脚本可以在集合中定义,比如接口是否请求成功测试:
在某个系统作用域下的变量,也就是只有该系统下的请求才使用的变量可以在集合中定义,比如该系统的服务器端口号:
系统中不同类型的接口使用不同的文件夹
在一个系统中,每个流程的接口,或者某个类型的接口应该创建独立的文件夹,因为在创建工作流进行自动化的时候,可以直接运行该文件夹。
请求中使用变量
上面我们基于环境和基于集合都创建了变量,在请求的构建中,应该使用变量,比如前面定义的服务器地址和端口号,这样设计的好处就是,我们可以在不同的系统中都可以使用 {{host}}:{{port}}
的形式来配置接口的服务器根路径,然后针对不同的环境进行请求,只需切换环境而不需要对请求进行修改。
使用预置请求头
如果是多个请求的请求头都一样,可以预先配置好请求头,然后直接使用。
从登录接口中获取Token
如果接口的权限设计是通过Token来实现的,可以在登录的请求中添加测试脚本,把登录成功后返回的Token值配置成全局变量,以便后续的请求使用,而不用手动去复制粘贴。
可能还有更多的高效操作方法,可以一起研究,对工具的熟练程度影响着你的开发效率。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。