用数据文件替换记录值 - 数据驱动测试

Replacing recorded values with Data file - Data driven testing

我在 visual Studio 2013 年录制了一个简单的编码 UI 测试。它的作用是;

现在,我希望使用 data.csv 文件来替换这 8 个值。我所做的所有搜索,我只能找到每个输入字段都有不同方法的选项,因此很容易找到和替换值。在我的例子中,1 个方法和 8 个字段。

我该怎么做?我在哪里进行更改,因为我的主文件如下所示:

我应该在何处进行哪些更改以使用 CSV 文件而不是我记录的手动值。

我的设计器文件代码如下几个输入字段:

// Type '123456789' in 'i' text box
uIIEdit.Text = this.createKundeParams.UIIEditText; 

// Type '{Tab}' in 'i' text box
Keyboard.SendKeys(uIIEdit, this.createKundeParams.UIIEditSendKeys, ModifierKeys.None);

// Type 'Jeff Hardy' in 'name_i' text box
uIName_iEdit.Text = this.createKundeParams.UIName_iEditText;

// Type '{Tab}' in 'name_i' text box
Keyboard.SendKeys(uIName_iEdit, this.createKundeParams.UIName_iEditSendKeys, ModifierKeys.None);

您可以将所有 8 个值放在 1 个 csv 行中,并将它们视为一个输入以传递给设置字段的方法,或者您可以更改方法以接受一个值和字段名称并设置字段价值

创建 CSV 文件。 将 CSV 文件添加到项目中。 确保已部署 CSV 文件。 添加 CSV 文件作为单个测试的数据源。 阅读 CSV 字段并在测试中使用它们。 下面解释了详细步骤,但有一些变化。

Visual Studio 2010 有一个“数据源向导”可以执行其中的一些步骤。 Visual Studio 2012 和 2013 版本没有向导,因此所有步骤都必须手动完成。

创建 CSV 文件

一种方法是在电子表格中创建文件,然后将其另存为逗号分隔值。另一种方法是使用文本编辑器并只编写文件。我使用电子表格程序处理大数据源文件,使用文本编辑器创建小文件。一些编辑器在文件的开头添加字节顺序标记 (BOM),该标记将添加到 CSV 的第一个字段名称,这似乎使该字段不可读。有关 BOM 的更多信息,请参阅此页面。

将 CSV 文件添加到项目中

使用解决方案资源管理器中的上下文菜单,select 添加 -> 现有项。然后浏览到所需的文件。请注意,文件过滤器可能需要更改为 . 或 *.csv.

确保 CSV 文件已部署

从解决方案资源管理器打开 CSV 文件的属性面板。将“复制到输出目录”设置为“更新时复制”或“始终复制”。一些文档建议“如果更新则复制”,但我更喜欢“始终复制”,因为有时文件没有像我预期的那样被复制。两种拷贝方式的区别是磁盘少space和时间少,但是磁盘一般大,拷贝的时间一般小。在我看来,任何节省都远远超过确保文件将被正确复制。

将 CSV 文件添加为单个测试的数据源

用正确的数据源行替换 [TestMethod] 属性。此 Microsoft 博客显示了几种可能的数据源文件类型的替换代码。对于 CSV 使用:

[DataSource("Microsoft.VisualStudio.TestTools.DataSource.CSV",
    "|DataDirectory|\data.csv", "data#csv",
    DataAccessMethod.Sequential), DeploymentItem("data.csv"),
    TestMethod]

请注意,文件名出现了三次,其中一个副本有一个 # 而不是 .. 我没有找到任何关于 Datasource(...) 属性的不同字段的有用文档,所以无法进一步建议如何为非 CSV 数据源选择值。

|数据目录|以上部分替换为测试时部署文件的目录运行。如果需要,字符串引号中的整个文件名可以替换为文件的完整路径名。

读取 CSV 字段并在测试中使用它们

编码 UI 记录和生成工具创建 classes,其字段包含输入到文本框中或在断言中使用的值。每个操作方法都有一个 ...Params class,每个断言方法都有一个 ...ExpectedValues class,其中 ... 是方法名称。这些字段的默认值是记录测试时使用的值。在调用操作或断言方法之前,可以通过赋值覆盖记录的值。从TestContext.DataRow[...].

访问数据源当前行的字段

假设一个编码 UI 测试有一个将文本写入屏幕的两个字段的 EnterValue 方法,它还有一个断言一个字段的 CheckResult 方法。那么测试方法可能会写成下面这样。

[DataSource...
    TestMethod]
public void CodedUITestMethod1()
{
    this.UIMap.EnterValueParams.UIItem0TextSendKeys = TestContext.DataRow["ValueOne"].ToString();
    this.UIMap.EnterValueParams.UIItem1TextSendKeys = TestContext.DataRow["ValueTwo"].ToString();
    this.UIMap.EnterValue();

    this.UIMap.CheckResultExpectedValues.UIItem0TextDisplayText = TestContext.DataRow["Result"].ToString();
    this.UIMap.CheckResult();
}

...Params 和...ExpectedValues classes 允许测试在测试 运行s 时创建值。例如,如果 EnterValue 方法还想将明天的日期写入字段,我们可以在调用它之前添加以下行: