【问题标题】:Why do I get 302 HTTP status codes when I run my Scala test on Jenkins instead of 204?当我在 Jenkins 上运行 Scala 测试而不是 204 时,为什么会得到 302 HTTP 状态代码?
【发布时间】:2012-12-13 04:48:41
【问题描述】:

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

想法?谢谢!

【问题讨论】:

  • 好点。不知道为什么这么低。会调查的。

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


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

    • 这充其量只是一个非常类似于黑客的解决方法,可能会产生意想不到的后果......所以我犹豫是否尝试它;即使我能弄清楚如何编码也是如此。
    【解决方案3】:

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

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

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

    Apache Http Client should also,默认遵循重定向。

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

    因为 URLConnection 默认会跟随重定向,这也是 Bee Client 所做的。

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

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

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

    【讨论】:

    • 瑞克,感谢 cmets。我很困惑:如果客户端应该默认遵循重定向,为什么不在 CI 上这样做?我查看了 Apache 文档,它证实了您所说的。所以我不确定下一步该怎么做......
    猜你喜欢
    • 1970-01-01
    • 2014-08-16
    • 2016-10-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-14
    • 2018-02-14
    相关资源
    最近更新 更多