在自动化Web活动时,面临着多种选择,包括免费的开源工具和商业工具。这些解决方案通常分为两类:一类是通过捕获浏览器活动(例如点击链接、填写表单、在浏览器地址栏中输入)来实现自动化;另一类则是通过捕获HTTP请求信息来实现自动化,通常通过本地代理来实现。本文介绍的解决方案采用的是后一种方法,但使用的是HTTP头/请求捕获工具,而不是代理。
那么,这种解决方案是否值得考虑呢?这取决于需求。如果只需要自动化其他工具能够完成的任务,或者需要这个解决方案没有提供的功能,那么应该使用其他工具。然而,在某些情况下,那些工具无法解决的问题,这个解决方案却能够解决。例如,自动化涉及Java小程序或Flash内容的Web活动,这些内容会发起HTTP请求。更多细节请参见“背景”部分。此外,这个解决方案还提供了一些额外的功能,这些功能在文章末尾的“功能”部分有介绍。
提出的这个解决方案源于一个愿望:自动化一项特定的任务。需要在工作场所配置系统,以便通过自动化测试系统进行测试。那么,配置也应该自动化吗?这就是想法,也是开始做的事情。问题是,系统没有提供直接可自动化的命令行配置接口。然而,从一位工程师那里了解到,可以通过与系统Web服务器上的ASP页面进行交互来完成配置,这些页面执行配置。这是一个开始的线索,但随后发现没有主API文档,而且Web配置界面加载了一堆Java小程序,它们作为用户界面。经过一些分析,发现这些小程序通过HTTP请求GET和POST与ASP页面通信。所以,找到了一种解决方案。
使用Perl,可以创建一个用户代理来执行与浏览器相同的操作,但需要一种方法来动态地自动化页面请求,基于浏览器活动生成Perl脚本,避免手动编写自动化脚本。这听起来可能很简单,对吧?可以自己做到这一点,事实上也做到了,或者在Web上找到现有的解决方案。嗯,这就是遇到问题的地方。
在Web上搜索现有的解决方案,并尝试了一些,但它们都没有解决问题。那些通过捕获浏览器活动来实现自动化的工具——例如点击链接、填写表单、在浏览器地址栏中输入——没有捕获到Java小程序的HTTP活动。那些通过代理捕获HTTP请求信息的工具无法处理从代理到浏览器转发Java小程序。它太慢了,似乎永远也加载不完,所以在它加载完成之前就放弃了,假设它能够加载完成。测试过的最好的软件替代品是MaxQ。在本文后面的一个帖子中发布了一些尝试过的现有解决方案的评论。
脚本代码不到200行,如果熟悉Perl和libwww,那么它几乎是自解释的。因此,可以自己阅读代码,如果有问题可以联系。将重点介绍如何使用脚本。
包含的脚本源代码是编写的脚本的通用版本。它被设计为与Internet Explorer的ieHTTPHeaders工具一起工作。它可以与其他HTTP分析工具一起工作,但可能需要一些编辑以匹配其他工具的HTTP跟踪格式。它只设计用于发起HTTP GET和POST请求并接收响应。HTTP认证、HTTPS支持、高级Cookie和会话管理、错误检查、响应数据解析以及将响应保存到文件或数据库将需要手动定制。如果熟悉Perl,可以很容易地定制它。请参阅Web上的Perl libwww库文档以获取参考。
要使用这个解决方案,首先需要下载并安装ieHTTPHeaders for Internet Explorer或类似的工具,如Mozilla/Firefox的livehttpheaders。然后启动浏览器。转到“查看”->“资源管理器栏”->“ieHTTPHeaders v1.6”或类似内容。这将打开工具。现在,只需执行希望自动化的Web浏览活动。当这样做时,HTTP请求头将显示在工具中。完成后,右键单击工具的显示区域,然后选择“保存”以将HTTP跟踪保存到文件。使用脚本ParseHTTPTrace.pl将跟踪的HTTP请求解析为动态生成的Perl用户代理脚本。使用解析脚本的格式是:
ParseHTTPTrace.pl [trace input file path] [optional generated output script path]
默认输出脚本写入C:\Temp\WebAutomaton.pl。完成后,只需运行WebAutomaton.pl,它应该就能完成想要的操作。
现在支持livehttpheaders,但不会在本文中介绍如何使用它。它的工作原理与ieHTTPHeaders非常相似。要将其与livehttpheaders一起使用,需要使用以下工具将livehttpheaders跟踪文件转换为ieHTTPHeaders格式:
lhhTraceConvert.pl [trace input file path] [optional generated output script path]
如果没有指定,默认输出是C:\Temp\outTrace.txt。然后,可以运行跟踪文件通过原始解析脚本来获得所需的Perl输出脚本。对于不涉及浏览器的应用程序,自动化将需要一个网络协议分析器,如Wireshark(以前称为Ethereal)来生成HTTP跟踪文件。
注意:脚本是在ActivePerl v5.8.7下编写和测试的,并且仅与iehttpheaders工具一起使用。它应该适用于大多数Perl版本在任何平台上。可以自行承担风险使用它;不能保证它是无错误的。
ieHTTPHeaders、livehttpheaders、Wireshark或其他HTTP跟踪/分析工具。代理也可以用于同样的事情,但根据经验,它与Java小程序等不太兼容。请注意,使用iehttpheaders或livehttpheaders以外的任何工具都需要修改脚本以支持该工具,以便以正确的格式解析头。
Perl运行时,任何OS平台,推荐5.8.7+版本
Perl LWP::UserAgent和HTTP::Request模块(libwww的一部分)已安装并正常工作
可以用来自动化涉及媒体丰富应用程序(如Java小程序、Flash内容、其他插件、AJAX和Web服务)发起HTTP请求的Web活动。
输出脚本可以编译成可执行文件——使用第三方工具,如免费的Perl归档“PAR”包、perl2exe或ActiveState的工具——这样最终用户就可以运行它们而无需安装任何东西。
脚本完全可定制,包括解析器/生成器脚本和输出脚本,都可以用Perl定制。
脚本独立运行,不需要额外的软件。只需要Perl和LWP模块。HTTP分析工具仅用于捕获HTTP请求以供Perl解析器脚本解析。
脚本运行自动化相当快。
使用众所周知且有文档记录的Perl LWP模块。
对于测试Web应用程序,它可以绕过自动化网站GUI的需求,以便自动化测试。
对于自动化100多个HTTP请求,非常有用。知道一个单一的Web电子邮件阅读会话可能会占用100多个HTTP请求吗?想象一下手动编写脚本!
解决方案无缝工作,就像MS Office宏录制和回放一样,只需要手动编辑以进行定制和性能调整。请注意,无缝执行假设所需的工具已设置并正常工作。
自动化涉及Java小程序、Flash内容等的Web浏览器(HTTP)活动,这些活动可能很难自动化。也可以作为不涉及测试GUI交互的GUI配置自动化的替代方案。
自动化基于Web的配置,特别是对于永远不会改变的配置。
自动化网站功能测试,即HTTP请求输入和HTTP响应输出功能测试。
自动化网站负载测试,即在1个工作站上运行许多脚本,或从多个工作站对指定的目标服务器运行。
自动化基于REST或REST-CSV的Web服务测试;这与网站测试非常相似。