我想生成一个范围报告,但对于使用侦听器和不使用侦听器来创建范围报告之间的区别感到困惑?
我已经完成了两者的代码编写,但是我看不出它们之间的区别,哪个更好,因为它看起来相同并且结果也相同。谁能告诉我哪个更好?下面附有我的示例代码,当我删除监听器时仍然可以获得相同的结果:
Listener.java
package listener;
public class Listener implements ITestListener {
ExtentTest test;
public void onTestStart(ITestResult result) {
System.out.println("on test start");
}
public void onTestSuccess(ITestResult result) {
System.out.println("on test success");
}
public void onTestFailure(ITestResult result) {
System.out.println("on test failure");
result.getThrowable();
}
public void onTestSkipped(ITestResult result) {
System.out.println("on test skipped");
result.getThrowable();
}
public void onTestFailedButWithinSuccessPercentage(ITestResult result) {
System.out.println("on test sucess within percentage");
}
public void onStart(ITestContext context) {
System.out.println("on start");
}
public void onFinish(ITestContext context) {
System.out.println("on finish");
} }
BaseTest.java
public class BaseTest {
public AppiumDriver<WebElement> driver;
ExtentReports extent;
ExtentTest test;
String timeStamp = new SimpleDateFormat("EEE-d-MMM-yyyy.HH-mm-ss ").format(new Date());
String fileName = System.getProperty("user.dir") + "/result/report" + timeStamp + ".html";
ExtentHtmlReporter htmlReports;
@Parameters("deviceModel")
@BeforeTest
public void setUp() throws MalformedURLException {
htmlReports = new ExtentHtmlReporter(fileName);
extent = new ExtentReports();
extent.attachReporter(htmlReports);
htmlReports.config().setReportName("Testing");
htmlReports.config().setTheme(Theme.STANDARD);
htmlReports.config().setTestViewChartLocation(ChartLocation.BOTTOM);
htmlReports.config().setDocumentTitle("HtmlResultTest");
System.out.println("Session is creating");
DesiredCapabilities capabilities = new DesiredCapabilities();
capabilities.setCapability(MobileCapabilityType.PLATFORM_NAME, "ios");
capabilities.setCapability(MobileCapabilityType.PLATFORM_VERSION, "10.3.3");
capabilities.setCapability(MobileCapabilityType.DEVICE_NAME, "Agmo");
capabilities.setCapability(MobileCapabilityType.BROWSER_NAME, "Safari");
driver = new IOSDriver<WebElement>(new URL("http://localhost:4723/wd/hub"), capabilities);
driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);
System.out.println("Session is created");
}
@AfterTest
public void tearDown() {
extent.flush();
}
@AfterMethod
public void checkResults(ITestResult testResult){
if (testResult.getStatus()==ITestResult.FAILURE){
test.log(Status.FAIL, "Test case is failed because of below problem");
test.log(Status.FAIL, testResult.getThrowable());
}else if (testResult.getStatus()==ITestResult.SUCCESS){
test.log(Status.PASS, "Test case is passed");
}else if (testResult.getStatus()==ITestResult.SKIP){
test.log(Status.SKIP, testResult.getThrowable());
}
} }
Testing.java
public class Testing extends BaseTest {
@Test(priority = 0)
public void InvalidVerificationCode() {
test = extent.createTest("Invalid code");
System.out.println("Starting test " + new Object() {}.getClass().getEnclosingMethod().getName());
driver.get("https://r2c2-staging.azurewebsites.net");
try {
driver.findElement(By.xpath("//button[@class=\"btn btn-white-green\" and @type=\"button\"]")).click();
driver.findElement(By.xpath("//input[@class=\"ng-untouched ng-pristine ng-invalid\" and @type=\"text\"]")).sendKeys("sarinadia+2@agmostudio.com");
driver.findElement(By.xpath("//input[@class=\"ng-untouched ng-pristine ng-invalid\" and @type=\"password\"]")).sendKeys("12345");
driver.findElement(By.xpath("//button[@class=\"signInBtn\" and @type=\"submit\"]")).click();
}catch (Exception e){
driver.findElement(By.xpath("//div[@class=\"title\"]")).click();
}
driver.findElement(By.xpath("//img[@class=\"ng-star-inserted\"]")).click();
driver.findElement(By.xpath("//div[@class=\"logout\"]")).click();
driver.findElement(By.xpath("//button[@class=\"btn btn-white-green\" and @type=\"button\"]")).click();
driver.findElement(By.xpath("//input[@class=\"ng-untouched ng-pristine ng-invalid\" and @type=\"text\"]")).sendKeys("sarinadia+2@agmostudio.com");
driver.findElement(By.xpath("//input[@class=\"ng-untouched ng-pristine ng-invalid\" and @type=\"password\"]")).sendKeys("12345");
driver.findElement(By.xpath("//button[@class=\"signInBtn\" and @type=\"submit\"]")).click();
try{
driver.findElement(By.xpath("//div[@class=\"logout\" and @text=\"Logout\"]"));
}catch (Exception e){
String actual_error = driver.findElement(By.xpath("//div[@class=\"modal-content\"]")).getText();
Assert.assertTrue(actual_error.contains("The user name or password provided is incorrect"));
driver.findElement(By.xpath("//button[@class=\"btn btn-primary ok\" and @type=\"button\"]")).click();
System.out.println("Tess login with invalid verification code pass!!\n");
}
}
File.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="Suite" parallel="tests">
<listeners>
<listener class-name="Listener"/>
</listeners>
<test name="Test ios">
<parameter name="deviceModel" value="Agmo" />
<classes>
<class name="Testing">
<methods>
<include name="InvalidVerificationCode"/>
</methods>
</class>
</classes>
</test>
</suite>
答案 0 :(得分:0)
没有区别,只有两种创建报告的方法。
尽管,看一下代码,您对Listener的使用将不会做任何事情,因为它只是编写到控制台。该报告仅从BaseTest生成。