Mukauta, PDF ja sähköposti TestNG Raportit Selenium web-ajuri
Ennen kuin tarkastelemme mitään muuta, ymmärrämme ensin -
Miksi tarvitsemme raportointia?
Kun käytämme Selenium tai mikä tahansa muu automaatiotyökalu, suoritamme toimintoja verkkosovelluksella. Mutta automaation tarkoituksemme ei ole vain testattavan sovelluksen harjoittaminen. Automaatiotestaajana meidän on tarkoitus testata sovellusta, löytää vikoja ja raportoida ne kehitystiimille tai ylemmälle johdolle. Tässä raportoinnilla on merkitystä ohjelmistoille Testaus prosessi
TestNG Raportointi
TestNG kirjasto tarjoaa erittäin kätevän raportointiominaisuuden. Suorituksen jälkeen, Testng luo testitulostuskansion projektin juureen. Tämä kansio sisältää kahden tyyppisiä raportteja -
Index.html: Tämä on täydellinen raportti nykyisestä suorituksesta, joka sisältää tietoja, kuten virhe, ryhmät, aika, reportterilokit, testaus XML-tiedostot.
emailable-report.html: Tämä on yhteenvetoraportti nykyisestä testin suorittamisesta, joka sisältää Testitapaus viesti vihreällä (läpäistyt testitapaukset) ja punaisella (epäonnistuneet testitapaukset) korostettuna.
Kuinka mukauttaa TestNG raportti
TestNG raportointi on varsin kätevää, mutta silti joskus tarvitsemme vähemmän tietoja raporteissa tai haluamme näyttää raportit jossain muussa muodossa, kuten pdf, excel jne. tai haluamme muuttaa raportin asettelua.
Voimme muokata kahdella tavalla TestNG raportti
- ITestListener-liittymän käyttäminen:
- IReporter-liittymän käyttäminen:
ITestListener-käyttöliittymä
Käytämme tätä käyttöliittymää, kun haluamme mukauttaa reaaliaikaista raporttia. Toisin sanoen, jos suoritamme joukkoa testitapauksia TetNG-sarjassa ja haluamme saada raportin jokaisesta testitapauksesta, meidän on jokaisen testitapauksen jälkeen otettava käyttöön ITestListener-liitäntä. Tämä käyttöliittymä ohittaa menetelmän TestFailure, onTestStart ja onTestSkipped lähettääkseen nykyisen testitapauksen oikean tilan.
Tässä ovat vaiheet, joita noudatamme
- Luo luokka, sano RealGuru99Report ja ota siihen käyttöön iTestListener.
- Ota käyttöön iTestListenerin menetelmät
- Luo testimenetelmä ja lisää RealGuru99Report-luokka kuuntelijaksi Test Method -luokkaan.
Koodiesimerkki
RealGuru99TimeReport.java on reaaliaikainen raportointiluokka. Se toteuttaa ITestListener-rajapinnan raportointiin
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 on todellisen raportin testitapaus
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(){
}
}
Tulos näyttää tältä -
IReporter-käyttöliittymä
Jos haluamme muokata lopullista testiraporttia, jonka on luonut TestNG, meidän on otettava käyttöön IReporter-käyttöliittymä. Tällä käyttöliittymällä on vain yksi tapa toteuttaa generateReport. Tällä menetelmällä on kaikki tiedot täydellisestä testin suorittamisesta luettelossa , ja voimme luoda raportin sen avulla.
Koodiesimerkki
Guru99Reporter.java on tiedosto, jota käytetään raportin mukauttamiseen
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 on mukautetun raportoinnin esittely
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);
}
}
Tulos tulee olemaan
PDF ja raporttien sähköposti
Yllä oleva raportin toteutus on melko yksinkertainen ja selkeä, jotta pääset alkuun raporttien mukauttamisessa.
Mutta yritysympäristössä sinun on luotava erittäin mukautettuja raportteja. Tässä on skenaario, jota käsittelemme
- Luo mukautettu raportti PDF-muodossa
- Ota kuvakaappauksia VAIN virheistä. Linkki kuvakaappauksiin PDF-muodossa
- Lähetä PDF-tiedosto sähköpostitse
PDF-raportti näyttää tältä
Pdf-raportin luomiseksi tarvitsemme a Java API IText. Lataa se täältä . On toinenkin mukautettu kuuntelijaluokka, joka todella toteuttaa tätä IText-purkkia ja luo meille pdf-raportin. Lataa se täältä
Yllä oleva kuva näyttää luodun PDF-raportin oletusmuodon. Voit muokata sitä
Näin lähestymme asiaa
Vaihe 1) Luo perusluokka
Vaihe 2) Mukauta JypersionListerner.Java (PDF-luontikoodi)
Vaihe 3) Luo TestGuru99PDFEmail.java, joka suorittaa testitapaukset ja luo PDF-tiedoston
Vaihe 4) Liitä koodi TestGuru99PDFEmail.javaan lähettääksesi PDF-raportin sähköpostitse
Katsotaanpa näitä vaiheita
Vaihe 1) Luo perusluokka
Tällä perusluokalla on toimintoja WebDriverin luomiseen ja Ota Screenshot
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);
}
}
Vaihe 2) Mukauta JypersionListener.java
Pysymme raporttien oletusmuodossa. Mutta teemme 2 mukautusta
- Lisätään koodia, joka ohjaa JypersionListeneria ottamaan kuvakaappauksen virheestä
- Liitteenä PDF-raportin kuvakaappauksen linkki
Lisää koodi liittääksesi kuvakaappauksen PDF-raporttiin
Vaihe 3) Luo TestGuru99PDFEmail.java, joka suorittaa testitapaukset ja luo PDF-tiedoston
- Täällä lisäämme JyperionListener.class kuuntelijaksi
- Suoritamme 3 testitapausta.
- Käyttämällä Assert.assertTruea hylkäämme 2 testitapausta, mutta läpäisemme vain yhden.
- Epäonnistuneista testitapauksista otetaan kuvakaappaus vain räätälöityjemme mukaisesti
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);
}
Vaihe 4) Liitä koodi TestGuru99PDFEmail.javaan lähettääksesi PDF-raportin sähköpostitse
- Käytämme merkintää @AfterSuite lähettääksemme PDF-raportin sähköpostitse
- Lähetämme sähköpostia Gmailin kautta
- Sähköpostin ottamiseksi käyttöön sinun on tuotava useita kirjastotiedostoja, kuten mail.jar, pop3.jar, smptp.jar jne.
- Ennen kuin suoritat tämän, kirjoita lähettäjä, vastaanottaja sähköpostiosoite ja salasana
//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();
}
}
}
Lataa koko projekti tästä
Huomautus: Kun napsautamme kuvakaappauslinkkiä pdf:ssä, se näyttää suojausikkunan. Meidän on sallittava tämän valintaikkunan avata pdf.
Näin luotu sähköposti näyttää tältä
Yhteenveto
- TestNG siinä on sisäänrakennettu raportointikyky.
- Kun testitapaukset on suoritettu täydellisesti, TestNG luo testitulostuskansion projektin juureen.
- Testitulostuskansiossa on kaksi pääraporttia, index.html ja emailable-report.html.
- Sopiaksesi TestNG raportissa meidän on otettava käyttöön kaksi käyttöliittymää, ITestListener ja IReporter.
- Jos tarvitsemme raportin suorituksen välillä, tarvitsemme ITestListenerin.
- Loppuraportin luomiseksi täydellisen suorituksen jälkeen meidän on otettava käyttöön IReporter.
- Ota kuvakaappaus sisään Selenium WebDriver, meidän on kirjoitettava cast WebDriver TakesScreenShot-käyttöliittymään.
- Pdf-raporttien luomiseksi meidän on lisättävä projektiin IText jar.
Lataa Selenium Projektitiedostot esittelyä varten tässä opetusohjelmassa












