Postman使用学习

使用变量

通过将值存储在变量中,可以在整个集合、环境和请求中引用它,如果需要更新该值,只需在一个地方更改它。
Postman 支持以下变量范围:
Global
Collection
Environment
Data
Local


image.png

如果在两个不同的作用域中声明了同名变量,则使用作用域最窄的变量中存储的值——例如,如果有一个Globa变量和一个Local变量都命名为username,则在请求时将使用Local变量运行。

  • 全局变量允许您访问集合、请求、测试脚本和环境之间的数据。全局变量在整个工作区中都可用。
    由于全局变量会造成混淆,因此您应该只谨慎使用它们——例如,快速测试某些东西或当您的项目处于非常早期的原型设计阶段时。*
  • 集合变量在集合中的整个请求中都可用,并且与环境无关,因此不要根据所选环境进行更改。
    如果您仅使用单个环境,则集合变量是合适的,例如用于身份验证 / URL 详细信息。*
  • 环境变量允许您针对不同环境定制处理,例如本地开发与测试或生产。一次只能激活一个环境。
    如果您只有一个环境,使用集合变量会更有效率,但是环境允许您指定基于角色的访问级别。
  • 局部变量是临时的,只能在您的请求脚本中访问。局部变量值仅限于单个请求或集合运行,并且在运行完成后不再可用。
    如果您需要一个值来覆盖所有其他变量范围,但不希望该值在执行结束后持续存在,则局部变量是合适的。
    数据变量来自外部 CSV 和 JSON 文件,用于定义在通过 Newman 或 Collection Runner 运行集合时可以使用的数据集。

在脚本中定义变量:

pm.globals.set("variable_key", "variable_value");
pm.collectionVariables.set("variable_key", "variable_value");
pm.environment.set("variable_key", "variable_value");
pm.variables.set("variable_key", "variable_value");

在脚本中使用变量:

//access a variable at any scope including local
pm.variables.get("variable_key");
//access a global variable
pm.globals.get("variable_key");
//access a collection variable
pm.collectionVariables.get("variable_key");
//access an environment variable
pm.environment.get("variable_key");

访问变量:
{{username}}
如果变量未解析,Postman 会将其突出显示为红色。

使用动态变量
动态变量的例子如下:

{{$guid}} :一个 v4 风格的guid
{{$timestamp}}: 当前时间戳(以秒为单位的 Unix 时间戳)
{{$randomInt}}: 0 到 1000 之间的随机整数
const stringWithVars = pm.variables.replaceIn("Hi, my name is {{$randomInt}}");

共享和持久化数据
创建或编辑变量时,您可以输入初始值和当前值。在 UI 中创建新变量时,如果将当前值留空,它将自动填充初始值。如果您指定一个当前值,它将仅对您的实例是本地的——Persist选项允许您将当前值推送到共享数据,更新初始值以匹配当前值。

编写脚本

您可以添加 JavaScript 代码以在流中的 2 个事件期间执行:

  1. 在将请求发送到服务器之前,作为预请求脚本选项卡下的预请求脚本。
  2. 收到响应后,作为测试选项卡下的测试脚本。

脚本执行顺序:
在 Postman 中,单个请求的脚本执行顺序如下所示:

  • 与请求关联的预请求脚本将在请求发送之前执行
  • 与请求关联的测试脚本将在请求发送后执行

对于集合中的每个请求,脚本将按以下顺序执行:

  • 与集合关联的预请求脚本将在集合中的每个请求之前运行。
  • 与文件夹关联的预请求脚本将在文件夹中的每个请求之前运行。
  • 与集合关联的测试脚本将在集合中的每个请求之后运行。
  • 与文件夹关联的测试脚本将根据文件夹中的请求运行。

编写预请求脚本

您可以在 Postman 中使用预请求脚本在请求运行之前执行 JavaScript。通过在请求、集合或文件夹的Pre-request Script选项卡中包含代码,您可以执行预处理,例如设置变量值、参数、标头和正文数据。您还可以使用预请求脚本来调试代码,例如通过将输出记录到控制台。

请求前脚本的示例用法如下:

  • 您在集合中有一系列请求并按顺序运行它们,例如使用集合运行器
  • 第二个请求取决于从第一个请求返回的值。
  • 该值需要在您将其传递给第二个请求之前进行处理。
  • 第一个请求将响应字段中的数据值设置为其测试脚本中的变量。
  • 第二个请求检索该值并在其Pre-request Script 中处理它,然后将处理后的值设置为变量(在第二个请求中引用,例如在其参数中)。

脚本工具流:
在此之后运行指定的请求(集合中定义的请求名称,例如“获取客户”):

postman.setNextRequest(requestName:String):Function

在此之后运行指定的请求(由 返回的请求 ID pm.info.requestId):

postman.setNextRequest(requestId:String):Function
//script in another request calls:
//pm.environment.set('next', pm.info.requestId)
postman.setNextRequest(pm.environment.get('next'));

编写测试断言:

您可以为每个请求添加所需的任意数量的测试。
您的测试可以包含多个断言作为单个测试的一部分——您可以使用它来将相关断言组合在一起。

pm.test("The response has all properties", () => {
    //parse the response json and test three properties
    const responseJson = pm.response.json();
    pm.expect(responseJson.type).to.eql('vip');
    pm.expect(responseJson.name).to.be.a('string');
    pm.expect(responseJson.id).to.have.lengthOf(1);
});

您可以将测试脚本添加到集合、文件夹或集合中的单个请求。与集合关联的测试脚本将在集合中的每个请求之后运行。与文件夹关联的测试脚本将在文件夹中的每个请求之后运行。这允许您在每次请求后重用常用的测试。

测试响应体

您可以检查响应正文中的特定值:

pm.test("Person is Jane", () => {
  const responseJson = pm.response.json();
  pm.expect(responseJson.name).to.eql("Jane");
  pm.expect(responseJson.age).to.eql(23);
});

测试状态码

您可以测试响应状态代码:

pm.test("Status code is 201", () => {
  pm.response.to.have.status(201);
});

如果您想测试状态代码是否为一组,您可以将它们全部包含在一个数组中并使用oneOf

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

您还可以检查状态代码文本:

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

测试响应时间
您可以测试响应时间是否在指定范围内:

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

使用集合运行器

  • 每个请求之间的间隔延迟(毫秒)。
  • 一个数据文件,用于收集运行。
  • 将响应保存到日志将允许您查看它们,但可能会影响性能。
  • 持久变量意味着运行更新的任何变量在运行之后将保持更改。如果不持久化变量,运行完成后将不会保存更改。请注意,集合运行中的持久变量将仅更新当前值。
  • 如果您的请求使用 cookie,您可以选择在收集运行中禁用它们。
  • 保存 cookie 意味着在运行期间受请求影响的任何值将在它完成后保留。

设置接下来要执行的请求:

postman.setNextRequest("request_name");

循环当前请求:

提供当前运行的名称setNextRequest会导致 Postman 连续运行当前请求。
注意:在连续循环一个请求时,应该包装setNextRequest一些逻辑以确保请求不会无限期地运行,否则收集运行器将需要强制关闭。
您可以使用数据文件传递 Postman 值集以在集合运行中使用。通过在 Collection Runner 中选择 JSON 或 CSV 数据文件,您可以在单次运行中使用多个不同的值测试您的请求。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 160,333评论 4 364
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,812评论 1 298
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 110,016评论 0 246
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,293评论 0 214
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,650评论 3 288
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,788评论 1 222
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 32,003评论 2 315
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,741评论 0 204
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,462评论 1 246
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,681评论 2 249
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,168评论 1 262
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,528评论 3 258
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,169评论 3 238
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,119评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,902评论 0 198
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,846评论 2 283
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,719评论 2 274

推荐阅读更多精彩内容