为什么Jenkins的无头UI测试因401 Unauthorized而失败?

时间:2014-08-11 03:48:07

标签: ruby jenkins watir-webdriver ui-automation

我正在使用 Cucumber + Ruby + Watir WebDriver + Firefox 测试应用的UI组件。 Jenkins运行时测试失败,每个请求返回 401 Unauthorized 页面,但在手动运行时工作。

CI服务器包括:

  • RHEL 6.5 x64
  • Java 1.7.0_60
  • Jenkins 1.572
  • JRuby 1.7.9
  • 黄瓜1.3.12
  • Watir Webdriver 0.6.8
  • Firefox 24.7.0-1.el6_5
  • 无头1.0.2

当我以Jenkins作业运行Cucumber场景时,浏览器每次都会返回 401 Unauthorized

当我从运行Jenkins的同一用户运行rake完全相同的bash命令时,测试工作正常。从Windows桌面(不是无头)运行时,测试也有效。

似乎故障发生在早期,因为当浏览器附加到其配置文件的HTTP代理(WEBrick::HTTPProxyServer的实现)时,永远不会到达代理回调代码。

有什么想法吗?

新信息:

WebDriver启动一个带有HTTP服务器的Firefox实例来控制它。在启动期间,客户端部分在服务器上创建一个带有某些JSON的HTTP POST到/hub/session的会话。正是这个请求导致服务器返回401 Unauthorized。

现在弄清楚为什么会在Jenkins作业中发生,而不是从命令行发生。

2 个答案:

答案 0 :(得分:0)

听起来你的测试依赖于特定的Firefox配置文件才能正常工作 - 是这样吗?

可能是Jenkins作业启动的Firefox实例未加载正确的配置文件。

此文档表明Watir WebDriver将在每次运行时创建一个新的配置文件:

http://watirwebdriver.com/firefox/

根据相同的文档,您可以指定要加载的配置文件:

b = Watir::Browser.new :firefox, :profile => 'foo'

我打赌该功能使用Firefox" -P"封面下的命令行选项;有关详细信息,请点击此处:

http://kb.mozillazine.org/Starting_Firefox_or_Thunderbird_with_a_specified_profile

答案 1 :(得分:0)

我的问题的原因是HTTP环境设置。 Jenkins被配置为将HTTP_PROXY注入其运行的作业环境中,并且Ruby HTTP客户端在连接到Firefox WebDriver时使用该代理。

<强>验证

当我在执行HTTP_PROXY之前在shell中设置rake时,我收到 401 Unauthorized 错误。

<强>解决方案

我添加了

NO_PROXY=127.0.0.1

到Jenkins作业的环境并正确执行。