Skip to content

LambdaTest/Geb-HyperExecute-Sample

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

6 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

hyperexecute_logo

HyperExecute is a smart test orchestration platform to run end-to-end Selenium tests at the fastest speed possible. HyperExecute lets you achieve an accelerated time to market by providing a test infrastructure that offers optimal speed, test orchestration, and detailed execution logs.

The overall experience helps teams test code and fix issues at a much faster pace. HyperExecute is configured using a YAML file. Instead of moving the Hub close to you, HyperExecute brings the test scripts close to the Hub!

To know more about how HyperExecute does intelligent Test Orchestration, do check out HyperExecute Getting Started Guide

How to run Selenium automation tests on HyperExecute (using Geb-Spock framework)

Pre-requisites

Before using HyperExecute, you have to download Concierge CLI corresponding to the host OS. Along with it, you also need to export the environment variables LT_USERNAME and LT_ACCESS_KEY that are available in the LambdaTest Profile page.

Download Concierge

Concierge is a CLI for interacting and running the tests on the HyperExecute Grid. Concierge provides a host of other useful groovy that accelerate test execution. In order to trigger tests using Concierge, you need to download the Concierge binary corresponding to the platform (or OS) from where the tests are triggered:

Also, it is recommended to download the binary in the project's parent directory. Shown below is the location from where you can download the Concierge binary:

Configure Environment Variables

Before the tests are run, please set the environment variables LT_USERNAME & LT_ACCESS_KEY from the terminal. The account details are available on your LambdaTest Profile page.

For macOS:

export LT_USERNAME=LT_USERNAME
export LT_ACCESS_KEY=LT_ACCESS_KEY

For Linux:

export LT_USERNAME=LT_USERNAME
export LT_ACCESS_KEY=LT_ACCESS_KEY

For Windows:

set LT_USERNAME=LT_USERNAME
set LT_ACCESS_KEY=LT_ACCESS_KEY

Matrix Execution with Geb Spock Framework

Matrix-based test execution is used for running the same tests across different test (or input) combinations. The Matrix directive in HyperExecute YAML file is a key:value pair where value is an array of strings.

Also, the key:value pairs are opaque strings for HyperExecute. For more information about matrix multiplexing, check out the Matrix Getting Started Guide

Core

In the current example, matrix YAML file (hyperexecute_matrix.yaml) in the repo contains the following configuration:

globalTimeout: 90
testSuiteTimeout: 90
testSuiteStep: 90

Global timeout, testSuite timeout, and testSuite timeout are set to 90 minutes.

The target platform is set to Windows. Please set the [runson] key to [win] if the tests have to be executed on the macOS platform.

runson: win

Geb-Spock groovy files in the 'groovy' folder contain the groovy Scenario run on the HyperExecute grid. In the example, the groovy file groovy/BingSpecPageGebSpec.groovy run in parallel on the basis of scenario by using the groovys field input combinations.

matrix:
  os: [win]
  method: ["BingSpecPageGebSpec#Hypertest", "BingSpecPageGebSpec#Lamdbdatest", "BingSpecPageGebSpec#Test_Ocrchestration"]

The testSuites object contains a list of commands (that can be presented in an array). In the current YAML file, commands for executing the tests are put in an array (with a '-' preceding each item). The bundle exec cucumber command is used to run tests in .groovy files. The tags are mentioned as an array to the files key that is a part of the matrix.

testSuites:
  - ./run.sh $method #mac
  - sh run.sh $method #win

Pre Steps and Dependency Caching

Dependency caching is enabled in the YAML file to ensure that the package dependencies are not downloaded in subsequent runs. The first step is to set the Key used to cache directories.

Steps (or commands) that must run before the test execution are listed in the pre run step. In the example, the packages listed in requirements.txt are installed using the bundle install --deployment command.

pre:
  - mvn compile
  - mvn versions:display-dependency-updates

HyperExecute also facilitates the provision to download the artefacts on your local machine. To download the artefacts, click on Artefacts button corresponding to the associated TestID.

Test Execution

The CLI option --config is used for providing the custom HyperExecute YAML file (i.e. hyperexecute_matrix.yaml). Run the following command on the terminal to trigger the tests in groovy file Scenario on the HyperExecute grid.

./concierge --config --verbose -i yaml/hyperexecute_matrix.yaml

Visit HyperExecute Automation Dashboard to check the status of execution:

Auto-Split Execution with Geb Spock Framework

Auto-split execution mechanism lets you run tests at predefined concurrency and distribute the tests over the available infrastructure. Concurrency can be achieved at different levels - file, module, test suite, test, scenario, etc.

For more information about auto-split execution, check out the Auto-Split Getting Started Guide

Core

Auto-split YAML file (hyperexecute_autosplit.yaml) in the repo contains the following configuration:

globalTimeout: 90
testSuiteTimeout: 90
testSuiteStep: 90

Global timeout, testSuite timeout, and testSuite timeout are set to 90 minutes.

The runson key determines the platform (or operating system) on which the tests are executed. Here we have set the target OS as Windows.

runson: win

Auto-split is set to true in the YAML file.

 autosplit: true

retryOnFailure is set to true, instructing HyperExecute to retry failed command(s). The retry operation is carried out till the number of retries mentioned in maxRetries are exhausted or the command execution results in a Pass. In addition, the concurrency (i.e. number of parallel sessions) is set to 2.

retryOnFailure: true
runson: win
maxRetries: 2

Pre Steps and Dependency Caching

The testDiscovery directive contains the command that gives details of the mode of execution, along with detailing the command that is used for test execution. Here, we are fetching the list of groovy file scenario that would be further executed using the value passed in the testRunnerCommand

testDiscovery:
  type: raw
  mode: static
  command: grep --with-filename 'def' src/test/groovy/Spec/*.groovy | sed 's/\.groovy\(.*\)def /#/g' | sed -e 's/.*\/\(.*\)(.*/\1/'

  testRunnerCommand: ./run.sh $test #mac
  testRunnerCommand: sh run.sh $test #win

Running the above command on the terminal will give a list of groovy Scenario lines that are located in the Project folder:

Test Discovery Output: BingSpecPageGebSpec1#Hypertest BingSpecPageGebSpec1#Lamdbdatest BingSpecPageGebSpec1#Test_Ocrchestration BingSpecPageGebSpec2#Hypertest BingSpecPageGebSpec2#Lamdbdatest BingSpecPageGebSpec2#Test_Ocrchestration BingSpecPageGebSpec3#Hypertest BingSpecPageGebSpec3#Lamdbdatest BingSpecPageGebSpec3#Test_Ocrchestration BingSpecPageGebSpec4#Hypertest BingSpecPageGebSpec4#Lamdbdatest BingSpecPageGebSpec4#Test_Ocrchestration BingSpecPageGebSpec5#Hypertest BingSpecPageGebSpec5#Lamdbdatest BingSpecPageGebSpec5#Test_Ocrchestration

The testRunnerCommand contains the command that is used for triggering the test. The output fetched from the testDiscoverer command acts as an input to the testRunner command.

testRunnerCommand: ./run.sh $test #mac
testRunnerCommand: sh run.sh $test #win

Test Execution

The CLI option --config is used for providing the custom HyperExecute YAML file (i.e. hyperexecute_matrix.yaml). Run the following command on the terminal to trigger the tests in Geb groovy files on the HyperExecute grid. The --download-artifacts option is used to inform HyperExecute to download the artefacts for the job.

./concierge --config --verbose -i yaml/.hyperexecute_matrix.yaml

Visit HyperExecute Automation Dashboard to check the status of execution

Secrets Management

In case you want to use any secret keys in the YAML file, the same can be set by clicking on the Secrets button the dashboard.

steps:

  1. Open HyperExecute Dashboard
  2. Click on Secrets
  3. Add Secrets with Name as AccessKey All you need to do is create an environment variable that uses the secret key:
env:
  AccessKey: ${{.secrets.AccessKey}}

Navigation in Automation Dashboard

HyperExecute lets you navigate from/to Test Logs in Automation Dashboard from/to HyperExecute Logs. You also get relevant get relevant Selenium test details like video, network log, commands, Exceptions & more in the Dashboard. Effortlessly navigate from the automation dashboard to HyperExecute logs (and vice-versa) to get more details of the test execution.

We are here to help you :)