Algorithm

The algorithm below shows the major steps involved in the Artemis testing procedure. The finer details and capabilities are omitted from the algorithm itself, we refer to the detailed description of each step later in this document.

Note, this section is incomplete as we are evolving the testing procedure to accomedate new features.

def main(URL_initial, forms_initial):

    # Step 0: Global initialization
    worklist = Worklist()
    browser = Browser()
    statistics = Statistics()
    input_strategy = InputStrategy()

    for configuration in worklist:

        # Step 1: Page load
        browser.reset_counters()
        browser.load_page(configuration.url)

        # Step 2: Post-load processing
        browser.fill_forms(forms_initial)

        # Step 3: Input sequence execution
        for input in configuration.inputs:
            browser.fill_and_mark_forms(input.forms)
            browser.trigger_event(input.event)

        # Step 4: Post-input processing
        statistics.update(browser.counters)

        # Step 5: Iteration
        configurations_new = input_strategy.generate(configuration, browser.counters, statistics)
        worklist.add(configurations_new)

Step 0: Global initialization

Step 1: Page load

Step 2: Post-load processing

  • Form inputs provided on the command line are written to the page.

Step 3: Input sequence execution

  • Non-blank form inputs (represented by FormInput) are written to the page.
  • Form inputs (represented by FormInput) are marked as dynamic form inputs such that the symbolic infrastructure can associate the form inputs back to Artemis.

Step 4: Postprocessing

Step 5: Iteration