当我在Jenkins而不是204上运行Scala测试时,为什么会获得302个HTTP状态代码?

时间:2012-12-27 20:15:20

标签: http scala testing jenkins http-status-code-302

我有一些我在Scala中编写的REST API服务测试。我们正在导入org.apache.http并使用简单的HTTP方法,例如:

val uri: HttpGet = new HttpGet(u)
val response: HttpResponse = http.execute(uri)

他们转到以下网址:

https://platform.company.com:443/ajax_request/login?username=me@company.com&password=pass

https://admin-platform.company.com:443/usergroups/rest/usergroups

测试使用Maven编译并在Jenkins ver上运行。 1.494服务器。

问题在于,虽然测试在本地运行完美(当我在笔记本电脑上执行mvn clean test时),但它们会在CI服务器上获得意外的状态代码。在本地我得到204,200,200和200这些测试。但在CI上我得到302,302,302,200。

我是否需要Jenkins中的特殊配置选项?或者更好的身份验证方法?

我能够在CI服务器本身上成功运行cURL命令,所以我认为这不是一个基本的网络连接问题,例如:

Running script  : #!/bin/bash

# get an auth session
curl -v -b cookies.txt -c cookies.txt -L "https://platform.company.com/ajax_request/login?
username=user&password=pass"

# get a list of company guids
curl -v -b cookies.txt -c cookies.txt -L
"https://platform.company.com/ajax_request/companies_selector"

# run this to make a call to service for company: 
curl -v -b cookies.txt -c cookies.txt --cookie "company_guid=3f65b34d-b6f4-4abd-b14b-408b8a11059b"
-L "https://service-platform.company.com/users"

想法?谢谢!

3 个答案:

答案 0 :(得分:0)

从您的描述中并不完全清楚,但似乎问题可能是在某些情况下自动遵循3xx重定向而非其他情况。

例如,当您使用'curl'时,您包含-L选项,以便自动跟踪3xx重定向,这就是您想要发生的事情。

因此,在您的Java代码中,您的笔记本电脑很可能也在跟踪重定向,而CI构建服务器则不是,因为它未被指定。

Apache Http Client should also默认情况下遵循重定向。

如果您原谅插件,我已经编写了一个基于Java的 URLConnection 的替代HTTP客户端(名为Bee Client - 请注意它仍然处于测试版发布状态。)< / p>

因为默认情况下 URLConnection 将遵循重定向,这也是Bee Client所做的。

val httpClient = new HttpClient
val response: Response = httpClient.get("https://admin-platform.company.com:443/usergroups/rest/usergroups")

状态代码包含在响应中,如果没有错误,则为2xx。

有一个禁用重定向的选项,但听起来你不需要这个。

答案 1 :(得分:0)

这可能就是答案。我们在登录/身份验证中执行HttpPost:

https://stackoverflow.com/a/5170468/1759990

答案 2 :(得分:0)

我的同事研究了这个问题。测试在另一个环境中运行完美(我们有几个:qa,升级,生产,演示等)。好像问题是QA服务器有一个Jenkins不接受的自签名SSL证书,或者客户端无法接受。我可能手动接受了本地工作站上的证书,这就是测试在本地运行的原因。

修复将是我们的IT部门使用真实证书,就像其他环境一样。