Testng: [BUG] TestNG por padrão desativa o carregamento de DTD de Urls não seguros.

Criado em 9 out. 2020  ·  10Comentários  ·  Fonte: cbeust/testng

Versão TestNG

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

Comportamento esperado

Lançar exceção após ler o arquivo testng-1.0.dtd do recurso
image

Comportamento real

O arquivo testng-1.0.dtd não é legível de recursos

O problema pode ser reproduzido no runner?

IntelliJ v2020.2.3 (plug-in TestNG IDE versão 202.7660.26)

Comentários muito úteis

Todos 10 comentários

Acho que você só precisa adicionar argumentos de VM '-Dtestng.dtd.http = true' ou usar recursos HTTPS. Atualmente, TestNG precisa de HTTPS como padrão nos arquivos do pacote.

@ kobebryant2007 Existe um bug óbvio no código.

  1. Não quero adicionar um argumento e não quero que o arquivo testng-1.0.dtd seja levado pela rede.
  2. Se você adicionar um sinalizador, com base no código, não faz sentido para mim colocar o arquivo nos recursos.

@juherr Preste atenção, por favor.

@shaburov -

Não quero adicionar um argumento e não quero que o arquivo testng-1.0.dtd seja levado pela rede.

Com base no meu entendimento, o motivo pelo qual o TestNG procura o DTD na rede é para garantir que ele recupere o DTD mais recente / adequado. O TestNG tentará recuperar o DTD do site TestNG SOMENTE pelo protocolo https e, se não for encontrado, você verá esse erro. A única maneira de desabilitar isso é usar o argumento JVM que @ kobebryant2007 sugeriu.

Se você adicionar um sinalizador, com base no código, não faz sentido para mim colocar o arquivo nos recursos.

Você pode me ajudar a entender qual é a razão por trás dessa expectativa de que o TestNG seja ler um arquivo de seus recursos locais? Se for mencionado dessa forma em algum lugar, indique-me a documentação relevante. Tudo dito e feito, se houver falhas de rede, o TestNG por padrão aborta atualmente. Isso foi resolvido como parte do PR https://github.com/cbeust/testng/pull/2386, que voltará ao DTD embutido no jar TestNG. Eu estou supondo que, uma vez que o PR é mesclado, você pode acabar criando seu arquivo dtd de teste em seu CLASSPATH, que pode ser obtido como um recurso.

@shaburov O que você está tentando fazer?

O jar TestNG já está incluindo o DTD e é o que deveria ser usado.

@juherr Veja o código que anexei à captura de tela e perceba que não é esse o caso.
Uma exceção será lançada antes que o arquivo seja lido dos recursos.

Acredito que o problema seja que o IntelliJ não está usando HTTPS:
image

Ou que o URL não HTTPS não está na lista URLS (observe que TESTNG_DTD_URL e HTTPS_TESTNG_DTD_URL são exatamente os mesmos).
image

@algotastic o segundo, eu acredito.

@shaburov está certo, isso é um bug:
https://github.com/cbeust/testng/blob/7.3.0/src/main/java/org/testng/xml/Parser.java#L33
Deve ser public static final String TESTNG_DTD_URL = "http://testng.org/" + TESTNG_DTD;

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

Posso adicionar '-Dtestng.dtd.http = true', mas isso torna impossível executar o teste de uma classe / método no IntelliJ (clique com o botão direito e execute) offline.

Esta página foi útil?
0 / 5 - 0 avaliações