Selenium:如何使用NUnit创建测试证据报告

时间:2018-05-08 06:42:07

标签: selenium selenium-webdriver automated-tests nunit ui-testing

我想知道如何创建Selenium UI测试的正确测试证据。

我在考虑截图,但实际上并没有涵盖您所做的一切,因为很难确定何时截图。 (每次点击或每次等待或每次页面加载)。

我想到的另一个选择是屏幕录制,但这使得在录制整个屏幕而不是特定的chrome窗口时很难使用并行性。

但是,您也可以通过网络驱动程序每秒拍摄一次屏幕截图并将其转换为视频。然后,我们必须使用一个单独的线程,考虑到你必须提供的条件来阻止线程截取屏幕,这可能非常具有挑战性。否则测试将永远进行。

由于我无法根据自己关于为UI测试创建测试证据报告的想法得出令人信服的结论,所以我希望有人可以向我解释如何正确地做到这一点。

2 个答案:

答案 0 :(得分:2)

我有类似的问题,我在我的自动化框架ExtentReports + klov服务器中引入了Testrail作为测试管理的工具。

我认为没有人会要求您通过视频或屏幕截图显示测试用例,但如果有必要,您可以查看几个库来拍摄“视频”,因为这不是实际的视频,而是一堆截图被捣碎成一个视频。

实际证明真正好的时间投入是将截获的测试用例截图并将其附加到测试用例结果中(Testrail,Bugzila,Extentreports)。

如果使用selenium / appium,你可以检查这个回购 [https://github.com/groupon/Selenium-Grid-Extras]他们将“视频”视为提及并存储在本地中心/节点上。

但最好的menthod是一个真正好的方法是报告每个测试用例的详细步骤:

屏幕截图测试用例,包含详细的步骤和操作: enter image description here

答案 1 :(得分:2)

我在申请中处理报告的方式与Kovacic所说的一致。 我还使用ExtentReports作为生成指标的方法,并逐步记录发生的事情。

我创建了一个方法,可以记录一个步骤(点击它,在那里导航,断言......),如果需要可以选择截取屏幕,另一个用于开始新测试。

然后,这是在PageObject样式测试框架中调用这些方法的问题,并且几乎在框架的每个操作中都调用了这些方法。

为了更好地说明这里有一些实现示例(c#):

记录步骤方法

public void LogStep(Status status,string MessageToLog, bool hasScreenshot)
{
 //we leave the possibility of taking the screenshot with the step or not
 if (hasScreenshot)
        {
            Test.Log(logstatus, messageToLog)
                .AddScreenCaptureFromPath(GetScreenshot());     
        }
        else
            Test.Log(logstatus, messageToLog);
}

屏幕截图捕获方法

public static string GetScreenshot()
{
    ITakesScreenshot ts;

    //Browser.Driver here is the instance of the Driver you want to take screenshots with
    ts = (ITakesScreenshot)Browser.Driver;                  
    var screenshot = ts.GetScreenshot();

    // Here just input the name you want your screenshot to have, with path
    var screenshotPath = ScreenShotFolder + @"\" + _screenshotcount + ".bmp";
        screenshot.SaveAsFile(screenshotPath);

    // I've introduced a variable to keep track of the screenshot count (optional)
    return (ScreenShotFolder.Substring(_reportRoot.Length) +"/"+ _screenshotcount + ".bmp");
}

框架中的调用示例

  public void BlockAccount()
    {
        try
        {
            _blockAccBtn.Click();
            _confirmBtn.Click();
            ExtentReportGenerator.LogStep(Status.Info, "Blocking Account");
        }
        catch (NoSuchElementException)
        {
            ExtentReportGenerator.LogStep(Status.Fail, "Could not find block button", true);
        }
    }

使用整个系统的NunitTest

 [TestCase, Order(1)]
    public void CanBlockCard()
    {
        //Creates a new test in the report
        ExtentReportGenerator.Test = ExtentReportGenerator.Extent.CreateTest(GetCurrentMethod());

        //Each one of these calls to the framework has logged steps
        CashlessPages.CashlessAffiliationsPage.AccessAccount(1, 1);
        CashlessPages.CashlessAccountsPage.BlockAccount();
        Assert.IsTrue(CashlessPages.CashlessAccountsPage.IsAccBlocked());
    }

生成的报告示例

Example of generated Report ExtentReports

希望这有帮助