如果你正在HTTP上使用安全套接字层(SSL)来加密用户数据,并且想通过编程来测试你的Web应用,你会发现此技术并非广为人知。在本月的栏目中,我将示范如何建立一个 SSL 测试服务器,然后编写测试自动化代码,并通过一个简单而又具有代表性的 Web 应用来验证。
Microsoft .NET环境提供了强有力的测试工具来测试采用SSL安全机制的ASP.NET Web应用程序。为了说明它们的使用方法,我将建立一个SSL服务器,并通过一个短小精悍的程序来示范如何自动测试基于HTTPS的Web例子应用程序。虽然 在这方面已有个别技术非常经典并且有很好的文章介绍,但在与我的许多同事交流中,我发现对测试 SSL Web 应用的整体过程的把握相对来说并不是很到位。用两幅屏幕截图最能说明问题。Figure 1展示了一个简单但是很有代表性的ASP.NET的Web应用。
Figure 1 一个 ASP.NET Web 应用
注意我使用的是 SSL 连接,因为我要在 Internet 上传送敏感的信用卡信息(注意是"https://"协议,并且在状态栏有一个小锁 图标)。
现在,让我们想象一下用手工方式是如何测试这个应用程序的。我们必须在Web页上输入成百甚至上千的用户名,数量以及信用卡号码,检查每一个确认码,针对预期的结果检查每行代码以确定结果是否正确,然后将这些结果记录在一些表格中,比如 Excel 电子表格或者文本文件中。整个过程耗时、低效、繁琐并且容易出错。
一个更好的方法是利用.NET框架的强大能力编写自动化测试例程,在程序中用 SSL 发送测试数据,然后针对预期的确认码来检查响应流,Figure 2 是一个控制台应用程序,它演示了上述的思路。
正像你看到的,自动化测试案例的基本做法与 Figure 1 中所示的手动测试是一样的。用户名称是"Smith",物品数量是"3",信用卡号是"1234 5678 9012", 通过基于 SSL 的 HTTP 加密后被提交到Web应用,测试程序获取 HTTP 响应流,并搜索响应流中的“C3-57-ED-DA-8B”,这时,在该响应流中找到期望的确认码,所以测试 自动化程序记录下“PASS”结果。在本栏目后面的三个章节中,我将讲解产生如 Figure 2 所示输出的测试程序。演示如何建立一个接受 SSL 请求的测试服务器,并讨论如何扩展本文呈现的技术来满足你自己的需要。
在我讲解如何编写测试自动化程序之前,让我们首先快速回顾一下本文的例子Web应用程序。正如你在 Figure 1 看到的一样,有三个 TextBox 控件,我使用 Visual Studio .NET 缺省的ID:TextBox1、TextBox2、TextBox3 来命名它们。它们分别对应着用户名称、物品数量以及信用卡帐号。 Label5 控件 用于显示应用程序信息。当我编写测试自动化程序时,我必须要知道这些信息,此外还需要知道订单确认码的产生方式,以便我能确定我的测试案例期望的结果。以下是用于测试此Web应用程序的核心代码:
if (TextBox3.Text.Length == 0)
Label5.Text = "Please enter credit card number";
else
{
byte input = Encoding.Unicode.GetBytes(TextBox3.Text);
byte hashed;
using(MD5 m = new MD5CryptoServiceProvider())
{
hashed = m.ComputeHash(input);
}
Label5.Text = "Thank you. Your confirmation code is " +
BitConverter.ToString(hashed).Substring(0,14);
}
为了模拟确认码的生成,我只利用了用户输入的信用卡号,用它产生一个MD5散列,然后截取散列值最左边的14个字符。在实际的生产系统中,你可能会用更为复杂的方式来产生确认码。在这种情况下确定预期的结果可能会更具技巧性。不过有一点要特别注意,你不能通过调用被测试的程序来确定预期结果,因为这将破坏测试的有效性,因为你本来就是要检查