- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在 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
的增加。
在 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 运行脚本
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 请求正文
脚本运行和更新环境文件
关于node.js - 在 NodeJS 中运行 Postman Newman 时通过测试修改环境,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48209900/
SQLite、Content provider 和 Shared Preference 之间的所有已知区别。 但我想知道什么时候需要根据情况使用 SQLite 或 Content Provider 或
警告:我正在使用一个我无法完全控制的后端,所以我正在努力解决 Backbone 中的一些注意事项,这些注意事项可能在其他地方更好地解决......不幸的是,我别无选择,只能在这里处理它们! 所以,我的
我一整天都在挣扎。我的预输入搜索表达式与远程 json 数据完美配合。但是当我尝试使用相同的 json 数据作为预取数据时,建议为空。点击第一个标志后,我收到预定义消息“无法找到任何内容...”,结果
我正在制作一个模拟 NHL 选秀彩票的程序,其中屏幕右侧应该有一个 JTextField,并且在左侧绘制弹跳的选秀球。我创建了一个名为 Ball 的类,它实现了 Runnable,并在我的主 Draf
这个问题已经有答案了: How can I calculate a time span in Java and format the output? (18 个回答) 已关闭 9 年前。 这是我的代码
我有一个 ASP.NET Web API 应用程序在我的本地 IIS 实例上运行。 Web 应用程序配置有 CORS。我调用的 Web API 方法类似于: [POST("/API/{foo}/{ba
我将用户输入的时间和日期作为: DatePicker dp = (DatePicker) findViewById(R.id.datePicker); TimePicker tp = (TimePic
放宽“邻居”的标准是否足够,或者是否有其他标准行动可以采取? 最佳答案 如果所有相邻解决方案都是 Tabu,则听起来您的 Tabu 列表的大小太长或您的释放策略太严格。一个好的 Tabu 列表长度是
我正在阅读来自 cppreference 的代码示例: #include #include #include #include template void print_queue(T& q)
我快疯了,我试图理解工具提示的行为,但没有成功。 1. 第一个问题是当我尝试通过插件(按钮 1)在点击事件中使用它时 -> 如果您转到 Fiddle,您会在“内容”内看到该函数' 每次点击都会调用该属
我在功能组件中有以下代码: const [ folder, setFolder ] = useState([]); const folderData = useContext(FolderContex
我在使用预签名网址和 AFNetworking 3.0 从 S3 获取图像时遇到问题。我可以使用 NSMutableURLRequest 和 NSURLSession 获取图像,但是当我使用 AFHT
我正在使用 Oracle ojdbc 12 和 Java 8 处理 Oracle UCP 管理器的问题。当 UCP 池启动失败时,我希望关闭它创建的连接。 当池初始化期间遇到 ORA-02391:超过
关闭。此题需要details or clarity 。目前不接受答案。 想要改进这个问题吗?通过 editing this post 添加详细信息并澄清问题. 已关闭 9 年前。 Improve
引用这个plunker: https://plnkr.co/edit/GWsbdDWVvBYNMqyxzlLY?p=preview 我在 styles.css 文件和 src/app.ts 文件中指定
为什么我的条形这么细?我尝试将宽度设置为 1,它们变得非常厚。我不知道还能尝试什么。默认厚度为 0.8,这是应该的样子吗? import matplotlib.pyplot as plt import
当我编写时,查询按预期执行: SELECT id, day2.count - day1.count AS diff FROM day1 NATURAL JOIN day2; 但我真正想要的是右连接。当
我有以下时间数据: 0 08/01/16 13:07:46,335437 1 18/02/16 08:40:40,565575 2 14/01/16 22:2
一些背景知识 -我的 NodeJS 服务器在端口 3001 上运行,我的 React 应用程序在端口 3000 上运行。我在 React 应用程序 package.json 中设置了一个代理来代理对端
我面临着一个愚蠢的问题。我试图在我的 Angular 应用程序中延迟加载我的图像,我已经尝试过这个2: 但是他们都设置了 src attr 而不是 data-src,我在这里遗漏了什么吗?保留 d
我是一名优秀的程序员,十分优秀!