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

TestNG by default disables loading DTD from unsecure Urls

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

看起来问题出在 &listeners 和 &类 行,如果我用引用文件中的 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>

而 类 文件是

<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)

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

要在 intelliJ 中设置 JVM 参数,请选择 Run > Edit Configurations,然后在 -ea 之后的 VM 选项部分添加此 JVM 参数(默认情况下会在那里。

更多编辑配置请参考官方文档here

添加了屏幕截图以便于在 Intellij 中查找

参数值

-ea -Dtestng.dtd.http=true

如果以上在模板级别不起作用,这将解决它,即

Run--> Edit configuration --> template --> testng

  1. 右击class,select运行-->运行配置
  2. 默认情况下,将在 testng 选项
  3. 下生成一个具有相同 class 名称的 testNg class
  4. Select class 并转到“参数”选项卡
  5. 在 VM 参数中提供 -Dtestng.dtd.http=true

就是这样。

只是为了避免混淆并让刚接触 Config 编辑选项等的人更容易附加一个 snap 以在 intellij 中完成它。

正如 Krishnan M. 先生所回答的那样: 转到 Cucumber TestNG运行ner class 的编辑配置,然后我们必须向 VM 选项添加另一个参数,如下所示-

  1. 如何编辑 运行 配置

  2. 如何添加 >VM 参数:“-Dtestng.dtd.http=true”

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

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

  2. 我也更改了LoginTests.testSuccessfullLogin中的参数。 (这一步只会 如果您有 运行 有问题的程序,则有必要。否则如果你 运行ning 该程序是第一次,它将使用相同的方式创建此配置 与 TestNG 配置中一样的参数。)

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

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

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

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

请按照以下所有步骤操作。在 Eclipse 中配置 JVM 参数后完美运行。

问题陈述:

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

通常我们需要在启动规则项目的 JVM 上使用某些 VM 参数。

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

-- 点击完成。 --- 取消选中默认 JRE 并选中添加了 VM 参数的新 JRE。 --- 点击应用,应用并关闭。

• 配置规则项目启动配置以使用新安装的 JRE: -- 转到 运行 > 运行 配置 --- 运行 正在查看配置对话框。

enter image description here

--- 输入您选择的名称,例如:运行ConfigWithJVMArgs。 --- 测试标签:  默认显示项目名称。  Select“套件”选项并浏览项目文件夹中的testng.xml 文件。例如:src/main/resources/testng.xml enter image description here

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

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

注意:在Eclipse中更改以上配置后执行mvn clean和mvn package –Dmaven.test.skip=true

一旦 JAR 准备就绪,它将使用 JVM 参数配置新的 JRE,并修复问题陈述。

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

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

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

  1. 打开 Eclipse 并转到 Window -> 首选项
  2. 在left-hand边展开TestNG,然后点击Run/Debug
  3. 在 right-hand 端:在 JVM args 文本字段中键入以下文本: -Dtestng.dtd.http=真
  4. 单击应用并关闭按钮

全部换掉

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

在 https:

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

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

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

要在 Eclipse 中解决这个问题,请按照以下步骤操作:

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

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

  1. 如果您 运行 您的项目仅来自 eclipse/other 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。

我也遇到过这个问题。 我无法通过右键单击 运行 从我的 xml 文件中 运行 进行测试。因此,我所做的解决方案是将 xml 文件中的“”更改为“https://...” 它解决了这个问题。 谢谢