0

我有一个 selenium 自动化套件,如果测试失败,测试用例可以截屏。

所有的测试都是单元测试并且是数据驱动的。我所说的数据驱动的意思是对每个数据行执行测试。请参阅下面的示例代码

    [TestMethod]
    [TestCategory("UITest"), TestCategory("Flow")]
    [DataSource("Microsoft.VisualStudio.TestTools.DataSource.XML", "|DataDirectory|\\allFlows.xml", "flow", DataAccessMethod.Sequential)]
    public void MyTest()
    {
       //TEST CODE
    }

上面的代码是由 allFlows.xml 中的数据流数量数据驱动的

我面临的问题是当测试失败时,会生成一个屏幕截图,我可以看到每个测试(包括通过测试)附加的屏幕截图我相信这使得 trx 文件变得沉重和丑陋

例如,我有 1 个测试,allFlow.xml 中有 5 个流数据。所以执行的总测试是 5,假设有 2 个测试失败。

报告说 3 次测试通过,2 次测试失败。我现在有两个失败的测试的 2 个屏幕截图。

问题是除了 2 个失败的测试之外,所有 3 个通过的测试都附加了屏幕截图。

知道如何解决这个问题吗?我需要忍受它,因为它是微软的功能/错误吗?

问题类似于此 C# - .NET - MSTest - 测试上下文 - 添加结果文件 - Selenium 屏幕截图 - 查看结果文件时出现问题

我记得有人提出了类似的问题,但没有解决方案?

这是 MSTest 功能吗?

任何帮助都会很棒。

屏幕截图代码如下

                Directory.CreateDirectory(testContext.TestResultsDirectory);
                Screenshot screenShot = ((ITakesScreenshot)driver).GetScreenshot();
                String CurrentIteration = testContext.DataRow.Table.Rows.IndexOf(testContext.DataRow).ToString();
                string fileName = testContext.TestResultsDirectory+ "\\Screenshot_" + testContext.TestName + "_RowNumber " + CurrentIteration + "_" + DateTime.Now.ToString("yyyy-dd-MM-HH-mm-ss") + ".png";
                screenShot.SaveAsFile((fileName), ImageFormat.Png);
                Wait.WaitBetweenSteps(3000);  

谢谢

*********************************编辑**************** ******************

 [TestClass]
public class Driver
{
    IWebDriver driver;
    private TestContext testContext;
    public TestContext TestContext
    {
        get { return testContext; }

        set { testContext = value; }
    }


    [ClassInitialize]
    public static void ClassInit(TestContext testContext)
    {
        DriverData driverData = new DriverData();
        driverData.CreateTestData();
    }

    [TestInitialize]
    public void Init()
    {
    //Some Init Code
    }

    [TestMethod]
    [TestCategory("UITest"), TestCategory("Flow")]
    [DataSource("Microsoft.VisualStudio.TestTools.DataSource.XML", "|DataDirectory|\\allFlows.xml", "flow", DataAccessMethod.Sequential)]
    public void MyTest()
    {
       //TEST CODE
        Flow flow = new TestDataUtilities().generateFlowFromDataRow(testContext.DataRow);
       //Here if Failed then call GetScreenShot(testContext);
       try{
       //TEST CODE
       }
       catch(Exception){
       GetScreenShot(testContext);
       }
    }
}
            GetScreenShot(testContext)
            {
            Directory.CreateDirectory(testContext.TestResultsDirectory);
            Screenshot screenShot = ((ITakesScreenshot)driver).GetScreenshot();
            String CurrentIteration = testContext.DataRow.Table.Rows.IndexOf(testContext.DataRow).ToString();
            string fileName = testContext.TestResultsDirectory+ "\\Screenshot_" + testContext.TestName + "_RowNumber " + CurrentIteration + "_" + DateTime.Now.ToString("yyyy-dd-MM-HH-mm-ss") + ".png";
            screenShot.SaveAsFile((fileName), ImageFormat.Png);
            Wait.WaitBetweenSteps(3000);  
            }       
4

0 回答 0