4

Scalaで作成したRESTAPIサービスのテストがいくつかあります。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

説明からは完全には明らかではありませんが、問題は3xxリダイレクトが自動的に実行される場合と、実行されない場合があります。

たとえば、「curl」を使用する場合は、-Lオプションを含めて、3xxリダイレクトが自動的に実行されるようにします。これは、実行したいことです。

したがって、Javaコードでは、ラップトップもリダイレクトに従っている可能性がありますが、CIビルドサーバーは指定されていないため、そうではありません。

Apache Http Client、デフォルトでリダイレクトに従う必要があります。

プラグをお許しいただければ、JavaのURLConnectionに基づいた代替HTTPクライアントを作成しました( Beeクライアントと呼ばれます。ただし、まだベータリリースであることに注意してください)。

URLConnectionはデフォルトでリダイレクトに従うため、これはBeeClientが行うことでもあります。

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

これが答えかもしれません。ログイン/認証でHttpPostを実行しています。

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

于 2012-12-28T19:37:01.510 に答える
0

私の同僚は問題を調査しました。テストは別の環境で完全に実行されていました(qa、ステージング、本番、デモなどがいくつかあります)。問題は、QAサーバーにJenkinsが受け入れていない自己署名SSL証明書があるか、クライアントが受け入れられなかったことであるように見えます。ローカルワークステーションで証明書を手動で受け入れた可能性があります。そのため、テストはローカルで実行されました。

修正は、他の環境と同様に、IT部門が実際の証明書を使用することです。

于 2013-01-15T23:03:06.517 に答える