编码 UI 测试用例代码生成
Coded UI Test cases code Generation
我有一个桌面应用程序,其中有 200 个具有不同输入参数的测试用例
现在的问题是每次我用不同的输入参数记录每个测试用例
有什么方法可以让我复制代码并更改参数,以便我的代码对于所有测试用例保持不变,只有输入参数发生变化
您可以通过批处理脚本通过命令行将事件参数用于应用程序,或者您可以创建一个函数来传递请求的参数。
在主要 header 你可以使用
主要(字符串事件参数[]);
其中字符串变量将是命令行中的事件参数
这里有几件事要解决。首先,您可以 运行 使用 the link above 中所述的数据驱动方法进行测试。
更重要的是,无论如何,在我看来,您是如何编写测试以便它们可以被数据驱动的,以及您究竟在测试什么,以至于您需要如此多的组合?
编写测试时,重要的是要有可重用的代码进行测试。我建议查看 Code First Scaffolding or Coded UI Page Modeling 之类的内容(我编写了页面建模内容)。使用这些方法,您的测试代码更易于维护和灵活(更容易手动更改)。这将允许极其简单的数据驱动测试。
public void WhenPerformingCalculation_ThenResultIsCorrect() {
// imagine calculator with two numbers and a sign
var testResult =
modelUnderTest.LeftSideNumber.SetValue(3) // set first number
.Operator.SetValue("*") // set sign
.RightSideNumber.SetValue(10) // set right number
.Evaluate.Click() // press evaluate button
.Result; // get the result
Assert.AreEqual(testResult, 30);
}
变成
public class CalculationParameters
{
public double LeftNumber {get;set;}
public string Operator {get;set;}
public double RightNumber {get;set;}
public double Result {get;set;}
public override string ToString(){ return $"{LeftNumber} {Operator} {RightNumber} = {Result}"; }
}
public void WhenPerformingCalculation_ThenResultIsCorrect() {
ICollection<CalculationParameters> parameters = getParameters();
List<Exception> exceptions = new List<Exception>();
foreach(CalculationParameters parameter in parameters)
{
try
{
var testResult =
modelUnderTest.LeftSideNumber.SetValue(parameter.LeftNumber) // set first number
.Operator.SetValue(parameter.Operator) // set sign
.RightSideNumber.SetValue(parameter.RightNumber) // set right number
.Evaluate.Click() // press evaluate button
.Result; // get the result
Assert.AreEqual(testResult, parameter.Result);
}
catch (Exception e)
{
exceptions.Add(new Exception($"Failed for parameters: {parameter}", e));
}
}
if(exceptions.Any()){
throw new AggregateException(exceptions);
}
}
其次,为什么您需要在给定的测试中测试如此多的输入/输出组合?如果您正在测试类似 "Given the login page, when supplying invalid credentials, then a warning is supplied to the user." 您真正需要测试多少个无效输入?将对有效凭证进行第二次测试,无需数据驱动。
我提醒您要小心,不要在 UI 中测试本应作为单元测试的内容。听起来您正在测试不同的输入组合以查看 UI 是否生成正确的输出,这可能应该是您的底层系统的单元测试。测试 UI 时,通常测试视图模型的绑定是否正确就足够了,而不是测试计算或其他服务器逻辑是否准确执行。
我提供的示例显示了我不会测试客户端的内容,除非该计算器仅存在于客户端(没有服务器端验证或有关计算的逻辑)。即使在那种情况下,我也可能会得到一个 javascript 测试 运行ner 来测试为我的计算器提供动力的视图模型,而不是使用编码 ui 来进行此测试。
您能否提供一些您正在测试的 input/output 组合的示例?
我有一个桌面应用程序,其中有 200 个具有不同输入参数的测试用例
现在的问题是每次我用不同的输入参数记录每个测试用例
有什么方法可以让我复制代码并更改参数,以便我的代码对于所有测试用例保持不变,只有输入参数发生变化
您可以通过批处理脚本通过命令行将事件参数用于应用程序,或者您可以创建一个函数来传递请求的参数。 在主要 header 你可以使用 主要(字符串事件参数[]);
其中字符串变量将是命令行中的事件参数
这里有几件事要解决。首先,您可以 运行 使用 the link above 中所述的数据驱动方法进行测试。
更重要的是,无论如何,在我看来,您是如何编写测试以便它们可以被数据驱动的,以及您究竟在测试什么,以至于您需要如此多的组合?
编写测试时,重要的是要有可重用的代码进行测试。我建议查看 Code First Scaffolding or Coded UI Page Modeling 之类的内容(我编写了页面建模内容)。使用这些方法,您的测试代码更易于维护和灵活(更容易手动更改)。这将允许极其简单的数据驱动测试。
public void WhenPerformingCalculation_ThenResultIsCorrect() {
// imagine calculator with two numbers and a sign
var testResult =
modelUnderTest.LeftSideNumber.SetValue(3) // set first number
.Operator.SetValue("*") // set sign
.RightSideNumber.SetValue(10) // set right number
.Evaluate.Click() // press evaluate button
.Result; // get the result
Assert.AreEqual(testResult, 30);
}
变成
public class CalculationParameters
{
public double LeftNumber {get;set;}
public string Operator {get;set;}
public double RightNumber {get;set;}
public double Result {get;set;}
public override string ToString(){ return $"{LeftNumber} {Operator} {RightNumber} = {Result}"; }
}
public void WhenPerformingCalculation_ThenResultIsCorrect() {
ICollection<CalculationParameters> parameters = getParameters();
List<Exception> exceptions = new List<Exception>();
foreach(CalculationParameters parameter in parameters)
{
try
{
var testResult =
modelUnderTest.LeftSideNumber.SetValue(parameter.LeftNumber) // set first number
.Operator.SetValue(parameter.Operator) // set sign
.RightSideNumber.SetValue(parameter.RightNumber) // set right number
.Evaluate.Click() // press evaluate button
.Result; // get the result
Assert.AreEqual(testResult, parameter.Result);
}
catch (Exception e)
{
exceptions.Add(new Exception($"Failed for parameters: {parameter}", e));
}
}
if(exceptions.Any()){
throw new AggregateException(exceptions);
}
}
其次,为什么您需要在给定的测试中测试如此多的输入/输出组合?如果您正在测试类似 "Given the login page, when supplying invalid credentials, then a warning is supplied to the user." 您真正需要测试多少个无效输入?将对有效凭证进行第二次测试,无需数据驱动。
我提醒您要小心,不要在 UI 中测试本应作为单元测试的内容。听起来您正在测试不同的输入组合以查看 UI 是否生成正确的输出,这可能应该是您的底层系统的单元测试。测试 UI 时,通常测试视图模型的绑定是否正确就足够了,而不是测试计算或其他服务器逻辑是否准确执行。
我提供的示例显示了我不会测试客户端的内容,除非该计算器仅存在于客户端(没有服务器端验证或有关计算的逻辑)。即使在那种情况下,我也可能会得到一个 javascript 测试 运行ner 来测试为我的计算器提供动力的视图模型,而不是使用编码 ui 来进行此测试。
您能否提供一些您正在测试的 input/output 组合的示例?