Personalizați, PDF și e-mail TestNG Rapoarte în Selenium webdriver
Înainte de a ne uita la altceva, să înțelegem mai întâi -
De ce avem nevoie de raportare?
Când folosim Selenium sau orice alt instrument de automatizare, efectuăm operațiuni pe aplicația web. Dar scopul nostru de automatizare nu este doar să exercităm aplicația în curs de testare. Noi, în calitate de tester de automatizare, trebuie să testăm aplicația, să găsim erori și să o raportăm echipei de dezvoltare sau conducerii superioare. Aici raportarea capătă importanță pentru software Testarea proces
TestNG Raportarea
TestNG biblioteca oferă o funcție de raportare foarte utilă. După execuție, Testng va genera un folder de ieșire de testare la rădăcina proiectului. Acest folder conține două tipuri de rapoarte -
index.html: Acesta este raportul complet al execuției curente, care conține informații precum o eroare, grupuri, timp, jurnalele de reporter, testarea fișierelor XML.
emailable-report.html: Acesta este raportul rezumat al executării testului curent care conține Caz de testare mesajul în verde (pentru cazurile de testare cu succes) și roșu (pentru cazurile de testare nereușite) evidențiază.
Cum să personalizezi TestNG Raport
TestNG raportarea este destul de utilă, dar totuși, uneori avem nevoie de mai puține date în rapoarte sau vrem să afișăm rapoarte în alt format, cum ar fi pdf, excel etc. sau vrem să schimbăm aspectul raportului.
Pot exista două moduri prin care putem personaliza TestNG raportează
- Utilizarea interfeței ITestListener:
- Utilizarea interfeței IReporter:
Interfața ITestListener
Folosim această interfață atunci când trebuie să personalizăm raportul în timp real. Cu alte cuvinte, dacă executăm o mulțime de cazuri de testare într-o suită TetNG și dorim să obținem raportul fiecărui caz de testare, atunci după fiecare caz de testare trebuie să implementăm interfața ITestListener. Această interfață va suprascrie metoda onTestFailure, onTestStart, onTestSkipped pentru a trimite starea corectă a cazului de testare curent.
Iată pașii pe care îi vom urma
- Creați o clasă spune RealGuru99Report și implementați iTestListener în ea.
- Implementați metodele iTestListener
- Creați metoda de testare și adăugați clasa RealGuru99Report ca ascultător în clasa Test Method.
Exemplu de cod
RealGuru99TimeReport.java este clasa de raportare în timp real. Acesta va implementa interfața ITestListener pentru raportare
package testNGReport.realTimeReport;
import org.testng.ITestContext;
import org.testng.ITestListener;
import org.testng.ITestResult;
public class RealGuru99TimeReport implements ITestListener{
@Override
public void onStart(ITestContext arg0) {
System.out.println("Start Of Execution(TEST)->"+arg0.getName());
}
@Override
public void onTestStart(ITestResult arg0) {
System.out.println("Test Started->"+arg0.getName());
}
@Override
public void onTestSuccess(ITestResult arg0) {
System.out.println("Test Pass->"+arg0.getName());
}
@Override
public void onTestFailure(ITestResult arg0) {
System.out.println("Test Failed->"+arg0.getName());
}
@Override
public void onTestSkipped(ITestResult arg0) {
System.out.println("Test Skipped->"+arg0.getName());
}
@Override
public void onFinish(ITestContext arg0) {
System.out.println("END Of Execution(TEST)->"+arg0.getName());
}
@Override
public void onTestFailedButWithinSuccessPercentage(ITestResult arg0) {
// TODO Auto-generated method stub
}
}
TestGuru99RealReport.java este cazul de testare pentru raportul real
package testNGReport.realTimeReport;
import org.testng.Assert;
import org.testng.annotations.Listeners;
import org.testng.annotations.Test;
@Listeners(RealGuru99TimeReport.class)
public class TestGuru99RealReport {
@Test
public void testRealReportOne(){
Assert.assertTrue(true);
}
@Test
public void testRealReportTwo(){
Assert.assertTrue(false);
}
//Test case depends on failed testcase= testRealReportTwo
@Test(dependsOnMethods="testRealReportTwo")
public void testRealReportThree(){
}
}
Ieșirea va arăta ca...
Interfața IReporter
Dacă dorim să personalizăm raportul final de testare generat de TestNG, trebuie să implementăm interfața IReporter. Această interfață are o singură metodă de a implementa generateReport. Această metodă are toate informațiile unei execuții complete de testare în Listă , și putem genera raportul folosindu-l.
Exemplu de cod
Guru99Reporter.java este fișierul folosit pentru personalizarea raportului
package testNGReport.iReporterReport;
import java.util.Collection;
import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.Set;
import org.testng.IReporter;
import org.testng.IResultMap;
import org.testng.ISuite;
import org.testng.ISuiteResult;
import org.testng.ITestContext;
import org.testng.ITestNGMethod;
import org.testng.xml.XmlSuite;
public class Guru99Reporter implements IReporter{
@Override
public void generateReport(List<XmlSuite> arg0, List<ISuite> arg1,
String outputDirectory) {
// Second parameter of this method ISuite will contain all the suite executed.
for (ISuite iSuite : arg1) {
//Get a map of result of a single suite at a time
Map<String,ISuiteResult> results = iSuite.getResults();
//Get the key of the result map
Set<String> keys = results.keySet();
//Go to each map value one by one
for (String key : keys) {
//The Context object of current result
ITestContext context = results.get(key).getTestContext();
//Print Suite detail in Console
System.out.println("Suite Name->"+context.getName()
+ "::Report output Ditectory->"+context.getOutputDirectory()
+"::Suite Name->"+ context.getSuite().getName()
+"::Start Date Time for execution->"+context.getStartDate()
+"::End Date Time for execution->"+context.getEndDate());
//Get Map for only failed test cases
IResultMap resultMap = context.getFailedTests();
//Get method detail of failed test cases
Collection<ITestNGMethod> failedMethods = resultMap.getAllMethods();
//Loop one by one in all failed methods
System.out.println("--------FAILED TEST CASE---------");
for (ITestNGMethod iTestNGMethod : failedMethods) {
//Print failed test cases detail
System.out.println("TESTCASE NAME->"+iTestNGMethod.getMethodName()
+"\nDescription->"+iTestNGMethod.getDescription()
+"\nPriority->"+iTestNGMethod.getPriority()
+"\n:Date->"+new Date(iTestNGMethod.getDate()));
}
}
}
}
}
TestGuru99ForReporter.java este o demonstrație pentru raportarea personalizată
package testNGReport.iReporterReport;
import org.testng.Assert;
import org.testng.annotations.Listeners;
import org.testng.annotations.Test;
//Add listener to listen report and write it when testcas finished
@Listeners(value=Guru99Reporter.class)
public class TestGuru99ForReporter {
@Test(priority=0,description="testReporterOne")
public void testReporterOne(){
//Pass test case
Assert.assertTrue(true);
}
@Test(priority=1,description="testReporterTwo")
public void testReporterTwo(){
//Fail test case
Assert.assertTrue(false);
}
}
Ieșirea va fi ca...
PDF și e-mail de rapoarte
Implementarea raportului de mai sus este destul de simplă și clară pentru a vă ajuta să începeți cu personalizarea rapoartelor.
Dar în mediul corporativ, va trebui să creați rapoarte extrem de personalizate. Iată scenariul cu care ne vom ocupa
- Creați un raport personalizat în format PDF
- Faceți capturi de ecran NUMAI pentru erori. Link către capturi de ecran în PDF
- Trimiteți e-mailul PDF-ului
Raportul PDF arată astfel
Pentru a crea un raport pdf avem nevoie de un Java API IText. Descarca-l aici . Există o altă clasă de ascultător personalizată care implementează de fapt acest jar IText și creează un raport pdf pentru noi. Descarca-l aici
Figura de mai sus arată formatul implicit al raportului PDF generat. Îl poți personaliza
Iată cum vom aborda acest lucru
Pasul 1) Creați o clasă de bază
Pasul 2) Personalizați JypersionListerner.Java (cod de creare PDF)
Pasul 3) Creați un TestGuru99PDFEmail.java care va executa cazuri de testare, creați PDF
Pasul 4) Adăugați codul la TestGuru99PDFEmail.java pentru a trimite raportul PDF prin e-mail
Să ne uităm la acești pași
Pasul 1) Creați clasa de bază
Această clasă de bază are funcții pentru a crea WebDriver și a face captură de ecran
package PDFEmail;
import java.io.File;
import org.apache.commons.io.FileUtils;
import org.openqa.selenium.OutputType;
import org.openqa.selenium.TakesScreenshot;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
public class BaseClass {
static WebDriver driver;
public static WebDriver getDriver(){
if(driver==null){
WebDriver driver ;
System.setProperty("webdriver.gecko.driver","C:\\geckodriver.exe");
driver = new FirefoxDriver();
}
return driver;
}
/**
* This function will take screenshot
* @param webdriver
* @param fileWithPath
* @throws Exception
*/
public static void takeSnapShot(WebDriver webdriver,String fileWithPath) throws Exception{
//Convert web driver object to TakeScreenshot
TakesScreenshot scrShot =((TakesScreenshot)webdriver);
//Call getScreenshotAs method to create image file
File SrcFile=scrShot.getScreenshotAs(OutputType.FILE);
//Move image file to new destination
File DestFile=new File(fileWithPath);
//Copy file at destination
FileUtils.copyFile(SrcFile, DestFile);
}
}
Pasul 2) Personalizați JypersionListener.java
Vom rămâne cu formatul implicit de raport. Dar vom face 2 personalizări
- Adăugarea codului pentru a instrui JypersionListener să facă captură de ecran la Eroare
- Atașând linkul capturii de ecran în raportul PDF
Adăugați cod pentru a atașa captura de ecran la raportul PDF
Pasul 3) Creați un TestGuru99PDFEmail.java care va executa cazuri de testare, creați PDF
- Aici vom adăuga JyperionListener.class ca ascultător
- Vom executa 3 cazuri de testare.
- Folosind Assert.assertTrue vom eșua 2 cazuri de testare în timp ce trecem doar unul.
- Captură de ecran va fi făcută pentru cazurile de testare nereușite numai conform personalizărilor noastre
package PDFEmail;
import java.util.Properties;
import javax.activation.DataHandler;
import javax.activation.DataSource;
import javax.activation.FileDataSource;
import javax.mail.BodyPart;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.Multipart;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.AddressException;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeBodyPart;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMultipart;
import org.openqa.selenium.WebDriver;
import org.testng.Assert;
import org.testng.annotations.AfterSuite;
import org.testng.annotations.Listeners;
import org.testng.annotations.Test;
import reporter.JyperionListener;
//Add listener for pdf report generation
@Listeners(JyperionListener.class)
public class TestGuru99PDFReport extends BaseClass {
WebDriver driver;
//Testcase failed so screen shot generate
@Test
public void testPDFReportOne(){
driver = BaseClass.getDriver();
driver.get("http://google.com");
Assert.assertTrue(false);
}
//Testcase failed so screen shot generate
@Test
public void testPDFReporTwo(){
driver = BaseClass.getDriver();
driver.get("http:/guru99.com");
Assert.assertTrue(false);
}
//Test test case will be pass, so no screen shot on it
@Test
public void testPDFReportThree(){
driver = BaseClass.getDriver();
driver.get("https://demo.guru99.com");
Assert.assertTrue(true);
}
Pasul 4) Adăugați codul la TestGuru99PDFEmail.java pentru a trimite raportul PDF prin e-mail
- Vom folosi adnotarea @AfterSuite pentru a trimite e-mailul raportului PDF
- Vom trimite e-mailuri folosind Gmail
- Pentru a activa e-mail, trebuie să importați multe fișiere de bibliotecă, cum ar fi mail.jar, pop3.jar, smptp.jar etc.
- Înainte de a executa acest lucru, introduceți adresa de e-mail și parola de la, către
//After complete execution send pdf report by email
@AfterSuite
public void tearDown(){
sendPDFReportByGMail("FROM@gmail.com", "password", "TO@gmail.com", "PDF Report", "");
}
/**
* Send email using java
* @param from
* @param pass
* @param to
* @param subject
* @param body
*/
private static void sendPDFReportByGMail(String from, String pass, String to, String subject, String body) {
Properties props = System.getProperties();
String host = "smtp.gmail.com";
props.put("mail.smtp.starttls.enable", "true");
props.put("mail.smtp.host", host);
props.put("mail.smtp.user", from);
props.put("mail.smtp.password", pass);
props.put("mail.smtp.port", "587");
props.put("mail.smtp.auth", "true");
Session session = Session.getDefaultInstance(props);
MimeMessage message = new MimeMessage(session);
try {
//Set from address
message.setFrom(new InternetAddress(from));
message.addRecipient(Message.RecipientType.TO, new InternetAddress(to));
//Set subject
message.setSubject(subject);
message.setText(body);
BodyPart objMessageBodyPart = new MimeBodyPart();
objMessageBodyPart.setText("Please Find The Attached Report File!");
Multipart multipart = new MimeMultipart();
multipart.addBodyPart(objMessageBodyPart);
objMessageBodyPart = new MimeBodyPart();
//Set path to the pdf report file
String filename = System.getProperty("user.dir")+"\\Default test.pdf";
//Create data source to attach the file in mail
DataSource source = new FileDataSource(filename);
objMessageBodyPart.setDataHandler(new DataHandler(source));
objMessageBodyPart.setFileName(filename);
multipart.addBodyPart(objMessageBodyPart);
message.setContent(multipart);
Transport transport = session.getTransport("smtp");
transport.connect(host, from, pass);
transport.sendMessage(message, message.getAllRecipients());
transport.close();
}
catch (AddressException ae) {
ae.printStackTrace();
}
catch (MessagingException me) {
me.printStackTrace();
}
}
}
Descarcă aici proiectul complet
Notă: Când facem clic pe linkul capturii de ecran din pdf, acesta arată dialogul de securitate. Trebuie să permitem acestui dialog să deschidă pdf.
E-mailul astfel generat va arăta astfel
Rezumat
- TestNG are o capacitate de raportare încorporată.
- După o execuție completă a cazurilor de testare, TestNG generează un folder de ieșire de testare în rădăcina proiectului.
- În folderul test-output, există două rapoarte principale, index.html și emailable-report.html.
- A personaliza TestNG raportul că trebuie să implementăm două interfețe, ITestListener și IReporter.
- Dacă trebuie să obținem un raport între execuții, avem nevoie de ITestListener.
- Pentru a crea un raport final după execuția completă, trebuie să implementăm IReporter.
- Făcând captură de ecran, în Selenium WebDriver, trebuie să introducem cast WebDriver în interfața TakesScreenShot.
- Pentru a genera rapoarte pdf, trebuie să adăugăm IText jar în proiect.
Descărcați Selenium Fișiere de proiect pentru demonstrația din acest tutorial












