Testng: [BUG] TestNG deaktiviert standardmäßig das Laden von DTDs von ungesicherten URLs.

Erstellt am 9. Okt. 2020  ·  10Kommentare  ·  Quelle: cbeust/testng

TestNG-Version

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

Erwartetes Verhalten

Werfen Ausnahme nach der testng-1.0.dtd Datei aus Ressource lesen
image

Tatsächliches Verhalten

Die Datei testng-1.0.dtd kann von Ressourcen nicht gelesen werden

Ist das Problem auf dem Läufer reproduzierbar?

IntelliJ v2020.2.3 (TestNG IDE-Plugin Ver. 202.7660.26)

Hilfreichster Kommentar

Richtig, es sieht aus wie ein unerwartetes "Alles ersetzen" von https://github.com/cbeust/testng/commit/cf22ccfcb2a34f9b0bb4fa8cbedae5297ddd2049

Alle 10 Kommentare

Ich denke, Sie müssen nur die VM-Argumente '-Dtestng.dtd.http=true' hinzufügen oder HTTPS-Ressourcen verwenden. Derzeit benötigt TestNG HTTPS als Standard in Suite-Dateien.

@kobebryant2007 Der Code enthält einen offensichtlichen Fehler.

  1. Ich möchte kein Argument hinzufügen und ich möchte nicht, dass die Datei testng-1.0.dtd über das Netzwerk übernommen wird.
  2. Wenn Sie ein Flag hinzufügen, macht es aufgrund des Codes für mich keinen Sinn, die Datei in die Ressourcen zu stellen.

@juherr Bitte

@shaburov -

Ich möchte kein Argument hinzufügen und ich möchte nicht, dass die Datei testng-1.0.dtd über das Netzwerk übernommen wird.

Nach meinem Verständnis sucht TestNG nach der DTD aus dem Netzwerk, um sicherzustellen, dass es die neueste/richtige DTD abruft. TestNG wird versuchen, die DTD NUR über das https-Protokoll von der TestNG-Website abzurufen, und wenn sie nicht gefunden wird, wird dieser Fehler angezeigt. Die einzige Möglichkeit, dies zu deaktivieren, besteht darin, das von @kobebryant2007 vorgeschlagene JVM-Argument zu verwenden.

Wenn Sie ein Flag hinzufügen, macht es aufgrund des Codes für mich keinen Sinn, die Datei in die Ressourcen zu stellen.

Können Sie mir helfen zu verstehen, was der Grund für diese Erwartung ist, dass TestNG eine Datei aus Ihren lokalen Ressourcen liest? Wenn es irgendwo so erwähnt wird, verweisen Sie mich bitte auf die entsprechende Dokumentation. Alles gesagt und getan, wenn es Netzwerkstörungen gibt, bricht TestNG derzeit standardmäßig ab. Das wurde im Rahmen der PR https://github.com/cbeust/testng/pull/2386 aussortiert, die auf die im TestNG-Glas eingebettete DTD zurückgreifen. Ich vermute, dass Sie, sobald der PR zusammengeführt wird, Ihre testng-dtd-Datei in Ihrem CLASSPATH erstellen können, die als Ressource abgerufen werden kann.

@shaburov Was versuchst du zu tun?

Das TestNG-Jar enthält bereits die DTD und es ist diejenige, die verwendet werden soll.

@juherr Schauen Sie sich den Code an, den ich dem Screenshot beigefügt habe, und stellen Sie fest, dass dies nicht der Fall ist.
Eine Ausnahme wird ausgelöst, bevor die Datei aus den Ressourcen gelesen wird.

Ich glaube, das Problem ist entweder, dass IntelliJ kein HTTPS verwendet:
image

Oder dass sich die Nicht-HTTPS-URL nicht in der URLS Liste befindet (beachten Sie, dass TESTNG_DTD_URL und HTTPS_TESTNG_DTD_URL genau gleich sind).
image

@algotastic der zweite, glaube ich.

@shaburov hat recht, das ist ein Fehler:
https://github.com/cbeust/testng/blob/7.3.0/src/main/java/org/testng/xml/Parser.java#L33
Es sollte public static final String TESTNG_DTD_URL = "http://testng.org/" + TESTNG_DTD;

Und das https://github.com/cbeust/testng/blob/7.3.0/src/main/java/org/testng/xml/Parser.java#L28
sollte public static final String OLD_TESTNG_DTD_URL = "http://beust.com/testng/" + TESTNG_DTD;

Richtig, es sieht aus wie ein unerwartetes "Alles ersetzen" von https://github.com/cbeust/testng/commit/cf22ccfcb2a34f9b0bb4fa8cbedae5297ddd2049

Ich kann '-Dtestng.dtd.http=true' hinzufügen, aber dies macht es unmöglich, eine Klasse/Methode in IntelliJ (Rechtsklick und Ausführung) offline auszuführen.

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen