Testng: [BUG] يعطل TestNG افتراضيًا تحميل DTD من عناوين URL غير الآمنة.

تم إنشاؤها على ٩ أكتوبر ٢٠٢٠  ·  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 plugin الإصدار 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 استرداد DTD من موقع TestNG فقط عبر بروتوكول https وإذا لم يتم العثور عليه ، فستشاهد هذا الخطأ. الطريقة الوحيدة لتعطيل ذلك هي استخدام وسيطة JVM التي اقترحها @ kobebryant2007 .

إذا أضفت علامة ، بناءً على الكود ، فلا معنى لي أن أضع الملف في الموارد.

هل يمكنك مساعدتي في فهم السبب وراء هذا التوقع بأن TestNG هو قراءة ملف من مواردك المحلية؟ إذا تم ذكره بهذه الطريقة في مكان ما ، يرجى توجيهي إلى الوثائق ذات الصلة. كل ما قيل وفعل ، إذا كان هناك خلل في الشبكة ، فإن TestNG بشكل افتراضي يجهض حاليًا. تم فرز ذلك كجزء من PR https://github.com/cbeust/testng/pull/2386 والذي سيعود إلى DTD المضمن في برطمان TestNG. أظن أنه بمجرد دمج العلاقات العامة ، يمكن أن ينتهي بك الأمر إلى إنشاء ملف testng dtd الخاص بك في CLASSPATH الخاص بك والذي يمكن جلبه كمورد.

shaburov ماذا تحاول أن تفعل؟

جرة TestNG تحتوي بالفعل على DTD وهي التي من المفترض استخدامها.

juherr انظر إلى الكود الذي
سيتم طرح استثناء قبل قراءة الملف من الموارد.

أعتقد أن المشكلة تكمن في أن IntelliJ لا يستخدم HTTPS:
image

أو أن عنوان URL غير HTTPS ليس موجودًا في القائمة URLS (لاحظ أن TESTNG_DTD_URL و HTTPS_TESTNG_DTD_URL متماثلان تمامًا).
image

algotastic الثاني ، على ما أعتقد.

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 التقييمات