c# - 如何使用从.csv文件读取的数据多次运行测试(数据驱动)

标签 c# visual-studio-2012 automated-tests coded-ui-tests data-driven-tests

我正在尝试自动化我们的一个web应用程序的一些测试,我需要知道如何使我的编码ui项目从csv文件读取数据。假设我想测试登录屏幕。我的csv文件将包含一些用户名和密码。我希望我的编码ui测试读取这些登录详细信息并循环它们,以便对每组数据运行测试。

最佳答案

web上有很多关于数据驱动编码ui测试的教程。使用csv文件驱动数据的基本步骤如下。
创建csv文件。
将csv文件添加到项目中。
确保已部署CSV文件。
添加csv文件作为单个测试的数据源。
阅读csv字段并在测试中使用它们。
下面将解释详细的步骤以及一些变化。
visual studio 2010有一个“数据源向导”,可以执行这些步骤。Visual Studio 2012和2013版没有向导,因此所有步骤都必须手动完成。
创建csv文件
一种方法是在电子表格中创建文件,然后将其保存为逗号分隔的值。另一种方法是使用文本编辑器编写文件。我使用电子表格程序来处理大数据源文件,使用文本编辑器来创建小文件。一些编辑器在文件的开头添加字节顺序标记(bom),该标记将添加到csv的第一个字段名中,这似乎会使该字段不可读。有关物料清单的更多信息,请参见this page
将csv文件添加到项目中
在解决方案资源管理器中使用上下文菜单,选择Addio>现有项。然后浏览到所需的文件。注意文件过滤器可能需要更改为*.**.csv
确保CSV文件已部署
从解决方案资源管理器中打开csv文件的“属性”面板。将“复制到输出目录”设置为“更新时复制”或“始终复制”。有些文档建议“更新时复制”,但我更喜欢“总是复制”,因为有时文件没有按我的预期复制。这两种复制方法的区别是磁盘空间小,时间短,但磁盘通常很大,复制时间通常很短。在我看来,任何节省下来的钱都远远超过确保文件被正确复制。
添加csv文件作为单个测试的数据源
用正确的数据源行替换[TestMethod]属性。这个Microsoft blog显示了几种可能的数据源文件类型的替换代码。对于CSV使用:

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

注意,文件名出现三次,一个副本有一个#而不是一个.。我没有找到任何关于Datasource(...)属性的不同字段的有用文档,因此无法进一步建议如何为非csv数据源选择值。
上面的|DataDirectory|部分被测试运行时部署文件的目录所替换。如果需要,字符串引号中的整个文件名可以替换为文件的完整路径名。
读取csv字段并在测试中使用它们
编码的ui记录和生成工具创建带有字段的类,这些字段保存在文本框中输入的值或在断言中使用的值。每个action方法都有一个...Params类,每个assert方法都有一个...ExpectedValues类,其中...是方法名。这些字段的默认值是记录测试时使用的值。在调用操作或断言方法之前,记录的值可以被赋值覆盖。从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类允许测试在运行测试时创建值。例如,如果EnterValue方法还想将明天的日期写入一个字段,我们可以在调用它之前添加以下行:
this.UIMap.EnterValueParams.UIItem2TextSendKeys = DateTime.Now.AddDays(1).ToString("yyyy-MM-dd");

关于c# - 如何使用从.csv文件读取的数据多次运行测试(数据驱动),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23469100/

相关文章:

c# - DbNull.Value和DbNull.Value.ToString()之间的区别

c# - Thread.Yield 是确定多线程应用程序 C# 中是否存在错误的标准方法吗

c# - WebRequest 无法正确下载大文件(~ 1 GB)

c++ - glfw 和 MSVS 2012 的链接器错误

c# - Visual Studio 停止运行我的程序

python - 如果一个失败了,如何跳过类里面的其余测试?

c# - 如何在 C# 中的 SendGrid 电子邮件中添加多个类别

visual-studio - 如何使 Visual Studio 2012 将 VSIX 部署到 Visual Studio 2010 实验实例?

testing - 是否有实现持续改进(也称为软件强化)流程的正确方法?

authentication - 使用 TestCafe 登录后如何重定向到使用 testcafe 的另一个页面