웹 UI 테스트 자동화를 위해 Katalon을 리서치 했던 내용과 간단한 실습 그리고 어떻게 활용하면 좋을지에 대한 생각

Katalon Product

Katalon 에서 제공하는 솔루션 중에 Katalon Studio (Free)를 사용 했다.

Katalon Studio

Katalon Studio는 개발자와 QA를 위한 Katalon LCC에서 개발한 자동화 테스트 솔루션이다.
웹, API, 모바일 및 데스크톱 애플리케이션 테스트가 가능하다
사용자 인터페이스는 Eclipse Rich Client Platform (RCP)에 구현된 통합 개발 환경(IDE) 이고, IDE를 사용하여 오픈소스 자동화 프레임워크인 Selenium, Appium을 기반으로 구축되었다.
Katalon Studio의 테스트 케이스 스크립트의 엔진으로 Groovy 를 사용한다.

  • Java 8 지원

Selenium API jar 사용 가능

  • 실제로 Katalon에 내장 된 대부분의 Keyword는 Selenium을 기반으로 함
    Html Selector로 (Html의 특정 요소나 속성에 접근하기 위한 경로)XPath를 지원
    • XPath vs CSS
      • XPath는 구글 크롬 개발자도구에서 Element 선택 후 Copy XPath 옵션을 지원하고, Elements 탭에서 XPath 기반으로 특정 Element를 찾을 수 도 있다.
        XPath 관련 크롬익스텐션들도 존재 한다.
  • 전체 Test Suite 또는 개별 Test Case를 실행할 수 있다.

지원하는 테스트 환경

  • 브라우저 Chrome, Firefox, IE, Safari, Edge
  • 모바일 브라우저 Android, iOS

Supported Environments

Document & Videos

https://docs.katalon.com/katalon-studio/docs/overview.html
https://docs.katalon.com/katalon-studio/videos/index.html

Sample Projects

Katalon Studio Sample Projects

Katalon Runtime Engine

KRE는 Katalon Studio의 테스트 실행 애드온으로 CLI 모드에서 자동화 테스트를 실행할 수 있다.
테스트 예약 CI와의 통합과 같은 시나리오에서 사용할 수 있다.
예를들어 테스트 중인 애플리케이션이 업데이트 되면 Jenkins가 트리거하여 테스트가 실행되도록 설정할 수 있다.

Document

https://docs.katalon.com/katalon-studio/docs/intro-RE.html

License

Free License

The free license granted for each Katalon account only includes the standard Katalon Studio with starter features. Currently, the free license for Katalon Runtime Engine is not available. If you wish to execute Katalon Studio in console mode, you need to subscribe to a Katalon Runtime Engine license. You can upgrade the free Katalon Studio to Katalon Studio Enterprise with a paid license without having to re-download.

KRE 관련 License 더 알아보기


준비

설치

  1. https://www.katalon.com/ 접속 후 가입

  2. 계정 로그인 후 Katalon Studio 다운로드 및 설치

  3. Katalon Studio 실행 후 로그인

Document

macOS Catalina 에서 설치할 경우 참고


실행

Katalon Studio 이용 테스트 케이스 작성

Document

https://docs.katalon.com/katalon-studio/docs/create-test-case.html#in-manual-view

테스트 케이스 생성

Test Cases > New > Test Case
테스트케이스 기본정보 작성 후 저장

  • 예) Name : scenario_01

테스트 케이스 녹화

  1. Web Recoder 선택

  2. URL 입력

1
http://localhost:8080/test-app#/
  1. 브라우저 선택

  2. 크롬 브라우저 선택

    크롬 확장프로그램 설치 후 진행

1
https://chrome.google.com/webstore/detail/katalon-recorder-selenium/ljdobmomdgdljniojadhoplhkpialdid
  1. 테스트를 새로운 브라우저 또는 현재 활성화된 브라우저에서 시작할지 선택브라우저가 실행되고 테스트 대상 URL의 페이지가 랜더링 된다.

  2. 테스트 시나리오에 따라서 녹화 진행

    RECORDED ACTIONS에 웹페이지에서 액션을 할 때마다 액션이 추가된다

  3. Save Script 선택

실행

  • 등록한 Test Case 선택 후 Run(Command + Shift + A) 실행

  • 등록한 Test Suite 선택 후 Run(Command + Shift + A) 실행

    Test Suite

    • Test Suites > New > Test Suite

      Test Case를 add 하여 생성가능하고, 실행 시 순차적으로 실행된다.

  • 등록한 Test Suite Collection 선택 후 Run(Command + Shift + A) 실행

    Test Suite Collection

    • Test Suites > New > Test Suite Collection

      Test Suite를 add 하여 생성가능하고, 실행 시 순차적으로 실행된다.

결과

  • Test Cases 에 Web Recoder에서 녹화한 액션이 Script로 작성되어 있는 것을 확인 할 수있다.

  • 테스트 케이스에서 사용되는 Object 들은 Object Repository에 저장되고 테스트 케이스 Script에서 사용된다.

Katalon Studio 사용 팁

Execution Profile

  • Profile에 따라 스크립트 실행이 가능해서 각각의 환경에 맞춰 테스트가 가능하다.

  • Global Variables 저장

    테스트케이스의 동일한 이름의 Variables가 있어도 전역변수가 우선된다.

    스크립트로 적용된 예제

    Profile

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    <?xml version="1.0" encoding="UTF-8"?>
    <GlobalVariableEntities>
    <description></description>
    <name>local</name>
    <tag></tag>
    <defaultProfile>true</defaultProfile>
    <GlobalVariableEntity>
    <description></description>
    <initValue>'localhost:8080'</initValue>
    <name>host</name>
    </GlobalVariableEntity>
    </GlobalVariableEntities>

    Test Case

    1
    2
    3
    4
    5
    6
    7
    ...
    'Open browser and navigate to demo AUT site'
    WebUI.openBrowser('')
    WebUI.navigateToUrl(WebUI.concatenate(['http://', GlobalVariable.host,'/test-app/'] as String[]))
    ...
    'Close browser'
    WebUI.closeBrowser()

Common tips for using Xpath in Katalon Studio

[WebUI] Get Attribute

[WebUI] Execute JavaScript

How to use Selenium WebDriver in Katalon Studio

Manage Test Data

  • Data Files > New > Test Data

    Excel File, CSV File, Database Data, Internal Data

  • 저장된 데이터를 기반으로 테스트 가능

  • 예제코드

    Internal Data 생성 후 테스트

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    import static com.kms.katalon.core.testdata.TestDataFactory.findTestData

    ...

    '>> 데이터 추가'
    def testList = findTestData('Data Files/testlist')

    for (i=1; i <= testList.getRowNumbers(); i++) {
    WebUI.setText(findTestObject("Object Repository/Pages/main/input"), testList.getValue(1, i))
    WebUI.sendKeys(findTestObject('Object Repository/Pages/main/input'), Keys.chord(Keys.ENTER))
    }

Custom Keywords

생성 된 키워드는 다른 내장 키워드와 마찬가지로 테스트케이스 스크립트 작성 시 사용할 수 있다.

  • 다수의 테스트케이스에서 공통으로 사용되는 부분을 별도의 커스텀 키워드 (function)로 정의해서 사용

  • 각 테스트 케이스에서는 전체적인 흐름을 정의하고(단계 별 커스텀 키워드 함수 호출), 세부 테스트 로직은 커스텀 키워드에 구현하는 방식으로 작성할 수 있다.

참고

Store Project Code to Cloud

Katalon TestOps 에서 Team, Project 생성이 되어있으면 Katalon Studio에서 업로드가 가능하다.
업로드된 프로젝트는 TestOps > Test Planning > Test Projects 에서 조회 할 수 있고, zip 파일로 다운로드 가능하다.

Katalon Store

Katalon Studio 에 플러그인을 설치해서 사용할 수 있다.


활용에 대한 생각

Object Repository 관리

Test Case 는 시나리오 별로 작성하지만 Test Case에서 사용되는 Object들은 Object Repository에 있는 Object들로 재사용 될 수 구조를 가지고 있다.
Object들은 속성(xpath:attributes), 위치정보 (xpath:attribues, xpath:position), .. XPath를 가지고 있다.
웹페이지 제작 시 컴포넌트 단위로 작업하지만 테스트의 경우 페이지 별로 이루어지는 경우라면 복잡도를 줄이고, 사이드이펙트가 없도록 Object는 페이지 단위로 관리하는게 좋을 것 같다.

Object Naming

애플리케이션의 Element를 유추 가능하도록 공통된 네이밍 룰이 필요하고, 네이밍 룰에 맞춰서 오브젝트명을 작성하는게 지속적으로 테스트케이스를 업데이트 해나가는 과정에서 xpath가 변경되었을 때 대응하기 수월할 것 같다.

Wait-time issue

네트워크 안정성, 인터넷 대역폭, AUT(Application Under Test)의 성능 및 실행중인 컴퓨터의 성능과 같은 요소로 인해 스크립팅 된 대로 정확하게 수행되지 않을 수 있다.
특정 Element가 로드되기 전이나 서버의 처리시간이 오래걸리는 액션의 경우 (비동기로 무언가 처리하는 경우 특히)
어플리케이션 대기로 인해 Object를 찾지 못하거나 Object를 클릭할 수 없거나 하는 등의 문제를 만날 수 있다.

Katalon 가이드는 페이지가 로드될 때까지 기다리거나 특정 요소가 준비될 때까지 다음작업을 진행하지 않고 대기하는 등의 keyword를 제공한다.

1
2
3
4
5
6
7
8
9
10
11
'Open browser and navigate to Katalon site'
WebUI.openBrowser("https://katalon.com")

'Wait for Katalon Studio page to load with wait used as Global Variable'
WebUI.waitForPageLoad(GlobalVariable.G_Timeout_Small)

'Click on \'Login\' button to navigate to Login page'
WebUI.click(findTestObject('Page_KatalonHomepage/btn_Login'))
...
'Wait for failed message to be present'
WebUI.waitForElementPresent(findTestObject('Page_KataloLogin/div_LoginMessage'), GlobalVariable.G_Timeout_Small, FailureHandling.CONTINUE_ON_FAILURE)

서버 환경에 따라서 글로벌 변수로 유연하게 타임아웃을 정의하여 사용할 수 있다.
그러나 실제로 작업해보면 지정한 timeout 까지만 대기하는 것이라 이런 키워드를 사용하였다고 하더라도 Element가 완전히 로드되었을 때 해당 스크립트가 수행될 것이라고 확신할 수 없다.

Failure Handling

실행 중에 오류가 발생하는 경우 스크립트를 Failed 로 기록하고 계속 실행할 지 중지할 지 Warnning 으로 기록하고 계속 실행할 지 설정할 수 있다.

1
2
3
FailureHandling.CONTINUE_ON_FAILURE
FailureHandling.STOP_ON_FAILURE
FailureHandling.OPTIONAL

운영

지속적으로 Katalon을 통한 테스트를 진행할 것이라면 애플리케이션이 업데이트 되었을 때 CI 툴에서 테스트 자동화 과정을 거치도록 필수적으로 갖추어 두는게 좋을 것 같다.
Wait-time issue 등을 고려했을 때에도 Katalon을 통한 테스트 진행 시 최대한 동일한 조건(별도 테스트서버)에서 특정 기준을 가지고 테스트가 진행될 수 있어야 할 것 같다.
따라서, Free License 만으로 사용하는 것은 지속적인 운영을 고려했을 때 테스트 실행 시 어디에서나 유사한 결과를 가져올 수 있도록 가능한 범위로 제한하여 테스트에 활용해야 할 것 같다.