4

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

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

他们转到 URL,例如:

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 版本上运行。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"

想法?谢谢!

4

3 回答 3

0

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

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

于 2012-12-28T19:37:01.510 回答
0

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

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

因此,在您的 Java 代码中,很可能您的笔记本电脑也遵循重定向,而您的 CI 构建服务器则没有,因为它未指定。

默认情况下,Apache Http 客户端还应该遵循重定向。

如果您不介意这个插件,我已经编写了一个基于 Java 的URLConnection的替代 HTTP 客户端(称为Bee 客户端- 请注意,它仍然处于 beta 版本)。

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

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

状态码包含在响应中,如果没有错误,它将是 2xx。

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

于 2012-12-28T09:31:31.800 回答
0

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

解决方法是让我们的 IT 部门像其他环境一样使用真正的证书。

于 2013-01-15T23:03:06.517 回答