Ham*_*359 2 selenium nunit webdriver
是否可以从外部数据源(如Excel电子表格,CSV文件或数据库)获取TestCaseAttribute的值?即拥有一个.csv文件,每个测试用例包含1行数据,并一次将该数据传递给NUnit.
这是我想要使用它的具体情况.我目前正在将一些功能从一个系统合并到另一个系统.这几乎只是从旧系统到新系统的复制和粘贴过程.不幸的是,被移动的代码不仅没有任何测试,而且不是以可测试的方式编写的(即与数据库和其他代码紧密耦合.)花时间使代码可测试是不可能的,因为它是大混乱,我的时间紧迫,整个功能计划在接下来的6-9个月内从头开始重新编写.但是,由于我不喜欢不对代码进行任何测试的想法,我将使用WebDriver创建一些简单的Selenium测试来通过UI测试页面.虽然这并不理想,但总比没有好.
有问题的页面有大约10个输入值和大约20个值,我需要在计算完成后断言,其中包含大约30个我想要测试的有效值组合.我已经将数据放在电子表格中,因此能够简单地将其拉出来而不必在Visual Studio中重新键入它是一件好事.
我终于能够使用NUnit的TestCaseSource属性完成我想要的任务.代码看起来有点难看,但它的工作原理.
下面是一个从.csv文件中拉取数据并将其传递给测试方法的示例.该测试用于简单计算器的Add方法,该计算器采用两个整数,将它们相加并返回总和.
用于从文件加载测试数据的类.
public class TestData
{
public int number1 { get; set; }
public int number2 { get; set; }
public int sum { get; set; }
public static IEnumerable TestCases
{
get
{
string inputLine;
using(FileStream inputStream =
new FileStream("C:\\Code\\TestData\\TestData.csv",
FileMode.Open,
FileAccess.Read))
{
StreamReader streamReader = new StreamReader(inputStream);
while((inputLine = streamReader.ReadLine()) != null)
{
var data = inputLine.Split(',');
yield return new TestData {
number1 = Convert.ToInt32(data[0])
,number2 = Convert.ToInt32(data[1])
,sum = Convert.ToInt32(data[2])
};
}
streamReader.Close();
inputStream.Close();
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
与实际测试类别:
[TestFixture]
public class CalculatorTests
{
[Test]
[TestCaseSource(typeof(TestData), "TestCases")]
public void AddTwoNumbers(TestData data)
{
int sum = Calculator.Add(data.number1, data.number2);
sum.ShouldEqual(data.sum);
}
}
Run Code Online (Sandbox Code Playgroud)
TestData.csv的内容
4,4,8
15,20,35
8,8,16
5,5,10
42,13,55
Run Code Online (Sandbox Code Playgroud)
修改TestData类中的get属性以从任何所需的数据源中提取数据(即数据库,Web服务,Excel ......)应该相当简单.
| 归档时间: |
|
| 查看次数: |
2582 次 |
| 最近记录: |