Anpassa, PDF och e-post TestNG Rapporter i Selenium webbdrivrutin
Innan vi tittar pรฅ nรฅgot annat, lรฅt oss fรถrst fรถrstรฅ โ
Varfรถr behรถver vi rapportering?
Nรคr vi anvรคnder Selenium eller nรฅgot annat automationsverktyg utfรถr vi operationer pรฅ webbapplikationen. Men vรฅrt syfte med automatisering รคr inte bara att utรถva Application Under Test. Vi som automationstestare รคr tรคnkta att testa applikationen, hitta buggar och rapportera den till utvecklingsteamet eller hรถgre ledning. Hรคr fรฅr rapporteringen betydelse fรถr mjukvara Testning process
TestNG Rapportering
TestNG biblioteket erbjuder en mycket praktisk rapporteringsfunktion. Efter avrรคttningen, Testng kommer att generera en test-output-mapp i roten av projektet. Denna mapp innehรฅller tvรฅ typer av rapporter-
Index.html: Detta รคr den fullstรคndiga rapporten รถver aktuell kรถrning som innehรฅller information som ett fel, grupper, tid, reporterloggar, testng XML-filer.
emailable-report.html: Detta รคr den sammanfattande rapporten fรถr den aktuella testkรถrningen som innehรฅller Testfall meddelande i grรถnt (fรถr godkรคnda testfall) och rรถtt (fรถr misslyckade testfall) markera.
Hur du anpassar TestNG Rapport
TestNG rapportering รคr ganska praktiskt men ibland behรถver vi lite mindre data i rapporter eller vill visa rapporter i nรฅgot annat format som pdf, excel, etc. eller vill รคndra rapportens layout.
Det kan finnas tvรฅ sรคtt vi kan anpassa TestNG rapport
- Anvรคnda ITestListener Interface:
- Anvรคnda IReporter Interface:
ITestListener-grรคnssnitt
Vi anvรคnder detta grรคnssnitt nรคr vi behรถver anpassa realtidsrapporten. Med andra ord, om vi kรถr ett gรคng testfall i en TetNG-svit och vi vill fรฅ rapporten fรถr varje testfall, mรฅste vi efter varje testfall implementera ITestListener-grรคnssnittet. Detta grรคnssnitt kommer att รฅsidosรคtta onTestFailure, onTestStart, onTestSkipped metod fรถr att skicka korrekt status fรถr det aktuella testfallet.
Hรคr รคr stegen vi kommer att fรถlja
- Skapa en klass, sรคg RealGuru99Rapportera och implementera iTestListener i den.
- Implementera metoder fรถr iTestListener
- Skapa testmetod och lรคgg till RealGuru99Rapportera klassen som en lyssnare i Test Method-klassen.
Code Exempelvis
RealGuru99TimeReport.java รคr klassen fรถr realtidsrapportering. Den kommer att implementera ITestListener-grรคnssnittet fรถr rapportering.
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
}
}
TestaGuru99RealReport.java รคr testfallet fรถr Real Report
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(){
}
}
Utgรฅngen kommer att se ut som-
IReporter-grรคnssnitt
Om vi โโvill anpassa sluttestrapporten genererad av TestNG, mรฅste vi implementera IReporter-grรคnssnittet. Detta grรคnssnitt har bara en metod fรถr att implementera genereraReport. Denna metod har all information om en fullstรคndig testkรถrning i listan , och vi kan generera rapporten med den.
Code Exempelvis
Guru99Reporter.java รคr filen som anvรคnds fรถr att anpassa rapporten
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()));
}
}
}
}
}
TestaGuru99ForReporter.java รคr en demo fรถr anpassad rapportering
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);
}
}
Utgรฅngen blir som-
PDF och e-post med rapporter
Ovanstรฅende rapportimplementering รคr ganska enkel och tydlig fรถr att komma igรฅng med rapportanpassning.
Men i fรถretagsmiljรถn mรฅste du skapa mycket anpassade rapporter. Hรคr รคr scenariot vi kommer att ta itu med
- Skapa anpassad rapport i PDF-form
- Ta skรคrmdumpar ENDAST pรฅ fel. Lรคnk till skรคrmdumpar i PDF
- Skicka e-post till PDF-filen
PDF-rapporten ser ut sรฅ hรคr
Fรถr att skapa pdf-rapport behรถver vi en Java API IText. Ladda ner det hรคr. . Det finns en annan anpassad lyssnarklass som faktiskt implementerar denna IText-burk och skapar en pdf-rapport รฅt oss. Ladda ner det hรคr.
Ovanstรฅende figur visar standardformatet fรถr den genererade PDF-rapporten. Du kan anpassa den
Sรฅ hรคr tar vi oss an detta
Steg 1) Skapa en basklass
Steg 2) Anpassa JypersionListerner.Java (PDF skapande kod)
Steg 3) Skapa ett testGuru99PDFEmail.java som kรถr testfall och skapar PDF
Steg 4) Lรคgg till kod i testetGuru99PDFEmail.java fรถr att skicka PDF-rapport via e-post
Lรฅt oss titta nรคrmare pรฅ dessa steg
Steg 1) Skapa basklass
Den hรคr basklassen har funktioner fรถr att skapa WebDriver och ta skรคrmdump
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);
}
}
Steg 2) Anpassa JypersionListener.java
Vi kommer att hรฅlla fast vid standardrapportformatet. Men vi kommer att gรถra 2 anpassningar
- Lรคgger till kod fรถr att instruera JypersionListener att ta skรคrmdump vid fel
- Bifogar lรคnken till skรคrmdumpen i PDF-rapporten
Lรคgg till kod fรถr att bifoga skรคrmdumpen till PDF-rapporten
Steg 3) Skapa ett testGuru99PDFEmail.java som kรถr testfall och skapar PDF
- Hรคr kommer vi att lรคgga till JyperionListener.class som lyssnare
- Vi kommer att utfรถra 3 testfall.
- Genom att anvรคnda Assert.assertTrue kommer vi att misslyckas med 2 testfall medan vi bara klarar ett.
- Skรคrmdump kommer endast att tas fรถr de misslyckade testfallen enligt vรฅra anpassningar
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);
}
Steg 4) Lรคgg till kod i testetGuru99PDFEmail.java fรถr att skicka PDF-rapport via e-post
- Vi kommer att anvรคnda anteckningen @AfterSuite fรถr att skicka e-post med PDF-rapporten
- Vi kommer att skicka e-post med hjรคlp av Gmail
- Fรถr att aktivera e-post mรฅste du importera mรฅnga biblioteksfiler som mail.jar, pop3.jar, smptp.jar, etc.
- Innan du utfรถr detta, ange frรฅn, till e-postadress och lรถsenord
//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();
}
}
}
Ladda ner hela projektet hรคr
Obs: Nรคr vi klickar pรฅ skรคrmbildslรคnken i pdf visar den sรคkerhetsdialogrutan. Vi mรฅste tillรฅta den hรคr dialogrutan att รถppna pdf.
E-postmeddelandet som genereras sรฅ kommer att se ut sรฅ hรคr
Sammanfattning
- TestNG har en inbyggd rapporteringsfรถrmรฅga i sig.
- Efter en fullstรคndig utfรถrande av testfall, TestNG genererar en test-output-mapp i projektets rot.
- I test-output-mappen finns det tvรฅ huvudrapporter, index.html och emailable-report.html.
- Att anpassa TestNG rapport behรถver vi implementera tvรฅ grรคnssnitt, ITestListener och IReporter.
- Om vi โโbehรถver fรฅ en rapport mellan kรถrningarna behรถver vi ITestListener.
- Fรถr att skapa en slutrapport efter fullstรคndigt genomfรถrande mรฅste vi implementera IReporter.
- Tar skรคrmdumpen, in Selenium WebDriver, vi mรฅste skriva cast WebDriver till TakesScreenShot-grรคnssnittet.
- Fรถr att generera pdf-rapporter mรฅste vi lรคgga till IText jar i projektet.
ladda ner Selenium Projektfiler fรถr demon i denna handledning












