t.me/atinfo_chat Telegram группа по автоматизации тестирования

Подскажите, как отправлять в тест репорт информацию о всех тест кейсах, а не только о последнем?( код в вопросе)

Теги: #<Tag:0x00007f9b0265a4b0> #<Tag:0x00007f9b0265a2f8> #<Tag:0x00007f9b0265a190>

С помощью библиотеки Extend Report формирую отчет о результатах выполнения автотестов. Проблема в том, что при таком использовании( в начале и в конце каждого кейса) в самом отчёте фигурирует только результам о последнем кейсе. Каким образом можно использовать эту библиотеку что бы результат записывался для каждого кейса?

package testcases;

import org.junit.After;
import org.junit.AfterClass;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;

import com.relevantcodes.extentreports.ExtentReports;
import com.relevantcodes.extentreports.LogStatus;

public class TestClass {

    private static WebDriver driver;
    
    @BeforeClass
    public static void setUp(){
    	
        System.setProperty("webdriver.chrome.driver", "D://Програмирование//ChromeDriver//chromedriver.exe");
        driver = new ChromeDriver();
        
       
    }

    @Test
    public void Login() throws InterruptedException{
    	
    	 ExtentReports logger = ExtentReports.get(TestClass.class);
     	logger.init ("D:\\Програмирование\\report\\newreport.html", true); 
    	logger.startTest("TC1");
    	
    	driver.manage().window().maximize();
        driver.get("https://bigmir.net");
        Thread.sleep(2000);
        logger.log(LogStatus.INFO, "Portal is open");
        
        driver.findElement(By.id("signin_username")).sendKeys("sys");
        driver.findElement(By.id("signin_password")).sendKeys("sys");
        Thread.sleep(2000);
        logger.log(LogStatus.INFO, "Data was added");
        driver.findElement(By.xpath("//input[@value='Sign In']")).click();
        Thread.sleep(2000);
        
        if(driver.getPageSource().contains("Clients")){
        	logger.log(LogStatus.PASS, "Data was verify");
        	}else{
        		logger.log(LogStatus.FAIL, "Admin was sign in");
        	}
         
        logger.attachScreenshot("D:\\Програмирование\\report\\pict");
        
        logger.endTest();
    }

    
    @Test
    public void AddCat() throws Exception {
    	
    	 ExtentReports logger = ExtentReports.get(TestClass.class);
     	logger.init ("D:\\Програмирование\\report\\newreport.html", true);
     	
    	logger.startTest("TC2");
   
  	driver.findElement(By.partialLinkText("Tesla")).click();
  	Thread.sleep(2000);
      driver.findElement(By.xpath("//div[@id='page-wrapper']/div[3]/div[2]/div/ul/li[3]/a")).click();
      Thread.sleep(1000);
      driver.findElement(By.xpath("//div[@id='tab-categories']/div/a")).click();
      Thread.sleep(1000);
      driver.findElement(By.id("categoryName")).sendKeys("QA");
      driver.findElement(By.xpath("//div[@id='page-wrapper']/div[3]/div[2]/div/div/div[2]/div/div[2]/div/span/span/span")).click();
      Thread.sleep(1000);
      driver.findElement(By.xpath("/html/body/div[2]/div/div[3]/ul/li[1]")).click();
      Thread.sleep(1000);
      driver.findElement(By.xpath("/html/body/div[1]/div[1]/div[3]/div[2]/div/div/div[2]/div/div[3]/div/button")).click();
      Thread.sleep(1000);
      
      
      if(driver.getPageSource().contains("Category with same Name already exists.")){
      	logger.log(LogStatus.PASS, "Cat was added");
        	}else{
        		logger.log(LogStatus.FAIL, "Cat was added");
        	}      
           
      driver.findElement(By.xpath("/html/body/div[6]/div[7]/div/button")).click();
      Thread.sleep(1000);
                               
      logger.endTest();
     
    }

    @Test
    public void Setpassword() throws Exception {
    	
    	ExtentReports logger = ExtentReports.get(TestClass.class);
    	logger.init ("D:\\Програмирование\\report\\newreport.html", true);
    	
    	logger.startTest("TC3");
  	  
  	driver.findElement(By.partialLinkText("Tesla")).click();
      Thread.sleep(1000);
      
      driver.findElement(By.xpath("/html/body/div[1]/div[1]/div[1]/nav/div[2]/div[1]/ul/li[3]/a")).click(); //Member
      Thread.sleep(1000);
      driver.findElement(By.partialLinkText("new new")).click(); //Employee
      Thread.sleep(1000);
      driver.findElement(By.xpath("/html/body/div[1]/div[1]/div[3]/div[2]/div/div[2]/div/div[1]/div/div[2]/button")).click(); // Reset password
      Thread.sleep(1000);
      driver.findElement(By.xpath("/html/body/div[5]/div/div/div[2]/div/div[1]/div/input")).sendKeys("123"); // Pass1
      Thread.sleep(1000);
      driver.findElement(By.xpath("/html/body/div[5]/div/div/div[2]/div/div[2]/div[1]/input")).sendKeys("123"); //Pass2
      Thread.sleep(1000);
      driver.findElement(By.xpath("/html/body/div[5]/div/div/div[3]/button[2]")).click(); //Save
      Thread.sleep(1000);
      driver.findElement(By.xpath("/html/body/div[6]/div/div/div[3]/button")).click(); //OK
      Thread.sleep(1000);
      
      logger.log(LogStatus.PASS, "Pass was set");
      
      logger.endTest(); 
      
    }
        
    @AfterClass
    public static void cleanUp(){
    	
    	driver.quit();
    }

}

тут отличное описание: http://extentreports.relevantcodes.com/java/
делая вот так в каждом тесте:

ExtentReports logger = ExtentReports.get(TestClass.class);
logger.init ("D:\\Програмирование\\report\\newreport.html", true);    	

вы создаете каждый раз новый инстанс репортера. Естественно, что у вас присутствует только последний тест. Инициализируйте репортер в setUp методе.
logger.flush() и logger.close() вызывайте в вашем cleanUp методе.
На самом деле если вы такой код используете для реального тестирования, то правильное логирование это меньшая из проблем…

Вы не могли бы на примере этого кода показать как это работает? Я иннициализирую ExtentReports logger в setUp методе, но в @Test уже logger не срабатывает. А logger.flush() и logger.close() в методе CleanUp тоже не срабаывает.

Разобрался и нашел решение кому интересно. Можно инициализровать переменную логер в каждом методе, но logger.init ("D:\\Програмирование\\report\\newreport.html", true); TRUE нужно писать только в первом кейсе, в остальных писать FALSE и тогда будете иметь в репорте результаты всех кейсов.