天道酬勤,学无止境

在邮递员中,我如何获取响应正文并在测试中的新请求中使用它(In postman, how do I take a response body and use it in a new request within Tests)

问题

我是 Postman 的新手,对 Javascript 完全陌生。

我运行了一个 Post 请求来创建一个新合同。

请求正文

{
        "progSrvcNm": "009",
        "contractPrtyNm": "PostmanAutomationContract",
        "contractCd": "000",
        "signDt": "2018-01-01",
        "startDt": "2018-01-01",
        "endDt": "2025-01-01",
        "remitTerms": 30
}

并收到以新合同号作为响应正文的 ok 响应。

"02974"

我现在想保存响应正文并在 Get 请求中使用它来确认我在 Post 中发送的数据是新合同的 get 中返回的数据。

我试图保存变量并在 Postman 中使用“发送请求”片段,当我运行时,我只得到另一个创建的新合同号的响应。

let newContractNb = pm.response.json();

pm.sendRequest("http://smat-meddev02/MedeaSMATMEDSQL01AICollationFNGAPI2.AffiliateApi/api/Get/" + newContractNb, function (err, response) {
    console.log(response.json());
});
回答1

你可以试试这个方法

在第一个 GET 请求中,获取响应正文并将所需的数据存储到postman.setEnvironmentVariable(key, value)环境中,例如postman.setEnvironmentVariable(key, value)更具体地说

var jsonData = JSON.parse(responseBody);
postman.setEnvironmentVariable("newContractNb", jsonData.newContractNb);

在第二个 GET/POST 请求中,要发送newContractNb ,您需要将其设置为GET/POST请求的一部分。

将其作为参考: http : //blog.getpostman.com/2014/01/27/extracting-data-from-responses-and-chaining-requests/

回答2

从 json 响应中解析数据并按照建议保存到变量中。

var jsonData = JSON.parse(responseBody);
postman.setEnvironmentVariable("newContractNb", jsonData);

然后使用 URL 中的变量创建了一个 GET 方法。

在此处输入图像描述

受限制的 HTML

  • 允许的HTML标签:<a href hreflang> <em> <strong> <cite> <blockquote cite> <code> <ul type> <ol start type> <li> <dl> <dt> <dd> <h2 id> <h3 id> <h4 id> <h5 id> <h6 id>
  • 自动断行和分段。
  • 网页和电子邮件地址自动转换为链接。

相关推荐
  • 邮递员-如何查看带有标头和正文数据并替换了变量的请求(Postman - How to see request with headers and body data with variables substituted)
    问题 我正在使用Postman Chrome插件调用HTTP请求进行软件测试。 我将环境功能与环境变量和全局变量一起使用,以替换请求标头和正文中的变量。 变量替换正常工作(我可以断定HTTP Server的响应表明了这一点)。 但是,在替换变量之后,我希望能够看到Request Header和Body值。 我怎样才能做到这一点? 回答1 到目前为止,Postman带有自己的“控制台”。 单击左下角的类似终端的图标以打开控制台。 发送一个请求,您就可以在Postman的控制台中检查该请求。 回答2 更新2018-12-12-Chrome应用程序v Chrome插件-最新更新 随着Postman Chrome应用的弃用,假设您现在正在使用Postman本机应用,则现在可以使用以下选项: 将鼠标悬停在变量上生成“代码”按钮/链接邮递员控制台 有关每个选项的完整详细信息,请参见下文。 就我个人而言,我仍然选择2)生成“代码”按钮/链接,因为它使我无需实际发送即可查看变量。 演示请求 演示环境 1)用鼠标悬停在变量上 2)生成“代码”按钮/链接 3)邮递员控制台 更新时间:2016-06-03 尽管上述方法确实有效,但实际上,我现在通常使用“邮递员请求”屏幕上的“生成代码”链接。 无论您选择哪种代码语言,生成的代码都包含替换变量。 点击“生成代码”链接只会更快,此外
  • 如何通过邮递员发送graphql查询?(How to send graphql query by postman?)
    问题 我用 POST type URL http://######/graphql Body: query: "query: "{'noteTypes': {'name', 'label', 'labelColor', 'groupName', 'groupLabel', 'imageUrl'}}" 但是它返回“ message”:“必须提供查询字符串”。 回答1 有一种使用REST客户端Insomnia的更好的方法 文档在这里,如何发送graphql查询:https://support.insomnia.rest/article/61-graphql 以下是邮递员的步骤 步骤1。 在Chrome中运行GraphiQL,打开Chrome开发者控制台,点击“网络”标签,然后通过graphiql进行查询,当您进行查询时,“网络”标签将显示graphql请求... 第2步。 从graphql请求中复制请求查询,选择“ Copy as cURL (cmd) 第三步 打开邮递员,在左上角单击“ Import按钮,单击“ Import您必须单击“ Paste Raw Text ,并在复制完成后按照步骤2中的步骤粘贴复制的cURL请求,然后单击“ Import 第四步。 邮递员已准备好发送Graphql请求,只需单击“ Send按钮,您将在正文的“响应”框中看到Response ,如下所示
  • 将邮递员与子域一起使用时,“无法获得任何响应”响应(“Could not get any response” response when using postman with subdomain)
    问题 我正在使用邮递员来测试我拥有的API,当请求不包含子域时一切都很好,但是当我向URL添加子域时,我会收到此响应。 无法得到任何回应连接到http://subdomain.localhost:port / api /时出错为什么会发生这种情况: 服务器无法发送响应:确保后端正常运行自签名SSL证书被阻止:通过在“设置”>“常规”中关闭“ SSL证书验证”来解决此问题代理配置不正确确保在“设置”>“代理”中正确配置了代理请求超时:在“设置”>“常规”中更改请求超时 如果我从邮递员复制相同的URL并将其粘贴到浏览器中,则会得到正确的响应,是否应该进行某种配置以使邮递员与子域一起工作? 回答1 首先转到邮递员中的设置: 在“常规”选项卡中关闭SSL证书验证: 在“代理”选项卡中,关闭“全局代理配置”和“使用系统代理” : 将请求超时设置为0(零) 回答2 我遇到过同样的问题。 这是由“ Authorization”标头值末尾的换行引起的,该值是我通过复制粘贴承载令牌(偶然在末尾包含换行符)手动设置的 回答3 如果在发送请求时从Postman本机应用程序收到“无法获得任何响应”消息,请打开Postman控制台(“查看”>“显示Postman控制台”),重新发送请求并在控制台中检查是否有任何错误日志。 感谢numaanashraf 回答4 嗨,这个问题为我解决了。 设置->常规->
  • 如何将响应正文从 Postman Collection Runner Results 导出/下载到外部文件中?(How to export/download Response Body into an external file from Postman Collection Runner Results?)
    问题 我正在开发一个项目,我必须使用不同的变量值多次访问 Web 服务 例如,http://mywebservice.com?variable1={{value}} 并且使用 Postman collection runner 传递不同的值。 我想将所有请求的响应正文下载到一个文件中。 我怎么做? 回答1 我认为您无法在集合运行器中下载请求的响应正文 - 您可以导出测试结果,但我不确定这是否包含响应正文数据。 您还可以单击运行程序中的每个请求并查看响应正文,但这仍然在 UI 中。 对于单个请求,您可以使用Send and Download选项,这将显示响应正文: 我确信有一些解决方法可以将响应主体保存为环境或全局变量,然后在之后导出它,但这似乎是一个笨拙且稍微有点破解的解决方案。 pm.globals.set('response_body', JSON.stringify(pm.response.json())) 但是,这每次都会被覆盖,因此您每次都需要更改变量名称,或者在代码中使用某些内容来更改其名称,以获得一组唯一的变量。 然后可以使用“ Manage Environment部分将这些导出并保存在本地。 回答2 如果您可以将最终数据存储在环境变量中并在 Collection Runner 完成后将其复制到文本编辑器中的 .JSON 文件中,那么这是一个简单的解决方法。 首先
  • 希望为MailChimp提供动态内容?(Looking to give MailChimp dynamic content?)
    问题 好的,我希望通过MailChimp发送每周定期发送的电子邮件。 电子邮件将向其订户包含最新的20个存货清单(车库的汽车存货清单)。 我似乎无法像想象中的那样使用RSS源,因此我想知道是否还有其他方法可以每周将一些格式化的HTML(在PHP文件中)放入MailChimp模板主体中? 非常感谢。 回答1 如果要在发送时将自定义内容注入模板中,建议您创建一个使用我们的模板语言的自定义模板。 如果您已使用我们的模板语言在MailChimp中创建了自定义模板来指定可编辑的内容区域:http://templates.mailchimp.com/getting-started/template-language/,则可以通过以下方式更新这些内容区域API。 为此,您需要进行广告系列/创建调用:https://apidocs.mailchimp.com/api/2.0/campaigns/create.php或广告系列/更新调用:https://apidocs.mailchimp .com / api / 2.0 / campaigns / update.php并指定您要更改的部分和内容作为“内容”参数的一部分。 内容“部分”将对应于已添加到自定义模板的mc:edit标签。 您还可以自定义内容,例如在您的内容主体中向问候语添加名字,甚至可以使用合并标签。 我强烈建议您也检查一下这些内容
  • MVC控制器:从HTTP正文获取JSON对象?(MVC controller : get JSON object from HTTP body?)
    问题 我们有一个MVC(MVC4)应用程序,该应用程序有时可能会收到一个从第三方发送到我们特定URL(“ http://server.com/events/”)的JSON事件。 JSON事件位于HTTP POST的正文中,而正文则严格为JSON( Content-Type: application/json不是在某些字符串字段中包含JSON的表单帖子)。 如何接收控制器主体中的JSON主体? 我尝试了以下内容,但一无所获 [编辑] :当我说什么都没得到时,我的意思是jsonBody始终为null,无论我将其定义为Object还是string 。 [HttpPost] // this maps to http://server.com/events/ // why is jsonBody always null ?! public ActionResult Index(int? id, string jsonBody) { // Do stuff here } 请注意,我知道如果我使用强类型输入参数给声明方法,则MVC会进行整个解析和过滤,即 // this tested to work, jsonBody has valid json data // that I can deserialize using JSON.net public ActionResult Index
  • 如何将邮递员用于Laravel $ _POST请求(How to use Postman for Laravel $_POST request)
    问题 我该如何尝试使用Postman向Laravel应用发送发布请求? 通常,Laravel有一个csrf_token ,我们必须通过POST / PUT请求来传递它。 如何在邮递员中获取和发送此值? 在不关闭CSRF保护的情况下,是否有可能? 回答1 编辑: 等等,我看错了问题。 您想要在不关闭CSRF保护的情况下执行此操作吗? 就像巴拉特·盖莱达(Bharat Geleda)所说:您可以制作一条仅返回令牌的路由,然后手动将其复制到邮递员的_token字段中。 但是我建议您从如下所示的CSRF保护中排除您的api调用,并在以后添加某种API身份验证。 您正在运行哪个版本的laravel? Laravel 5.2及更高版本: 从5.2开始,仅在具有web中间件的路由上才需要CSRF令牌。 因此,使用web中间件将您的api路由放到该组之外。 有关更多信息,请参见文档中的“默认路由文件”标题。 Laravel 5.1和5.2: 您可以在VerifyCsrfToken中间件中排除不具有CSRF保护的路由,如下所示: class VerifyCsrfToken extends BaseVerifier { /** * The URIs that should be excluded from CSRF verification. * * @var array */ protected
  • 从 Spring serverrequest 获取 String body(Getting String body from Spring serverrequest)
    问题 我试图从请求正文中获取简单的字符串,但不断收到错误 处理程序: @RestController public class GreetingHandler { public Mono<ServerResponse> hello(ServerRequest request) { String contentType = request.headers().contentType().get().toString(); String body = request.bodyToMono(String.class).toString(); return ServerResponse.ok().body(Mono.just("test"), String.class); } } 路由器: @Configuration public class GreetingRouter { @Bean public RouterFunction<ServerResponse> route(GreetingHandler greetingHandler) { return RouterFunctions .route(RequestPredicates.POST("/hello"),greetingHandler::hello); } } 请求有效我可以看到contenType(plainTexT
  • Express js req.body 返回空(Express js req.body returns empty)
    问题 我已经尝试了其他一些 stackoverflow 帖子中的所有解决方案,但没有解决我的问题。 这是我的app.js var express = require('express'); var path = require('path'); var favicon = require('serve-favicon'); var logger = require('morgan'); var cookieParser = require('cookie-parser'); var bodyParser = require('body-parser'); var app = express(); // view engine setup app.set('views', path.join(__dirname, 'views')); app.set('view engine', 'jade'); // uncomment after placing your favicon in /public //app.use(favicon(path.join(__dirname, 'public', 'favicon.ico'))); app.use(logger('dev')); app.use(bodyParser.urlencoded({ extended: false }))
  • 请求正文未从 axios get 调用传递到 Django Rest Framework(Request body is not being passed from axios get call to Django Rest Framework)
    问题 我在 axios 中发送带有正文的 get 请求时遇到问题。 它不会将请求的正文传递给后端。 Axios 代码如下所示 const FunctionName = (environment, page_num) => { axios.get(API_URL, { params: { environment, page_num }, }).then(res => { console.log(res); }).catch(err => { console.log(err.response.data); }); } 我使用 Django 作为我的后端,并且我收到了空正文,即 {},这会导致发送到后端的错误请求。 我经历了几个堆栈溢出问题,但没有一个对我有帮助。 任何人都可以帮我解决这个问题。 更新 我的 Django 代码如下所示 class TestView(APIView); def get(self, request): environment = request.data['environment'] page_num = request.data['page_num'] ... ... 在这里,当我无法获取环境或 page_num 数据时。 当我从邮递员发送带有 get 调用和正文请求中的内容的相同请求时,它接受并将响应发回。 重新更新 我注意到我们必须使用 request
  • 如何在 Postman Collection Runner 中查看回复?(How can I view responses in Postman Collection Runner?)
    问题 我正在使用 Postman Collection Runner 使用迭代多次运行相同的请求。 我的测试按预期工作,但我无法看到每个请求的单独响应。 是否可以在 Postman Collection Runner 中查看对请求的响应? 回答1 在最新版本的 Postman 中,您可以查看针对每个单独请求运行的集合中的所有数据。 在Collection Runner中,点击请求名称,可以查看请求和响应的所有详细信息。 更多信息可以在使用本页的请求和响应正文部分进行调试 回答2 这可能会帮助某人,我试过了 pm.test(响应体,真) 这在运行摘要中打印了响应。 回答3 让我添加有关shadowcharly解决方案的更多详细信息。 如果您将responseBody变量分配给测试数组(在Tests选项卡中),则可能会查看您的结果 tests["body"] = responseBody 并将其导出为 json (在界面上,如果测试通过与否,您只会看到零/一结果)。 这不是很有用,但这是我找到的唯一方法。 回答4 如果您重复完全相同的查询,您可以使用测试名称来显示结果: tests['Test to see value of key Key'+ keyValue] = testResult.... 您将对收到的每个值进行不同的测试,不完全是日志,但效果很好;) 回答5 我知道这是旧的
  • 如何在 C# 中复制这个具有二进制内容正文并包含 .PNG 文件的 Postman 请求?(How to Replicate this Postman Request which has a Binary Content Body and contains a .PNG File in C#?)
    问题 这是我想在 C# 中为我的 Xamarin 应用程序复制的邮递员请求: 这是我从 SKCanvasView 获取图像的方法: var surface = SKSurface.Create(new SKImageInfo((int)canvasView.CanvasSize.Width, (int)canvasView.CanvasSize.Height)); var canvas = surface.Canvas; canvas.Clear(); foreach (SKPath path in completedPaths) canvas.DrawPath(path, paint); foreach (SKPath path in inProgressPaths.Values) canvas.DrawPath(path, paint); canvas.Flush(); var snap = surface.Snapshot(); var pngImage = snap.Encode(SKEncodedImageFormat.Png, 100); AnalyerResults analyerResults = await mathclient.AnalyzeWork(pngImage); try { ResultString = analyerResults.message;
  • 无法将请求正文解析为 json:意外字符 (\'-\' (code 45)) AWS Lambda + API + Postman(Could not parse request body into json: Unexpected character (\'-\' (code 45)) AWS Lambda + API + Postman)
    问题 我已经尝试了几天来获取从 AWS 中的 API 网关发送到 Lambda 函数的参数,但没有成功。 我决定从头开始,所以我跟着他们的演练(http://docs.aws.amazon.com/apigateway/latest/developerguide/getting-started.html#getting-started-new-lambda) 我已经两次检查了这个演练,我已经按照信中的步骤进行了操作。 问题 当我从 Postman 或 Swift 测试 API 时,出现错误: {"message": "无法将请求正文解析为 json: 数值中的意外字符 (\'-\' (代码 45)):预期数字 (0-9) 跟随减号,对于有效数值\n [来源:[B@c036d15;行:1,列:3]"} 在邮递员中,当我将结果视为 JSON 时,我只是得到 坏字符串 Lambda 函数 该函数是演练中的基本示例: console.log('Loading event'); exports.handler = function(event, context) { var name = (event.name === undefined ? 'No-Name' : event.name); console.log('"Hello":"' + name + '"'); context
  • Azure KeyVault Get Secret API 响应 404 或 401 错误(Azure KeyVault Get Secret API responds with 404 or 401 error)
    问题 我正在尝试从 Azure Key Vault 中获取秘密。 这是一个非常简单的 Restful API 调用。 例如对于所有键,它就像这样简单: GET {vaultBaseUrl}/secrets?api-version=7.0 其中 vaultBaseUrl 在 Azure 控制台中作为 Vault DNS 名称提供。 我正在使用控制台模式进行测试 https://docs.microsoft.com/en-us/rest/api/keyvault/getsecrets/getsecrets#code-try-0 但返回值如果总是 404。当我在Azure 控制台,它给出 401 - 未经授权。 但是我可以使用命令行来获取秘密。 有什么秘诀可以让宁静的调用和 curl 工作来揭开秘密吗? 所有这些情况都使用相同的凭据。 附带问题是,在 micorosft api 测试页面上有一个带有绿色运行按钮的“请求预览”部分,几乎就像在邀请您运行 api,但链接是 docs.microsoft.com 和盒子上的复制按钮被禁用。 我从来没有在一个地方看到过这么多问题,所以我想可能是我在这里不明白一些事情。 回答1 该文档似乎不正确。 如果您想获取机密,可以使用客户端凭据流来获取访问令牌并使用它来获取机密。 请按照以下步骤操作。 1.在 Azure Active Directory
  • 如何在Postman中上传文件和JSON数据?(How to upload a file and JSON data in Postman?)
    问题 我正在使用Spring MVC,这是我的方法: /** * Upload single file using Spring Controller. */ @RequestMapping(value = "/uploadFile", method = RequestMethod.POST) public @ResponseBody ResponseEntity<GenericResponseVO<? extends IServiceVO>> uploadFileHandler( @RequestParam("name") String name, @RequestParam("file") MultipartFile file, HttpServletRequest request, HttpServletResponse response) { if (!file.isEmpty()) { try { byte[] bytes = file.getBytes(); // Creating the directory to store file String rootPath = System.getProperty("catalina.home"); File dir = new File(rootPath + File.separator + "tmpFiles"); if
  • 如何使用邮递员将图像上传到 azure blob 存储(How to upload images using postman to azure blob storage)
    问题 我一直在尝试使用邮递员将图像上传到我的 blob 容器文件夹这里是 Azure 存储服务 REST API 的授权链接,用于生成签名并在正文中附加文件名文件字段。 var key = "[Storage account key]"; var strTime = (new Date()).toUTCString(); var strToSign = 'PUT\n\nimage/jpeg; charset=UTF-8\n\nx-ms-date:' + strTime + '\nx-ms-meta-m1:v1\nx-ms-meta-m2:v2\n/colony7/folder-customer-profilepic/Home - explorar.jpg'; var secret = CryptoJS.enc.Base64.parse(key); var hash = CryptoJS.HmacSHA256(strToSign, secret); var hashInBase64 = CryptoJS.enc.Base64.stringify(hash); var auth = "SharedKey colony7:"+hashInBase64; 我使用过这些 https://docs.microsoft.com/en-us/rest/api/storageservices/put
  • 在邮递员中为 API 测试创建唯一的正文请求(Create unique body request in postman for API-test)
    问题 我想在请求正文中使用唯一的电子邮件属性在邮递员上创建测试请求。 { ... "email": "{{email_string}}.com", ... } 我已经在环境中使用静态字符串设置了email_string ,但是有什么方法可以在请求发生之前动态设置email_string ? 回答1 您可以直接在请求正文中使用 Postman 对 Faker 库的内置支持: { ... "email": "{{$randomEmail}}", ... } 或者,在预请求脚本中: pm.environment.set('user-email', pm.variables.replaceIn('{{$randomEmail}}')); 回答2 作为上一个答案的替代方法,您可以使用sendRequest函数从旨在返回随机数据的第 3 方 API 获取值。 这可以添加到Pre-Request Script选项卡: pm.sendRequest("https://randomuser.me/api/", (err, res) => { // Get the random value from the response and store it as a variable var email = res.json().results[0].email // Save the value as
  • req.body帖子为空(req.body empty on posts)
    问题 突然,这已经发生在我所有的项目中。 每当我使用express和body-parser req.body在nodejs中发布帖子时,body是一个空对象。 var express = require('express') var bodyParser = require('body-parser') var app = express() // parse application/x-www-form-urlencoded app.use(bodyParser.urlencoded()) // parse application/json app.use(bodyParser.json()) app.listen(2000); app.post("/", function (req, res) { console.log(req.body) // populated! res.send(200, req.body); }); 通过ajax和邮递员,它始终是空的。 但是通过卷曲 $ curl -H "Content-Type: application/json" -d '{"username":"xyz","password":"xyz"}' http://localhost:2000/ 它按预期工作。 我尝试在以前手动设置Content-type : application
  • 尝试使用获取和通过模式:无心(Trying to use fetch and pass in mode: no-cors)
    问题 我可以通过邮递员访问此端点http://catfacts-api.appspot.com/api/facts?number=99 ,它会返回JSON 另外,我正在使用create-react-app,并希望避免设置任何服务器配置。 在我的客户端代码中,我试图使用fetch来执行相同的操作,但出现错误: 所请求的资源上没有“ Access-Control-Allow-Origin”标头。 因此,不允许访问源“ http:// localhost:3000”。 如果不透明的响应满足您的需求,请将请求的模式设置为“ no-cors”,以在禁用CORS的情况下获取资源。 所以我试图将一个对象传递到我的Fetch中,这将禁用CORS,如下所示: fetch('http://catfacts-api.appspot.com/api/facts?number=99', { mode: 'no-cors'}) .then(blob => blob.json()) .then(data => { console.table(data); return data; }) .catch(e => { console.log(e); return e; }); 有趣的是,我得到的错误实际上是此函数的语法错误。 我不确定我的实际fetch是否已损坏,因为当我删除{mode:'no-cors'}对象
  • 为后续调用设置标头变量(Set headers variable for subsequent calls)
    问题 我有一个设置调用,它在标头中返回会话 ID,如下所示。 curl -X GET --header 'Accept: application/json' 'https://<url>/initConn' 将会话 ID 作为响应标头的一部分返回,如下所示: { ..., "sessionId": "111", ... } 现在我必须在所有后续调用中使用相同的会话 ID: curl -X GET --header 'Accept: application/json' --header 'X-SESSION_ID: 111' 'https://<url>/someCommand' 使用邮递员,怎么可能: 从标题中提取会话 ID 在 Postman 的后续调用中附加 回答1 不确定如何使用cURL通过命令行执行此操作,但您可以使用Environment Variables设置从一个 API 请求获取标头,保存它,然后在另一个 API 调用中使用它。 假设我们有一个名为 F1 的 API,它为我们提供了一个名为uid的参数作为响应,并且我们需要在我们的标头中使用这个access_token为另一个名为 F2 的 API 转到 Postman 窗口角端的Manage Environments 。 单击“ Manage Environment然后在新窗口中单击“添加”以添加新环境