๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

SQA/Automation

Maven ํ”„๋กœ์ ํŠธ ์ƒ์„ฑ TestNG class ์ƒ์„ฑ ๋ฐฉ๋ฒ• ์˜ˆ์ œ

์ €๋ฒˆ ํฌ์ŠคํŠธ์—์„œ ํ…Œ์ŠคํŠธ ์ž๋™ํ™” ๊ตฌ์„ฑ์„ ์œ„ํ•œ ์ค€๋น„๋ฅผ ๋๋ƒˆ๋‹ค๋ฉด, ์˜ค๋Š˜์€ ๋ฉ”์ด๋ธ ํ”„๋กœ์ ํŠธ๋ฅผ ์ƒ์„ฑํ•˜๊ณ , TestNG ํด๋ž˜์Šค๋กœ ํ…Œ์ŠคํŠธ๋ฅผ ๊ตฌ์„ฑํ•˜์—ฌ, ๊ฐ„๋‹จํ•œ ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•ด๋ณผ ๊ฒƒ์ด๋‹ค. ํ•ด๋‹น ๊ฐ€์ด๋“œ๋Š” ์ดํด๋ฆฝ์Šค ํ™˜๊ฒฝ์—์„œ ์ˆ˜ํ–‰ํ•œ๋‹ค.

 

maven-testng-used
maven-testng-used

 

Maven ํ”„๋กœ์ ํŠธ ์ƒ์„ฑ ๋ฐฉ๋ฒ•

1. ์ดํด๋ฆฝ์Šค ์‹คํ–‰

2. File > New > Other ์— ๋“ค์–ด๊ฐ€์„œ Maven > Maven Project ์„ ํƒ

select-a-wizard-popup
select-a-wizard-popup

 

 

3. Create a simple project ์— ์ฒดํฌํ•˜๊ณ  Next

new-maven-project-popup
new-maven-project-popup

 

 

4. New Maven Project ๋‹ค์ด์–ผ๋กœ๊ทธ

Group id, Artifact id ๋ฅผ ์ž„์˜๋กœ ์ž…๋ ฅํ•ด์ฃผ๊ณ , Finish๋ฅผ ํด๋ฆญํ•œ๋‹ค.

Group id๋Š” com.example ์™€ ๊ฐ™์€ ํ˜•์‹์œผ๋กœ ์ž…๋ ฅํ•ด์ฃผ๋ฉด ํŒจํ‚ค์ง€๊ฐ€ ์ƒ์„ฑ๋œ๋‹ค.

Artifact id๋Š” test1 ๊ณผ ๊ฐ™์€ ๋ฐฉ์‹์œผ๋กœ ์„ค์ •ํ•ด์ฃผ๋ฉด, ํ”„๋กœ์ ํŠธ์˜ ์ด๋ฆ„์ด ๋œ๋‹ค.

 

new-maven-project-popup
new-maven-project-popup

 

 

5. maven ํ”„๋กœ์ ํŠธ ์ƒ์„ฑ์„ ์™„๋ฃŒํ–ˆ๋‹ค.

project-create
project-create

 

 


 

์…€๋ ˆ๋‹ˆ์›€๊ณผ TestNG ์˜์กด์„ฑ ์ถ”๊ฐ€ ๋ฐฉ๋ฒ•

 

1. pom.xml ํŒŒ์ผ ์—ด๊ธฐ

pom.xml
pom.xml

 

 

2. <project> ํƒœ๊ทธ ์‚ฌ์ด์— ์•„๋ž˜์— ์˜์กด์„ฑ ์ฝ”๋“œ ์ถ”๊ฐ€

<properties>
        <java.version>1.8</java.version>
        <selenium.version>3.12.0</selenium.version>
        <testng.version>6.13.1</testng.version>
        <javafaker.version>0.14</javafaker.version>
        <guava.version>23.2-jre</guava.version>
        <extentreports.version>3.0.7</extentreports.version>
        <extenttestng.version>1.3.1</extenttestng.version>
        <assertj.version>3.8.0</assertj.version>
        <maven.compiler.version>3.7.0</maven.compiler.version>
        <commons.version>3.7</commons.version>
        <commons.io.version>2.6</commons.io.version>
  </properties>
  

  <dependencies>
        <dependency>
            <groupId>org.seleniumhq.selenium</groupId>
            <artifactId>selenium-java</artifactId>
            <version>${selenium.version}</version>
        </dependency>
        <dependency>
            <groupId>org.testng</groupId>
            <artifactId>testng</artifactId>
            <version>${testng.version}</version>
        </dependency>
  </dependencies>
  
  
  <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>${maven.compiler.version}</version>
                <configuration>
                    <source>${java.version}</source>
                    <target>${java.version}</target>
                </configuration>
            </plugin>
        </plugins>
  </build>

 

 


TestNG class ์ƒ์„ฑ ๋ฐฉ๋ฒ•

์ด์ œ ํ”„๋กœ์ ํŠธ๋ฅผ ๋งŒ๋“ค์—ˆ์œผ๋‹ˆ, class๋ฅผ ์ƒ์„ฑํ•ด์•ผํ•œ๋‹ค.

 

1. src/test/java > New > Other

new-other
new-other

2. TestNG > TestNG class ์„ ์„ ํƒํ•œ๋‹ค.

 

select-a-wizard
select-a-wizard

 

 

3. New TestNG class ๋‹ค์ด์–ผ๋กœ๊ทธ์— ์•„๋ž˜ ๋‚ด์šฉ์„ ์ž…๋ ฅํ•ด๋ณธ๋‹ค.

source folder : /test1/src/test/java (Browse.. ๋ฒ„ํŠผ์œผ๋กœ ์„ ํƒ ๊ฐ€๋Šฅํ•˜๋‹ค.)

Package name : com.example (์•„๊นŒ ์œ„์—์„œ ์ •ํ•ด์ค€ ํŒจํ‚ค์ง€ ์ด๋ฆ„์„ ์ž…๋ ฅ)

Class name : NavigationTest (์ด๊ฒƒ๋„ ์ž„์˜๋กœ ์ž…๋ ฅํ•ด์ค€๋‹ค.)

@BeforeMethod, @AfterMethod ์„ ํƒ

XML suite file : /src/test/resources/suites/testing.xml

create-testng-class
create-testng-class

 

 

4. TestNG class ์ƒ์„ฑ ์™„๋ฃŒ

  • TestNG์–ด๋…ธํ…Œ์ด์…˜ (@Test, @BeforeMethod, @AfterMethod) ๊ณผ beforeMethod, afterMethod ๋ฉ”์„œ๋“œ๊ฐ€ ์ถ”๊ฐ€๋œ NavigationTest.java ํด๋ž˜์Šค๊ฐ€ ๋งŒ๋“ค์–ด ์กŒ๋‹ค.

create-testng-class-result
create-testng-class-result

 

 

 


 

๊ฐ„๋‹จํ•œ ์˜ˆ์ œ ์‹คํ–‰ํ•ด๋ณด๊ธฐ

์ด์ œ ์ค€๋น„๊ฐ€ ๋๋‚ฌ๋‹ค. ์ฒซ ์˜ˆ์ œ๋กœ ํฌ๋กฌ๋ธŒ๋ผ์šฐ์ €๋กœ google ํŽ˜์ด์ง€๋ฅผ ์—ด์—ˆ๋‹ค๊ฐ€ ๋‹ซ๋Š” ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•ด๋ณด์ž.

 

1. NavagationTest ํด๋ž˜์Šค ์ž‘์„ฑํ•˜๊ธฐ

ํ•ด๋‹น ํด๋ž˜์Šค๋ฅผ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ˆ˜์ •ํ•œ๋‹ค.

 

package com.example;

import org.testng.annotations.*;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.testng.Assert;

public class NavigationTest {
	
	WebDriver driver;
	
  @Test
  public void navigateToUrl() {
	  //์›น์‚ฌ์ดํŠธ ์—ด๊ธฐ
	 driver.get("http://google.com/");
  }
  
  
  @BeforeMethod
  public void beforeMethod() {
	  
	  //ChromeDriver ๊ฒฝ๋กœ ์„ค์ •
	 System.setProperty("webdriver.chrome.driver", "./src/test/resources/drivers/chromedriver");
	 
	 //์›น๋“œ๋ผ์ด๋ฒ„ ์„ธ์…˜ ์ดˆ๊ธฐํ™”
	 driver = new ChromeDriver();
  }

  @AfterMethod
  public void afterMethod() {
	  //ํ…Œ์ŠคํŠธ ์ข…๋ฃŒ ๋ฐ ๋ธŒ๋ผ์šฐ์ € ๋‹ซ๊ธฐ 
	 driver.quit();
  }

}

 

navigateToUrl() ๋ฉ”์„œ๋“œ๋Š” @Test ์–ด๋…ธํ…Œ์ด์…˜์„ ์‚ฌ์šฉํ–ˆ๋‹ค. get() ๋ฉ”์„œ๋“œ์— URL์„ ๋„ฃ์–ด ํ˜ธ์ถœํ•˜๋Š” ๋ฉ”์„œ๋“œ์ด๋‹ค.

 

BeforeMethod() ๋ฉ”์„œ๋“œ๋Š” chromedriver ์‹คํ–‰ํŒŒ์ผ ๊ฒฝ๋กœ๋ฅผ ์„ค์ •ํ•˜๊ณ  driver ๋ณ€์ˆ˜์— ChromeDriver() ํด๋ž˜์Šค ์ธ์Šคํ„ด์Šค ํ• ๋‹นํ•œ๋‹ค. TestNG ์–ด๋…ธํ…Œ์ด์…˜ @BeforeMethod ๋ฅผ ์‚ฌ์šฉํ•ด ํ…Œ์ŠคํŠธ ๋ฉ”์„œ๋“œ๋ฅผ ์‹คํ–‰ํ•˜๊ธฐ ์ „์— ์‹คํ–‰์‹œํ‚จ๋‹ค. ํ•ด๋‹น ๋ฉ”์„œ๋“œ๊ฐ€ ์‹คํ–‰ ์™„๋ฃŒ๋˜๋ฉด ํฌ๋กฌ ๋ธŒ๋ผ์šฐ์ € ์ฐฝ์ด ๋‚˜ํƒ€๋‚œ๋‹ค.

 

afterMethod() ๋ฉ”์„œ๋“œ๋Š” @AfterMethod ์–ด๋…ธํ…Œ์ด์…˜์„ ์‚ฌ์šฉํ•œ๋‹ค. ํ…Œ์ŠคํŠธ๊ฐ€ ๋๋‚œ ๋’ค ํ˜ธ์ถœ๋œ๋‹ค. ํฌ๋กฌ๋“œ๋ผ์ด๋ฒ„๋ฅผ ์ข…๋ฃŒํ•˜๋Š” ์ฝ”๋“œ์ด๋‹ค.

 

 

 

2. ์‹คํ–‰ํ•˜๊ธฐ

์œ„์— ์ž‘์„ฑํ•œ ์ฝ”๋“œ๋ฅผ ์‹คํ–‰์‹œํ‚จ๋‹ค. ํŽธ์ง‘๊ธฐ์—์„œ ๋งˆ์šฐ์Šค ์˜ค๋ฅธ์ชฝ ๋ฒ„ํŠผ ํด๋ฆญ > Run As > TestNG Test ์„ ํƒ

run-testng-test
run-testng-test

 

 

3. ์‹คํ–‰ ๊ฒฐ๊ณผ ํ™•์ธ

์•„๋ž˜ ์ฒ˜๋Ÿผ ์ฝ˜์†”์— ๋‚ด์šฉ์ด ๋‚˜์˜ค๋ฉด ์„ฑ๊ณตํ•œ ๊ฒƒ์ด๋‹ค.

console
console

 

 

์ดํด๋ฆฝ์Šค์˜ TestNG ํ”Œ๋Ÿฌ๊ทธ์ธ์—๋Š” ๋‹ค์Œ ํ™”๋ฉด์ด ๋‚˜์˜จ๋‹ค. 1๊ฐœ์˜ testcase(@Test)๊ฐ€ ์žˆ๊ณ , 1๊ฐœ๊ฐ€ ์„ฑ๊ณตํ–ˆ๋‹ค๋Š” ๋œป์ด๋‹ค.

testng-plugin
testng-plugin

 

 

์ถœ์ฒ˜ : Selenium์„ ํ™œ์šฉํ•œ ํ…Œ์ŠคํŠธ ์ž๋™ํ™” (W3Cํ‘œ์ค€ ์›น๋“œ๋ผ์ด๋ฒ„๋กœ ๋งŒ๋“œ๋Š” ํ…Œ์ŠคํŠธ ์ŠคํŠธ๋ฆฝํŠธ)