如何修改http标头

时间:2016-08-10 03:45:34

标签: automation http-headers protractor

我正在进行自动化UI测试。 API由oAuth保护。所以点击网址就说http://mydom/api/welcome 浏览器必须设置授权密钥作为标头,值必须是有效标记。

对于手动测试,我使用Requestly (Chrome Extension)来设置标题。 (任何人都可以指出我在内部请求什么,以便来自chrome的每个请求获取标题值请求设置的内容?)

有没有办法以编程方式设置标头值?

PS:我使用curl调用oath url获取有效令牌并将令牌值设置为env变量。我也用邮递员来做同样的事情。但所有这些都不会影响从浏览器调用的时间。

4 个答案:

答案 0 :(得分:1)

您不能轻易做到这一点,因为Chrome不支持它(请参阅https://github.com/seleniumhq/selenium-google-code-issue-archive/issues/141)。

就个人而言,我会使用诸如请求(https://github.com/request/requesthttps://github.com/request/request)和基本断言之类的东西进行此测试,而不是通过带有量角器的浏览器。

答案 1 :(得分:1)

您无法直接在selenium中操作http标头。您需要使用代理来执行此类操作。 BrowserMobProxy是硒世界的热门代理。您可以使用节点包装器browsermob-node在量角器测试中执行此操作。我添加了一个关于如何修改标题here

的示例部分

答案 2 :(得分:1)

我使用supertestsupertest-as-promised通过Protractor进行API测试。因此,我在OAuth端点上执行GET,将令牌存储在变量中,然后在其余的API调用中执行request.get(url).set('Authorization', auth.tokenType + ' ' + auth.token);

所以,你可以这样做的一种方法是使用像supertest这样的东西来获取一个令牌,然后browser.manage().addCookie()在你的浏览器会话中设置它。

答案 3 :(得分:0)

@Sam请求作者在这里。

目前没有,您无法以编程方式设置标头值。它现在必须是静态的。鉴于有多少用例出现,这是实现此功能的长期计划。但是你可以做到这一点。

您可以分叉Requestly github repo。实际标头修改发生的代码位于Background.js 内。方法名称为BG.Methods.modifyHeaders。请继续编写自己的逻辑以生成标题值并进行修改。

来自Chrome Docs

的说明
  

目前未向onBeforeSendHeaders事件提供以下标头。此列表不保证完整也不稳定。

  • 授权
  • 缓存控制
  • 连接
  • Content-Length Host
  • If-Modified-Since
  • If-None-Match
  • If-Range
  • Partial-Data Pragma
  • 代理授权
  • 代理连接
  • 传送编码

可能这个答案可能对您没用,因为Authorization无法修改。但我仍然把这个答案添加为可行的方法。