Персонализиране, PDF и имейл TestNG Доклади в Selenium уебдрайвер
Преди да разгледаме нещо друго, нека първо разберем –
Защо се нуждаем от докладване?
Когато използваме Selenium или всеки друг инструмент за автоматизация, ние извършваме операции в уеб приложението. Но нашата цел на автоматизацията не е просто да упражняваме Тестваното приложение. Ние, като тестер за автоматизация, трябва да тестваме приложението, да намираме грешки и да го докладваме на екипа за разработка или на висшето ръководство. Тук отчитането придобива значение за софтуера Тестване процес
TestNG Докладване
TestNG библиотеката предоставя много удобна функция за отчитане. След изпълнение, Testng ще генерира папка с изходни тестове в основата на проекта. Тази папка съдържа два вида отчети-
Index.html: Това е пълният отчет за текущото изпълнение, който съдържа информация като грешка, групи, време, журнали на репортерите, testng XML файлове.
emailable-report.html: Това е обобщеният отчет за текущото изпълнение на теста, който съдържа Тестов случай съобщение в зелено (за издържани тестови случаи) и червено (за неуспешни тестови случаи) се подчертава.
Как да персонализирате TestNG доклад
TestNG отчитането е доста удобно, но все пак понякога имаме нужда от по-малко данни в отчетите или искаме да покажем отчети в друг формат като pdf, excel и т.н. или искаме да променим оформлението на отчета.
Може да има два начина, по които можем да персонализираме TestNG докладва
- Използване на интерфейс ITestListener:
- Използване на интерфейса на IReporter:
Интерфейс на ITestListener
Използваме този интерфейс, когато трябва да персонализираме отчет в реално време. С други думи, ако изпълняваме куп тестови случаи в TetNG пакет и искаме да получим отчета за всеки тестов случай, тогава след всеки тестов случай трябва да внедрим интерфейс ITestListener. Този интерфейс ще замени метода onTestFailure, onTestStart, onTestSkipped, за да изпрати правилния статус на текущия тестов случай.
Ето стъпките, които ще следваме
- Създайте клас, кажете RealGuru99Report и имплементирайте iTestListener в него.
- Внедрете методи на iTestListener
- Създайте метод за тестване и добавете RealGuruКлас 99Report като слушател в клас Test Method.
Code Пример
реаленGuru99TimeReport.java е класът за отчитане в реално време. Той ще имплементира интерфейса ITestListener за отчитане.
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
}
}
тестGuru99RealReport.java е тестовият случай за реален отчет
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(){
}
}
Резултатът ще изглежда като-
Интерфейс на IReporter
Ако искаме да персонализираме окончателния отчет от теста, генериран от TestNG, трябва да внедрим интерфейс на IReporter. Този интерфейс има само един метод за реализиране на generateReport. Този метод съдържа цялата информация за пълното изпълнение на теста в списъка и можем да генерираме отчета, като го използваме.
Code Пример
Guru99Reporter.java е файлът, използван за персонализиране на отчета
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()));
}
}
}
}
}
тестGuru99ForReporter.java е демо версия за персонализирано отчитане
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);
}
}
Резултатът ще бъде като-
PDF и имейл с отчети
Реализацията на отчета по-горе е доста проста и ясна, за да започнете с персонализирането на отчета.
Но в корпоративна среда ще трябва да създавате силно персонализирани отчети. Ето сценария, с който ще се занимаваме
- Създайте персонализиран отчет в PDF формат
- Правете екранни снимки САМО при грешки. Връзка към екранни снимки в PDF
- Изпратете имейл на PDF файла
PDF отчетът изглежда така
За да създадем pdf отчет, се нуждаем от a Java API IText. Изтегли го тук . Има друг персонализиран клас слушател, който всъщност внедрява този IText jar и създава pdf отчет за нас. Изтеглете го тук
Фигурата по-горе показва формата по подразбиране на генерирания PDF отчет. Можете да го персонализирате
Ето как ще подходим към това
Стъпка 1) Създайте базов клас
Стъпка 2) Персонализирайте JypersionListerner.Java (код за създаване на PDF)
Стъпка 3) Създайте тестGuru99PDFEmail.java, който ще изпълнява тестови случаи и ще създава PDF файлове
Стъпка 4) Добавяне на код към TestGuru99PDFEmail.java за изпращане на PDF отчет по имейл
Нека разгледаме тези стъпки
Стъпка 1) Създайте базов клас
Този базов клас има функции за създаване на WebDriver и правене на екранна снимка
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);
}
}
Стъпка 2) Персонализирайте JypersionListener.java
Ще се придържаме към формата на отчета по подразбиране. Но ние ще направим 2 персонализации
- Добавяне на код за инструктиране на JypersionListener да направи екранна снимка при грешка
- Прикачване на връзка към снимката на екрана в PDF отчета
Добавете код, за да прикачите екранната снимка към PDF отчета
Стъпка 3) Създайте тестGuru99PDFEmail.java, който ще изпълнява тестови случаи и ще създава PDF файлове
- Тук ще добавим JyperionListener.class като слушател
- Ще изпълним 3 тестови случая.
- Използвайки Assert.assertTrue, ще провалим 2 тестови случая, докато преминем само един.
- Екранна снимка ще бъде направена само за неуспешните тестови случаи според нашите персонализации
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);
}
Стъпка 4) Добавяне на код към TestGuru99PDFEmail.java за изпращане на PDF отчет по имейл
- Ще използваме анотацията @AfterSuite, за да изпратим имейл на PDF отчета
- Ще изпращаме имейли, използвайки Gmail
- За да активирате имейл, трябва да импортирате много библиотечни файлове като mail.jar, pop3.jar, smptp.jar и т.н.
- Преди да изпълните това, въведете от, до имейл адрес и парола
//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();
}
}
}
Изтеглете пълния проект тук
Забележка: Когато щракнем върху връзката към екранна снимка в pdf, тя показва диалогов прозорец за сигурност. Трябва да позволим на този диалогов прозорец да отвори pdf.
Така генерираният имейл ще изглежда така
Oбобщение
- TestNG има вградена способност за отчитане в него.
- След пълното изпълнение на тестовите случаи, TestNG генерира тестова изходна папка в корена на проекта.
- В папката test-output има два основни отчета, index.html и emailable-report.html.
- За персонализиране TestNG трябва да внедрим два интерфейса, ITestListener и IReporter.
- Ако трябва да получим отчет между изпълнението, имаме нужда от ITestListener.
- За да създадем окончателен отчет след пълно изпълнение, трябва да внедрим IReporter.
- Правене на екранна снимка, в Selenium WebDriver, трябва да напишем cast WebDriver към интерфейса TakesScreenShot.
- За да генерираме pdf отчети, трябва да добавим IText jar в проекта.
Изтеглете Selenium Проектни файлове за демонстрацията в този урок












