【问题标题】:Anti forgery token and web testing防伪令牌和网络测试
【发布时间】:2014-12-19 00:37:23
【问题描述】:

我正在尝试在 VS2012 中为 MVC 站点进行 Web 测试。 其中一种情况是登录并浏览产品列表,选择您想要的产品并进入购买页面。

问题是在运行 web 测试时,我收到关于防伪令牌的错误并且它不匹配。

到底如何使用防伪令牌进行测试?用户必须登录 - 负载测试(最终)将有成千上万的用户,但需要首先为 1 个用户工作。

登录视图/操作确实在视图中执行 AntiForgeryToken 并在控制器上进行验证。

感谢任何建议和提示。

【问题讨论】:

  • 什么是“防伪令牌”?你能像其他动态参数一样对待它吗?也许通过登录响应上的提取规则然后在以后的请求中传递该值?
  • 是的,我设法修复它....很快发布答案

标签: asp.net-mvc-4 web-testing antiforgerytoken


【解决方案1】:

一旦你运行你的脚本并且它失败了,就去调用失败的那个。

  • 转到响应选项卡

  • 在正文中,找到输入标签中的 __RequestVerificationToken 名称,然后提取 value 属性之间的所有内容。

  • 选择值并右键单击>添加提取规则并按确定。

  • 您将找到一个提取规则文件夹,在其下方是我们刚刚创建的提取规则。随意重命名上下文参数名称。

  • 转到下一页,应该是失败的那一页,找到名为“__RequestVerificationToken”的Form Post Parameter。查看它的属性

  • 将其绑定到之前创建的上下文参数名称。为此,请查看此帖子参数的属性并将“值”设置为:

{{上下文参数名称}}

(包括 2x 大括号)

  • 按回车键确认/保存

下次运行脚本时 - 一切正常

这就是它对我的工作方式......

【讨论】:

    【解决方案2】:

    我看到了类似的问题。录制 Web 测试脚本后,该脚本将在登录时失败,并显示以下消息:

    提供的防伪令牌用于用户“Domain\UserName”,但当前用户是“”。

    解决方案是在测试属性中将 PreAuthenticate 属性设置为 false。默认情况下,Web 测试会将身份验证标头传递给在生成令牌时使用的服务器。

    【讨论】:

      【解决方案3】:

      我不熟悉“VS2012 中的网络测试”,但据我所知 "Anti-Forgery Token" 需要将令牌从浏览器发送回服务器。

      我曾使用过Selenium-Webdriver,建议您使用它,因为它提供了一个 API,可以像真实用户一样与支持的浏览器进行交互。

      如果您将Selenium WebDriver 2.37.0 NuGet package 添加到您的测试项目,您可以轻松开始使用 Selenium WebDriver。

      Selenium-WebDriver 使用每个直接调用浏览器 浏览器对自动化的原生支持。这些直接调用如何 制作,它们支持的功能取决于您使用的浏览器 使用。

      Selenium-webdriver 目前支持以下驱动:

      【讨论】:

      • 赞赏,但使用其他任何东西都不是我的解决方案。
      • 我相信与真实浏览器的交互只适用于回归/UI 测试而不是性能/负载测试。
      猜你喜欢
      • 2019-03-05
      • 1970-01-01
      • 2015-01-11
      • 2018-01-16
      • 2013-11-27
      • 2015-05-11
      • 2012-01-22
      相关资源
      最近更新 更多