我有一些我在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"
想法?谢谢!
答案 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:
答案 2 :(得分:0)
我的同事研究了这个问题。测试在另一个环境中运行完美(我们有几个:qa,升级,生产,演示等)。好像问题是QA服务器有一个Jenkins不接受的自签名SSL证书,或者客户端无法接受。我可能手动接受了本地工作站上的证书,这就是测试在本地运行的原因。
修复将是我们的IT部门使用真实证书,就像其他环境一样。