【问题标题】:pass test case parameters using nunit console使用 nunit 控制台传递测试用例参数
【发布时间】:2016-09-29 11:13:41
【问题描述】:

我正在使用 Nunit数据驱动测试 方法开发测试。我有带有 2 个参数的测试方法:xlsx 文件的路径和工作表名称。 当我在 TestCase 属性中传递参数时,它在 Visual Studio 中完美运行,例如,当我想运行 3 个测试用例时,必须编写如下内容:

[TestCase(@"pathToFile.xlsx", "TestCase1")]
[TestCase(@"pathToFile.xlsx", "TestCase2")]
[TestCase(@"pathToFile.xlsx", "TestCase3")]
public void performActionsByWorksheet(string excelFilePath, string worksheetName)
{    
    //test code
}

我想运行我的测试用例并使用 Nunit 控制台 传递参数(不要在代码中编写参数)。

有可能实现吗?

【问题讨论】:

    标签: c# nunit data-driven-tests nunit-console


    【解决方案1】:

    如果你使用的是 NUnit 3,你可以使用 TestContext.Parameters 属性:

    [Test]
    public void performActionsByWorksheet()
    {
        string excelFilePath = TestContext.Parameters["excelFilePath"];
        string worksheetName = TestContext.Parameters["worksheetName"];
        TestContext.WriteLine(excelFilePath);
        TestContext.WriteLine(worksheetName);
    }
    

    和 --params 命令行参数:

    nunit3-console.exe path/to/your/test.dll --params=excelFilePath=testPath;worksheetName=testName
    

    【讨论】:

    • 非常感谢!它适用于一组参数。如果我想像我的问题一样运行更多测试用例怎么办?
    • @kotoj,将它们作为分隔字符串传递给一个参数
    • 你能帮我用 AutoRun().Execute() 做这件事吗?我使用类别属性作为.Execute(new String[] { "--where= cat=testname"}); 运行测试现在如何在其中添加--params
    • 从 3.10 开始,您应该切换到 --testparam:Key=Value 而不是 --params。这是为了避免半列的问题,例如在连接字符串中。
    【解决方案2】:

    我找到了许多测试用例的解决方法,使用TestCaseSource
    测试代码:

    [Test, TestCaseSource("testData")]
    public void performActionsByWorksheet(string excelFilePath, string worksheetName)
    {
        Console.WriteLine("excel filePath: {0}", excelFilePath);
        Console.WriteLine("worksheet Name: {0}", worksheetName);
    }
    

    从 csv 文件中获取测试数据:

    static object[] testData()
    {
        var reader = new StreamReader(File.OpenRead(@"TestCases.csv"));
        List<object[]> rows = new List<object[]>();
    
        while (!reader.EndOfStream)
        {
            var line = reader.ReadLine();
            var values = line.Split(',');
            rows.Add(values);
        }
    
        return rows.ToArray<object[]>();                        
    }
    

    我将所有要运行的测试用例(文件路径和工作表名称)存储在 csv 文件中。也许不是最好的解决方案,但我实现了我的目标——不在代码中编写参数。

    【讨论】:

      猜你喜欢
      • 2015-03-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多