我正在使用WCAT对ASP.NET MVC应用程序执行负载测试。因为这个应用程序使用防伪令牌安全验证,我想知道是否有可能在WCAT脚本值中生成动态postdata值,以便每次获得防伪cookie值时注入有效令牌。
有什么想法吗?提前谢谢。
答案 0 :(得分:1)
我确信它可以完成,但我不知道如何编写一个能够生成有效防伪令牌的WCAT交易。
相反,我所做的是实现一个条件过滤器,它将ValidateAntiForgeryTokenAttribute()应用于我的所有POST操作。一旦你有了条件过滤器,你就可以添加一个AppSettings值,它允许你打开/关闭属性。即,当您进行负载测试时,请将其关闭。
您可以了解如何实施条件过滤器here。
在我的项目中,我在Global.asax.cs Application_Start()中启用和禁用条件过滤器,如下所示:
bool useAntiForgeryToken = string.Compare(ConfigurationManager.AppSettings["useAntiForgeryToken"], "true", StringComparison.InvariantCultureIgnoreCase) == 0;
if (useAntiForgeryToken) {
// Ensure that all POST actions are automatically decorated with the ValidateAntiForgeryTokenAttribute.
IEnumerable<Func<ControllerContext, ActionDescriptor, object>> conditions =
new Func<ControllerContext, ActionDescriptor, object>[] {
(controllerContext, actionDescriptor) =>
string.Equals(controllerContext.HttpContext.Request.HttpMethod, "POST", StringComparison.OrdinalIgnoreCase ) ? new ValidateAntiForgeryTokenAttribute() : null
};
// Create the conditional filter using the condition we defined
var provider = new ConditionalFilterProvider(conditions);
// And add the conditional filter
FilterProviders.Providers.Add(provider);
}
我的web.config中有一个这样的AppSetting:
<appSettings>
<add key="useAntiForgeryToken" value="true">
</appSettings>
注意:除了禁用防伪标记之外,您还需要在web.config中将requestValidation模式设置为2.0,如下所示(reference):
<httpRuntime requestValidationMode="2.0">
一旦你掌握了这些东西,再次运行你的WCAT脚本,你应该是金色的。