如果测试失败,C#/ Selenium重试

问题描述

我之前曾发布过类似的问题,但我仍在寻找与Selenium自动化测试相关的解决方案。

概括地说,由于我们的测试服务器和附加服务上的性能问题,有时我们的测试第一次失败,但会重新运行。

以前在Rubymine中,可以使用类似以下示例的程序进行重试:

default: RDEE_broWSER=chrome --no-source --color --format pretty --format html --out testresults/<%= Time.Now.strftime("%Y%m%d-%H%M%s") %>-pu_automation.html --retry 1 --tags @current_tests

如果测试失败,重试1选项将强制重试,通常会在第二次尝试中通过。

现在,我们已使用Nunit和Specflow切换到Visual Studio / C#/ Selenium,这是一个典型示例 在功能文件

Scenario Outline: Validate that the search locates the required item
    Given I browse to the homepage
    When I search for "search"
    Then  I am presented with a list of items for "search"

链接到步骤定义文件

[Given(@"I browse to the homepage")]
public void GivenIbrowsetoTheHomepage()
{
    Visit();
}

[When(@"I search for ""(.*)""")]
public void WhenISearchFor(string SearchText)
{
    StartaSearch(SearchText);
}


[Then(@"I am presented with a list of items for ""(.*)""")]
public void ThenIAmPresentedWithAlistofItemsFor(string items)
{
    AssertIsTrue(ValidateItemList(items));
}

依次链接到开始实际工作的页面

我们还有如下的hooks类

public sealed class Hooks : SharedClass
{
    private readonly ScenarioContext _scenarioContext;

    public Hooks(ScenarioContext scenarioContext)
    {
        _scenarioContext = scenarioContext;
    }

    [BeforeScenario]
    public void BeforeScenario()
    {
        _test = _extent.CreateTest(_scenarioContext.ScenarioInfo.Title.ToString());
    }

    [AfterScenario]
    public void AfterScenario()
    {
        var status = _scenarioContext.ScenarioExecutionStatus.ToString();
        if (status != "OK")
        {
            var stackTrace = "<pre>" + _scenarioContext.TestError.StackTrace + "</pre>";
            var errorMessage = GetErrorMessage();
            WritetoReport(stackTrace + errorMessage,Status.Fail);
        }
        Driver.Manage().Cookies.DeleteallCookies();
    }

    //preview
    [BeforeFeature]
    [Scope(Tag = "demo_tests")]
    public static void BeforeFeaturePreview(FeatureContext featureContext)
    {
        BeforeFeature(featureContext.FeatureInfo.Title);
    }

    public static void BeforeFeature(string title)
    {
        ResetReportvariables(TestUrls.DomainSpice,title);
        var options = new ChromeOptions();
        options.AddArguments("disable-browser-side-navigation");
        options.AddArguments("disable-infobars");
        options.AddArgument("ignore-certificate-errors");
        options.AddArgument("ignore-ssl-errors");
        options.AddArgument("disable-popup-blocking");
        options.AddArguments("start-maximized");
        options.AddArguments("no-sandBox");
        options.SetLoggingPreference(LogType.browser,LogLevel.All);
        Driver = new ChromeDriver(options);
    }

    [AfterFeature]
    public static void AfterFeature()
    {
        try
        {
            Driver.Manage().Cookies.DeleteallCookies();
        }
        catch (Exception ex)
        {
            Console.WriteLine("Already logged out - ignore : {0}",ex);
        }
        _extent.Flush();
        try
        {
            Driver.Close();
            Driver.Quit();
        }
        catch (Exception ex)
        {
            Console.WriteLine("Error: " + ex);
        }
    }

我们正在使用NUnit.Framework.Assert将测试标记为通过或失败,但是现在我们可以在此示例项目中启用重试选项吗? Nunit是错误的选择吗? MsTest会是更好的选择吗?还是其他更适合的东西?

这些是我们当前使用的软件包

<package id="Cucumber.Messages" version="6.0.1" targetFramework="net472" />
<package id="DotNetSeleniumExtras.WaitHelpers" version="3.11.0" targetFramework="net472" />
<package id="ExtentReports" version="4.1.0" targetFramework="net472" />
<package id="Gherkin" version="6.0.0" targetFramework="net472" />
<package id="NUnit" version="3.12.0" targetFramework="net472" />
<package id="NUnit3TestAdapter" version="3.17.0" targetFramework="net472" />
<package id="Selenium.Support" version="3.141.0" targetFramework="net472" />
<package id="Selenium.WebDriver" version="3.141.0" targetFramework="net472" />
<package id="SpecFlow" version="3.4.8" targetFramework="net472" />
<package id="SpecFlow.CustomPlugin" version="3.4.8" targetFramework="net472" />
<package id="SpecFlow.NUnit" version="3.4.8" targetFramework="net472" />
<package id="SpecFlow.Tools.MsBuild.Generation" version="3.4.8" targetFramework="net472" />

预先感谢

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)