Parallel Testing
The best way to run tests twice as fast is to split them in half!
Rather than execute your tests sequentially, you can make use of the run command to share common setup and teardown test plans.
The, simply parallelize your test executions by calling the TestDriver action multiple time as a part of two different jobs.
name: TestDriver.ai
permissions:
actions: read
contents: read
statuses: write
pull-requests: write
on:
pull_request: # run on every PR event
schedule:
- cron: '0 * * * *' # run every hour
push:
branches:
- main # run on merge to the main branch
workflow_dispatch:
jobs:
test1:
name: "TestDriver Test 1"
runs-on: ubuntu-latest
steps:
- uses: dashcamio/testdriver@main
version: v4.0.0
key: ${{secrets.TESTDRIVER_API_KEY}}
with:
prompt: |
1. /run /Users/ec2-user/actions-runner/_work/testdriver/testdriver/.testdriver/test-1.yml
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
FORCE_COLOR: "3"
test2:
name: "TestDriver Test 2"
runs-on: ubuntu-latest
steps:
- uses: dashcamio/testdriver@main
version: v4.0.0
key: ${{secrets.TESTDRIVER_API_KEY}}
with:
prompt: |
1. /run /Users/ec2-user/actions-runner/_work/testdriver/testdriver/.testdriver/test-2.yml
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
FORCE_COLOR: "3"
Here's an example of testing a matrix of files.
name: TestDriver.ai / Run / Regressions
on:
push:
branches: ["main"]
pull_request:
workflow_dispatch:
permissions:
actions: read
contents: read
statuses: write
pull-requests: write
jobs:
gather-test-files:
name: Setup Test Matrix (./testdriver/*.yml)
runs-on: ubuntu-latest
outputs:
test_files: ${{ steps.test_list.outputs.files }}
steps:
- name: Check out repository
uses: actions/checkout@v2
with:
ref: ${{ github.event.ref }}
- name: Find all test files and extract filenames
id: test_list
run: |
FILES=$(ls ./testdriver/*.yml)
FILENAMES=$(basename -a $FILES)
FILES_JSON=$(echo "$FILENAMES" | jq -R -s -c 'split("\n")[:-1]')
echo "::set-output name=files::$FILES_JSON"
test:
needs: gather-test-files
runs-on: ubuntu-latest
strategy:
matrix:
test: ${{ fromJson(needs.gather-test-files.outputs.test_files) }}
fail-fast: false
name: ${{ matrix.test }}
steps:
- name: Check out repository
uses: actions/checkout@v2
with:
ref: ${{ github.event.ref }}
- name: Display filename being tested
run: |
echo "Running job for file: ${{ matrix.test }}"
- uses: testdriverai/action@main
with:
key: ${{ secrets.TESTDRIVER_API_KEY }}
prompt: 1. /run testdriver/${{ matrix.test }}
prerun: |
cd $env:TEMP
npm init -y
npm install dashcam-chrome
Start-Process "C:/Program Files/Google/Chrome/Application/chrome.exe" -ArgumentList "--start-maximized", "--load-extension=$(pwd)/node_modules/dashcam-chrome/build", "${{ env.WEBSITE_URL }}"
exit
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
FORCE_COLOR: "3"
Last updated
Was this helpful?