Kohanda, PDF ja e-post TestNG Aruanded sisse Selenium Veebidraiver
Enne kui hakkame midagi muud uurima, mรตistame kรตigepealt
Miks me vajame aruandlust?
Kui me kasutame Selenium vรตi mรตni muu automatiseerimistรถรถriist, teostame veebirakenduses toiminguid. Kuid meie automatiseerimise eesmรคrk ei ole ainult testitava rakenduse kasutamine. Meie, automaatika testija, peaksime rakendust testima, vead leidma ja arendusmeeskonnale vรตi kรตrgemale juhtkonnale teatama. Siin muutub aruandlus tarkvara jaoks oluliseks Testimine protsess
TestNG Aruandlus
TestNG raamatukogu pakub vรคga mugavat aruandlusfunktsiooni. Pรคrast hukkamist, Testng loob projekti juurtes test-vรคljundkausta. See kaust sisaldab kahte tรผรผpi aruandeid -
Index.html: See on praeguse tรคitmise tรคielik aruanne, mis sisaldab teavet, nagu viga, rรผhmad, aeg, reporteri logid, XML-failide testimine.
emailable-report.html: See on praeguse testi tรคitmise koondaruanne, mis sisaldab Testjuhtum teade on esile tรตstetud rohelise (testi lรคbimise korral) ja punasega (ebaรตnnestunud testjuhtumite puhul).
Kuidas kohandada TestNG Aruanne
TestNG aruandlus on รผsna mugav, kuid mรตnikord vajame aruannetes vรคhem andmeid vรตi tahame kuvada aruandeid mรตnes muus vormingus (nt pdf, excel vms) vรตi soovime muuta aruande paigutust.
Me saame kohandada kahel viisil TestNG aru
- ITestListeneri liidese kasutamine:
- IReporteri liidese kasutamine:
ITestListeneri liides
Kasutame seda liidest, kui peame kohandama reaalajas aruannet. Teisisรตnu, kui teostame hulga testjuhtumeid TetNG komplektis ja tahame saada iga testjuhtumi aruannet, siis pรคrast iga testjuhtumit peame rakendama ITestListeneri liidese. See liides alistab meetodi TestFailure, onTestStart ja onTestSkipped, et saata praeguse testjuhtumi รตige olek.
Siin on sammud, mida jรคrgime
- Loo klass, nรคiteks โReaalโGuru99Report ja rakenda selles iTestListenerit.
- Rakendage iTestListeneri meetodeid
- Loo testimismeetod ja lisa reaalvรครคrtusGuru99Aruande klass kuulajana klassis Test Method.
Code Nรคide
reaalneGuru99TimeReport.java on reaalajas aruandluse klass. See rakendab aruandluse jaoks ITestListeneri liidest.
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 pรคris aruande testjuhtum
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(){
}
}
Vรคljund nรคeb vรคlja selline -
IReporteri liides
Kui soovime kohandada poolt loodud lรตplikku testiaruannet TestNG, peame rakendama IReporteri liidese. Sellel liidesel on generReport rakendamiseks ainult รผks meetod. Sellel meetodil on loendis kogu teave tรคieliku testi tรคitmise kohta ja saame selle abil aruande luua.
Code Nรคide
Guru99Reporter.java on fail, mida kasutatakse aruande kohandamiseks
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 kohandatud aruandluse demoversioon
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);
}
}
Vรคljund on selline -
PDF ja aruannete e-post
รlaltoodud aruande rakendamine on รผsna lihtne ja selge, et saaksite aruande kohandamisega alustada.
Kuid ettevรตtte keskkonnas peate looma vรคga kohandatud aruandeid. Siin on stsenaarium, millega me tegeleme
- Loo kohandatud aruanne PDF-vormingus
- Tehke ekraanipilte AINULT vigade korral. Link ekraanipiltidele PDF-is
- Saada PDF-i meil
PDF-aruanne nรคeb vรคlja selline
Pdf-aruande koostamiseks vajame a Java API IText. Laadige see alla siin . On veel รผks kohandatud kuulajaklass, mis tegelikult rakendab seda ITexti jari ja loob meie jaoks pdf-aruande. Laadige see alla siin
รlaltoodud joonis nรคitab loodud PDF-aruande vaikevormingut. Saate seda kohandada
Siin on, kuidas me sellele lรคheneme
1. samm) looge baasklass
2. samm) Kohandage JypersionListerner.Java (PDF-i loomise kood)
3. samm) Loo testGuru99PDFEmail.java, mis kรคivitab testjuhtumeid ja loob PDF-faile
4. samm) Lisage kood testileGuru99PDFEmail.java PDF-aruande saatmiseks e-posti teel
Vaatame neid samme
1. samm) looge baasklass
Sellel baasklassil on funktsioonid WebDriveri loomiseks ja ekraanipildi tegemiseks
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. samm) Kohandage JypersionListener.java
Jรครคme aruande vaikevormingu juurde. Kuid me teeme 2 kohandust
- Koodi lisamine, et juhendada JypersionListenerit vea korral ekraanipilti tegema
- Lisan PDF-aruandes pildi pildi lingi
Lisage kood, et lisada ekraanipilt PDF-aruandele
3. samm) Loo testGuru99PDFEmail.java, mis kรคivitab testjuhtumeid ja loob PDF-faile
- Siia lisame kuulajaks JyperionListener.class
- Viime lรคbi 3 testjuhtumit.
- Kasutades Assert.assertTrue, kukume lรคbi 2 testjuhtumit, lรคbides vaid รผhe.
- Ekraanipilt tehakse ainult ebaรตnnestunud testjuhtumite kohta vastavalt meie kohandustele
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. samm) Lisage kood testileGuru99PDFEmail.java PDF-aruande saatmiseks e-posti teel
- Kasutame PDF-aruande meili saatmiseks mรคrkust @AfterSuite
- Saadame e-kirja, kasutades Gmail
- Meili lubamiseks tuleb importida palju teegifaile, nagu mail.jar, pop3.jar, smptp.jar jne
- Enne selle kรคivitamist sisestage e-posti aadress ja parool
//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();
}
}
}
Laadige kogu projekt alla siit
Mรคrkus. Kui klรตpsame pdf-is ekraanipildi lingil, kuvatakse turvadialoog. Peame lubama sellel dialoogil pdf-i avada.
Sel viisil loodud e-kiri nรคeb vรคlja selline
kokkuvรตte
- TestNG on sisseehitatud aruandlusvรตime.
- Pรคrast testjuhtumite tรคielikku tรคitmist TestNG genereerib projekti juurkataloogis test-vรคljundkausta.
- Test-vรคljundi kaustas on kaks peamist aruannet, index.html ja emailable-report.html.
- Kohandamiseks TestNG aruanne, peame rakendama kaks liidest, ITestListener ja IReporter.
- Kui vajame tรคitmise vahepeal aruannet, vajame ITestListenerit.
- Lรตpparuande koostamiseks pรคrast tรคielikku tรคitmist peame rakendama IReporteri.
- Ekraanipildi tegemine, sisse Selenium WebDriver, peame sisestama cast WebDriver TakesScreenShot liidesesse.
- Pdf-aruannete genereerimiseks peame projekti lisama IText jari.












