大家好,我是阿萨。 昨天介绍了Postman的前置操作是干什么的?有同学反馈说对Postman 提供的javascript 对象不熟悉,希望介绍下。今天这一篇文章就专门给大家介绍下。
Postman提供了可以在请求脚本中使用的JavaScript api。pm对象提供了测试请求和响应数据的功能,同时还有变量设置方法。
Postman的API 都是pm.* 提供的。 所以所有的脚本开头是pm 开头的。
一。脚本中变量的使用方法
pm对象提供了访问全局变量、集合变量和环境变量以及pm的方法。变量方法用于访问不同作用域的变量和设置局部变量。
1. 检查当前范围内是否有Postman变量:
pm.variables.has(variableName:String):function → Boolean
2. 获取具有指定名称的Postman变量的值:
pm.variables.get(variableName:String):function → *
3. 用指定的名称和值设置一个局部变量:
pm.variables.set(variableName:String, variableValue:*):function
4. 使用{{$variableName}}返回脚本中动态变量的解析值:
pm.variables.replaceIn(variableName:String):function: → *
例如:
const stringWithVars = pm.variables.replaceIn("This is {{$randomFirstName}}’s offical account");console.log(stringWithVars);
5. 返回一个包含所有变量及其值在当前作用域内的对象。根据优先级的顺序,这将包含来自多个作用域的变量。
pm.variables.toObject():function → Object
变量范围决定了当你引用变量时Postman给它们的优先级,按照优先级递增的顺序:全局>集合>环境>数据>当地的具有最近作用域的变量将覆盖其他任何变量。
例如,如果在当前集合和活动环境中都有名为asa的变量,并且调用pm.variables.get('asa'), Postman将返回环境变量的当前值。当您使用pm.variables设置变量值时。设置时,该值是本地的,仅在当前请求或收集运行时持久存在。
//collection var 'asa' = 1 //environment var 'asa' = 2 //first request run console.log(pm.variables.get('asa'));//outputs 2 console.log(pm.collectionVariables.get('asa'));//outputs 1 console.log(pm.environment.get('asa'));//outputs 2 //second request run pm.variables.set('asa', 3);//local var console.log(pm.variables.get('asa'));//outputs 3 //third request run console.log(pm.variables.get('asa'));//outputs 2
二.如何 在脚本中使用环境变量
1. 获取当前环境的名称:
pm.environment.name:String
2.检查环境中是否有指定名称的变量:
pm.environment.has(variableName:String):function → Boolean
3. 在当前环境中获取具有指定名称的变量:
pm.environment.get(variableName:String):function → *
4. 在当前环境中用指定的名称和值设置变量:
pm.environment.set(variableName:String, variableValue:*):function
5. 使用{{$variableName}}语法返回脚本中动态变量的解析值:
pm.environment.replaceIn(variableName:String):function → *
例如:
const stringWithVars = pm.environment.replaceIn("I am {{firstName}} and I am {{age}}.");console.log(stringWithVars);
6. 在一个对象中返回当前环境中的所有变量及其值:
pm.environment.toObject():function → Object
7.从当前环境中移除一个变量,按名称指定该变量:
pm.environment.unset(variableName:String):function
8. 清除当前环境中的所有变量:
pm.environment.clear():function
注意,编辑变量的能力取决于工作空间中的访问级别。
三. 如何在脚本中使用集合变量
1. 检查集合中是否有指定名称的变量:
pm.collectionVariables.has(variableName:String):function → Boolean
2. 返回指定名称的集合变量的值:
pm.collectionVariables.get(variableName:String):function → *
3. 使用指定的名称和值设置集合变量:
pm.collectionVariables.set(variableName:String, variableValue:*):function
4. 使用{{$variableName}}语法返回脚本中动态变量的解析值:
pm.collectionVariables.replaceIn(variableName:String):function → *
例如:
//collection has vars firstName and ageconst stringWithVars = pm.collectionVariables.replaceIn("Hi, my name is {{firstName}} and I am {{age}}.");console.log(stringWithVars);
5. 返回所有变量及其值
pm.collectionVariables.toObject():function → Object
6. 从集合中移除指定的变量:
pm.collectionVariables.unset (variableName: String)
7. 清除集合中的所有变量:
pm.collectionVariables.clear()
四. 如何在脚本中使用全局变量?
1. 检查是否有指定名称的全局变量:
pm.globals.has (variableName: String)
2.返回指定名称的全局变量的值:
pm.globals.get (variableName: String)
3. 使用指定的名称和值设置全局变量:
pm.globals.set(variableName:String, variableValue:*):function
4.使用{{$variableName}}语法返回脚本中动态变量的解析值:
pm.globals.set(variableName:String, variableValue:*):function
5. 返回一个对象中的所有全局变量及其值:
pm.globals.toObject()
6. 移除指定的全局变量:
pm.globals.unset (variableName: String)
7.清除工作空间中的所有全局变量:
pm.globals.clear()
五。在脚本中使用数据变量
1. 检查当前迭代数据中是否存在指定名称的变量:
pm.iterationData.has (variableName: String)
2.从迭代数据中返回一个具有指定名称的变量:
pm.iterationData.get (variableName: String)
3. 返回对象中的迭代数据变量:
pm.iterationData.toObject():
4. 将iterationData对象转换为JSON格式:
pm.iterationData.toJSON()
5. 移除指定的变量:
pm.iterationData.unset(key:String)
六。使用请求和响应数据编写脚本
1. 使用请求数据编写脚本
1)请求URL:
pm.request.url: Url
2).当前请求的Header列表:
pm.request.headers: HeaderList
3)HTTP请求方法:
pm.request.method
4)请求体中的数据。这个对象是不可变的,不能通过脚本修改:
pm.request.body: RequestBody
5).为当前请求添加一个指定名称和值的头:
pm.request.headers.add(headerkey:HeaderValue)
6)删除指定名称的请求头:
pm.request.headers.remove (headerName: String)
7)插入指定的报头名称和值(如果报头不存在,否则已经存在的报头将更新为新的值):
pm.request.headers.upsert({key: headerName:String, value: headerValue:String})
2. 使用响应数据编写脚本
1)响应状态码:
pm.response.code
2)状态文本字符串:
pm.response.status
3)响应头列表:
pm.response.headers: HeaderList
4)响应接收所需的时间(以毫秒为单位):
pm.response.responseTime
5)收到响应的大小:
pm.response.responseSize
6)响应文本:
pm.response.text()
7)响应JSON,你可以用它来深入到接收到的属性:
pm.response.json()
3.使用请求信息编写脚本
info对象提供与请求和脚本本身相关的数据,包括名称、请求ID和迭代计数。
1)事件,它将是先决条件或测试,取决于脚本在请求中的执行位置:
pm.info.eventName:
2)当前迭代的值:
pm.info.iteration
3)计划运行的迭代的总数:
pm.info.iterationCount
4)正在运行的请求的保存名称:
pm.info.requestName
5)一个唯一的GUID,用来标识正在运行的请求:
pm.info.requestId
4. 使用请求cookie编写脚本
1) 检查请求域是否存在特定的cookie(由名称指定):
pm.cookies.has (cookieName: String)
2). 获取指定cookie的值:
pm.cookies.get (cookieName: String)
3). 获取一个对象中所有cookie及其值的副本。返回为请求域和路径定义的所有cookie:
pm.cookies.toObject()
4)还可以使用pm.cookies.jar来指定访问请求cookie的域。要通过pm.cookies.jar方法实现编程访问,首先要将cookie URL添加到allowlist中。访问cookie jar对象:
pm.cookies.jar()
5)使用名称和值设置cookie:
jar.set(URL:String, cookie name:String, cookie value:String, callback(error, cookie)):Function → Object
6)使用PostmanCookie或兼容对象设置cookie:
jar.set(URL:String, { name:String, value:String, httpOnly:Bool }, callback(error, cookie)):Function → Object
例如:
const jar = pm.cookies.jar(); jar.set("httpbin.org", "session-id", "abc123", (error, cookie) => { if (error) { console.error(`An error occurred: ${error}`); } else { console.log(`Cookie saved: ${cookie}`); } });, cookie) => { if (error) { console.error(`An error occurred: ${error}`); } else { console.log(`Cookie saved: ${cookie}`); }});
7)从Cookie jar里拿一个Cookie:
jar.get(URL:String, cookieName:String, callback (error, value)):Function → Object
8)把Cookie jar里的cookie都拿出来。这些cookie可以在回调函数中使用:
jar.getAll(URL:String, callback (error, cookies))
9)删除一个cookie:
jar.unset(URL:String, token:String, callback(error))
10)清除Cookie jar里的所有cookie:
jar.clear(URL:String, callback (error))
七。从脚本发送请求
你可以使用Pm.sendRequest从前置脚本或测试脚本异步发送请求。如果正在执行计算或同时发送多个请求,而无需等待每个请求完成。您可以通过添加回调函数来避免阻塞问题,以便代码可以在Postman收到响应时进行响应。然后,可以对响应数据进行任何处理。你可以通过pm.sendRequest方法提供一个URL字符串,或者可以提供JSON格式的完整请求配置,包括头、方法、正文等等。
//使用普通字符串URL的示例 pm.sendRequest('https://postman-echo.com/get', (error, response) => { if (error) { console.log(error); } else { console.log(response); } }); // Example with a full-fledged request const postRequest = { url: 'https://postman-echo.com/post', method: 'POST', header: { 'Content-Type': 'application/json', 'X-Foo': 'bar' }, body: { mode: 'raw', raw: JSON.stringify({ key: 'this is json' }) } }; pm.sendRequest(postRequest, (error, response) => { console.log(error ? error : response.json()); }); // Example containing a test pm.sendRequest('https://postman-echo.com/get', (error, response) => { if (error) { console.log(error); } pm.test('response should be okay to process', () => { pm.expect(error).to.equal(null); pm.expect(response).to.have.property('code', 200); pm.expect(response).to.have.property('status', 'OK'); }); });
今天内容比较多。但是在Postman 脚本中确实比较重要。希望大家都认证学习。