Sonja
Sonja

Reputation: 595

Is it possible to run same specflow test again based on outcome?

I'm using Specflow, Visual studio 2015 and Nunit. I need if a test fails to run it once again. I have

[AfterScenario]
public void AfterScenario1()
{
    if (Test Failed  and the counter is 1)
    {
        StartTheLastTestOnceAgain();
    }
}

How do I start the last test again?

Upvotes: 1

Views: 2645

Answers (2)

DerrickF
DerrickF

Reputation: 682

You could always just capture the failure during the assert step and then retry what ever it is that your testing for. Something like:

[Given(@"I'm on the homepage")]
public void GivenImOnTheHomepage()
{
    go to homepage...
}
[When(@"When I click some button")]
public void WhenIClickSomeButton()
{
    click button...
}
[Then(@"Something Special Happens")]
public void ThenSomethingSpecialHappens()
{
    var theRightThingHappened = someWayToTellTheRightThingHappened();
    var result = Assert.IsTrue(theRightThingHappened);
    if(!result)
    {
       thenTrySomeStepsAgainHere and recheck result using another assert
    }
}

Upvotes: 1

Andreas Willich
Andreas Willich

Reputation: 5835

In NUnit there is the RetryAttribute (https://github.com/nunit/docs/wiki/Retry-Attribute) for that. It looks like that the SpecFlow.Retry plugin is using that (https://www.nuget.org/packages/SpecFlow.Retry/). This plugin is a 3rd party plugin and I did not used it yet. So no guarantee that this works as you want.

As alternative you could use the SpecFlow+Runner (http://www.specflow.org/plus/). This specialized runner has the option to rerun your failed test. (http://www.specflow.org/plus/documentation/SpecFlowPlus-Runner-Profiles/#Execution - retryFor/retryCount config value).


Full disclosure: I am one of the developers of SpecFlow and SpecFlow+.

Upvotes: 2

Related Questions