使用 Perl 进行 Web/HTTP 自动化
涵盖如何自动化涉及 Java Applet 或 Flash 内容进行 HTTP 请求以及标准 Web 自动化的 Web 活动
引言
市面上有不少解决方案都涉及 Web 自动化。有些是免费或开源的,有些则不是。这些解决方案大多属于以下两类:一种是通过捕获浏览器活动(例如,单击链接、填写表单、在浏览器地址栏键入内容)来自动化;另一种是通过捕获 HTTP 请求信息来自动化,通常是通过本地代理。本文介绍的解决方案遵循后一种方法,但使用的是 HTTP 标头/请求捕获工具,而不是代理。
那么,是什么让这个解决方案值得考虑呢?这取决于您的需求。如果您只需要自动化其他工具可以做的事情,或者您需要此解决方案未提供的更多功能,那么您应该使用其他工具。然而,在某些情况下,其他工具无法解决而此解决方案可以。例如,自动化涉及 Java applet 或 Flash 内容发出 HTTP 请求的 Web 活动。有关更多详细信息,请参阅背景部分。此外,此解决方案还具有在文章末尾的功能部分中提到的其他功能。
背景
我提出的解决方案源于一个自动化特定任务的愿望:我需要在将系统通过自动化测试系统进行测试之前配置这些系统。那么,配置是否也应该自动化呢?这就是我所想的,也是我着手去做的事情。麻烦的是,该系统没有提供直接可自动化的命令行配置界面。然而,我从负责配置界面的工程师那里得知,可以通过与系统 Web 服务器上的 ASP 页面进行交互来完成配置,这些页面负责执行配置。这是一个开始的线索,但当时没有主 API 文档,而且 Web 配置界面加载了一堆 Java applet 作为用户界面。经过一些分析,我发现这些 applet 通过 GET
和 POST
的 HTTP 请求与 ASP 页面进行通信。所以,我算是找到一个解决方案了。
使用 Perl,我可以创建一个用户代理来执行与浏览器相同的操作,但我需要一种动态自动化页面请求的方法,根据浏览器活动生成 Perl 脚本,并避免手动编写自动化脚本。这听起来可能足够简单,对吧?我可以自己完成,我确实也这样做了,或者在网上找一个现成的解决方案。好吧,问题就出在这里。
我在网上搜索了现有的解决方案并尝试了一些,但它们或多或少都没有解决我的问题。通过捕获浏览器活动进行自动化的工具(例如单击链接、填写表单、在浏览器地址栏键入内容)未能捕获 Java applet 的 HTTP 活动。通过代理捕获 HTTP 请求信息进行自动化的工具无法处理将 Java applet 从代理转发到浏览器。它非常慢,似乎永远无法加载,所以我还没等它加载就放弃了,假设它会加载。我测试过的最好的软件替代方案是MaxQ,它在我的情况有所帮助。对一些现有解决方案的评论已发布在本文后续的帖子中。
使用脚本
该脚本的代码行数不到 200 行,如果您熟悉 Perl 和 libwww,它几乎是自解释的。因此,您可以自己阅读代码,如果您有问题可以联系我。我将重点介绍如何使用该脚本。
包含的脚本源代码是我编写的脚本的通用版本。它设计用于与 Internet Explorer 的 ieHTTPHeaders
工具配合使用。它可以与其他 HTTP 分析工具一起使用,但可能需要进行一些编辑以匹配其他工具的 HTTP 跟踪格式。它仅设计用于发出 HTTP GET
和 POST
请求并接收响应。HTTP 身份验证、HTTPS 支持、高级 cookie 和会话管理、错误检查、响应数据解析以及将响应保存到文件或数据库都需要手动自定义。如果您熟悉 Perl,可以很容易地对其进行自定义。请参考 Web 上的 Perl libwww 库文档。
要使用该解决方案,您首先需要下载并安装Internet Explorer 的 ieHTTPHeaders 或类似的工具,例如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 applet 等不太兼容。请注意,使用
iehttpheaders
或livehttpheaders
以外的任何工具都需要修改脚本以支持该工具,以便标头以正确的格式进行解析。 - Perl 运行时,任何操作系统平台,推荐版本 5.8.7+
- 已安装并正常运行 Perl
LWP::UserAgent
和HTTP::Request
模块(libwww 的一部分)
此解决方案相对于其替代方案的特点
- 可用于自动化涉及媒体丰富的应用程序(如 Java applet、Flash 内容、其他插件、AJAX 和 Web 服务)的 Web 活动,这些应用程序会发出 HTTP 请求。
- 输出脚本可以与第三方工具(如免费的 Perl Archive "PAR" 包、perl2exe 或 ActiveState 的工具)一起编译成可执行文件,这样最终用户就可以直接运行它们而无需安装任何东西。
- 脚本可以通过 Perl 完全自定义,包括解析器/生成器脚本和输出脚本。
- 脚本独立运行,无需额外软件。只需要 Perl 和 LWP 模块。HTTP 分析工具仅用于捕获 HTTP 请求供 Perl 解析脚本解析。
- 脚本运行自动化速度非常快。
- 使用知名且文档齐全的 Perl LWP 模块。
- 对于 Web 应用程序的测试,它可以用来绕过自动化网站 GUI 等的需要,以便自动化测试。
- 可用于一次性自动化 100 多个 HTTP 请求。您知道一次 Web 电子邮件阅读会话可能需要 100 多个 HTTP 请求吗?想象一下手动编写脚本!
- 解决方案运行无缝,类似于 MS Office 宏录制和回放,只需手动编辑即可进行自定义和性能调优。请注意,无缝执行的前提是所需的工具已设置好并且正在运行。
可能应用
- 自动化 Web 浏览器(HTTP)活动,涉及 Java applet、Flash 内容等,这些活动通常难以自动化。在不涉及测试 GUI 交互性的情况下,也可作为 GUI 配置自动化的替代方案。
- 自动化基于 Web 浏览器的配置,特别是对于永不更改的配置。
- 自动化网站功能测试,即 HTTP 请求输入和 HTTP 响应输出功能测试。
- 自动化网站负载测试,即在一台工作站上运行多个脚本,或从多个工作站针对指定的服务器运行。
- 自动化 REST 或 REST-CSV 基础的 Web 服务测试;这与网站测试非常相似。
- 自动化 Web 浏览活动,即检查电子邮件、检查账户余额、查看新闻。
历史
- 2006/08/10 - 首次发布
- 2006/08/11 - 添加了 HTTP
GET
请求支持;更新了文章的使用要求 - 2006/10/01 - 更新了文章
- 2006/10/31 - 更新了文章
- 2007/07/14 - 使用额外的预解析/跟踪转换脚本为
livehttpheaders
工具添加了支持