자동화테스트/Selenium2018. 12. 12. 08:00

왜 우리는보고가 필요한가?

Selenium이나 다른 자동화 툴을 사용할 때, 우리는 웹 애플리케이션에서 연산을 수행하고 있습니다. 그러나 자동화의 목적은 테스트중인 어플리케이션을 사용하는 것만은 아닙니다. 자동화 테스터는 응용 프로그램을 테스트하고 버그를 찾아 개발 팀 또는 상위 관리자에게보고해야합니다. 여기서보고는 소프트웨어 테스트 프로세스의 중요성을 갖습니다.

TestNG보고

TestNG 라이브러리는 매우 편리한보고 기능을 제공합니다. 실행 후 Testng 은 프로젝트 루트에 테스트 출력 폴더를 생성합니다. 이 폴더에는 두 가지 유형의 보고서 -

Index.html : 오류, 그룹, 시간, 리포터 로그, testng XML 파일 같은 정보를 포함하는 현재 실행의 전체 보고서입니다.

TestNG 보고서 : Selenium WebDriver의 보고서 사용자 지정, PDF 및 전자 메일

emailable-report.html : 테스트 케이스 메시지가 녹색 (통과 테스트 케이스의 경우) 및 빨간색 (실패한 테스트 케이스의 경우) 하이라이트로 표시된 현재 테스트 실행의 요약 보고서입니다 .

TestNG 보고서 : Selenium WebDriver의 보고서 사용자 지정, PDF 및 전자 메일

TestNG 보고서를 사용자 정의하는 방법

TestNG보고는 매우 편리하지만 여전히 보고서에 데이터가 적거나 pdf, Excel 등과 같은 다른 형식으로 보고서를 표시하거나 보고서의 레이아웃을 변경하려는 경우가 있습니다.

TestNG 보고서를 사용자 정의 할 수있는 두 가지 방법이 있습니다.

  • ITestListener 인터페이스 사용 :
  • IReporter 인터페이스 사용 :

TestNG 보고서 : Selenium WebDriver의 보고서 사용자 지정, PDF 및 전자 메일

ITestListener 인터페이스

실시간 보고서를 사용자 정의해야 할 때이 인터페이스를 사용합니다. 다시 말해, TetNG 제품군에서 테스트 케이스를 실행하고 각 테스트 케이스에 대한 보고서를 얻고 싶다면 각 테스트 케이스 후에 ITestListener 인터페이스를 구현해야한다. 이 인터페이스는 onTestFailure, onTestStart를 재정의합니다.

, onTestSkipped 메소드는 현재 테스트 케이스의 올바른 상태를 보냅니다.

TestNG 보고서 : Selenium WebDriver의 보고서 사용자 지정, PDF 및 전자 메일

우리가 따라갈 단계는 다음과 같습니다.

  • RealGuru99Report라고하는 클래스를 작성해, 거기에 iTestListener를 구현합니다.
  • iTestListener의 메소드 구현하기
  • 테스트 메소드를 생성하고 RealGuru99Report 클래스를 Test Method 클래스의 리스너로 추가합니다.

TestNG 보고서 : Selenium WebDriver의 보고서 사용자 지정, PDF 및 전자 메일

코드 예제

RealGuru99TimeReport.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 자동 생성 메소드 스텁 

        

    }

    

}

TestGuru99RealReport.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);

    }

    // 테스트 케이스는 실패한 testcase = testRealReportTwo에 의존 

    @Test(dependsOnMethods="testRealReportTwo")

    public void testRealReportThree(){

        

    }

}

출력은 다음과 같이 보입니다.

TestNG 보고서 : Selenium WebDriver의 보고서 사용자 지정, PDF 및 전자 메일

IReporter 인터페이스

TestNG에서 생성 된 최종 테스트 보고서를 사용자 정의하려면 IReporter 인터페이스를 구현해야합니다. 이 인터페이스에는 generateReport를 구현하는 메서드가 하나뿐입니다. 이 방법은 List <ISuite>에서 전체 테스트 실행에 대한 모든 정보를 가지고 있으며이를 사용하여 보고서를 생성 할 수 있습니다.

코드 예제

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) {

        //이 메소드의 두 번째 매개 변수 ISuite는 실행 된 모든 suite를 포함합니다. 

        for (ISuite iSuite : arg1) {

         // 한 번에 하나의 스위트 결과의 맵을 얻습니다. 

            Map<String,ISuiteResult> results =    iSuite.getResults();

         // 결과 맵의 키 가져 오기 

            Set<String> keys = results.keySet();

        //Go to each map value one by one

            for (String key : keys) {

            //현재 결과의 컨텍스트 객체 

            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());

            

             //실패한 테스트 케이스에 대해서만 맵 가져 오기

            IResultMap resultMap = context.getFailedTests();

            // 실패한 테스트 케이스의 메소드 상세 정보 얻기 

            Collection<ITestNGMethod> failedMethods = resultMap.getAllMethods();

            // 실패한 모든 메소드에서 루프를 하나씩 반복합니다. 

            System.out.println("--------FAILED TEST CASE---------");

            for (ITestNGMethod iTestNGMethod : failedMethods) {

                // 실패한 테스트 케이스를 인쇄하십시오. 

                System.out.println("TESTCASE NAME->"+iTestNGMethod.getMethodName()

                        +"\nDescription->"+iTestNGMethod.getDescription()

                        +"\nPriority->"+iTestNGMethod.getPriority()

                        +"\n:Date->"+new Date(iTestNGMethod.getDate()));

                

            }

        }

        }

        

    }

}

TestGuru99ForReporter.java는 맞춤 보고서의 데모입니다.

package testNGReport.iReporterReport;

import org.testng.Assert;

import org.testng.annotations.Listeners;

import org.testng.annotations.Test;

// 리스너를 추가하여 testcas가 완료 될 때 작성합니다. 

@Listeners(value=Guru99Reporter.class)

public class TestGuru99ForReporter {

    @Test(priority=0,description="testReporterOne")

    public void testReporterOne(){

        // 테스트 케이스 성공 

        Assert.assertTrue(true);

    }

    

    @Test(priority=1,description="testReporterTwo")

    public void testReporterTwo(){

        // 테스트 케이스 실패

        Assert.assertTrue(false);

    }

}

출력은

TestNG 보고서 : Selenium WebDriver의 보고서 사용자 지정, PDF 및 전자 메일

보고서의 PDF 및 전자 메일

위의 보고서 구현은 보고서 사용자 정의를 시작하는 데있어 매우 간단하고 명확합니다.

그러나 기업 환경에서는 고도로 사용자 정의 된 보고서를 작성해야합니다. 다음은 우리가 처리 할 시나리오입니다.

  1. PDF 형식의 사용자 정의 보고서 작성
  2. 화면 캡처에만 오류가 있습니다. PDF의 스크린 샷에 링크하기
  3. PDF의 전자 메일 보내기

PDF 보고서는 다음과 같습니다.

TestNG 보고서 : Selenium WebDriver의 보고서 사용자 지정, PDF 및 전자 메일

PDF 보고서를 작성하려면 Java API  IText 가 필요합니다 여기에서 다운로드  하십시오  . 실제로이 IText jar를 구현하고 우리를 위해 pdf 보고서를 만드는 다른 사용자 정의 리스너 클래스가 있습니다. 여기에서 다운로드  하십시오.

위 그림은 생성 된 PDF 보고서의 기본 형식을 보여줍니다. 당신은 그것을 사용자 정의 할 수 있습니다.

여기에 우리가 어떻게 접근 할 것인가?

1 단계) 기본 클래스 만들기

2 단계) JypersionListerner.Java 사용자 정의 (PDF 작성 코드)

3 단계) 테스트 케이스를 실행하고 PDF를 작성하는 TestGuru99PDFEmail.java를 작성하십시오.

4 단계) TestGuru99PDFEmail.java에 코드를 추가하여 이메일을 통해 PDF 보고서를 보냅니다.

이 단계를 살펴 보겠습니다.

1 단계) 기본 클래스 만들기

이 기본 클래스에는 WebDriver 및 Take 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.firefox.marionette","C:\\geckodriver.exe");
    	driver = new FirefoxDriver();


        }

        return driver;

    }


    /**

     * 이 함수는 스크린 샷을 캡처합니다.

     * @param webdriver

     * @param fileWithPath

     * @throws Exception

     */

    public static void takeSnapShot(WebDriver webdriver,String fileWithPath) throws Exception{

        // 웹 드라이버 객체를 TakeScreenshot으로 변환

        TakesScreenshot scrShot =((TakesScreenshot)webdriver);

        // getScreenshotAs 메서드를 호출하여 이미지 파일을 만듭니다. 

                File SrcFile=scrShot.getScreenshotAs(OutputType.FILE);

            // 이미지 파일을 새로운 대상으로 이동 

                File DestFile=new File(fileWithPath);

                // 대상에 파일 복사 

                FileUtils.copyFile(SrcFile, DestFile);

            

    }

}

2 단계) JypersionListener.java 사용자 정의

우리는 기본 보고서 형식을 고수 할 것입니다. 하지만 2 가지 맞춤 설정을 할 것입니다.

  • JypersionListener가 오류 발생시 스크린 샷을 취하도록 지시하는 코드 추가
  • 스크린 샷의 링크를 첨부하면 PDF 보고서를 가져옵니다.

TestNG 보고서 : Selenium WebDriver의 보고서 사용자 지정, PDF 및 전자 메일

스크린 샷을 PDF 보고서에 첨부하는 코드 추가

TestNG 보고서 : Selenium WebDriver의 보고서 사용자 지정, PDF 및 전자 메일

3 단계) 테스트 케이스를 실행하고 PDF를 작성하는 TestGuru99PDFEmail.java를 작성하십시오.

  • 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;

// PDF 보고서 생성을위한 리스너 추가 

@Listeners(JyperionListener.class)

public class TestGuru99PDFReport extends BaseClass {

    WebDriver driver;

    // 테스트 케이스가 실패하여 스크린 샷이 생성됩니다. 

    @Test

    public void testPDFReportOne(){

        driver = BaseClass.getDriver();

        driver.get("http://google.com");

        Assert.assertTrue(false);

    }

    

    // 테스트 케이스가 실패하여 스크린 샷이 생성됩니다. 

    @Test

    public void testPDFReporTwo(){

        driver = BaseClass.getDriver();

        driver.get("http:/guru99.com");

        Assert.assertTrue(false);

    }

    

    // 테스트 테스트 케이스가 패스 될 것이므로 스크린 샷이 없습니다. 

    @Test

    public void testPDFReportThree(){

        driver = BaseClass.getDriver();

        driver.get("http://demo.guru99.com");

        Assert.assertTrue(true);

    }

4 단계) TestGuru99PDFEmail.java에 코드를 추가하여 이메일을 통해 PDF 보고서를 보냅니다.

  • @AfterSuite 주석을 사용하여 PDF 보고서의 전자 메일을 보냅니다.
  • Gmail을 사용하여 이메일을 보냅니다.
  • 전자 메일을 사용하려면 mail.jar, pop3.jar, smptp.jar 등과 같은 많은 라이브러리 파일을 가져와야합니다.
  • 이것을 실행하기 전에 시작, 끝 전자 메일 주소 및 암호를 입력하십시오
//완료 후 pdf 보고서를 전자 메일로 보냅니다.

    @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 {

    //주소에서 설정 

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";

//메일에 파일을 첨부 할 데이터 소스를 만듭니다. 

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를 열 수 있도록 허용해야합니다.

TestNG 보고서 : Selenium WebDriver의 보고서 사용자 지정, PDF 및 전자 메일

이렇게 생성 된 이메일은 다음과 같습니다.

TestNG 보고서 : Selenium WebDriver의 보고서 사용자 지정, PDF 및 전자 메일

개요:

  • TestNG에는 내장 된보고 기능이 있습니다.
  • 테스트 케이스가 완료되면 TestNG는 프로젝트 루트에 테스트 출력 폴더를 생성합니다.
  • test-output 폴더에는 index.html과 emailable-report.html이라는 두 개의 주요 보고서가 있습니다.
  • TestNG 보고서를 사용자 정의하려면 ITestListener와 IReporter의 두 인터페이스를 구현해야합니다.
  • 실행 사이에 보고서를 가져와야하는 경우 ITestListener가 필요합니다.
  • 실행이 끝난 후 최종 보고서를 작성하려면 IReporter를 구현해야합니다.
  • Selenium WebDriver에서 스크린 샷을 찍으면 TakesScreenShot 인터페이스에 WebDriver를 입력해야합니다.
  • pdf 보고서를 생성하려면 프로젝트에 IText jar를 추가해야합니다.

이 튜토리얼의 데모 용 Selenium Project 파일 다운로드

ReportPDF.zip

"이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다."
Posted by 프리스케이터