Page History
...
- Example: Run test cases for a number of orders
- Find attached example invoke_testrun.sh for use with curl. We do not consider curl to be perfectly prepared to handle web service requests, however, it shows the building blocks.
- The script can be parameterized to run a number of orders for a given set of workflows.
Code Block language bash title Example for use with curl to run a number of orders for a given set of workflows linenumbers true collapse true #!/bin/bash # ---------------------------------------- # JS7 Test Test Case Invocation # ---------------------------------------- # Examples # ./invoke_testrun.sh --url=http://joc-2-0-primary:7446 --id=testsuite --time-zone=Europe/Berlin --count=1 --workflows=/TestRuns/Test0000000070/tcpForkBalanced_001,/TestRuns/Test0000000070/tcpForkNestedLevel1_001 # ./invoke_testrun.sh --url=https://joc-2-0-primary:7443 --cacert=./certs/root-ca.crt --account=root --password=root --id=testsuite --time-zone=Europe/Berlin --workflows=/TestRuns/Test0000000070/tcpForkBalanced_001,/TestRuns/Test0000000070/tcpForkNestedLevel1_001 --batch-size=10 --count=1 # Protocol, host and port of JOC Cockpit JS7_URL="http://localhost:4446" # CA certificate for TLS/SSL connection JS7_CACERT="" # Account and password if no client authentication certificate is used JS7_ACCOUNT="root" JS7_PASSWORD="root" # Identification of JS7 Controller JS7_CONTROLLER_ID="" # Number of test runs, number of orders per batch in a test run, test case directory and workflow paths JS7_TEST_COUNT=1 JS7_TEST_BATCH_SIZE=100 JS7_TEST_CASE_WORKFLOWS=() JS7_TEST_CASE_SCHEDULED_FOR="now" JS7_TEST_CASE_TIME_ZONE="Etc/UTC" JS7_VERBOSE=0 # ---------------------------------------- for option in "$@" do case "$option" in -v) JS7_VERBOSE=1 ;; --url=*) JS7_URL=`echo "$option" | sed 's/--url=//'` ;; --cacert=*) JS7_CACERT=`echo "$option" | sed 's/--cacert=//'` ;; --account=*) JS7_ACCOUNT=`echo "$option" | sed 's/--account=//'` ;; --password=*) JS7_PASSWORD=`echo "$option" | sed 's/--password=//'` ;; --id=*) JS7_CONTROLLER_ID=`echo "$option" | sed 's/--id=//'` ;; --count=*) JS7_TEST_COUNT=`echo "$option" | sed 's/--count=//'` ;; --batch-size=*) JS7_TEST_BATCH_SIZE=`echo "$option" | sed 's/--batch-size=//'` ;; --workflows=*) JS7_TEST_CASE_WORKFLOWS=(`echo "$option" | sed 's/--workflows=//' | sed -r 's/[,]+/ /g'`) ;; --scheduled-for=*) JS7_TEST_CASE_SCHEDULED_FOR=`echo "$option" | sed 's/--scheduled-for=//'` ;; --time-zone=*) JS7_TEST_CASE_TIME_ZONE=`echo "$option" | sed 's/--time-zone=//'` ;; *) echo "unknown argument: $option" exit 1 ;; esac done # ----------------------------------------- JS7_Login() { echo -e "\n" echo "PERFORMING LOGIN" # Base64 encoded string "user:password" for authentication. The below string represents "root:root" js7_basic_authentication="`echo "$JS7_ACCOUNT:$JS7_PASSWORD" | base64`" js7_basic_authentication="${js7_basic_authentication:0:${#js7_basic_authentication}-4}" js7_curl_options=(-k -s -S -X POST -i -m 15) if [ "$JS7_CACERT" != "" ] then js7_curl_options+=(--cacert $JS7_CACERT) fi if [ $JS7_VERBOSE -ne 0 ] then echo "curl ${js7_curl_options[@]} -H \"Authorization: Basic $js7_basic_authentication\" -H \"Accept: application/json\" -H \"Content-Type: application/json\" $JS7_URL/joc/api/authentication/login" fi js7_json="`curl ${js7_curl_options[@]} -H "Authorization: Basic $js7_basic_authentication" -H "Accept: application/json" -H "Content-Type: application/json" $JS7_URL/joc/api/authentication/login`" rc=$? if [ $rc -eq 0 ] then js7_access_token=$(echo $js7_json | grep -Po '"accessToken":.*?[^\\]"' | awk -F ':' '{print $2}' | tr -d \" ) if [ $JS7_VERBOSE -ne 0 ] then echo -e "Response:\n$js7_json" fi else echo "ERROR OCCURRED: $rc" echo $js7_json exit $rc fi js7_access_token=$(echo $js7_json | grep -Po '"accessToken":.*?[^\\]"' | awk -F ':' '{print $2}' | tr -d \" ) } # ----------------------------------------- JS7_Logout() { rc=$? echo -e "\n" if [ "$js7_access_token" != "" ] then echo "PERFORMING LOGOUT" js7_curl_options=(-k -s -S -X POST -i -m 15) if [ "$JS7_CACERT" != "" ] then js7_curl_otions+=(--cacert $JS7_CACERT) fi js7_json="`curl ${js7_curl_options[@]} -H "X-Access-Token: $js7_access_token" -H "Accept: application/json" -H "Content-Type: application/json" $JS7_URL/joc/api/authentication/logout`" exit_code=$? if [ $exit_code -eq 0 ] then js7_access_token="" if [ $JS7_VERBOSE -ne 0 ] then echo -e "Response:\n$js7_json" fi else echo "ERROR OCCURRED: $exit_code" echo $js7_json fi echo -e "\n" fi exit $rc } # ----------------------------------------- JS7_AddOrder() { echo -e "\n" js7_order_count=0 for i in $(seq 1 $JS7_TEST_COUNT) do for workflow in ${JS7_TEST_CASE_WORKFLOWS[@]} do echo "ADDING ORDERS TO WORKFLOW: count=$i batch-size=$JS7_TEST_BATCH_SIZE workflow=$workflow" js7_rest_body="{ \"controllerId\": \"$JS7_CONTROLLER_ID\", \"orders\": [ " for j in $(seq 1 $JS7_TEST_BATCH_SIZE) do js7_order_count=$((js7_order_count+1)) js7_rest_body="$js7_rest_body { \"workflowPath\":\"$workflow\", \"orderName\":\"$RANDOM\", \"scheduledFor\":\"$JS7_TEST_CASE_SCHEDULED_FOR\", \"timeZone\":\"$JS7_TEST_CASE_TIME_ZONE\" } " if [ $j -lt $JS7_TEST_BATCH_SIZE ] then js7_rest_body="$js7_rest_body," fi done js7_rest_body="$js7_rest_body ] }" if [ $JS7_VERBOSE -ne 0 ] then echo "Request Body:\n$js7_rest_body" fi # Execute web service request js7_curl_options=(-k -s -S -X POST -i -m 15) if [ "$JS7_CACERT" != "" ] then js7_curl_options+=(--cacert $JS7_CACERT) fi js7_json="`curl ${js7_curl_options[@]} -d "$js7_rest_body" -H "X-Access-Token: $js7_access_token" -H "Accept: application/json" -H "Content-Type: application/json" $JS7_URL/joc/api/orders/add`" rc=$? if [ $rc -eq 0 ] then if [ $JS7_VERBOSE -ne 0 ] then echo -e "Response:\n$js7_json" fi else echo "ERROR OCCURRED: exit code $rc" echo -e "Response:\n$js7_json" exit $rc fi echo -e "orders added: $js7_order_count" done done } # ----------------------------------------- trap 'JS7_Logout EXIT' EXIT trap 'JS7_Logout SIGTERM' SIGTERM trap 'JS7_Logout SIGINT' SIGINT JS7_Login JS7_AddOrder JS7_Logout # -----------------------------------------
...
Overview
Content Tools