mirror of
https://github.com/freedombox/FreedomBox.git
synced 2026-05-20 10:34:30 +00:00
tests: functional: Run tests on two app servers
- Using `--dist=loadscope` splits the tests based on module, thus ensuring each app's tests get assigned to one worker only. - Though app servers run in 2 separate VMs, the pytest-xdist workers simply run in two Python subprocesses (`-n 2`). This allows us to generate a unified test report. Signed-off-by: Joseph Nuthalapati <njoseph@riseup.net> Reviewed-by: Sunil Mohan Adapa <sunil@medhas.org>
This commit is contained in:
parent
f4d8d3d046
commit
fd1955a084
@ -11,8 +11,12 @@
|
|||||||
- export AWS_DEFAULT_REGION=us-east-1
|
- export AWS_DEFAULT_REGION=us-east-1
|
||||||
- |
|
- |
|
||||||
aws lambda invoke --function-name launch_app_server --payload '{"launch_template_name": "'"$LAUNCH_TEMPLATE_NAME"'", "instance_name": "'"$INSTANCE_NAME"'", "ci_project_id": "'"$CI_PROJECT_ID"'", "build_job_id": "'"$BUILD_JOB_ID"'"}' response.json
|
aws lambda invoke --function-name launch_app_server --payload '{"launch_template_name": "'"$LAUNCH_TEMPLATE_NAME"'", "instance_name": "'"$INSTANCE_NAME"'", "ci_project_id": "'"$CI_PROJECT_ID"'", "build_job_id": "'"$BUILD_JOB_ID"'"}' response.json
|
||||||
- echo "APP_SERVER_IP=$(jq -r '.app_server_ip' response.json)" >> app-servers.env
|
- echo "APP_SERVER_IP_1=$(jq -r '.app_server_ip' response.json)" >> app-servers.env
|
||||||
- echo "INSTANCE_ID=$(jq -r '.instance_id' response.json)" >> app-servers.env
|
- echo "INSTANCE_ID_1=$(jq -r '.instance_id' response.json)" >> app-servers.env
|
||||||
|
- |
|
||||||
|
aws lambda invoke --function-name launch_app_server --payload '{"launch_template_name": "'"$LAUNCH_TEMPLATE_NAME"'", "instance_name": "'"$INSTANCE_NAME"'", "ci_project_id": "'"$CI_PROJECT_ID"'", "build_job_id": "'"$BUILD_JOB_ID"'"}' response.json
|
||||||
|
- echo "APP_SERVER_IP_2=$(jq -r '.app_server_ip' response.json)" >> app-servers.env
|
||||||
|
- echo "INSTANCE_ID_2=$(jq -r '.instance_id' response.json)" >> app-servers.env
|
||||||
tags:
|
tags:
|
||||||
- functional-tests
|
- functional-tests
|
||||||
artifacts:
|
artifacts:
|
||||||
@ -22,7 +26,7 @@
|
|||||||
.run-functional-tests:
|
.run-functional-tests:
|
||||||
stage: functional-tests
|
stage: functional-tests
|
||||||
timeout: 3h
|
timeout: 3h
|
||||||
# Need to find a way of running the cleanup step even on failure
|
# Need to find another way of running the cleanup step even on failure
|
||||||
allow_failure: true
|
allow_failure: true
|
||||||
when: delayed
|
when: delayed
|
||||||
# Wait for the app-server to come up. Saves time for the CI runners.
|
# Wait for the app-server to come up. Saves time for the CI runners.
|
||||||
@ -35,10 +39,11 @@
|
|||||||
script:
|
script:
|
||||||
- cp -r . /home/tester/freedombox && chown -R tester:tester /home/tester/freedombox
|
- cp -r . /home/tester/freedombox && chown -R tester:tester /home/tester/freedombox
|
||||||
- |
|
- |
|
||||||
sudo FREEDOMBOX_URL="https://$APP_SERVER_IP" -u tester bash -c \
|
sudo APP_SERVER_URL_1="https://$APP_SERVER_IP_1" APP_SERVER_URL_2="https://$APP_SERVER_IP_2" -u tester bash -c \
|
||||||
'cd /home/tester/freedombox && py.test-3 -v --durations=10 --include-functional --splinter-headless --template=html1/index.html --report=functional-tests.html'
|
'cd /home/tester/freedombox && py.test-3 -v --durations=10 --include-functional --splinter-headless -n 2 --dist=loadscope --template=html1/index.html --report=functional-tests.html'
|
||||||
after_script:
|
after_script:
|
||||||
- echo "INSTANCE_ID=$INSTANCE_ID" >> app-servers.env
|
- echo "INSTANCE_ID_1=$INSTANCE_ID_1" >> app-servers.env
|
||||||
|
- echo "INSTANCE_ID_2=$INSTANCE_ID_2" >> app-servers.env
|
||||||
- cp /home/tester/freedombox/functional-tests.html .
|
- cp /home/tester/freedombox/functional-tests.html .
|
||||||
- cp -r /home/tester/freedombox/screenshots/ .
|
- cp -r /home/tester/freedombox/screenshots/ .
|
||||||
artifacts:
|
artifacts:
|
||||||
@ -55,6 +60,7 @@
|
|||||||
script:
|
script:
|
||||||
- export AWS_DEFAULT_REGION=us-east-1
|
- export AWS_DEFAULT_REGION=us-east-1
|
||||||
- |
|
- |
|
||||||
aws lambda invoke --function-name terminate_app_server --payload '{"instance_id": "'"$INSTANCE_ID"'"}' response.json
|
aws lambda invoke --function-name terminate_app_server --payload '{"instance_id": "'"$INSTANCE_ID_1"'"}' response.json
|
||||||
|
aws lambda invoke --function-name terminate_app_server --payload '{"instance_id": "'"$INSTANCE_ID_2"'"}' response.json
|
||||||
tags:
|
tags:
|
||||||
- functional-tests
|
- functional-tests
|
||||||
|
|||||||
@ -22,8 +22,17 @@ from selenium.webdriver.support.ui import WebDriverWait
|
|||||||
config = configparser.ConfigParser()
|
config = configparser.ConfigParser()
|
||||||
config.read(pathlib.Path(__file__).with_name('config.ini'))
|
config.read(pathlib.Path(__file__).with_name('config.ini'))
|
||||||
|
|
||||||
config['DEFAULT']['url'] = os.environ.get('FREEDOMBOX_URL',
|
# Configuration to allow each pytest-xdist worker to hit a dedicated
|
||||||
config['DEFAULT']['url']).rstrip('/')
|
# app server. See .ci/functional-tests.yml for usage.
|
||||||
|
worker = os.environ.get('PYTEST_XDIST_WORKER', 'master')
|
||||||
|
if worker == 'master':
|
||||||
|
config['DEFAULT']['url'] = os.environ.get(
|
||||||
|
'FREEDOMBOX_URL', config['DEFAULT']['url']).rstrip('/')
|
||||||
|
else:
|
||||||
|
# worker_ids are like gw0, gw1, ...
|
||||||
|
worker_number = int(worker.lstrip('gw')) + 1
|
||||||
|
config['DEFAULT']['url'] = os.environ[f'APP_SERVER_URL_{worker_number}']
|
||||||
|
|
||||||
config['DEFAULT']['ssh_port'] = os.environ.get('FREEDOMBOX_SSH_PORT',
|
config['DEFAULT']['ssh_port'] = os.environ.get('FREEDOMBOX_SSH_PORT',
|
||||||
config['DEFAULT']['ssh_port'])
|
config['DEFAULT']['ssh_port'])
|
||||||
config['DEFAULT']['samba_port'] = os.environ.get(
|
config['DEFAULT']['samba_port'] = os.environ.get(
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user