Есть отличная удаленная работа для php+codeception+jenkins+allure+docker спецов. 100% remote! Присоединиться к проекту

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

junit
java
selenium
Теги: #<Tag:0x00007f7b691e6ab8> #<Tag:0x00007f7b691e6928> #<Tag:0x00007f7b691e6338>

(Anatoliy Velikokhatskiy) #1

С помощью библиотеки 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();
    }

}

(Dzmitry Ihnatsyeu) #2

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

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

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


(Anatoliy Velikokhatskiy) #3

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


(Anatoliy Velikokhatskiy) #4

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