Our team has established a set of collection variables used for testing. The initial value for the variables is usually the happy path values. We then script tests. For non-happy path tests we set the collection variable(s) to different values (which become current values). After the tests complete we want to add to the script a line of code that resets the current value back to the initial value. We know we can explicitly set the variable value however this is a maintenance nightmare if we ever change the default values for the variables. In a perfect world there would be a method such as the following:
I have tried unset() and clear() but unset() destroys the variable altogether and clear() simply clears the value. Is there a way to request the “initial value” of a variable? If so I will just set() the value that way.
Thanks in advance for your assistance.
@ScottFinkle if you don’t want collection variables to get affected you can use local variables
pm.variables.set and pm.variables.get
it will get the collection variable value also according to precedence
if you call pm.variables.get(“name”) , then it will check for the lowest scope value for that variable . so if no lcoal variable if defined then it will get value from data variable , if no data varaible “name” is defined then environment variable and so on
if you still want to reset then use :
Add this to first request’s pre-request script:
This wiil store all initial value to resetValue variable
And in the last request’s test script use
Now we are resetting all collectionVariables to the initially saved value
I sometimes observe ‘null’ when applying this and I haven’t been able to figure out why. Only for the variable I’ve just set/updated via the request body to test this, though. All my other environment variables adjusted during the course of the test run are correctly reset to initial value.
firstName : Peter | Peter
firstName: John set
firstName to jsonData.firstName
firstName : Peter | null
firstname: Peter | Peter
I don’t know the precise condition to reproduce it. Do you know why it might sometimes set current value to ‘null’ (aside from the obvious: initial valu: null)?
is first request being send multiple time in your setup or only once ?
in the first request add:
pm.environment.get("resetValue") ? null:pm.variables.set("resetValue",pm.collectionVariables.toJSON().values)
Here we store data only if resetValue variable is not set
And in the last request:
This make sure you don’t set resetValue incorrectly if you are running first request multiple time
you can also use pm.variables if you don’t any variable to be affected , thats the better way
only being sent once. I have multiple requests in between the first and last, however. it’s an end-to-end test and there are many dependencies to get to the final request’s tests.
Thanks for the additional details. I’ll give that a shot!
Ya make sure the first request runs only once and the last request always gets executed with the reset step
Just wanted to follow up and let you know I haven’t had further issues with the occasional ‘null’ or empty restored value with the new code. Thank you!! (Could have never figured this out myself!)
Glad to hear back and thanks for letting the community know .