Testng: [バグ] TestNGはデフォルトで、セキュリティで保護されていないURLからのDTDのロードを無効にします。

作成日 2020年10月09日  ·  10コメント  ·  ソース: cbeust/testng

TestNGバージョン

<dependency>
    <groupId>org.testng</groupId>
    <artifactId>testng</artifactId>
    <version>7.3.0</version>
</dependency>

予想される行動

リソースからtestng-1.0.dtdファイルを読み取った後に例外
image

実際の動作

testng-1.0.dtdファイルをリソースから読み取ることができません

問題はランナーで再現可能ですか?

IntelliJ v2020.2.3(TestNG IDEプラグインバージョン202.7660.26)

最も参考になるコメント

そうです、 https://github.com/cbeust/testng/commit/cf22ccfcb2a34f9b0bb4fa8cbedae5297ddd2049からの予期しない「すべて置換」のように見え

全てのコメント10件

VM引数 '-Dtestng.dtd.http = true'を追加するか、HTTPSリソースを使用するだけでよいと思います。 現在、TestNGはスイートファイルのデフォルトとしてHTTPSを必要とします。

@ kobebryant2007コードに明らかなバグがあります。

  1. 引数を追加したくないし、ファイルtestng-1.0.dtdがネットワークを介して取得されたくない。
  2. フラグを追加した場合、コードに基づいて、ファイルをリソースに配置することは意味がありません。

@juherrご注意ください。

@ shaburov-

引数を追加したくないし、ファイルtestng-1.0.dtdがネットワークを介して取得されたくない。

私の理解に基づくと、TestNGがネットワークからDTDを探す理由は、最新の適切なDTDを確実に取得するためです。 TestNGは、httpsプロトコルを介してのみTestNG WebサイトからDTDを取得しようとします。それが見つからない場合は、そのエラーが表示されます。 これを無効にする唯一の方法は、 @ kobebryant2007が提案したJVM引数を使用することです。

フラグを追加した場合、コードに基づいて、ファイルをリソースに配置することは意味がありません。

TestNGがローカルリソースからファイルを読み取ることであるというこの期待の背後にある理由を理解するのを手伝ってもらえますか? どこかでそのように言及されている場合は、関連するドキュメントを教えてください。 ネットワークの不具合がある場合、TestNGはデフォルトで現在中止されます。 これはPRhttps ://github.com/cbeust/testng/pull/2386の一部として整理されており、TestNGjarに埋め込まれたDTDにフォールバックします。 PRがマージされると、リソースとしてフェッチできるCLASSPATHにtestngdtdファイルを作成することができると思います。

@shaburov何をしようとしていますか?

TestNG jarにはすでにDTDが含まれており、使用されることになっています。

@juherrスクリーンショットに添付したコードを見て、そうではないことを理解してください。
ファイルがリソースから読み取られる前に、例外がスローされます。

問題は、IntelliJがHTTPSを使用していないことだと思います。
image

または、HTTPS以外のURLがURLSリストにないこと( TESTNG_DTD_URLHTTPS_TESTNG_DTD_URLはまったく同じであることに注意してください)。
image

@algotastic 2番目、私は信じています。

@shaburovは正しいです、これはバグです:
https://github.com/cbeust/testng/blob/7.3.0/src/main/java/org/testng/xml/Parser.java#L33
public static final String TESTNG_DTD_URL = "http://testng.org/" + TESTNG_DTD;である必要があります

そして、このhttps://github.com/cbeust/testng/blob/7.3.0/src/main/java/org/testng/xml/Parser.java#L28
public static final String OLD_TESTNG_DTD_URL = "http://beust.com/testng/" + TESTNG_DTD;必要があります

そうです、 https://github.com/cbeust/testng/commit/cf22ccfcb2a34f9b0bb4fa8cbedae5297ddd2049からの予期しない「すべて置換」のように見え

'-Dtestng.dtd.http = true'を追加しても問題ありませんが、これにより、IntelliJ(右クリックして実行)でクラス/メソッドのテストをオフラインで実行できなくなります。

このページは役に立ちましたか?
0 / 5 - 0 評価