Example: Transaction Duration, set_transaction, and waste time
The follow example shows the capture of transaction duration times based on whether a condition is fulfilled. The start_transaction call creates transaction "Flight". At the point in the transaction where data will be important regardless of the condition, the time is captured with get_transaction_duration. After the ticket and purchase information is submitted, YourAPICall checks whether the submit succeeded. (In this example, YourAPICall simply passes the first iteration and fails the second.)
If YourAPICall determines that the submit successfully caused the server-side action to take place, then get_transaction_duration retrieves the total duration. Because the time spent check on the server if the submit succeeded is not part of the business process, that time is subtracted from the total duration, and set_transaction uses that value to create transaction "SuccessfulFlight". Note that this is the functional equivalent in Visual Basic of the waste time functionality in the C language scripts.
If YourAPICall determines that the server-side action failed, then the value capture with the first call to get_transaction_duration is used by lr.set_transaction to create transaction "FailedFlight".
As a result of this action, analysis data is produced for three transitions.
Transaction "Flight" records an overview of transaction durations for both successful and unsuccessful submit, including the time spent on YourAPICall. Transaction "SuccessfulFlight" records the total end to end times of transactions where the server-side action succeeded, excluding the time spent on YourAPICall. Transaction "FailedFlight" records the time it takes to get the itinerary when then later submit fails.
Below the sample action is the log and the analysis data.
Public Function Action() As Long
Dim trans_time As Double Dim total_trans_time as Double Dim rc As Integer Dim vData As Variant Dim vOptions As Variant Dim s_code as Integer Dim waste_time as Single Dim start_check as Single
lr.start_transaction "Flight" vOptions = "Resource=0, " _ & "RecContentType=text/html, " _ & "Referer=, " _ & "Snapshot=t1.inf, " _ & "Mode=HTML, " _ & "LAST"
web.URL "flightnet", _ "URL=http://lazarus/flightnet/" , _ vOptions
vData = "Name=grpType, Value=radRoundtrip, ENDITEM, " _ & "Name=lstDepartingCity, Value=Los Angeles, ENDITEM, " _ & "Name=lstDestinationCity, Value=San Francisco, ENDITEM, " _ & "Name=txtDepartureDate, Value=1/12/2004, ENDITEM, " _ & "Name=txtReturnDate, Value=1/14/2004, ENDITEM, " _ & "Name=txtQuantity, Value=1, ENDITEM, " _ & "Name=radClass, Value=1, ENDITEM, " _ & "Name=radSeat, Value=1, ENDITEM, " _ & "Name=btnAvailableFlights, Value=Next >, ENDITEM, " _ & "LAST "
web.submit_form "default.aspx" , _ "Snapshot=t2.inf" , _ vData
' Get transaction time in seconds for the first part of the transaction: itinerary
trans_time = lr.get_transaction_duration ("Flight") lr.think_time 3
' Start the second part of the transaction: ' Choosing a flight and buying a ticket
vData = "Name=lstAvailableFlights, Value=AA6291 Depart 8:10AM, Arrive 11:30AM, $179.47, ENDITEM, " _ & "Name=btnCustomerInfo, Value=Next >, ENDITEM, " _ & "LAST "
web.submit_form "default.aspx_2", _ "Snapshot=t3.inf", _ vData
vData = "Name=txtCustomerName, Value=Edmund Bertram, ENDITEM, " _ & "Name=txtAddress, Value=Mansfield Park,\r\n" _ & "England, ENDITEM, " _ & "Name=txtPhoneNumber, Value=None, ENDITEM, " _ & "Name=lstCreditCard, Value=Discover, ENDITEM, " _ & "Name=txtCardNumber, Value=123456789, ENDITEM, " _ & "Name=txtExpirationDate, Value=1/1/181, ENDITEM, " _ & "Name=btnOrderConfirmation, Value=Finish, ENDITEM, " _ & "LAST"
web.submit_form "default.aspx_3" , _ "Snapshot=t4.inf" , _ vData
' The time spent checking the success of the server-side ' action with YourAPICall is not part of the business ' process being tested. Capture the start of the check ' so that the time can be deducted later.
start_check = Timer
' Call the API of your application to see whether the purchase is registered.
rc = YourApiCall (s_code, "EdmundBertam") lr.message "After call to YourAPICall, rc = " + Cstr(rc)
' Capture the total time spent on the call to YourApiCall
waste_time = Timer - start_check lr.message "Waste time = " + cStr(waste_time)
' If your API confirms success:
If rc = lr.PASS Then ' Get the transaction time total_trans_time = lr.get_transaction_duration ("Flight")
' Deduct the time spent on the call to YourApiCall total_trans_time = total_trans_time - waste_time
' Create a transaction for the successful business process
lr.set_transaction "SuccessfulFlight", total_trans_time, lr.PASS lr.Message "API Call succeeded: Record complete duration SuccessfulFlight time = " _ + Cstr(total_trans_time)
Else ' If your API shows that the process failed: ' Use only the time from the start_transaction to the ' first call to lr.get_transaction_duration ("Flight") ' that captured the itinerary section of the business process.
' Create a transaction for the failed business process. lr.set_transaction "FailedFlight", trans_time, lr.PASS lr.Message "API Call failed: Record duration only up itinerary" lr.Message "API Call failed: Record duration only up itinerary. FailedFlight time = " _ + Cstr(trans_time) End If
lr.end_transaction "Flight", lr.AUTO
'lr.Message "Duration of logon and itinerary = " + CStr(trans_time) 'lr.message "Return Code is " + lr.eval_string ("<ReturnCode>")
Action = lr.PASS
End Function
Example: Output:
Starting iteration 1.
Starting action Action.
Notify: Transaction Flight started.
web_url("flightnet") was successful, 30710 body bytes, 1982 header bytes
web_submit_form("default.aspx") was successful, 11610 body bytes, 259 header bytes
web_submit_form("default.aspx_2") was successful, 11610 body bytes, 259 header bytes
web_submit_form("default.aspx_3") was successful, 11610 body bytes, 259 header bytes
After call to YourAPICall, rc = 0
Waste time = 2.031875
Notify: Transaction SuccessfulFlight set.
API Call succeeded: Record complete duration SuccessfulFlight time = 3.8044273129425
Notify: Transaction Flight ended with Pass status (Duration: 7.6009 Think Time: 5.0072).
Ending action Action.
Ending iteration 1.
Starting iteration 2.
Starting action Action.
Notify: Transaction Flight started.
web_url("flightnet") was successful, 30710 body bytes, 1982 header bytes
web_submit_form("default.aspx") was successful, 11610 body bytes, 259 header bytes
web_submit_form("default.aspx_2") was successful, 11610 body bytes, 259 header bytes
web_submit_form("default.aspx_3") was successful, 11610 body bytes, 259 header bytes
After call to YourAPICall, rc = 1
Waste time = 2.001469
Notify: Transaction FailedFlight set.
API Call failed: Record duration only up itinerary. FailedFlight time = 0.130188
Notify: Transaction Flight ended with Pass status (Duration: 7.3806 Think Time: 5.0072).
Ending action Action.
Ending iteration 2.
Analysis
Analysis of four iterations of the script. For two, YourAPICall indicates success, and for two, failure.