Selenium Java(maven项目):TestNG结果与ReportNG不同
我尝试运行testng.xml
,结果如下:
===============================================
默认测试
测试运行:14,失败:6,跳过:0
默认套件
总测试运行:14,失败:6,跳过:0
===============================================
现在,我禁用了deafult TestNG监听器并在testng.xml
添加了ReportNG testng.xml
。 testng.xml
。 看起来像这样:
按照这些步骤,我在maven的pom.xml
添加了velocity
, guice
和reportng
依赖项。
执行testsuite testng.xml
,创建了以下文件夹(标记为红色框)。
打开index.html
,结果如下:
正如预期的那样,ReportNG应该创建一个输出文件夹,在我的场景中没有注意到。 其次,结果不同。
另外,报告index.html
看起来不应该是它应该是多少。 有人能说出什么问题吗?
一些细节供您参考:
操作系统:Windows 7
Guice.jar版本: guice-4.1.0
ReportNG版本: reportng-1.1.4
速度版本: velocity-dep-1.4
TestNG版本: testng-6.11
Selenium版本: selenium-java-3.5.3
Eclipse: eclipse oxygen
我的测试用例如下:
public class MwSites { WebDriver driver; @BeforeTest public void setup () { System.setProperty("webdriver.chrome.driver", "F:\\Automation\\Drivers\\Selenium Drivers\\chromedriver_win32\\chromedriver.exe"); ChromeOptions options = new ChromeOptions(); options.addArguments("test-type"); options.addArguments("start-maximized"); options.addArguments("--js-flags=--expose-gc"); options.addArguments("--enable-precise-memory-info"); options.addArguments("--disable-popup-blocking"); options.addArguments("--disable-default-apps"); options.addArguments("test-type=browser"); options.addArguments("disable-infobars"); driver = new ChromeDriver(options); driver.manage().timeouts().implicitlyWait(60, TimeUnit.SECONDS); } @AfterTest public void Quit () throws InterruptedException { driver.quit(); } @Test(priority = 0) public void MI_Demo () throws InterruptedException { driver.navigate().to("http://demo.movingwalls.com/mi/#/login"); Assert.assertEquals("Login", driver.getTitle()); if (driver.getTitle()=="Login"){ System.out.println("Failed to access MI in demo environment"); } else{ System.out.println("MI is successfully accessed in demo environment"); } }
当你的测试被跳过时,你可能想先检查测试结果xml以找出根本原因(例外)。
另一方面,我只是想知道使用图书馆的初衷是什么,这个图书馆已经维持了4年了? ReportNG已经死了。 这是事实。 如果你看看它的来源,你会看到它使用的是哪个TestNG版本(6.8)。 您可以轻松地假设其记者基于旧的TestNG API。
当您将TestNG 6.11作为依赖项添加时,jar发生地狱的可能性非常高。 如果这是你问题的根本原因,我不会感到惊讶。
如果您还没有决定使用哪种报告系统,我建议您查看一个现代的Allure 2框架。
否则,只需先检查堆栈跟踪以了解问题的根本原因。
我能够使用指定的版本解决这个问题。
默认情况下,ReportNG报告是在surefire插件配置的target/surefire-reports
surefire target/surefire-reports
文件夹下生成的。 这可以通过surefire配置进行更改。
您可以添加任何测试类,但为了方便起见,我只包括pom文件和我使用过的两个示例类。
4.0.0 com.rationaleemotions 46923243 1.0-SNAPSHOT jar 46923243 http://maven.apache.org UTF-8 1.8 1.8 org.seleniumhq.selenium selenium-java 3.5.3 com.google.inject guice 3.0 org.testng testng 6.12 test org.uncommons reportng 1.1.4 test org.apache.maven.plugins maven-surefire-plugin 2.20.1 src/test/resources/testng.xml usedefaultlisteners false jcenter jcenter http://jcenter.bintray.com
我用过的测试类
package com.rationaleemotions; import org.openqa.selenium.WebDriver; import org.openqa.selenium.chrome.ChromeDriver; import org.openqa.selenium.chrome.ChromeOptions; import org.testng.Assert; import org.testng.annotations.AfterClass; import org.testng.annotations.BeforeClass; import org.testng.annotations.Test; import java.util.concurrent.TimeUnit; public class MwSites { private WebDriver driver; @BeforeClass public void setup() { ChromeOptions options = new ChromeOptions(); options.addArguments("test-type"); options.addArguments("start-maximized"); options.addArguments("--js-flags=--expose-gc"); options.addArguments("--enable-precise-memory-info"); options.addArguments("--disable-popup-blocking"); options.addArguments("--disable-default-apps"); options.addArguments("test-type=browser"); options.addArguments("disable-infobars"); driver = new ChromeDriver(options); driver.manage().timeouts().implicitlyWait(60, TimeUnit.SECONDS); } @AfterClass public void Quit() throws InterruptedException { driver.quit(); } @Test public void MI_Demo() throws InterruptedException { driver.navigate().to("http://demo.movingwalls.com/mi/#/login"); Assert.assertEquals("Login", driver.getTitle()); if ("Login".equals(driver.getTitle())) { System.out.println("Failed to access MI in demo environment"); } else { System.out.println("MI is successfully accessed in demo environment"); } } }
package com.rationaleemotions; import org.testng.Assert; import org.testng.Reporter; import org.testng.annotations.Test; public class TestClassWithMultipleResults { @Test public void testMethodWillPass() { Reporter.log("This test method will pass", true); } @Test public void testMethodWillFail() { Reporter.log("This test method will fail", true); Assert.fail(); } @Test(dependsOnMethods = "testMethodWillFail") public void testMethodWillSkip() { } }
我使用的套件xml:
以下是ReportNG报告的屏幕截图