You can run and edit API tests in the API Test Editor in Eggplant Functional. You also can call API tests from several other places, including from SenseTalk scripts, from schedules, and from the command line.
- Run API Tests from a SenseTalk Script
- Run API Tests from the Command Line
- Run API Tests from a Schedule
- Password Storage and Encryption for API Tests
Calling an API test from a SenseTalk script works just like calling one SenseTalk script from another SenseTalk script.
This script calls an API Test named ApiTest1 and returns its URL, response header, and response body.
put ApiTest1() into foo
The API Function
Use the api() Function to access all the properties of an API test, including both the request and response. Note that this function always returns the properties from the API test that ran most recently, so you might want to save properties from individual tests as a variable if you want to use them at a later time. This example runs an API test called ApiTest1 and uses the api function to store the response time in a variable called TimeVar.
put api().responseTime into TimeVar
The api() function returns a property list from the most recent API test that includes the following values:
- authenticationType: Returns the authentication type used for the request.
- httpMethod: Returns the request type (e.g., GET, POST).
- mimeType: Returns the MIME type used in the response.
- oauth1Token: Returns the token if OAuth 1.0 is the authentication method; otherwise, empty.
- password: Returns a redacted string if a password is used for authentication; otherwise, empty.
- requestBody: Returns the body content of the request for POST, PUT, and PATCH requests; otherwise, empty.
- requestBodyFormat: Returns the Body Format type selected in the Request Body section. For requests that don't have body content, the returned value is the most recently chosen Body Format type.
- requestHeaders: Returns any headers entered in the Request Headers section as key/value pairs; otherwise, empty.
- responseBody: Returns the response data from the server.
- responseCookies: Returns details about cookies in the response, if any.
- responseHeaders: Returns the response headers as key/value pairs.
- responseTime: Returns the response time from the request from the server, in seconds.
- statusCode: Returns the status code received from the server (e.g., 200, 404).
- url: Returns the request URL.
- userName: Returns the username for authentication (if used); otherwise, empty.
myApiTest(url: "http://www.google.com", username: "documentation")
Chain API Tests
You can chain API tests together in SenseTalk scripts in the Script Editor. This enables you to use the results of those API tests in larger tests using SenseTalk. The following example uses the results from two API tests, Get_BasicAuth_json and Head_BasicAuth_json, as part of a larger test of an error tracking system.
log " Feature #XXXX"
log " Support for Basic Authentication"
BeginTestCase "Basic Authentication - Valid Authentication - Get Request"
EndTestCase "Basic Authentication - Valid Authentication - Get Request"
BeginTestCase "Basic Authentication - Valid Authentication - Head Request"
EndTestCase "Basic Authentication - Valid Authentication - Head Request"
BeginTestCase "Basic Authentication - Invalid Authentication"
set the suiteVariables.username to "xxxxx"
EndTestCase "Basic Authentication - Invalid Authentication"
Use the runscript command to run API tests from the command line. Use the -CommandLineOutput flag to output script logs.
Mac (bash shell):
/Applications/Eggplant.app/Contents/MacOS/runscript /Users/Bob/Documents/APITesting.suite/APITests/ApiTest2.apitest -CommandLineOutput yes
Windows (command shell):
"C:\Program Files\Eggplant\runscript.bat" "C:\Users\Bob\Documents\APITesting.suite\APITests\ApiTest1.apitest" -CommandLineOutput yes
Linux (bash shell):
runscript ~/Documents/APITesting.suite/APITests/Untitled.apitest -CommandLineOutput yes
You can override any parameters you've set in the API test from the command line, as well.
Mac (bash shell):
/Applications/Eggplant.app/Contents/MacOS/runscript /Users/Bob/Documents/APITesting.suite/APITests/ApiTest2.apitest -pv '(url:"http://chicago.publicserver.com/issues/14618.xml")' -CommandLineOutput Yes
Windows (command shell):
"C:\Program Files\Eggplant\runscript.bat" "C:\Users\Bob\Documents\AutoDoctorScreenshots.suite\APITests\JsonGet.apitest" -pv (url:\"http://chicago.publicserver.com/issues/14920.xml\") -CommandLineOutput Yes
Linux (bash shell):
runscript ~/Documents/APITesting.suite/APITests/Untitled.apitest -pv '(url:"http://chicago.publicserver.com/issues/14920.xml")' -CommandLineOutput yes
Use schedules to define a collection of API tests and scripts to run, the order to run them in, and any parameters or dependencies. Access schedules from the Schedules pane.
Click the arrow to the right of the Status column to view detailed results of the selected test or script run. Note that you don't need to connect to a system under test (SUT) to run a schedule of API tests.
Passwords you enter in the Authentication fields of the API Test Editor must be in plain text. Eggplant Functional encodes these passwords when you save and decodes them when you load an API test.
You should encode any passwords you choose to save as suite variables, as it's not recommended to save passwords as plain text. Those passwords must then be decoded before they're passed to API tests. Note that you need to use this method only if you're using a form of authentication that's not directly supported in Eggplant Functional.
You can both encode and decode passwords using Eggplant Functional.
Step by Step: Encode Passwords
- Open the Run window. In the Ad Hoc Do Box, enter the following code, then click Do:
- Copy the encoded password from the Log pane.
- Open the Settings tab and paste the encoded password into a Value field in the Suite Variables section. Enter a name for the password variable in the corresponding Key field.
- To override the password property in an API test using a suite variable, use the decodeText function in an API script or a SenseTalk script:
put decodetext(MyPwd) into myPassword