gpt4 book ai didi

node.js - 在 NodeJS 中运行 Postman Newman 时通过测试修改环境

转载 作者:行者123 更新时间:2023-11-28 20:37:39 24 4
gpt4 key购买 nike

我在 Node 脚本中运行 Newman。该集合具有环境变量,例如 {{claimNum}},它会随着测试的每个帖子而递增。

示例:

我有这个集合请求正文

 <ClaimIdentification>
<company>0001</company>
<office>100</office>
<claimNum>{{claimNum}}</claimNum>
</ClaimIdentification>

并且在全局环境 JSON:

  {
"enabled": true,
"key": "claimNum",
"value": "15200",
"type": "text"
},

集合有这个测试:

pm.globals.set("claimNum", + pm.globals.get("claimNum") + 1);

但是当在脚本中运行时,global.json 文件不会被修改并且“值”会保持不变。当在桌面应用程序中运行相同的参数时,它会起作用。

是否有解决方案,是否可行?

更新 1:

这是 Newman 脚本:

  collection: require('${__dirname}/ThirdServiceInjured.json'),
reporters: 'json',
globals: require('${__dirname}/globals.json')

}).on('done', function (err, summary) {
if (err || summary.error) {
console.error('>>> ERROR - Collection run failed.');
}
else {
console.log(success('Collection run completed:'));
console.log(summary.run.executions[0].response.text());
}
});

更新 2:

使用此脚本但仍未覆盖环境:

const newman = require('newman'); // require newman in your project
const fs = require('fs');
const envName = '${__dirname}/environment_qbe600.json';
const env = require('${__dirname}/environment_qbe600.json');

newman.run({
collection: require('${__dirname}/ThirdServiceInjured.json'),
reporters: 'cli',
environment: envName,
iterationCount: 3

}).on('done', function (err, summary) {
if (err || summary.error) {
console.error('>>> ERROR - Collection run could failed.');
}
else {
const newmanValue = summary.environment.values.members[0].value;
env.values[0].value = newmanValue;
console.log(summary.run.executions[0].response.text());
fs.writeFile(envName, JSON.stringify(env, null, 2), function (err) {
if (err) return
})
}
});

更新 3:

这是环境:

{
"id": "ecabb925-829e-69f8-2348-f71dc76c0e87",
"name": "Test",
"values": [
{
"enabled": true,
"key": "host",
"value": "${___server}",
"type": "text"
},
{
"enabled": true,
"key": "company",
"value": "0001",
"type": "text"
},
{
"enabled": true,
"key": "claimNbr",
"value": "14600",
"type": "text"
},
{
"enabled": true,
"key": "dni",
"value": "150",
"type": "text"
},
{
"enabled": true,
"key": "cost",
"value": "107000",
"type": "text"
},
{
"enabled": true,
"key": "testNum",
"value": "157",
"type": "text"
}
],
"timestamp": 1515789551332,
"_postman_variable_scope": "environment",
"_postman_exported_at": "2018-01-12T20:39:14.795Z",
"_postman_exported_using": "Postman/5.5.0"

以及集合中的测试部分:

"event": [
{
"listen": "test",
"script": {
"type": "text/javascript",
"exec": [
"pm.environment.set(\"claimNbr\", +pm.environment.get(\"claimNbr\") + 1);",
"pm.environment.set(\"testNum\", +pm.environment.get(\"testNum\") + 1);",
"pm.environment.set(\"dni\", +pm.environment.get(\"dni\") + 1);",
"pm.environment.set(\"cost\", +pm.environment.get(\"cost\") + 1000);"
]
}
}
],

最佳答案

查看了 Postman Github account 上的以下近期问题

如果您将 global 变量更改为 environment 变量,这样您就可以在每次运行时看到更新后的值。我只是将您的 test 代码更改为 environment 而不是 global

pm.environment.set("claimNum", + pm.environment.get("claimNum") + 1)

我创建了一个基本 Node 脚本来使用从 Postman 导出的集合和环境文件运行 Newman:

var newman = require('newman')

newman.run({
collection: `${__dirname}/default_collection.json`,
environment: `${__dirname}/default_environment.json`,
reporters: 'cli',
iterationCount: 10
}, (err) => {
if (err) { throw err }
})

我在 newman 脚本中引用的两个文件:

default_collection.json

{
"info": {
"name": "Test_Collection",
"_postman_id": "d08f1b36-591a-f25f-aaaa-4368ca966fb4",
"description": "",
"schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json"
},
"item": [
{
"name": "Test_Request",
"event": [
{
"listen": "test",
"script": {
"id": "068b6634-e310-46e9-86fc-265376c65ff6",
"type": "text/javascript",
"exec": [
"console.log(pm.environment.get('claimNum'))"
]
}
}
],
"request": {
"method": "POST",
"header": [
{
"key": "Content-Type",
"value": "application/json"
}
],
"body": {
"mode": "raw",
"raw": "{\n\t\"id\": {{claimNum}}\n}"
},
"url": {
"raw": "localhost:3000/test",
"host": [
"localhost"
],
"port": "3000",
"path": [
"test"
]
},
"description": ""
},
"response": []
}
],
"event": [
{
"listen": "prerequest",
"script": {
"id": "4c1d562f-e4d5-4017-8f25-48ac0b6aa3fc",
"type": "text/javascript",
"exec": [
""
]
}
},
{
"listen": "test",
"script": {
"id": "026c029e-a427-4624-b196-3d8982a103f1",
"type": "text/javascript",
"exec": [
"pm.environment.set(\"claimNum\", + pm.environment.get(\"claimNum\") + 1)"
]
}
}
]
}

default_environment.json

{
"id": "539073e6-adab-f812-95b0-82d4d82ce4b2",
"name": "test_environment",
"values": [
{
"enabled": true,
"key": "claimNum",
"value": "9",
"type": "text"
}
],
"timestamp": 1515782483636,
"_postman_variable_scope": "environment",
"_postman_exported_at": "2018-01-12T18:42:04.661Z",
"_postman_exported_using": "Postman/5.5.0"
}

我将 iterationCount: 10 添加到脚本中,以便我可以看到每次迭代时 claimNum 的增加。

Newman Test Run

在 Postman 中,我添加了一个简单的 console.log() 以在每次测试运行时写出 claimNum - 您可以在上图中看到输出。

console.log(pm.environment.get('claimNum'))

我的请求正文使用 JSON,但 {{claimNum}}XML 的工作方式相同,就像您的示例中一样。

这是解决问题的一个方法,但因为它没有使用 global 变量,而且我不确定您的要求 - 这可能不是您想要的。


更新 1

根据您的用例 - 可以更新环境文件以显示上次运行的值,并可以在下一个请求中使用该值 - 这样就不会针对静态文件中的相同值重复运行测试.运行以下代码将运行测试,然后更新 default_environment.json 文件中的值。

const newman   = require('newman')
const fs = require('fs');
const fileName = `${__dirname}/default_environment.json`;
const file = require(fileName);

newman.run({
collection: `${__dirname}/default_collection.json`,
environment: `${__dirname}/default_environment.json`,
reporters: 'cli',
iterationCount: 3
}).on('done', function (err, summary) {
if (err || summary.error) {
console.error('>>> ERROR - Collection run failed.');
}
else {
const newmanValue = summary.environment.values.members[0].value
file.values[0].value = newmanValue

fs.writeFile(fileName, JSON.stringify(file, null, 2), function (err) {
if (err) return
})
}
})

我的 environment 文件在测试运行后看起来像这样:

{
"name": "test_environment",
"values": [
{
"enabled": true,
"key": "claimNum",
"value": 19,
"type": "text"
}
]
}

File Update


更新 2

使用新信息再次修改代码,这对我来说在本地有效:

Newman 运行脚本

const newman  = require('newman')
const fs = require('fs')
const envName = `${__dirname}/default_environment.json`
const env = require(envName)

newman.run({
collection: require(`${__dirname}/default_collection.json`),
reporters: 'cli',
environment: envName,
iterationCount: 3

}).on('done', function (err, summary) {
if (err || summary.error) {
console.error('ERROR - Collection run could failed')
}
else {
const claimNbr = summary.environment.values.members[0].value
const testNum = summary.environment.values.members[1].value
const dni = summary.environment.values.members[2].value
const cost = summary.environment.values.members[3].value

env.values[0].value = claimNbr
env.values[1].value = testNum
env.values[2].value = dni
env.values[3].value = cost

fs.writeFile(envName, JSON.stringify(env, null, 2), function (err) {
if (err) return
})
console.log('Collection run complete')
}
})

Collection 文件中的测试部分

    "name": "Test_Request",
"event": [
{
"listen": "test",
"script": {
"id": "a407e1e2-4961-4c65-af1b-22190b1ab0cc",
"type": "text/javascript",
"exec": [
"pm.environment.set(\"claimNbr\", + pm.environment.get(\"claimNbr\") + 1)",
"pm.environment.set(\"testNum\", + pm.environment.get(\"testNum\") + 1)",
"pm.environment.set(\"dni\", + pm.environment.get(\"dni\") + 1)",
"pm.environment.set(\"cost\", + pm.environment.get(\"cost\") + 1000)",
"",
"console.log(JSON.stringify(pm.response.json()))"
]
}
}
]

Postman 请求正文

Postman Request Body

脚本运行和更新环境文件

Newman Run

关于node.js - 在 NodeJS 中运行 Postman Newman 时通过测试修改环境,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48209900/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com