Dynamically create proxies, record traffic, and create assets using the REST API

in Virtualize
I was recently at a customer engagement and they had the following requirement:
We would like to create proxies on the fly, record traffic, create the asset, then delete the proxy.
Parasoft has a powerful REST API that can easily facilitate this. This script does the following
1. Creates a new Proxy in record mode
2. Grabs the proxy ID
3. Executes a test (Through the proxy)
4. Turns off the proxy
5. creates a virtual service from traffic
6. (Optional) Deletes the proxy
This script could be used to create multiple recordings and assets by looping through the v6/messageProxies PUT
Enjoy!
#Dynamic Proxy and Asset creator script
#Written 11/7/2019 by Chris Colosimo
#Server Settings VIRT_USER=admin VIRT_PASS=admin VIRT_HOST=localhost VIRT_PORT=9080 #Proxy Settings PROXY_NAME=dynamicProxy PROXY_LISTEN_PATH="/dynamicproxy" PROXY_SERVICE_HOST="deckofcardsapi.com" PROXY_SERVICE_PORT=443 PROXY_SERVICE_FORWARD_PATH="/api/" TRAFFIC_FILE_NAME=cardTraffic.txt #Asset Settings VA_SUBFOLDER=scratchpad ASSET_NAME=dynamicAsset #=================================================================================== #Create the proxy in record mode CREATE_PROXY=$(curl -v \ --user $VIRT_USER:$VIRT_PASS \ --header "Content-Type: application/json" \ --header "ParasoftRefresh: true" \ --request POST \ --data '{ "name": "'$PROXY_NAME'", "enabled": true, "recording": true, "description": "", "connections": [ { "type": "HTTP", "httpProxy": { "connection": { "proxySettings": { "proxyListenPath": "'$PROXY_LISTEN_PATH'" }, "primaryConnection": { "serviceHost": "'$PROXY_SERVICE_HOST'", "servicePort": '$PROXY_SERVICE_PORT', "serviceForwardPath": "'$PROXY_SERVICE_FORWARD_PATH'" }, "secondaryConnection": { "useSecondaryConnectionIfPrimaryFails": { "enabled": false, "value": { "serviceHost": "", "servicePort": 80, "serviceForwardPath": "", "recordingOptions": "BOTH_CONNECTIONS" } } } }, "security": { "sslSettings": { "useSsl": { "enabled": true, "value": { "trustAllCertificates": false, "acceptSelfSignedCertificates": false, "keyStore": { "keyStorePassword": "AgAAAAA=", "keyStoreType": "PKCS12", "certificate": "" }, "trustStore": { "keyStorePassword": "AgAAAAA=", "keyStoreType": "PKCS12" } } } } } }, "recording": { "targetFile": { "parent": { "id": "/VirtualAssets/recorded_traffic" }, "name": "'$TRAFFIC_FILE_NAME'" }, "appendTrafficData": true, "newFilePerTransaction": false } } ] }' \ http://$VIRT_HOST:$VIRT_PORT/soavirt/api/v6/messageProxies) echo "===================================================================" #Get the Proxy ID. PROXY_ID=$(echo $CREATE_PROXY | awk -F "{\"id\":\"" '{print $2}' | awk -F "\",\"url\"" '{print $1}') echo 'The Proxy ID is: ' $PROXY_ID #Run Your tests Here echo "===================================================================" echo Run Your tests Here echo http://$VIRT_HOST:$VIRT_PORT$PROXY_LISTEN_PATH/deck/new/draw/?count=2 curl http://$VIRT_HOST:$VIRT_PORT$PROXY_LISTEN_PATH/deck/new/draw/?count=2 echo echo "===================================================================" #Optional turn off recording and disable the proxy #You can also use this PUT to enable/disable and change other fields of an existing Proxy curl -v \ --user $VIRT_USER:$VIRT_PASS \ --header "Content-Type: application/json" \ --header "ParasoftRefresh: true" \ --request PUT \ --data '{ "name": "'$PROXY_NAME'", "enabled": false, "recording": false, "description": "", "connections": [ { "type": "HTTP", "httpProxy": { "connection": { "proxySettings": { "proxyListenPath": "'$PROXY_LISTEN_PATH'" }, "primaryConnection": { "serviceHost": "'$PROXY_SERVICE_HOST'", "servicePort": '$PROXY_SERVICE_PORT', "serviceForwardPath": "'$PROXY_SERVICE_FORWARD_PATH'" }, "secondaryConnection": { "useSecondaryConnectionIfPrimaryFails": { "enabled": false, "value": { "serviceHost": "", "servicePort": 80, "serviceForwardPath": "", "recordingOptions": "BOTH_CONNECTIONS" } } } }, "security": { "sslSettings": { "useSsl": { "enabled": true, "value": { "trustAllCertificates": false, "acceptSelfSignedCertificates": false, "keyStore": { "keyStorePassword": "AgAAAAA=", "keyStoreType": "PKCS12", "certificate": "" }, "trustStore": { "keyStorePassword": "AgAAAAA=", "keyStoreType": "PKCS12" } } } } } }, "recording": { "targetFile": { "parent": { "id": "/VirtualAssets/recorded_traffic" }, "name": "'$TRAFFIC_FILE_NAME'" }, "appendTrafficData": true, "newFilePerTransaction": false } } ] }' \ http://$VIRT_HOST:$VIRT_PORT/soavirt/api/v6/messageProxies/$PROXY_ID echo echo "===================================================================" #Create the PVA file curl -v \ --user $VIRT_USER:$VIRT_PASS \ --header "Content-Type: application/json" \ --header "ParasoftRefresh: true" \ --request POST \ --data '{ "inferConstraints": "", "parent": { "id": "/VirtualAssets/'$VA_SUBFOLDER'/" }, "name": "'$ASSET_NAME'", "trafficFile": { "id": "VirtualAssets/recorded_traffic/'$TRAFFIC_FILE_NAME'" }, "repositoryConnectionSettings": { "host": "localhost", "port": 2424, "repositoryName": "'$ASSET_NAME'", "user": "admin", "password": "admin" }, "dataReuse": { "dataSetImport": "update" }, "characterEncoding": "" }' \ http://$VIRT_HOST:$VIRT_PORT/soavirt/api/v6/files/pvas/traffic echo echo "===================================================================" #Optional delete the proxy curl -X DELETE \ --user $VIRT_USER:$VIRT_PASS \ --header "Content-Type: application/json" \ --header "ParasoftRefresh: true" \ http://$VIRT_HOST:$VIRT_PORT/soavirt/api/v6/messageProxies/$PROXY_ID echo echo "===================================================================" #Finalize echo "Your asset is ready, You can access it at the following endpoint" echo "http://$VIRT_HOST:$VIRT_PORT/$ASSET_NAME$PROXY_LISTEN_PATH/deck/new/draw" echo echo "==================================================================="
Tagged:
1
Comments
Very cool!