(Bahasa Indonesia) Katalon Professional Foundation Series Documentations

Berikut adalah dokumentasi untuk template “Katalon Professional Foundation”, yaitu template siap pakai yang didalamnya termasuk:

✓ Folder rapih, siap scale
✓ Profiles: SIT / UAT / Prod
✓ Test Data: CSV & Excel
✓ Parameterized Objects
✓ Custom Keywords
✓ Test Suites siap run
✓ Readable reporting ready di export ke HTML/PDF

Untuk cek template-nya, silahkan klik disini.

Login

Login Test Case

Disediakan 10 Test Case – positif dan negatif case untuk Login, dan mengikuti Test Scenario sebagai berikut:

TC IDCase TypeTest Scenario TitleExpected Result
Login001PositiveLogin dengan credential validBerhasil login dan redirect ke halaman
Login002NegativeLogin dengan email dikosongkanSystem memberikan validasi field perlu diisi
Login003NegativeLogin dengan password dikosongkanSystem memberikan validasi field perlu diisi
Login004NegativeLogin dengan email dan password dikosongkanSystem memberikan validasi field perlu diisi
Login005NegativeLogin dengan email tidak terdaftarSystem memberikan validasi credential invalid
Login006NegativeLogin dengan format email invalidSystem memberikan validasi format email salah
Login007NegativeLogin dengan password invalidSystem memberikan validasi credential invalid
Login008NegativeLogin dengan email dan password invalidSystem memberikan validasi credential invalid
Login009PositiveLogin menggunakan test data CSVSesuai expected result (status) dari setiap baris data
Login010PositiveLogin menggunakan test data EXCELSesuai expected result (status) dari setiap baris data

Setiap Test Case mengikuti struktur sebagai berikut:

  1. Persiapan data test
  2. Open & maximize browser
  3. Panggil Custom Keyword Login
  4. Verifikasi expected result
  5. Panggil Custom Keyword takeScreenshotWithText(), dengan parameter:
    • String fileName -> nama file screenshot. Jika file berada di dalam folder, folder harus exist
    • String text -> text di dalam screenshot
    • int positionX -> posisi X untuk text di screenshot. Posisi X=0 berada di kiri atas halaman. X++ ke kanan
    • int positionY -> posisi Y untuk text di screenshot. Posisi Y=0 berada di kiri atas halaman. Y++ ke bawah
    • int fontSize -> font size untuk text di screenshot
    • String textColor -> color code untuk text di screenshot, contohnya “#FF0000” = merah
  6. Tutup browser

Login Methods / Keywords

@Keyword
	def login(String email, String password) {
		KeywordUtil.logInfo('Proses login...')
		WebUI.setText(findTestObject('Login Page/Login Section/txt_email'), email)
		WebUI.setText(findTestObject('Login Page/Login Section/txt_password'), password)
		WebUI.click(findTestObject('Login Page/Login Section/btn_login'))
	}

Keyword “Login” digunakan untuk mesimplifikasi proses login. Di dalam Test Case langsung dipanggil keyword ini untuk Login. Tujuan mensimplifikasi proses Login adalah agar terlihat lebih rapi dalam report.

@Keyword
	def useTestDataToLoginAndVerify(String TestDataName, int columnEmail, int columnPassword, int columnStatus) {
		...
	}

Keyword “useTestDataToLoginAndVerify” digunakan untuk mengakses Data Test dan melakukan looping untuk semua data credential yang ada di dalam Data Test. Pada template ini, Data Test yang digunakan bernama “loginCredentialsData-CSV” atau “loginCredentialsData-EXCEL”.

@Keyword
	def verifyUserIsLoggedIn() {
		WebUI.waitForPageLoad(10)
		WebUI.verifyElementPresent(findTestObject('Dashboard Page/lbl_loggedInAs'), 2)
	}


	def Logout() {
		WebUI.click(findTestObject('Dashboard Page/lbl_logout'))
		WebUI.waitForPageLoad(10)
	}

Keyword “verifyUserIsLoggedIn()” digunakan untuk verifikasi apakah sudah sudah login atau belum. Verifikasi dilakukan dengan mendeteksi (menggunakan method WebUI.verifyElementPresent()) object “lbl_loggedInAs”.

Keyword “Logout()” digunakan untuk mensimplifikasikan proses logout. Keyword ini tidak diberikan tag “@Keywords” karena tidak dipanggil di Test Case, melainkan hanya dipanggil dalam method “useTestDataToLoginAndVerify()”, agar setiap proses looping data credential dari CSV/ Excel tidak perlu open & close browser.

 @Keyword
	def verifyValidationIsPresentForInvalidCredential() {
		...
	}

Keyword “verifyValidationIsPresentForInvalidCredential()” digunakan di dalam negative Test Case, untuk memverifikasikan validasi jika credential invalid. Proses ini di simplifikasikan ke dalam method / keyword agar lebih mudah di baca di dalam report view.

Login Test Suite & Report View

Berikut contoh hasil running Test Suite, Report View dalam format HTML.

Script Test Case dibuat supaya menghasilkan report yang readable, dan disertakan screenshot dan text-nya.

Search Product

Search Product Test Case

Disediakan 10 Test Case – positif dan negatif case untuk Search product, dan mengikuti Test Scenario sebagai berikut:

TC IDCase TypeTest Scenario TitleExpected Result
SearchProduct001PositiveSearch nama lengkap produkBerhasil search produk
SearchProduct002PositiveSearch separuh nama produkBerhasil search produk
SearchProduct003NegativeSearch tanpa huruf besarBerhasil search produk
SearchProduct004NegativeSearch dengan semua huruf besarBerhasil search produk
SearchProduct005NegativeSearch nama produk diawali dengan spasiGagal search produk
SearchProduct006NegativeSearch nama produk diakhiri dengan spasiBerhasil search produk
SearchProduct007NegativeSearch tanpa inputSystem menampilkan semua produk
SearchProduct008NegativeSearch produk yang tidak existGagal search produk
SearchProduct009NegativeSearch lalu hapus dan search kembaliBerhasil search produk untuk kedua kalinya
SearchProduct010NegativeSearch lalu klik produk untuk lihat detail produkSystem akan redirect ke halaman detail produk

Setiap Test Case mengikuti struktur sebagai berikut:

  1. Persiapan data test
  2. Open & maximize browser
  3. Panggil Custom Keyword Search Product
  4. Verifikasi expected result
  5. Panggil Custom Keyword takeScreenshotWithText()
  6. Tutup browser

Search Product Methods / Keywords

@Keyword
	def searchProductName(String productName) {
		WebUI.click(findTestObject('Product Page/txt_search'))
		WebUI.setText(findTestObject('Product Page/txt_search'), productName)
		WebUI.click(findTestObject('Product Page/btn_search'))
	}

Keyword “searchProductName()” digunakan untuk mensimplifikasikan proses search produk dengan menggunakan parameter productName (nama produk). Proses ini di simplifikasikan ke dalam method / keyword agar lebih mudah di baca di dalam report view.

Search Product Objects

  • btn_firstProduct_viewProductDetails
(//div[@class='product-image-wrapper'])[1]//li

XPath ini akan mengambil tombol “View Detail Product” pada product pertama yang muncul di dalam list

//div[@class='product-image-wrapper']

XPath ini mengarah kepada div setiap produk, dan ada 34 produk dalam halaman ini. Maka kita perlu mengambil div pertama (produk pertama), dengan menambahkan pada XPath sebelumnya, menjadi:

(//div[@class='product-image-wrapper'])[1]

Untuk mendapatkan tombol “View Product” yang berada di dalam div produk, XPath yang digunakan adalah:

(//div[@class='product-image-wrapper'])[1]//li

  • btn_search
//button[@type='button' and @id='submit_search']

XPath ini mengarah kepada tombol Search di Search bar, yang di klik saat mencari produk.

  • lbl_firstProduct_productName
((//div[@class='product-image-wrapper'])[1]//p)[1]

XPath ini mengarah kepada nama produk pertama. Berikut adalah contoh cara mengambil nama produk pertama dan memverifikasikannya:

String firstProductName = WebUI.getText(findTestObject('Product Page/lbl_firstProduct_productName'))

WebUI.verifyMatch(firstProductName, 'Blue Top', false)

  • lbl_productByPosition_productName
((//div[@class='product-image-wrapper'])[${position}]//p)[1]

XPath ini adalah XPath dynamic. Saat memanggil object ini, kita harus memberikan value pada variable ${position}. Sebagai contoh, jika variable diberikan value = 2, maka XPath akan menjadi:

((//div[@class='product-image-wrapper'])[2]//p)[1]

Maka XPath akan mengarah ke nama produk kedua dari list produk. Jadi, kita dapat mengatur value “position” untuk mengarahkan ke nama produk sesuai dengan posisinya di dalam list.

Cara memanggil dynamic object di dalam Test Case adalah sebagai berikut:

String valuePosition = '2'

WebUI.verifyElementPresent(findTestObject('Product Page/lbl_productByPosition_productName', [('position') : valuePosition]), 5)

“(‘position’)” -> nama variable di dalam object
“valuePosition” -> nama variable yang berisikan value position
“5” -> adalah lama maximal timeout untuk verify elemen present

  • lbl_productName
(//div[@class='product-image-wrapper']//p[contains(text(),'${productName}')])[1]

XPath lbl_productName juga merupakan dynamic object, yang mempunyai parameter ${productName}. Sebagai contoh, jika parameter ini diberikan value “Sleeveless Dress”, maka XPath akan mengarah ke produk “Sleeveless Dress” yang exist di dalam list produk.

Untuk memanggil dynamic object ini di dalam Test Case, bisa dengan cara:

WebUI.verifyElementPresent(findTestObject('Product Page/lbl_productName', [('productName'):productName]), 5)

  • txt_Search
//input[@type='text' and @id='search_product']

XPath ini mengarah kepada textbox Search yang berada di halaman Produk.

Untuk mempelajari lebih dalam tentang Dynamic Object, bisa cek blog berikut: Mengambil Elemen Menggunakan XPath untuk Automation di Katalon Studio

Search Product Test Suite & Report View

Berikut contoh hasil running Test Suite, Report View dalam format HTML.

Test Data

Login dan Search Product menggunakan data ready-to-use yang disediakan di dalam folder Data Files. Terdapat 3 Test Data, yaitu:

  1. loginCredentialsData-CSV
  2. loginCredentialsData-EXCEL
  3. productNameData-EXCEL

Ketiga file ini digunakan di dalam Test Case Login dan Search Product. Tujuan menggunakan Test Data, adalah supaya data dapat di-manage dengan mudah tanpa harus mengakses Test Case dan mengubahnya satu persatu.

Contoh pemanggilan Test Data dalam Test Case Login:

String email_valid = findTestData(‘loginCredentialsData-EXCEL’).getValue(1,1)

Contoh pemanggilan Test Data dalam Test Case Search Product:

String productName = findTestData('productNameData-CSV').getValue('Product Name', 1)

Pada Test Case “Login”, value diambil dari kolom 1, dan baris 1.

Pada Test Case “Search Product”, value diambil dari kolom “Product Name”, dan baris 1.

Kolom bisa dipilih berdasarkan posisi kolom atau dengan nama kolom.