Effective logging is crucial in test automation. It helps testers track test execution, identify issues, and understand skipped steps. Katalon Studio’s KeywordLogger provides a versatile logging mechanism, which can be enhanced further by integrating with Test Listeners. This blog will guide you through the integration process, offering practical examples to illustrate the concepts.
What is KeywordLogger?
KeywordLogger is a logging utility in Katalon Studio that allows you to log different types of messages, such as informational messages, errors, and skipped steps. These logs provide a detailed account of the test execution flow, aiding in debugging and reporting.
Setting Up Test Listeners
To set up Test Listeners in Katalon Studio, you need to create a new Groovy script in the Test Listeners folder of your Katalon project. This script will define methods annotated with listener annotations like @BeforeTestCase, @AfterTestCase, @BeforeTestSuite, and @AfterTestSuite.
Creating a Test Listener
- Create the Test Listeners folder in your Katalon project.
- Create a new Groovy script. For instance, name it LoggingListener.
Integrating KeywordLogger with Test Listeners
Let’s create a comprehensive Test Listener that logs messages at different stages of the test lifecycle.
Step-by-Step Guide
-
Import necessary classes:
import com.kms.katalon.core.logging.KeywordLogger import com.kms.katalon.core.annotation.BeforeTestCase import com.kms.katalon.core.annotation.AfterTestCase import com.kms.katalon.core.annotation.BeforeTestSuite import com.kms.katalon.core.annotation.AfterTestSuite import com.kms.katalon.core.context.TestCaseContext import com.kms.katalon.core.context.TestSuiteContext
- Initialize the KeywordLogger:
KeywordLogger logger = new KeywordLogger()
- Define the methods with appropriate annotations:
@BeforeTestCase def beforeTestCase(TestCaseContext testCaseContext) { logger.logInfo("Starting test case: " + testCaseContext.getTestCaseId()) } @AfterTestCase def afterTestCase(TestCaseContext testCaseContext) { if (testCaseContext.getTestCaseStatus() == 'FAILED') { logger.logError("Test case failed: " + testCaseContext.getTestCaseId()) } else { logger.logInfo("Completed test case: " + testCaseContext.getTestCaseId()) } } @BeforeTestSuite def beforeTestSuite(TestSuiteContext testSuiteContext) { logger.logInfo("Starting test suite: " + testSuiteContext.getTestSuiteId()) } @AfterTestSuite def afterTestSuite(TestSuiteContext testSuiteContext) { logger.logInfo("Completed test suite: " + testSuiteContext.getTestSuiteId()) }
Full Example
Here’s the complete code for a Test Listener that integrates KeywordLogger:
import com.kms.katalon.core.logging.KeywordLogger import com.kms.katalon.core.annotation.BeforeTestCase import com.kms.katalon.core.annotation.AfterTestCase import com.kms.katalon.core.annotation.BeforeTestSuite import com.kms.katalon.core.annotation.AfterTestSuite import com.kms.katalon.core.context.TestCaseContext import com.kms.katalon.core.context.TestSuiteContext KeywordLogger logger = new KeywordLogger() @BeforeTestCase def beforeTestCase(TestCaseContext testCaseContext) { logger.logInfo("Starting test case: " + testCaseContext.getTestCaseId()) } @AfterTestCase def afterTestCase(TestCaseContext testCaseContext) { if (testCaseContext.getTestCaseStatus() == 'FAILED') { logger.logError("Test case failed: " + testCaseContext.getTestCaseId()) } else { logger.logInfo("Completed test case: " + testCaseContext.getTestCaseId()) } } @BeforeTestSuite def beforeTestSuite(TestSuiteContext testSuiteContext) { logger.logInfo("Starting test suite: " + testSuiteContext.getTestSuiteId()) } @AfterTestSuite def afterTestSuite(TestSuiteContext testSuiteContext) { logger.logInfo("Completed test suite: " + testSuiteContext.getTestSuiteId()) }
Practical Examples
Let’s look at some practical examples to understand how this integration works in real-world scenarios.
Example 1: Logging Test Case Execution
Imagine you have a test case for verifying user login functionality. By using the integrated Test Listener, you automatically log the start and end of the test case execution.
Test Case Script:
import static com.kms.katalon.core.testcase.TestCaseFactory.findTestCase import com.kms.katalon.core.webui.keyword.WebUiBuiltInKeywords as WebUI WebUI.openBrowser('') WebUI.navigateToUrl('https://example.com/login') WebUI.setText(findTestObject('Page_Login/txt_Username'), 'username') WebUI.setText(findTestObject('Page_Login/txt_Password'), 'password') WebUI.click(findTestObject('Page_Login/btn_Login')) WebUI.verifyElementPresent(findTestObject('Page_Home/lbl_LoggedIn'), 10) WebUI.closeBrowser()
Logged Output:
INFO: Starting test case: Test Cases/Verify User Login
INFO: Completed test case: Test Cases/Verify User Login
If the login fails, the output will include an error log:
INFO: Starting test case: Test Cases/Verify User Login
ERROR: Test case failed: Test Cases/Verify User Login
Example 2: Logging Test Suite Execution
Consider a test suite that runs multiple test cases related to user registration. The integrated Test Listener logs the start and end of the test suite.
Test Suite Script:
- Verify User Registration
- Verify User Registration with Invalid Data
- Verify User Registration without Mandatory Fields
Logged Output:
INFO: Starting test suite: Test Suites/User Registration Tests
INFO: Starting test case: Test Cases/Verify User Registration
INFO: Completed test case: Test Cases/Verify User Registration
INFO: Starting test case: Test Cases/Verify User Registration with Invalid Data
ERROR: Test case failed: Test Cases/Verify User Registration with Invalid Data
INFO: Starting test case: Test Cases/Verify User Registration without Mandatory Fields
INFO: Completed test case: Test Cases/Verify User Registration without Mandatory Fields
INFO: Completed test suite: Test Suites/User Registration Tests
Best Practices for Effective Logging
- Combine Logs for Clarity
By combining logInfo, logError, and logSkipped messages, you create a detailed and clear log that covers all aspects of your test case execution. This practice ensures you have comprehensive logs for easy debugging and reporting.
- Use Test Listeners for Consistency
Integrating KeywordLogger with Test Listeners ensures that logs are consistently recorded at key points in your test lifecycle without manual intervention. This approach helps maintain a standardized logging format across all test cases and suites.
- Monitor and Review Logs Regularly
Regularly monitoring and reviewing your logs helps identify patterns, recurring issues, and opportunities for improving your test scripts and overall testing process. Consistent log review ensures that any issues are quickly identified and addressed, enhancing the reliability of your tests.
Conclusion
Integrating KeywordLogger with Test Listeners in Katalon Studio provides comprehensive and consistent logs, automatically capturing key events throughout your test lifecycle.