Ink*_*980 4 c# automated-tests data-driven-tests coded-ui-tests visual-studio-2012
我正在尝试为我们的一个Web应用程序自动化一些测试,我需要知道如何使我的Coded UI项目从CSV文件中读取数据.让我们说我想测试登录屏幕.我的CSV文件将包含一些用户名和密码.我希望我的Coded UI测试能够读取这些登录详细信息并循环遍历它们以对每组数据运行测试.
Web上有许多关于数据驱动编码UI测试的教程.使用CSV文件进行数据驱动的基本步骤如下.
下面解释具有一些变化的详细步骤.
Visual Studio 2010有一个"数据源向导",可以执行其中一些步骤.Visual Studio版本2012和2013没有向导,因此所有步骤都必须手动完成.
创建CSV文件
一种方法是在电子表格中创建文件,然后将其另存为逗号分隔值.另一种方法是使用文本编辑器并只写入文件.我使用电子表格程序来处理大数据源文件,使用文本编辑器来创建小文件.某些编辑器在文件的开头添加一个字节顺序标记(BOM),该标记将添加到CSV的第一个字段名称中,该字段名称似乎使该字段不可读.有关BOM的更多信息,请参见此页面.
将CSV文件添加到项目中
使用解决方案资源管理器中的上下文菜单,选择添加 - > 现有项.然后浏览到所需的文件.请注意,文件过滤器可能需要更改为*.*或*.csv.
确保已部署CSV文件
从解决方案资源管理器中打开CSV文件的属性面板.将" 复制到输出目录 "设置为" 如果更新则复制 "或" 始终复制 ".有些文档建议" 如果更新则复制 ",但我更喜欢" 始终复制 ",因为偶尔没有按照我的预期复制文件.两种复制方法之间的区别是一点磁盘空间和一点时间,但磁盘通常很大,复制时间通常很小.在我看来,通过确保正确复制文件,任何节省都远远超过了.
将CSV文件添加为单个测试的数据源
用[TestMethod]正确的数据源行替换该属性.此Microsoft博客显示了几种可能的数据源文件类型的替换代码.对于CSV使用:
[DataSource("Microsoft.VisualStudio.TestTools.DataSource.CSV",
"|DataDirectory|\\data.csv", "data#csv",
DataAccessMethod.Sequential), DeploymentItem("data.csv"),
TestMethod]
Run Code Online (Sandbox Code Playgroud)
请注意,文件名出现三次,一个副本有一个#而不是一个..我没有找到有关Datasource(...)属性的不同字段的任何有用文档,因此无法进一步建议如何为非CSV数据源选择值.
|DataDirectory|上面的部分将替换为运行测试时部署文件的目录.如果需要,字符串引号中的整个文件名可以替换为文件的完整路径名.
阅读CSV字段并在测试中使用它们
编码的UI记录和生成工具创建的类包含保存在文本框中输入或在断言中使用的值的字段.每个action方法都有一个...Params类,每个assert方法都有一个...ExpectedValues类,其中...是方法名.这些字段的默认值是记录测试时使用的值.在调用action或assertion方法之前,可以通过赋值覆盖记录的值.可以访问数据源当前行的字段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();
}
Run Code Online (Sandbox Code Playgroud)
在...Params和...ExpectedValues类允许测试,测试运行时创造价值.例如,如果EnterValue方法还想将明天的日期写入字段,我们可以在调用之前添加以下行:
this.UIMap.EnterValueParams.UIItem2TextSendKeys = DateTime.Now.AddDays(1).ToString("yyyy-MM-dd");
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
21553 次 |
| 最近记录: |