Time for a new automation project

For the past two years I have been the dedicated QA engineer for a single customer, watching their site grow from a small dashboard to an inventory management system. During that time, Katalon was introduced and I focused on building dozens of test cases to test major portions of functionality. I learned a huge amount and my automation project went through 5 major rewrites.

With that project being feature complete, I am turning over the reins to work on a new project. I have the opportunity to write all new automation code, from the ground up, taking into account everything I learned, especially from the mistakes I made.

This week I have completed my first pass. Like working in Photoshop, or writing a first draft, I put my code together in layers or phases. I prefer to start with a series of small tests that touch multiple parts of a site, rather than create one large, deeply dynamic test.

My goal on this first pass is to pick the high usage pages and write small framework tests. I define the major objects on the page such as input fields, buttons, dropdowns, and tables. I then write functional tests that enter and retrieve data. This confirms my object definitions are correct and accept data. It also proves I can read data from the correct place.

These are somewhat "brute force" or proof of concept tests where the input data is hardcoded in a series of variables. I am checking for known commodities and expected results. I am emulating what I would do manually.

The code would look like the following:

//Search by State
searchText="AZ"
WebUI.selectOptionByLabel(findTestObject('Business Locations/select-State'), searchText, false)
WebUI.click(findTestObject('Business Locations/btn-Search'))
WebUI.waitForJQueryLoad(30)
confirmSearch(searchText, 4)
WebUI.selectOptionByLabel(findTestObject('Business Locations/select-State'), '- Select -', false)
//Verify search results
def confirmSearch(String searchText, int column){
    /* Confirm the entered search criteria is contained in the results
     * Uses a simple "contains" to see if the value exists.
     * If missing, the test will be marked as Failed
     * @param searchText - The search criteria entered in the search field
     * @param column - The column number where to look for the matching text.
     */
    KeywordLogger log = new KeywordLogger()
    String searchResult=WebUI.getText(findTestObject('Business Locations/table-Business Locations', [('row') : 1, ('column') : column]))
    log.logWarning(searchText + " : " + searchResult)
    if (searchResult.contains(searchText)!=true){
        KeywordUtil.markFailed('ERROR: The returned search result does not match the entered search criteria')
    }
}

The Search block is repeated multiple times for each input field or dropdown using a different value for searchText. Using this simple method I can check each field to confirm it works and returns results. It's not glamorous code, that comes a little later.

Even though it's hardcoded, it will be easy to replace those with Global Variables or data values from a file. The test will only need small changes to make it dynamic.

I continue this process for each page I'm interested in. The main goal is to create objects and confirm those definitions. While it may be simple, at the end, I have a working Test Suite, that can actually do some work and confirm site functionality. Since these are mainly read-only tests, they are ideally suited for a Production smoke test.

Thanks for reading you majestic sausage.

Author Signature for Posts

Leave a Reply

Your email address will not be published.

This site uses Akismet to reduce spam. Learn how your comment data is processed.