lui*_*cam 6 c# csv selenium qa xunit
有没有办法XUnit
使用CSV
文件作为数据源运行数据驱动测试?我试过了Cavity.Data.XUnit
,但它不再与最新版本的XUnit
. 到目前为止,我只能使用 Excel 文件来实现这一点,但我需要将它们更改为CSV
。
任何帮助是极大的赞赏。
一个例子:
[Theory]
[ExcelData(@"Settings\TestFileParam.xls", "Select url, username, password, from TestData")]
//^Replace with a CSV file instead
public void Tester_Method(string url, string username, string password)
{
//Code reading the data from CSV
Assert.True(something);
}
Run Code Online (Sandbox Code Playgroud)
您需要创建一个自定义 xUnit.Sdk.DataAttribute。这是一个将以这种形式读入数据的示例。
MyCsv.csv
sep=,
csvRowOne,csvRowTwo,csvRowThree
15,"Just A Test","Apples are Red"
Run Code Online (Sandbox Code Playgroud)
然后你会这样称呼它:
[Theory]
[CsvData(@"C:\MyCsv.csv")]
public void TestWithCSVData(int csvRowOne, string csvRowTwo, string csvRowThree)
Run Code Online (Sandbox Code Playgroud)
它只解析字符串和整数,但您可以扩展 ConvertParameter 方法以执行更多操作。
CsvDataAttribute.cs
[AttributeUsage(AttributeTargets.Method, AllowMultiple = false, Inherited = false)]
public class CsvDataAttribute : DataAttribute
{
private readonly string _fileName;
public CsvDataAttribute(string fileName)
{
_fileName = fileName;
}
public override IEnumerable<object[]> GetData(MethodInfo testMethod)
{
var pars = testMethod.GetParameters();
var parameterTypes = pars.Select(par => par.ParameterType).ToArray();
using (var csvFile = new StreamReader(_fileName))
{
csvFile.ReadLine();// Delimiter Row: "sep=,". Comment out if not used
csvFile.ReadLine(); // Headings Row. Comment out if not used
string line;
while ((line = csvFile.ReadLine()) != null)
{
var row = line.Split(',');
yield return ConvertParameters((object[])row, parameterTypes);
}
}
}
private static object[] ConvertParameters(IReadOnlyList<object> values, IReadOnlyList<Type> parameterTypes)
{
var result = new object[parameterTypes.Count];
for (var idx = 0; idx < parameterTypes.Count; idx++)
{
result[idx] = ConvertParameter(values[idx], parameterTypes[idx]);
}
return result;
}
private static object ConvertParameter(object parameter, Type parameterType)
{
return parameterType == typeof(int) ? Convert.ToInt32(parameter) : parameter;
}
}
Run Code Online (Sandbox Code Playgroud)
小智 2
xUnit 没有内置这种确切的功能,但它确实具有针对用例类型的扩展点。xUnit 的大部分内容都可以替换和定制,新的测试用例数据源是最常见的数据源之一。
这Xunit.Sdk.DataAttribute
是使用的扩展点ExcelDataAttribute
。
典型的实现看起来像这样
public class CsvDataAttribute : DataAttribute
{
readonly string fileName;
public CsvDataAttribute(string fileName)
{
this.fileName = fileName;
}
public override IEnumerable<object[]> GetData(MethodInfo testMethod)
{
//Parse CSV and return an object[] for each test case
}
}
Run Code Online (Sandbox Code Playgroud)
的实现ExcelDataAttribute
可以在这里找到。https://github.com/xunit/samples.xunit/blob/885edfc2e84ec4934cd137a985c3b06dda043ab5/ExcelDataExample/ExcelDataAttribute.cs
归档时间: |
|
查看次数: |
5985 次 |
最近记录: |