Execute Custom Scripts Before/After the Test Run
I would like to invoke a custom script once the test finishes. The custom script must have access to newly-generated test results.
I would like to invoke a custom script just before the test starts executing.
Solution
Override the OnAfterTestCompleted(TestResult result) method for the "after" script and the OnBeforeTestStarted() method for the "before" script. They are both members of the BaseTest class that are invoked once the test finishes or before it starts.
Note
If exist, the OnAfterTestCompleted and the OnBeforeTestStarted() methods gets executed also for partial test runs.
First, create a coded step in order to generate a code-behind file. Then open the code-behind class and add the override definition inside the BaseTest class.
Standalone version
- If your test doesn't contain any coded steps, add a Script Step in order to generate the code-behind file.
- Once you add the script step, click View Class to make the BaseTest class visible.
- Add the override definition inside the BaseTest, but not inside another method/coded step.
Visual Studio plugin
- If your test doesn't contain any coded steps, click the Add Code-Behind File button.
- If you test contains a coded step, right click it and select View Code to go to the code-behind file.
- Write the override definition inside the BaseTest (but not inside another method/coded step).
The Override Definition
The TestResult object lets you access the test results from the run that just finished (i.e. the one invoking the OnAfterTestCompleted method):
public override void OnAfterTestCompleted(TestResult result)
{
string overall = Convert.ToString(result.Result);
Log.WriteLine(overall);
result.ExportToResultFile(@"C:\", result.TestName);
}
Public Overrides Sub OnAfterTestCompleted(result As TestResult)
Dim overall As String = Convert.ToString(result.Result)
Log.WriteLine(overall)
result.ExportToResultFile("C:\", result.TestName)
End Sub
The OnBeforeTestStarted method allows you to perform actions required for the initialization of your test (starting scripts, etc.):
public override void OnBeforeTestStarted(BeforeTestStartedArgs args)
{
this.ExecuteTest("Folder1\\WebTest2.tstest");
}
Public Overrides Sub OnBeforeTestStarted(BeforeTestStartedArgs args)
Me.ExecuteTest("Folder1\WebTest2.tstest")
End Sub
You can use logic from assemblies in these methods. First add references to the assemblies. For Test Studio Standalone version, see the article on how to Add an Assembly Reference.