测试自动化程序返回的结果和被测程序返回的结果是否一致。
测试自动化程序
这个测试自动化程序出奇的短小。其全部代码如 Figure 3 所示。尽管通过编程将数据提交给某个ASP.NET Web 应用程序的技术在 MSDN 库中已有文档描述,但是其中有几个技巧需要特别关注 。
我决定编写一个C#控制台程序作为我的测试程序。使用和被测程序一样的语言开发测试自动化程序通常是个好主意。不管怎么说,规划良好的设计并与.NET环境集成意味着你能安全地使用Visual Basic .NET或其它任何与.NET兼容的语言。一般来说,控制台程序类型最适合作为 测试自动化程序。虽然测试程序具备漂亮的用户界面能给用户留下深刻印象,但自动化测试程序是一个工具,而不是个人秀,此外,控制台程序也比GUI程序更容易集成到构建系统中。
测试自动化程序的整个结构相当简单。我将测试案例的数据保存在一个简单的文本文件中,每一行数据表示单个测试案例,以下是该测试案例文件的内容:
001:Smith:3:1234 5678 9012:C3-57-ED-DA-8B
002:Baker:2:1111 2222 3333:CE-81-8C-2F-94
003:Gates:9:9999 9999 9999:95-D6-05-31-8A
信息之间使用冒号(:)进行分隔。我也可以使用任何字符作为分隔符,但在实际的测试案例中避免出现含义模糊的字符很重要。第一个字段是测试案例编号,第二个字 是用户名称,第三个字段是数量,第四个字段是信用卡号码,第五个字段是预期的确认码。如果你不想使用文本文件,那么XML文件或 SQL 表 都是很好的可选方案。
我的测试自动化程序的基本结构与我的测试案例数据文件是相关在一起的。使用伪代码表示如下:
loop
read a test case line
parse out test case data
build up data to post to application
convert post data to a byte array
post the data
retrieve the response stream
if response stream contains expected confirmation code
log "pass" result
else
log "fail" result
end loop
我首先声明要用到的命名空间,这样可以避免用到每个.NET类和对象时都得写全称限定名。同时测试自动化程序将要涉及哪些类库功能也一目了然。 using System;
using System.Web;
using System.Text;
using System.Net;
using System.IO;
System.Web 命名空间包含了 HttpUtility 类,这个类可以将一些特殊字符转换为转义字符序列,因为缺省的控制台程序并不引用它的所在程序集,即 System.Web.dll,我们必须手动地添加对它的引用。System.Text 命名空间包含了一个Encoding 类,我要用它来处理字节数组 (Byte Array)。System.Net 命名空间包含了 HttpWebRequest类, 它是将数据提交到 ASP.NET Web 应用 的基础类。使用 System.IO 命名空间 是因为我要用数据流处理基于 SSL 的 HTTP 的响应,此外我还需要用它从文本文件中读取测试案例数据。注意:using 指令字 允许你在使用某个命名空间中的类型时,不必用长长的限定名。
接下来,在命令外壳中显示一段简单的启动信息后,声明测试自动化 程序要用到的一些关键变量: string url = "https://localhost/LitwareOrder/Order.aspx";
string viewstate = HttpUtility.UrlEncode(
"dDw0MDIxOTUwNDQ7Oz6E/7ailqx8X9zCUfpbWTPybfS4MA==");
string line;
string tokens;
StringBuilder data = new StringBuidler();
byte buffer;
string proxy = null;
上面大多数变量的目的从其命名一目了然,只有 viewstate 是个新变量,所以我会对之作简要解释。现在我打开测试案例文件,并且一行一行地读取:
using(FileStream fs = new FileStream(ar