8

如何作为从当前请求收到的响应的一部分的字段/值作为下一个请求的参数传递?

我只能设置静态表单 POST 参数。有没有办法在配置 Web 测试的可用 UI 中执行此操作?

在此处输入图像描述

我已经四处搜索,但这些似乎可以使用 jMeter 和其他 Web 测试框架。看到这些让我放弃(暂时)并同时开始探索 Coded Web Test 方法。

任何建议/指针表示赞赏。

4

2 回答 2

7

我知道这是关于 Visual Studio 2012 的一个老问题,但是也许这可能有助于尝试为 Visual Studio 2015 实现这一目标的人。可能有很多方法可以完成这件事;这是我的处理方式:

  1. 对于登录Request,设置一个提取规则:右键单击Request并选择Add Extraction Rule...。这将允许您存储响应中的数据以在以后的请求中使用。有多种方法可以提取数据,例如从 POST 字段中提取数据。数据存储在命名变量Context Parameter Name. 假设您已将其设置为sessionid.
  2. 我已使用 .将所有其他 URL 添加到原始请求Add Dependent Request。您可以在任何地方添加访问上下文变量,方法是用双花括号括起来:{{sessionid}}.
于 2015-09-10T15:12:59.163 回答
5

经过一番挖掘后,我能够做到这一点。结果它非常简单(即使用编码测试)。

.
.
.
var request1 = new WebTestRequest("http://localhost/Home/Index");
var sessionId = "";
request1.ExtractValues += (s, e) => {
sessionId = 
  e.Response.HtmlDocument.HtmlTags.SingleOrDefault(tag => 
     tag.Name == "somename" 
     && tag.Attributes.Any(a => a.Name == "attrName" 
     && a.Value == "attrValue"));    
};

yield return request1;

然后,

var request2 = new WebTestRequest("http://localhost/SomeController/Index/");
var request2Body = new FormPostHttpBody();
request2Body.FormPostParameters.Add("sessionId", sessionId);
request2.Body = request2Body;

yield return request2;

如果有人知道更好的方法,请发布答案。

于 2012-08-28T10:50:56.837 回答