我在节点脚本中运行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文件,并且“value”将保持不变。在桌面应用程序中运行相同的参数时,它可以正常工作。
是否有解决方案,这是否有效?
UPDATE1:
这是纽曼剧本:
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);"
]
}
}
],
答案 0 :(得分:1)
如果您将global
变量更改为environment
变量,则允许您在每次运行时查看更新后的值。我刚刚将您的test
代码更改为environment
而不是global
。
pm.environment.set("claimNum", + pm.environment.get("claimNum") + 1)
我创建了一个基本节点脚本来运行Newman,其中包含从Postman导出的Collection和Environment文件:
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
增加。
在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"
}
]
}
更新2
使用新信息再次修改代码后,这对我来说是本地工作:
Newman Run Script
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')
}
})
收集文件中的测试部分
"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()))"
]
}
}
]
邮递员申请机构
脚本运行和更新环境文件
答案 1 :(得分:0)
您正在寻找的是这个选项:
--export-globals <path>
调用newman时,请添加此选项以更新globals.json
。
答案 2 :(得分:0)
尽管Newman API Ref没有提及,但是您传递给options
的{{1}}对象确实支持在全局变量和环境变量中写出与newman.run
CLI相同。提示在newman issues list中找到。
newman
还要注意,由于某些奇怪的原因,其他事件侦听器,例如:newman.run({
collection: '/path/to/collection.json',
environment: require('/path/to/env'),
exportEnvironment: '/path/to/env.json',
globals: require('/path/to/global'),
exportGlobals: '/path/to/global.json'
})
.on('done', (err, summary) => {
console.log(summary.environment.values);
})
和.on('beforeItem',() => {})
没有属性.on('item',() => {})