到目前为止,net自动化测试之道中基于反射的UI自动化测试这章也看完了,光看不实践,那作用就甚微。因此必须练习并思考总结。被测应用程序是书中那个例子。在我的自动化测试套件中会模拟以下用户行为:加载被测form,改变form的位置、标题、大小,获取form的一些属性并打印,在TextBox中输入值,从下拉框中选择值,点击按钮,验证结果。
在实践的过程中,可能会遇到的问题及解决方法:1、加载form不显示(其实是因为显示太快了,没看到,让线程sleep一段时间就可以)。2、记得添加System.Windows.Forms,System.Drawing的引用。
书中讲的很散,我们不可能每讲一节就创建一个项目,那样太麻烦。因此所有的操作都在一个项目中完成。并且创建一个ReflectionHelp类,将多个章节都要用到的步骤封装成方法,如每次都会用到加载被测应用程序,因此我们可以创建一个LaunchApp方法,封装加载被测应用程序的步骤。另外,每做一个小测试,我们必定要用被测程序的名称和路径,如基于反射的测试中,Form的名称和Form路径应该每个小测试中都会用到,每次都要写Form名称和Form路径的变量,太麻烦了,而且如果Form的名称和路径改变的话,所有小测试都要改,因此我在ReflectionHelp类中创建两个常量(C#只有内置类型可以声明为const),这样要用到Form名称和路径的时候就引用这个类中的这两个常量。而且要变,只要变这两个常量的值,不影响其他的小测试。当然方法不唯一,我们可以声明两个属性,通过get方法获取值,set方法改变值,这样更灵活。
本例子在vs2010中运行正常。
大体上可以分为以下步骤:
1、创建被测应用程序ReflectionAUT
2、创建测试套件ReflectionTest
2.1、创建ReflectionHelp类
2.2、在main函数中模拟用户行为
首先创建被测应用程序ReflectionAUT
点击button1的代码:
private void button1_Click(object sender, EventArgs e)
{
string tb =textBox1.Text;
string cb =comboBox1.Text;
if (tb== cb)
{
listBox1.Items.Add("Result is tie");
}
else if (tb == "paper" && cb == "rock" || tb == "rock" && cb == "scissors" || tb == "scissors" && cb == "paper")
{
listBox1.Items.Add("The TextBox wins");
}else
listBox1.Items.Add("The ComboBox wins");
}
创建一个名为ReflectionTest的控制台项目,新建一个名为ReflectionHelp的类:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Threading;
using System.Reflection;
namespace ReflectionTest
{
class ReflectionHelp
{
public const string formName = "ReflectionAUT.Form1";
public const string path = "..\\..\\..\\..\\ReflectionAUT\\ReflectionAUT\\bin\\Debug\\ReflectionAUT.exe";