【问题标题】:Map Testcase ID with Nunit使用 Nunit 映射测试用例 ID
【发布时间】:2017-08-13 01:39:55
【问题描述】:

我目前正在使用 Nunit 构建我的自动化框架,一切正常,我想做的最后一个改进是能够将我的自动化测试脚本映射到我的测试软件中的测试用例.

我对所有测试用例都使用了 TestRail。

我的理想情况是能够在 test rail 中用对应的 testcase ID 来装饰每个 test case,并且在 TestRail 中报告测试结果时,我可以只使用 Case id。目前我正在通过匹配测试名称/脚本名称来做到这一点。

示例 -

[Test]
[TestCaseId("001")]
    public void NavigateToSite()
    {
        LoginPage login = new LoginPage(Driver);
        login.NavigateToLogInPage();
        login.AssertLoginPageLoaded();
    }

然后在我的拆解方法中,它会像 -

[TearDown]
public static void TestTearDown(IWebDriver Driver)
    {
       var testcaseId = TestContext.CurrentContext.TestCaseid;
       var result = TestContext.CurrentContext.Result.Outcome;

      //Static method to report to Testrail using API
      Report.ReportTestResult(testcaseId, result);
    }

我刚刚编写了 testcaseid 属性,但这正是我要寻找的。

[TestCaseId("001")]

如果它已经存在,我可能会错过它,或者我该如何扩展 Nunit 来做到这一点?

任何帮助都会很棒。

谢谢。

【问题讨论】:

    标签: c# unit-testing automated-tests nunit


    【解决方案1】:

    您可以使用 NUnit 提供的PropertyAttribute

    例子:

    [Property("TestCaseId", "001")]
    [Test]
    public void NavigateToSite()
    {
    ...
    }
    
    [TearDown]
    public void TearDown()
    {
        var testCaseId = TestContext.CurrentContext.Test.Properties["TestCaseId"];
    }
    

    此外,您可以创建自定义属性属性 - 参见 NUnit link

    【讨论】:

    • 感谢 Sulo,这正是我想要的。我从来没有遇到过 property 属性。
    【解决方案2】:

    多年来,我一直建议人们不要这样做:将测试管理代码混入测试本身。这明显违反了单一责任原则,并且给维护测试带来了困难。

    另外,TearDown 中呈现的结果可能不是final的问题。例如,如果您在测试中使用了[MaxTime],并且超过了指定的时间,您的成功测试将变为失败。其他几个内置属性以这种方式工作,当然总有可能是用户创建的属性。 TearDown 的目的是清理您的代码,而不是作为创建报告或测试管理系统的跳板。

    也就是说,对于旧版本的 NUnit,人们养成了这样做的习惯。这部分是因为 NUnit 插件(我们设计的方法)编写起来相当复杂。问题也更少,因为 NUUnit V2 在测试方面的可扩展性显着降低。在 3.0 中,我们提供了一种创建测试管理功能的方法,例如对 NUnit 引擎的扩展,我建议您考虑使用该工具,而不是将它们与测试代码混合。

    一般的方法是创建一个属性,如 Sulo 的回答中所建议的那样,但是将您的 TearDown 代码替换为向 TestRail 报告结果的 EventListener 扩展。 EventListener 可以访问 XML 格式的所有结果信息——不仅仅是 TestContext 中可用的有限字段。您可以轻松提取任何需要转到 TestRail 的内容。

    编写TestEngine扩展的详细信息在这里:https://github.com/nunit/docs/wiki/Writing-Engine-Extensions

    请注意,如果您想在我们正在处理的 Visual Studio 适配器下使用扩展,则会出现一些未解决的问题。现在,您将获得使用控制台运行器的最佳体验。

    【讨论】:

    • 感谢@Charlie 的详细回复。我对 C#(一般开发)和自动化测试相当陌生,所以我正在学习如何做这些事情。我会采纳你的建议,并尝试让事件监听器开始工作。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-07-26
    • 1970-01-01
    • 1970-01-01
    • 2018-08-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多