14.3 前端性能测试自动化介绍
随着功能测试的发展与壮大,功能自动化测试已经越来越广泛地应用于现行软件系统的测试,那么性能测试方面是否能给实现自动化的控制呢?答案是肯定的,随着行业的发展,性能测试的研究也日趋深入,前面我们向大家介绍了如何自动化控制场景的运行,当然这只是性能测试自动化的冰山一角,其目的也是拓展大家性能测试方面的思路。
本节作者将向大家介绍前端性能测试的自动化控制,据我所知有一些单位已经针对自己公司的业务开发了一些适用其自身的性能测试工具,鉴于其针对行业的特殊性,这里我们不予探讨。我们谨以通用的、被大家认可的前端性能工具为例,讲解前端性能自动化控制的相关内容,在此我们挑选的工具就是HttpWatch,在前面的章节相信大家已经看到了HttpWatch在前端性能测试分析方面是如此强大,肯定也很关心其更深层次的应用,这里我向大家介绍该工具自动化前端性能测试的实现方法,您可以通过访问“http://apihelp.httpwatch.com/”了解更多关于httpwatch自动化方面的内容。
图14-21描述了Controller、Log、Entry和Plugin这4个主要类与浏览器之间的关系,下面我们来看一下这4个主要类都是用来做什么的。
1.控制类(Controller Class)
HttpWatch控制类用来创建一个HttpWatch插件实例,或者是打开一个已经存在的实例文件。可以通过这个控制类的一个“OpenLog”方法打开一个日志文件,并且返回这个日志文件的相应的说明信息,这个说明信息包括的就是录制过中的请求和响应文件信息。
2.插件类(Plugin Class)
HttpWatch分别为IE和Firefox提供了插件类,它主要是针对Http协议交互提供启动和停止方法去控制HttpWatch的录制和停止录制功能,对应的方法名称为“Record”和“Stop”,并且还提供了一些方法和属性去管理和配置自动化录制方式。其中插件类中的“GotoURL”方法可以用于重定向浏览任何指定的URL地址。
3.日志类(Log Class)
HttpWatch日志类用于获取日志信息,这些日志信息就是HttpWatch录制过程记录的请求和响应信息。日志类提供了许多属性和方法,并且允许对这些录制的数据信息进行检索和保存,或者以多种格式导出(支持:HWL、CSV、XML、HAR格式)等。
4.属性类(Entry Class)
HttpWatch属性类的每个日志文件都包含一个属性列表,且这个属性列表中包括详细的HTTP交互信息。这些内容具体包括请求的资源信息和一些返回的信息。这个请求和响应属性信息提供了访问头文件和Cookies文件,这些信息都是在与服务器发生交互过程中产生的。同时最后产生的结果信息也通过该类属性进行输出,如:BytesReceived属性是接收的总字节数。
14.4 HttpWatch前端性能测试自动化脚本
HttpWatch提供了一些脚本示例代码供大家参考,在HttpWatch安装目录下的“api_examples”文件夹下,您会看到2个子文件夹:“ie”和“Firefox”,这里我们希望看到基于IE浏览器的相关API调用方法,所以选择“ie”文件夹,再进入到“page_check”,在该文件夹下还有4个子文件夹,分别是“csharp”、“javascript”、“ruby”、“VBScript”,下面就让我们一起来看一下这4个文件夹下主要的脚本实现代码。
Ruby脚本代码(page_check.rb和page_check_watir.rb文件内容):
#page_check.rb文件 # Page Check Ruby Example # # For more information about this example please refer to the readme.txt file in the # same directory # require 'win32ole' puts "Enter the URL of the page to check (press enter for www.httpwatch.com):\n"; $stdout. flush url = gets.chomp! if url.empty? url = "www.httpwatch.com" end puts "\nChecking " + url + "...\r\n\r\n"; $stdout.flush # Create a new instance of HttpWatch in IE control = WIN32OLE.new('HttpWatch.Controller') plugin = control.IE.New() # Start Recording HTTP traffic plugin.Log.EnableFilter(false) plugin.Record() # Goto to the URL and wait for the page to be loaded plugin.GotoURL(url) control.Wait(plugin, -1) # Stop recording HTTP plugin.Stop() if plugin.Log.Pages.Count != 0 printf "\nPage Title: '%s'\n", plugin.Log.Pages(0).Title # Display summary statistics for page summary = plugin.Log.Pages(0).Entries.Summary printf "Total time to load page (secs): %.3f\n", summary.Time printf "Number of bytes received on network: %d\n", summary.BytesReceived printf "HTTP compression saving (bytes): %d\n", summary.CompressionSavedBytes printf "Number of round trips: %d\n", summary.RoundTrips printf "Number of errors: %d\n", summary.Errors.Count end |