Run tests using python or a Docker container (using the edgex-taf-common image). Your choice will depend on whether you have or are willing to install the required Robot Framework libraries. If you prefer not to install libraries for testing, use of the edgex-taf-common container may be preferred.
Clone the edgex-taf project from EdgeX Foundry as a template:
cd ${HOME}
git clone https://github.com/edgexfoundry/edgex-taf.git
# Required variables
export WORK_DIR=${HOME}/edgex-taf
export REGISTRY_SERVICE=${REGISTRY_SERVICE}
export USE_DB=${TEST_DB}
Use the shell script to run tests will take a while. It contains deploy, run tests, and shutdown steps.
# Arguments for run-tests.sh
${ARCH}: x86_64 | arm64
${SECURITY_SERVICE_NEEDED}: false | true
${REGISTRY_SERVICE}: Consul | Keeper
${TEST_STRATEGY}: functional-test | integration-test
${TEST_SERVICE}: all (default) | device-virtual | device-modbus | ${directory} under TAF/testScenarios/functionalTest/API | mqtt (integration-test) | redis (integration-test)
${DEPLOY_SERVICES}: no-deployment(If edgex services are deployed in place, use 'no-deployment' Otherwise, leave it empty.)
${TEST_DB}: postgres | redis
cd ${WORK_DIR}/TAF/utils/scripts/docker
sh run-tests.sh ${ARCH} ${SECURITY_SERVICE_NEEDED} ${TEST_STRATEGY} ${TEST_SERVICE} ${DEPLOY_SERVICES}
# If using x86_64, no need for secuity, adopt for functional-test, choose "api" for test_service and edgex service are deployed in place, it should be:
ex. sh run-tests.sh x86_64 false functional-test api no-deployment
# If using x86_64, no need for secuity, adopt for integration-test, choose "mqtt" for test_service and edgex service are not deployed in place, it should be:
ex. sh run-tests.sh x86_64 false integration-test mqtt
Open the report file by browser: ${WORK_DIR}/TAF/testArtifacts/reports/cp-edgex/api-test.html
Please delete ${WORK_DIR}/TAF/testArtifacts/reports/edgex directory by sudo first, if existed.
- Install pre-request packages:
Download pip3 and run this command:
sudo apt-get install python3-pip
- Install TAF common:
cd ${HOME}/edgex-taf git clone https://github.com/edgexfoundry/edgex-taf-common.git # Install dependency lib pip3 install -r ./edgex-taf-common/requirements.txt # Install edgex-taf-common as lib pip3 install ./edgex-taf-common
- Prepare test environment:
# Arguments for get-compose-file.sh ${ARCH}: x86_64 | arm64 ${USE_SECURITY}: - (false) | -security- (true) ${USE_SHA1}: main ${TEST_STRATEGY}: functional-test | integration-test # Fetch the latest docker-compose file cd ${HOME}/edgex-taf/TAF/utils/scripts/docker sh get-compose-file.sh ${USE_ARCH} ${USE_SECURITY} ${USE_SHA1} ${TEST_STRATEGY} # ex. sh get-compose-file.sh x86_64 - main functional-test # Export the following environment variables. export WORK_DIR=${HOME}/edgex-taf export SECURITY_SERVICE_NEEDED=false export COMPOSE_IMAGE=docker:26.0.1
View the test report after finishing a python command, otherwise the report will be overridden after executing next command. Open the report file by browser: ${WORK_DIR}/TAF/testArtifacts/reports/cp-edgex/api-test.html.
-
Change directory to ${HOME}/edgex-taf
-
Deploy edgex: Skipped, if the edgex services are deployed in place
# This step may take a while if the edgex images don't exist on the machine python3 -m TUC --exclude Skipped --include deploy-base-service -u deploy.robot -p default
-
Run Test
- Notice: Run Functional Test will get case: IntervalactionGET006 failure. The case needs to restart service.
- For Core Data, Core Metadata, Support Notifications, and Support Scheduler:
# ${ServiceDir}: Please use the directory name under TAF/testScenarios/functionalTest/API # Before launching Service, please export the following variables. export EDGEX_SECURITY_SECRET_STORE=false export REGISTRY_SERVICE=${REGISTRY_SERVICE} # Run Test Command python3 -m TUC --exclude Skipped -u functionalTest/API/${ServiceDir} -p default
- For APP Service:
# Consul is required. Scripts will modify the APP Service configuration. # Used 2 profiles, funcational-tests and http-export. # Before launching APP Service, please export the following variables. export EDGEX_SECURITY_SECRET_STORE=false export REGISTRY_SERVICE=${REGISTRY_SERVICE} export SERVICE_PORT=59705 (For functional-tests) export SERVICE_PORT=59704 (For http-export) # Run Test Command export SECURITY_SERVICE_NEEDED=false # Otherwise, will get test ErrSecretsPOST004 failed. python3 -m TUC --exclude Skipped -u functionalTest/API/app-service -p default
- Device Service:
# Before launching Device Service, please export the following variables. export EDGEX_SECURITY_SECRET_STORE=false export REGISTRY_SERVICE=${REGISTRY_SERVICE} # Modify the ProfilesDir value on configuration.toml under ${HOME}/edgex-taf/TAF/config/${profile} ProfilesDir = ${HOME}/edgex-taf/TAF/config/${profile} # Launch device service with the configDir parameter --configDir=${HOME}/edgex-taf/TAF/config/${profile} # Run Test Command python3 -m TUC --exclude Skipped -u functionalTest/device-service -p ${profile} # ${profile}: Use the directory name under TAF/config which depends on what service to test. Examples, device-virtual or device-modbus
Only support deploying edgex services through docker-compose file.
Run test with MQTT buspython3 -m TUC --exclude Skipped --include mqtt-bus -u deploy.robot -p default python3 -m TUC --exclude Skipped --include MessageBus=MQTT -u integrationTest -p device-virtual --name MQTT-bus
Run test with Redis bus
python3 -m TUC --exclude Skipped --include redis-bus -u deploy.robot -p default python3 -m TUC --exclude Skipped --include MessageBus=REDIS -u integrationTest -p device-virtual --name REDIS-bus
-
Shutdown edgex:
python3 -m TUC --exclude Skipped --include shutdown-edgex -u shutdown.robot -p default
Suite level example
Test case level example
Keyword level example