我正在尝试自动化我们的一个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/