Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
127 changes: 127 additions & 0 deletions .github/workflows/perf-test-with-data.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,127 @@
name: Performance tests

on:
push:
branches:
- "performance-testing"

workflow_dispatch:
inputs:
urn:
description: "URN - for a school in the QA environment. This session MUST HAVE A SESSION DATE FOR TODAY."
required: true
type: string
duration:
description: "Duration of nurse journey test, in seconds. This will include ramp-up."
required: false
type: number
threads:
description: "Threads to run. Equivalent to the number of nurses using the system."
required: false
type: number
ramp_up:
description: "Ramp-up time in seconds. Threads will be gradually started up over this time."
required: false
type: number
vaccination_loop:
description: "Vaccination loop. The number of vaccinations each nurse will perform before logging and back in again."
required: false
type: number
input_file:
description: "Input file name used for all steps."
required: false
type: string

# env:
# JMETER_PLUGIN_INSTALL_LIST: "jpgc-udp,jpgc-graphs-basic,jpgc-dummy,bzm-random-csv"

jobs:
nurse_journey_performance_test:
runs-on: ubuntu-latest

if: ${{ github.event_name == 'workflow_dispatch' }}

env:
jmeter_version: 5.6.3
cmdrunner_version: 2.3
jmeter_plugins_manager_version: 1.7.0
jmeter_plugins: jpgc-udp,jpgc-graphs-basic,jpgc-dummy,bzm-random-csv
# jmeter_home: ${{ github.workspace }}/jmeter-${{ env.jmeter_version }}

steps:
- uses: actions/checkout@v4

- name: Install JMeter
run: |
curl -sSO https://archive.apache.org/dist/jmeter/binaries/apache-jmeter-${{ env.jmeter_version }}.tgz
tar xzf apache-jmeter-${{ env.jmeter_version }}.tgz
mv apache-jmeter-${{ env.jmeter_version }} jmeter
curl -sSO --output-dir jmeter/lib https://repo1.maven.org/maven2/kg/apc/cmdrunner/${{ env.cmdrunner_version }}/cmdrunner-${{ env.cmdrunner_version }}.jar
curl -LsS --output jmeter/lib/ext/jmeter-plugins-manager-${{ env.jmeter_plugins_manager_version }}.jar https://jmeter-plugins.org/get/
java -cp jmeter/lib/ext/jmeter-plugins-manager-${{ env.jmeter_plugins_manager_version }}.jar org.jmeterplugins.repository.PluginManagerCMDInstaller
chmod +x jmeter/bin/PluginsManagerCMD.sh

- name: Install JMeter plugins
if: env.jmeter_plugins != ''
run: |
if [ -x "$(command -v parallel)" ]; then
echo "Using GNU parallel to install plugins"
parallel -d, -j 5 -n 1 jmeter/bin/PluginsManagerCMD.sh install {} ::: ${{ env.jmeter_plugins }}
else
echo "GNU parallel not found, installing plugins sequentially"
IFS=',' read -ra PLUGINS <<< "${{ env.jmeter_plugins }}"
for plugin in "${PLUGINS[@]}"; do
jmeter/bin/PluginsManagerCMD.sh install $plugin
done
fi

- name: Set timestamp
id: timestamp
run: echo "timestamp=$(date '+%Y%m%d%H%M%S')" >> $GITHUB_ENV

- name: Run file import for new file
run: |
mkdir -p import-output
import_output_dir=import-output
echo "Placeholder step for file import"

- name: Run Consent Journey for imported records (2K records)
run: |
mkdir -p consent-output
consent_output_dir=consent-output
jmeter/bin/jmeter -n -t performance-tests/E2E/consent-journey.jmx \
-l $consent_output_dir/samples.jtl \
-j $consent_output_dir/jmeter.log \
-e -o $consent_output_dir/consent-report \
-JURN=${{inputs.urn}} \
-JAuthToken=${{secrets.HTTP_AUTH_TOKEN_FOR_TESTS}} \
-JInputFile=${{input_file}}

- name: Run nurse journey JMeter test
run: |
mkdir -p nurse-output
nurse_output_dir=nurse-output
# jmeter/bin/jmeter -n -t performance-tests/nurse-journey.jmx \
# -l $nurse_output_dir/samples.jtl \
# -j $nurse_output_dir/jmeter.log \
# -e -o $nurse_output_dir/report \
# -JSessionSlug=${{inputs.session_slug}} \
# -JAuthToken=${{secrets.HTTP_AUTH_TOKEN_FOR_TESTS}} \
# -JDuration=${{inputs.duration}} \
# -JThreads=${{inputs.threads}} \
# -JRampUp=${{inputs.ramp_up}} \
# -JVaccinationLoop=${{inputs.vaccination_loop}}

- name: Upload consent journey JMeter output
uses: actions/upload-artifact@v4
with:
name: jmeter-consent-journey-output-${{ env.timestamp }}
path: consent-output
if-no-files-found: error

# - name: Upload nurse journey JMeter output
# uses: actions/upload-artifact@v4
# with:
# name: jmeter-nurse-journey-output-${{ env.timestamp }}
# path: nurse-output
# if-no-files-found: error
Loading
Loading