默认情况下,TestNG禁用从不安全的Urls加载DTD

时间:2019-07-31 22:29:48

标签: java xml selenium testng

我正在使用testng maven和selenium来运行测试,目前我有以下testng.xml文件

看起来问题出在&listeners和&classes行,如果我将这些行替换为我在引用文件上拥有的xml内容,则它运行良好。我在以前的项目中使用过此方法,但效果很好,不确定为什么会出现此错误。

<?xml version = "1.0" encoding = "UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd"   [
        <!ENTITY listeners SYSTEM "listeners.xml">
        <!ENTITY classes SYSTEM "classes.xml">
        ]>
<suite name="Local Execution" verbose="5">
    &listeners;
    <test name="Core Integration Tests" time-out="800000">
        <groups>
            <run>
                <include name="failed"/>
            </run>
        </groups>
        &classes;
    </test>
</suite>

Listener.xml内容就像

<listeners>
    <listener class-name="com.myclass.Listeners.TestListener"/>
</listeners>

class文件是

<classes>
    <class name="com.orders.tc_class1"/>
    <class name="com.orders.tc_class2"/>
</classes>

这是我遇到的错误的一部分

org.testng.TestNGException: 
TestNG by default disables loading DTD from unsecure Urls. If you need to explicitly load the DTD from a http url, please do so by using the JVM argument [-Dtestng.dtd.http=true]
    at org.testng.xml.TestNGContentHandler.resolveEntity(TestNGContentHandler.java:102)

14 个答案:

答案 0 :(得分:12)

  1. 右键单击该类,选择运行->运行配置
  2. 默认情况下,将在testng选项下生成一个具有相同类名的testNg类
  3. 选择该课程,然后转到“参数”标签
  4. 在VM参数中提供-Dtestng.dtd.http = true

就这样。

答案 1 :(得分:11)

只是为了避免造成混乱,并使一些不熟悉Config编辑选项的人更容易,例如附加一个快照以在intellij中完成它。

如此回答-克里希南M.先生: 转到Cucumber TestNGRunner类的Edit Config,然后我们必须在VM选项中添加另一个参数,如下所示-

  1. 如何编辑运行配置 How to Edit Run Config

  2. 如何添加> VM参数:“ -Dtestng.dtd.http = true” How to add >VM argument: "-Dtestng.dtd.http=true"

答案 2 :(得分:8)

只需更改您所有的

<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd"

在https:

<!DOCTYPE suite SYSTEM "https://testng.org/testng-1.0.dtd"

答案 3 :(得分:4)

添加这些VM选项:-ea -Dtestng.dtd.http=true解决了此问题。
但是,如果要解决针对任何类或方法的每次运行的问题,则需要在TestNG模板中添加相同内容,请参阅此屏幕截图。 Intelij TestNg Template SS

答案 4 :(得分:3)

如果希望它适用于所有测试,无论您从何处运行它们,另一个选项都可以通过设置系统属性在pom中进行设置。为maven-surefire-pluginmaven-failsafe-plugin

添加以下内容
                    <configuration>
                        <systemPropertyVariables>
                            <testng.dtd.http>true</testng.dtd.http>
                        </systemPropertyVariables>
                    </configuration>

答案 5 :(得分:2)

  1. 如果仅从Eclipse /其他IDE运行项目,则更新您的TestNG首选项并在JVM_args中添加语句-Dtestng.dtd.http=true
  2. 如果您正在寻找一个通用修复程序,也可以从CLI运行maven,则更新所有TestNG.xml文件

 <!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >

收件人:

<!DOCTYPE suite SYSTEM "https://testng.org/testng-1.0.dtd" >

我个人更喜欢更新DOCTYPE。

答案 6 :(得分:1)

是的,这是TestNG的默认行为,我是通过该pull请求引入的,以修复错误https://github.com/cbeust/testng/issues/2022

要在intelliJ中设置JVM参数,请选择Run > Edit Configurations,然后在-ea之后的“ VM options”部分中添加此JVM参数(默认情况下该位置)。

有关编辑配置的更多信息,请参阅官方文档here

答案 7 :(得分:1)

要为仅从IntelliJ运行的所有测试解决此问题,可以使用-Dtestng.dtd.http=true vm选项更新TestNG模板。将需要删除现有的测试运行或手动添加vm选项(我只是将其删除)。模板更改后运行的所有测试将具有提到的vm选项。 Run/Debug Configurations-> Edit Configurations-> Templates-> TestNG

enter image description here

答案 8 :(得分:1)

请执行以下所有步骤。在Eclipse中配置JVM参数后可以完美地工作。

问题陈述:

TestNG默认禁用从不安全的Urls加载DTD 如果需要从http URL显式加载DTD,请使用JVM参数[-Dtestng.dtd.http = true]

进行加载。

通常,我们需要在启动Rule Project的JVM上使用某些VM参数。

为此,需要执行以下两个步骤: •使用默认的JVM参数定义一个新安装的JRE: -转到Eclipse窗口>首选项> Java>已安装的JRE”。 -选择默认JRE,然后单击“复制”。 -根据您的选择更改JRE名称,例如myJRE并输入Default VM arguments as “ -Dtestng.dtd.http = true” enter image description here

-单击完成。 ---取消选中默认JRE,然后检查添加了VM参数的新JRE。 ---单击“应用”,“应用”和“关闭”。

•配置Rule Project启动配置以使用新安装的JRE: -转到运行>运行配置 ---运行配置对话框在视图中。

enter image description here

---输入您选择的名称,例如:RunConfigWithJVMArgs。 ---测试标签: 默认情况下显示项目名称。 选择“ Suite”选项,然后浏览项目文件夹中存在的testng.xml文件。例如:src / main / resources / testng.xml enter image description here

---参数选项卡: 在“ VM参数”文本字段中输入““ -Dtestng.dtd.http = true”。 --- JRE选项卡: 选择“ Alternate JRE:”作为新添加的带有JVM参数的JRE。 ---不需要其他更改。 ---单击“应用”,然后单击“运行”。

如果该套件可以在Eclipse中启动并成功运行,那么当您运行打包的JAR文件时,它也将起作用。

注意:在Eclipse中更改上述配置后,请执行mvn clean和mvn软件包–Dmaven.test.skip = true。

一旦JAR准备就绪,它将使用JVM参数配置新的JRE,并将解决问题声明。

答案 9 :(得分:1)

Details异常如下:- org.testng.TestNGException: 默认情况下,TestNG禁用从不安全的Urls加载DTD。如果需要从http URL显式加载DTD,请使用JVM参数[-Dtestng.dtd.http = true]

要修复该异常,需要设置JVM参数。要在Eclipse中设置JVM参数:

  1. 打开Eclipse并转到窗口->首选项
  2. 展开左侧的 TestNG ,然后点击运行/调试
  3. 在右侧:在JVM args文本字段中输入以下文本: -Dtestng.dtd.http = true
  4. 点击应用并关闭按钮 enter image description here

答案 10 :(得分:1)

在套件文件中将“ http://testng.org/testng-1.0.dtd”更改为“ https://testng.org/testng-1.0.dtd”。

答案 11 :(得分:0)

我最近遇到了此错误,并尝试了上面给出的解决方案,但仍然收到错误。 无论如何,设置JVM参数是解决此问题的方法,如上面的答案所示,但是我又增加了一步,它解决了我的问题。

  1. 我更改了TestNG Configuration中的参数,如下所示(添加的步骤): Changing TestNG arguments

  2. 我还更改了LoginTests.testSuccessfullLogin中的参数。 (此步骤只会 如果您已运行有问题的程序,则很有必要。否则,如果您正在跑步 程序第一次,它将使用相同的配置创建此配置 参数,如在TestNG配置中一样。) enter image description here

我还注意到,如果您没有完成上述第二步,它将创建一个名为LoginTests.testSuccessfullLogin(1)的新配置,并带有更改后的参数,以便运行测试。

答案 12 :(得分:0)

在TestNG文件中,将<!DOCTYPE>参数内的值(http)更改为https,如下图突出显示。就是这样。

TestNG File

答案 13 :(得分:0)

要在Eclipse中解决此问题,请执行以下步骤:

  1. 转到窗口->首选项-> TestNG->运行/调试
  2. 在JVM_args中添加以下-Dtestng.dtd.http = true
  3. 单击“应用并关闭”按钮。
  4. 右键单击您的项目,然后选择Maven->更新项目
  5. 现在转到您的pom.xml并单击Run as-> Maven Test

现在下面的问题“默认情况下,TestNG会禁用从不安全的Urls加载DTD”。