Sei sulla pagina 1di 41

WebSpeedTest

Software
for

HTTP/FTP Performance Measurement

User's Manual
Version 0.103 for Windows-32, 21.Nov.2011
Copyright 2004-2011 by Ingo Zettl, ingo.zettl@aon.at

Chapter

Introduction
This manual tries to give an introduction to the functionality and the features of WebSpeedTest.
You should read this manual carefully if you are not familiar with the software. If you already know
it, you might need the technical documentation in chapter 3.

1.1 What is WebSpeedTest


WebSpeedTest is a performance measurement tool that allows HTTP/FTP measurements using two
common web browsers (Internet Explorer or Mozilla). Using the COM versions of these browsers
allows to run performance measurements under exactly the same conditions as the end user would
experience.
Important features of WebSpeedTest:
Measurements with COM control version of the two most common web browsers (Internet
Explorer and Mozilla) to exactly reproduce user's download experience.
Fully integrated packet filter driver enables byte counting on IP level.
Windows socket interception allows for byte counting and time stamping on socket level.
Integrated socket analyzer for analysis of UDP and TCP protocols (socket interception).
Support for youtube streaming analysis with embedded Flash player.
Integrated HTTP protocol analyzer for detailed HTTP analysis (socket interception).
Browser control (e.g. for clearing cache and cookies, setting Mozilla parameters, setting
proxies)
HTTP header modification via socket interception to modify the browser's HTTP requests.
HTTP random URL parameter support for special cache tests (socket interception).
Proxy configuration support.
Log files for various measurements including detailed HTTP logs.
Robust architecture for unattended measurements with integrated timeouts and control
mechanisms.
Integrated RAS support.
Command line interface for integration in measurement scripts.

1.2 Field of application


WebSpeedTest allows HTTP or FTP measurements under the same condition the user experiences
with his web browser.
Typical applications are:
Performance monitoring for HTTP or WAP 2.0 servers
Performance monitoring for mobile networks
Development tests for HTTP or WAP 2.0 services
Performance monitoring and compatibility tests for WAP 2.0 proxies, servers and gateway
systems

WebSpeedTest

0.103 21.Nov.2011

Introduction

1.3 Revision History


changes in v0.103, 21.11.2011 =0.103=
support for youtube video streaming tests (/youtube argument with special http file)
optional youtube result parameters in log files and QTS tickets
some log file columns slightly changed
changes in v0.102, 29.09.2011 =0.102=
support for http preload (/plurl argument), new metrics m.3100..3102
changes in v0.101, 27.09.2011 =0.101=
new metrics (m.3025..3026, rx bytes @ meas stop, max socket idle)
new metric (m.3097, tcp dns delay)
support to decode chunked gzip transfers
bugfix when using parameter /closedly
additional socket information in browser log
changes in v0.100, 26.09.2011 =0.100=
new TCP metrics (m.3094..3096: connect time, IP service access time, TCP transfer time)
changes in v0.99, 04.08.2011
improvement in response file handling for faster deletion in TSS
changes in v0.98, 22.07.2011 =0.98=
new metrics x.3090..x.3093 (throughput list)
new column for status in http log file
changes in v0.97, 17.06.2011 =0.97=
support for gzip decompression, /gzip argument
new metric m.3078: HTTP payload bytes decompressed
changes in v0.96, 27.04.2011
enforce deletion of files in browser cache to avoid temporary files in user profile
changes in v0.95, 04.04.2011
support to parse first error code for 4xx errors
changes in v0.93, 08.03.2011
support to save registration info in .regunl file to support XPe and W7e EWF function
changes in v0.92, 17.02.2011
allow first interval of peak throughput to be 50% of next intervals (slow start handling)
changes in v0.91, 26.01.2011
maintenance release, no major changes
changes in v0.90, 05.11.2010
support for ===REBOOT command if hook driver fails
changes in v0.87, 23.09.2010
bugfix in decoding algorithm for certain HDD serial numbers
changes in v0.86, 16.09.2010
support for Windows Vista and 7
integrated windows socket analysis for compatibility with Windows Vista and 7
support to save and load license requests to XML files
don't display registration dialog if /help switch is used
default javascript excludes improved
support for /logurl switch
changes in v0.84, 09.07.2010
modifications for TSS 0.0.11.0
changes in v0.83, 18.12.2009
added default value for mapping file (mapping.cfg) and changed search order (app dir first)
changes in v0.82, 14.12.2009
bugfix in error code generation
support for mapping file in application directory
changes in v0.81, 11.12.2009
support for [default] mapping
support to load mapping file from application directory
changes in v0.77, 21.04.2009
branded release for Mobilkom Austria Group
changes in v0.76, 20.04.2009
minor improvements
WebSpeedTest

0.103 21.Nov.2011

Introduction

changes in v0.75, 14.04.2009


modifications in registration procedure: improved date/time format
changes in v0.74, 31.03.2009
new parameter for min. received bytes (/minrxbytes)
new error codes
changes in v0.73, 11.03.2009
search iphook.sys in exe directory instead of cwd
new registration parameters (/forcereg and /checkreg)
changes in v0.72, 08.03.2009
bugfix: metric 3022 was used twice
changes in v0.71, 03.03.2009
minor fix in GUI utility
changes in v0.70, 01.03.2009
changed arguments /log to /result, /logcolumn to /rescolumn, /logsuffix to /ressuffix
changed command line arguments from = to : for compatibility with PO
report/ticket functions
changes in v0.61, 20.10.2008
support for registration server
support for additional columns in log file (/logcolumn argument)
changes in v0.60, 25.09.2008
support for random http URL parameters (/randomurl argument)
changes in v0.58, 08.05.2008
added loop information to log file
changes in v0.57, 25.04.2008
changed argument /filter to /hkfilter
added support for IPHOOK interface filter (argument /hkiface)
added support to store IP addresses in master log file
changed RAS hangup functionality
changes in v0.56, 10.04.2008
added column thput in master log file
added netcap support
changes in v0.55, 20.01.2008
added additional log messages
added manual RAS shutdown for stability improvement
changes in v0.54, 04.01.2008
no major changes
changes in v0.53, 12.12.2007
time stamps now based on common start stamp
improved internal exception handling, added c-stype exception handlers
changed sorting of HTTP log file to start time instead of stop time
dump socket info (/logsock switch)
new timeout if no more requests are pending (/noreqto)
improvement in HTTP request counting, added # of requests to status bar
bugfix: don't clear ignore-urls after first loop
changes in v0.51, 19.10.2006
counter for parallel HTTP requests and max. parallel HTTP requests
support for several measurement iterations with one application call
new function to display Mozilla configuration parameters
additional runtime files for Mozilla ActiveX Control
changes in v0.50, 22.09.2006: first released version

1.4 This manual


This manual covers all important aspects of WebSpeedTest.
Chapter 2 describes the installation and configuration
Chapter 3 contains the technical documentation

WebSpeedTest

0.103 21.Nov.2011

Introduction

Chapter

Architecture
This chapter provides a more detailed introduction in WebSpeedTest's architecture and
functionality.

2.1 Architecture
The system architecture of WebSpeedTest is shown in the figure below:

2.1.1 Module description


WebSpeedTest uses the Internet Explorer COM control or the Mozilla COM control for HTTP/FTP
measurements. These controls use windows sockets (provided by WS2_32.dll) for TCP/IP
communication.
A socket interception module (either a custom WS2_32.dll or integrated function patches) are used
to intercept and analyze the traffic transported via the Windows Sockets. The functions are directly
patched in memory if possible, alternatively the custom WS2_32.dll is loaded before the Windows
Sockets module (system WS2_32.dll) and provides functions to modify and analyze the TCP/IP
data stream generated and received by the browser control. Please note that the interception
WS2_32.dll only works in Windows XP, not in Vista and above.
WebSpeedTest

0.103 21.Nov.2011

Architecture

In addition to the data analysis on browser and socket level, a packet filter is used to analyze
packets on packet level.

2.1.2 Web Browser COM Control


Two web browsers can be used with their COM interfaces:
Internet Explorer
A COM interface (IWebBrowser) is automatically installed with Windows or Internet Explorer.
This interface provides several methods and callbacks that are used to control and analyze the
web session.
Mozilla
A COM/ActiveX interface for Mozilla is available that provides the IWebBrowser interface for
Mozilla.

2.1.3 Youtube video streaming


WebSpeedTest can be used to analyze video streaming with the help of special HTML/javascript
files. The HTML file has to be placed on a web server to prevent javascript security restrictions and
to contain code to load the embedded video player and analyze its callback information. A sample
HTML file is provided with WebSpeedTest. =0.103=
Please note that video streaming analysis is available for Internet Explorer only, not for Mozilla.
Please refer to chapter 3.2.5 for details.

2.1.4 Socket Interception


Two methods are available to intercept the Windows Socket interface:
Windows Socket functions are patched/intercepted in memory
A custom WS2_32.dll is placed in the application directory and loaded instead of the OS dll.
For compatibility with Windows Vista and 7, the socket analysis function has been added to
WebSpeedTest.exe without requirement of WS2_32.dll. In this case the functions are patched in
memory and redirected to the analysis functions. If the custom dll is however loaded, the dll's
functions are used. To use the new method, the custom ws2_32.dll should be removed from the
application directory.
The custom WS2_32.dll is used to intercept function calls to the Windows Socket interface without
patching. Usually it is sufficient to place this module in the same directory as WebSpeedTest.exe. If
the module is not loaded automatically, functions are provided to install the custom WS2_32.dll in
the system directory.
The socket interception DLL forwards all function calls to the system WS2_32.dll but contains
additional code to count UDP and TCP bytes, analyze HTTP data streams and modify HTTP
headers.

2.1.5 Packet Filter


An integrated packet filter is automatically installed when WebSpeedTest is executed and removed
when the application is terminated. The packet filter uses the TCP/IP stack's packet filter hook and
can run in parallel with Microsoft's NetCap.exe or WireShark/WinPCap. Please note that this packet
filter is only available in Windows 2000 and XP.

2.1.6 Windows Vista and 7 Compatibility


Please consider these facts when using Windows Vista or 7:
The provided ws2_32.dll is not compatible with OS versions after XP. This should not be an
issue as ws2_32.dll is contained in the OS known dlls, thus it is not loaded from the application
directory.
The integrated packet filter hook driver is not compatible with OS versions after XP. Packet
filter byte counters will thus not be available.
WebSpeedTest does not require administrative privileges.

WebSpeedTest

0.103 21.Nov.2011

Architecture

Chapter

Installation and Operation


This chapter covers the installation and operation of WebSpeedTest.

3.1 Installation
This section covers the standard installation and the installation of the optional Mozilla ActiveX
control.

3.1.1 System requirements


Industry compatible personal computer (minimum requirements depending on your operating
system)
Windows 95/98/NT4/ME/2000/XP or 2003 (Windows 2000 or above recommended)
At least one network interface with TCP/IP protocol assigned
A working Internet Explorer configuration (for Internet Explorer use)
The Mozilla ActiveX control installed (for Mozilla use)

3.1.2 Removing previous installations


Although not 100% necessary it is recommended to remove existing installations of WebSpeedTest
prior to the installation of a new version. The uninstall routine will only remove program and helper
files, log and configuration files will not be touched. The procedure described in the next section
will be suitable for most versions of Microsoft Windows though there may be slight variations.
Important: Setup does not undo the replacement of the windows sockets dll by WebSpeedTest's
interception dll. If the replacement has been done, the configuration has to be restored manually
(please refer to section 3.3.5.4).
How to remove WebSpeedTest
Open the Windows Control Panel. You will find it in the Windows Start Menu.
Open the Control Panel Application Software.
Select the Item WebSpeedTest and press the Button Add/Remove.
WebSpeedTest will be removed from your system.
Please consult the documentation for Microsoft Windows if you need more detailed information.

3.1.3 Installing WebSpeedTest


WebSpeedTest is delivered in form of a solid executable installer. The Setup is usually named
WebSpeedTestSetupx.x.exe and will install all files required for program execution except the
Mozilla ActiveX control. Note that the Mozilla ActiveX control can be installed or changed after the
installation of WebSpeedTest, it is not required that the control is installed before WebSpeedTest.
How to install WebSpeedTest
Run WebSpeedTestSetupx.x.exe provided by your software vendor.
Select the desired destination path for WebSpeedTest and let setup do the installation.
Use the WebSpeedTest Console icon in the start menu to start a command line window in the
application directory.

WebSpeedTest

0.103 21.Nov.2011

Installation and Operation

3.1.4 Running in Demo mode


WebSpeedTest requires an unlocking code for operation. Alternatively a demo mode is available to
test WebSpeedTest's behavior. In this mode additional random delays are added, measurements
are reported only with an accuracy of 20 seconds and no extended results are reported.
To run WebSpeedTest in demo mode, run the application with the argument /demo.
C:\Programme\WebSpeedTest>WebSpeedTest http://www.microsoft.com /demo

3.1.5 Installing the unlocking code


If the application has been installed for the first time, it is required to install the unlocking code.
Two different methods for unlocking are available:
Unlocking with the registration server
This method is available for all versions of PocketOptimizer. Use the integrated registration
dialog to send registration information to the registration server. The unlock code will be
provided as soon as your information has been verified. Standard unlocking codes consist of 7
code groups.
Manual unlocking (branded versions only)
This method is only available for branded versions. Pass the machine code to your license
administrator to create a special unlocking code. A code generation utility is available for this
purpose. OEM unlocking codes consist of 5 code groups.
Unlocking with the registration server
Follow these steps to register WebSpeedTest:
Run WebSpeedTest to start the registration dialog (the registration dialog will automatically be
presented if no unlock code has been entered or you specify the /register argument).
Alternatively you can start the WebSpeedTest GUI application and use the Register button.
Enter your personal information and submit the information together with the machine code to
the registration server. If this is not possible, copy the registration request to the clipboard and
submit it to your license administrator.
If an active license for your machine is contained in the registration server's database, you will
be provided with the unlock information immediately. Otherwise your request is stored in the
database for further processing by your license administrator or a sales representative.
If your request has been processed, the unlock information is stored in the registration server
and you will be sent an e-mail that the unlock code is available.
Run WebSpeedTest with the registration dialog again and submit another registration request.
The registration server will now provide you with the unlock information. If this is not possible,
copy the XML unlocking information into the dialog via the clipboard.
Unlocking with the registration utility
To manually retrieve the machine code, run WebSpeedTest without arguments or with the
argument /checkreg. The output should be similar to
C:\Programme\WebSpeedTest>WebSpeedTest /checkreg

WebSpeedTest v0.77, 21.Apr.2009


Copyright (c) 2003-2009 by Ingo Zettl, ingo.zettl@aon.at
Application is not correctly registered.
Machine code: 7488-LMTP-S5VW-P225-4R0U
Please enter the unlock code for this machine code with
WebSpeedTest /register:xxxx-xxxx-xxxx-xxxx-xxxx or use with /demo switch

To install the unlock code, run WebSpeedTest with the argument /register. Please note that for
standard unlock codes (7 code groups) all fields in the registration dialog have to be entered
correctly. For OEM codes (5 code groups) it is possible to register the application with /register
argument as:
C:\Programme\WebSpeedTest>WebSpeedTest /register:A6XV-S0BT-6830-QUCF-QCN1

WebSpeedTest v0.77, 21.Apr.2009


Copyright (c) 2003-2009 by Ingo Zettl, ingo.zettl@aon.at
Application is registered.
Machine code: 7488-LMTP-S5VW-P225-4R0U
Unlock code: A6XV-S0BT-6830-QUCF-QCN1

After the unlock code has been installed, WebSpeedTest can be used without restrictions.

WebSpeedTest

0.103 21.Nov.2011

Installation and Operation

3.1.6 Installing the Mozilla ActiveX Control


The Mozilla ActiveX Control can be installed with two different methods:
A separate setup package for the Mozilla Control is available (preferred method).
Additional files can be expanded into the Mozilla installation directory to register the Mozilla
ActiveX component for your Mozilla installation.
3.1.6.1 Installing the standalone Mozilla ActiveX Control
At the time this document is written (Oct 2006) the Mozilla ActiveX control is not hosted on the
official Mozilla web site. Instead it can be found on
http://www.iol.ie/~locka/mozilla/control.htm
The current version of the control is version 1.7.12 and can be found at
http://www.iol.ie/~locka/mozilla/MozillaControl1712.exe
Note: WebSpeedTest does not work with FireFox and its descendants, currently only the Mozilla
ActiveX control is supported.
Setup information
Different to Internet Explorer, the Mozilla ActiveX control does not directly use the Mozilla core, it is
a separate product using the Gecko rendering engine and Mozilla core functions.
The advantages of this control are:
The control uses it's own configuration environment stored in
%USERPROFILE%\Application Data\MozillaControl\profiles\MozillaControl\<guid>

In most situations it is advantageous that the control can keep its own settings different to the
Mozilla web browser.
The setup utility does the entire installation including the registration of the COM component.
Installing the control
Simply execute the

Mozilla

ActiveX

control's

setup

utility,

usually

it

is

named

MozillaControlxxxx.exe.
Run WebSpeedTest with the argument /mozilla once to let the control create its home
directory.
Check if the home directory has been created in the folder mentioned above.
Note: If the MozillaControl setup utility reports an error of missing Mozilla layout libraries, the files
msvcrt.dll and msvcp60.dll are missing. Install WebSpeedTest setup first in that case which
includes these files or download them from
http://www.iol.ie/~locka/mozilla/runtime60.zip
Additional information
The control's behavior can be controlled with the parameters in prefs.js. For the standalone Mozilla
ActiveX Control the file is located in
%USERPROFILE%\Application Data\MozillaControl\profiles\MozillaControl\<guid>\prefs.js

The file will automatically be modified by WebSpeedTest if the /param argument is specified.
Note: Please ensure there is only one <guid> directory in the MozillaControl folder, otherwise it
will not be possible for WebSpeedTest to modify the file correctly.
3.1.6.2 Installing the add-on Mozilla ActiveX control
The Mozilla ActiveX control is not included in the default Mozilla Setup package, but it can be
added to the installation directory.
The required download file can be found on the mozilla.org web site, the current version can be
found at
http://www.mozilla.org/releases zip file
The latest version in Oct 2006 is 1.7.13 (please download the same file as the installed Mozilla
version)
http://ftp.mozilla.org/pub/mozilla.org/mozilla/releases/mozilla1.7.13/mozilla-win32-1.7.13.zip

WebSpeedTest

0.103 21.Nov.2011

Installation and Operation

Setup information
Unzip the file's content into your Mozilla application folder (this will replace the existing files and
add some additional files not included in Mozilla's setup package.
Register the COM control with a call to regsvr32 in the installation directory:
c:\Programme\Mozilla>regsvr32 mozctlx.dll

If the control is installed this way, it will use Mozilla's installed profile.
Additional information
The control's behavior can be controlled with the parameters in prefs.js. For the add-on Mozilla
ActiveX Control the file is located in Mozilla's home directory.
The file will automatically be modified by WebSpeedTest if the /param argument is specified.
Note: Please ensure there is only one <guid> directory in the Mozilla folder, otherwise it will not
be possible for WebSpeedTest to modify the file correctly.

3.2 Operation
This section describes how to do measurements with WebSpeedTest.

3.2.1 Running Simple Measurements


Simple measurements can be done by calling WebSpeedTest with the target URL as parameter.
You can use the WebSpeedTest Console in the start menu or any other shell or command prompt
to enter a command like:
C:\Programme\WebSpeedTest>WebSpeedTest http://www.microsoft.com

or
C:\Programme\WebSpeedTest>WebSpeedTest http://www.microsoft.com /mozilla

Please note that the default browser is Internet Explorer, you can use Mozilla (if the control is
installed) with the command line argument /mozilla.
After initialization WebSpeedTest will open a browser window displaying the downloaded web page
as shown below:

Important: For complex, AJAX enabled web pages it might be required to specify additional
arguments (/closedly) to ensure the entire page is loaded correctly, please refer to section 3.2.4.

WebSpeedTest

0.103 21.Nov.2011

Installation and Operation

Without additional command line arguments, WebSpeedTest will display several progress
messages and status information in the console window such as:
ws2_32_proxy (0034fd3c): this is ws2_32.dll talking
ws2_32_proxy (0034fd3c): loading C:\WINDOWS\system32\ws2_32.dll
WebSpeedTest v0.77, 21.Apr.2009
copyright (c) 2003-2009 by Ingo Zettl, ingo.zettl@aon.at
2006-10-20 00:03:57 (yyyy-mm-dd hh:mm:ss)
ws2_32.dll is available,
ws2_32 file is D:\DEV\BCB\WEBSPEEDTEST\APP\BIN\WS2_32.dll
got traffic buffer, traffic monitoring is enabled.
starting hook drivers
starting hook
removing files in browser cache
removing files done.
Running download loop 0
----- starting download 20.10.2006 00:03:57.558=427326152 ----using browser IE
stopping hook
----- replaying callback messages ----BeforeNavigate: http://www.microsoft.com/ 0 ms (downloads = 1)
DownloadBegin
0 ms
ProgressChange
180 ms
ProgressChange
391 ms
ProgressChange
681 ms
DownloadComplete
851 ms
DownloadBegin
851 ms
NavigateComplete http://www.microsoft.com/
871 ms
ProgressChange
961 ms
ProgressChange
971 ms
ProgressChange
1062 ms
ProgressChange
1072 ms
ProgressChange
1112 ms
BeforeNavigate: http://rad.microsoft.com/ADSAdClient31.dll?GetAd=&PG=CMSIE4&SC=F3
&AP=1164 1192 ms (downloads = 2)
ProgressChange
1452 ms
ProgressChange
1452 ms
ProgressChange
1803 ms
ProgressChange
1803 ms
NavigateComplete http://rad.microsoft.com/ADSAdClient31.dll?GetAd=&PG=CMSIE4&SC=F3
&AP=1164
1873 ms
ProgressChange
2003 ms
ProgressChange
2073 ms
ProgressChange
2073 ms
ProgressChange
2073 ms
DownloadComplete
2083 ms
DocumentComplete http://rad.microsoft.com/ADSAdClient31.dll?GetAd=&PG=CMSIE4&SC=F3
&AP=1164 2083 ms (downloads = 1)
ProgressChange
2394 ms
ProgressChange
2404 ms
ProgressChange
2414 ms
ProgressChange
2814 ms
ProgressChange
3155 ms
ProgressChange
3155 ms
DocumentComplete http://www.microsoft.com/ 3155 ms (downloads = 0)
********** download count reached 0, download supposed to be done. **********
----- document information ----completed
URL: http://rad.microsoft.com/ADSAdClient31.dll?GetAd=&PG=CMSIE4&SC=F3
&AP=1164 0
completed
URL: http://www.microsoft.com/ 0
----- measurement data ----traffic monitor results (tcp payload):
11058 bytes have been sent, 163326 bytes have been read.
network transfers needed 3145 ms.
20 tcp sockets have been used, 20 connects, 33 http requests.
13 tcp sockets have been used simultaneously.
1 other sockets have been used, 1 connects.
1 other sockets have been used simultaneously.
avg data transfer rate 3516 bytes/s send, 51931 bytes/s read
iphook results (ip payload + ip headers):
17037 bytes have been sent, 176911 bytes have been read.
network transfers needed 3155 ms.
avg data transfer rate 5400 bytes/s send, 56073 bytes/s read
download done, 3.155 s
download-legend: status; duration; ws_tx_b; ws_rx_b; hk_tx_b; hk_rx_b; docs_star
ted; docs_done; num_sock; max_sock; num_conn; num_req; num_ok
download-result: done
;
3.155;
11058; 163326;
17037; 176911; 2; 2;
WebSpeedTest

0.103 21.Nov.2011

Installation and Operation

21; 14; 21; 33; 27


stopping hook
done.

The application's output consists of several sections:


startup information
progress information (started with ----- starting download -----)
callback replay (started with ----- replaying callback messages -----)
document information (started with ----- document information -----)
measurement data (started with ----- measurement data ------)

3.2.2 Getting Help


To get the application's command line usage, simply call it without arguments or with the
argument /help. This will display the usage information as
WebSpeedTest v0.103, 21.Nov.2011
Copyright (c) 2003-2011 by Ingo Zettl, ingo.zettl@aon.at
usage: WebSpeedTest <url> [/arg[:[value]]]
Licensing parameters
/register:<reg> ... register licensing code
/checkreg
... check registration status
/demo
... run in demo mode with limited features
Standard behavior
/help, /h, /?
... display this help screen
/quiet
... don't display messages
/verbose
... display detailed information (e.g. cache removal)
/hide
... hide browser window during download
/noquit
... don't close browser window after download
/stdout
... write information to stdout, not to stderr
Measurement control
/mozilla
... use Mozilla COM control (requires separate install)
/youtube
... analyze video streaming (requires special HTML file)
/timeout:<sec> ... set timeout in sec (default is 90 sec)
/noreqto:<sec> ... shutdown delay if all http requests are handled
/closedly:<ms> ... additional timeout after dl count is zero (default 0)
/loops:<loops> ... run several measurement iterations
/sleep:<ms>
... delay between measurement iterations
/ignoreurl:<url>... ignore urls in dl counting (e.g /ignoreurl:javascript:*)
Logging
/result:<file> ... add data to result logfile (def=result.log)
/ressuffix:<txt>... text value for suffix column in result log file
/rescolumn:<c:t>... additional columns (column:value) for result log file
/logdebug:<file>... log debug output to file (def=debug.log)
/confile:<file> ... console output file for commonication with scheduler
/loghttp+:<file>... log http details to file (def=http.log, '+:' appends)
/logsock+:<file>... log socket details to file (def=sock.log, '+:' appends)
/logurl+:<file> ... log URLs to file (sorted, def=url.log, '+:' appends)
Preload
/plurl:<url>
... preload URL
/plto:<ms>
... preload timeout (in ms or in form 1m1s1ms, default 5s)
/plminbytes:<n> ... minimum bytes for valid preload (0 -> just 200 OK)
/plretries:<n> ... retries for preload (0 -> singly try)
/plcond:<cond> ... preload condition (ignore/fail/rate, default rate)
/pldelay:<ms>
... preload delay (in ms or in form 1m1s1ms, default 0)
QTS ticket
/report:<file> ... create QTS ticket in file name
/scenario:<id> ... scenario Id for QTS ticket
/instance:<id> ... instance for QTS ticket
/tic:<tic>
... TIC (password) for QTS ticket
/mapping:<file> ... QTS metric mapping file (default: mapping.cfg)
Cache control
/noclear
... don't clear cache (IE only)
/rawclear
... force manual removal of cache files (IE only)
/cookieclear
... clear cookies (when clearing cache, IE only))
/onlyclear
... clear cache, then exit without download (IE only)
IP hook control
/nohook
... do not use IP hook driver
/dumptraffic
... display IP hook packet information (iphook only)
/hkfilter:<addr>... set filter for packet hook to specified single IP address
/hkiface:<num> ... include interface in packet hook
/hkiface:!<num> ... exclude interface from packet hook
NetCAP support
/netcapexe:<fn> ... executable file for NetCAP
/netcapargs:<a> ... additional arguments for NetCAP, e.g. /B:10
/netcapif:<if> ... interface name for NetCAP (use NetCAP /? to view the list)
/netcaplog:<fn> ... log file for NetCAP
WS2 interception control
WebSpeedTest

0.103 21.Nov.2011

Installation and Operation

/nows2ext
/nows2hook
/header:<hdr>

... no ext. socket interception (header mod + adv. analysis)


... don't hook WS2 functions in memory
... http headers to be modified, added or removed (use \n for
newline and \\ for backslash, empty params are removed)
/minrxbytes:<n> ... minimum # of bytes for success
/gzip:<mode>
... enable/disable gzip decoding (mode=on/off/fast)
/randomurl[:<n>]... apply random URL starting at loop iteration n (1..loops)
/replacesocket ... replace windows ws2_32.dll by own proxy dll, only do this
if proxy dll is not loaded from application directory, i.e
due to McAfee Personal Firewall (experienced users only).
/restoresocket ... restore original ws2_32.dll
RAS parameters
/rasconn:<ras> ... use specified RAS connection
/rasuser:<usr> ... user name for RAS connection
/raspass:<pwd> ... password for RAS connection
/rasforce
... force hang up of RAS connection even if it is active
/rashangup
... hang up RAS connection after measurement is done
/rasretries:n
... # of RAS retries (default = 3)
/rastimeout:<s> ... RAS connection timeout in seconds (default = 60)
/rasdelay:<ms> ... additional delay after RAS connection setup (default = 0)
Mozilla control
/prefs:<id:val> ... e.g. /prefs:browser.cache.disk.enable:false
e.g. /prefs:general.useragent.override:"Mozilla/4.0 usr"
omit the colon and the value to remove the parameter
quotes (") have to be replaced by tilde (~) if required
/showprefs
... show mozilla preferences file before measurement
Advanced parameters
/proxyname:<px> ... name of proxy server to be used
/proxyconn:<cn> ... RAS connection for proxy server (IE only)
/useragent:<ag> ... user agent to be used (Mozilla or IE with header mod only)
/numsockets:<n> ... specify max. number of sockets (IE: per server)

3.2.3 Passing arguments


Arguments (including the URL) can be specified in any order as long as only one URL is given.
Please note that if an argument is specified more than once the last occurrence is used except for
arguments that can be provided more than once (e.g. /prefs, /header and /ignoreurl).
If arguments contain white spaces they have to be quoted with double quotes ("), e.g.
/header:"User-Agent: SonyEricssonT610/R101 Profile/MIDP-1.0 Configuration/CLDC-1.0"

Note: For Windows it does not matter whether the quotes are outside or inside the argument (i.e.
you can either use "/param:value" or /param:"value").

3.2.4 Ensuring correct downloads


This chapter describes how proper results can be achieved for complex web pages. =0.101=
Problems and reasons
For complex web pages it might be required do ensure that the entire content is loaded correctly.
WebSpeedTest depends on the Internet Explorer ActiveX control and its callback events to load a
web page. This control signals a starting download with the BevoreNavigate event, a finished
download with the DocumentComplete event. WebSpeedTest treats a web page as loaded when
every BeforeNavigate event is matched with a DocumentComplete event. In case of AJAX based
websites it can happen that the matching DocumentComplete event occurs before the entire page
has been loaded, in this case an additional wait period is required that can be specified with the
parameter /closedly:<ms>.
As an example tests to facebook.com (tested in Sep.2011) lead to three different page sizes if no
close delay is specified: 150..200kB (primary download), 310kB (secondary download), 350kB
(history manager). Obviously different data volumes lead to different download times, thus
downloads of the entire page will be required in most cases.
Step 1: check URL matching
Depending on the web page, it can happen that BeginDocument and DocumentComplete events
don't match (e.g. if a redirect is done) or that DocumentComplete events don't occur at all for
some URLs (e.g. javascript URLs).
The first step for a new web page should thus be to load it with WebSpeedTest and analyze the
log output. Search the document information section and check if all documents are completed,
e.g.
WebSpeedTest

0.103 21.Nov.2011

Installation and Operation

----- document information ----completed


URL: http://orf.at/ 0
completed
URL: http://orf.at/# 0

If this is not the case, e.g. as in the following sample to http://heise.de, use the redirected URL
instead of the original URL:
----- document
completed
uncompleted
over-completed

information ----URL: http://a.ligatus.com/timeout.php?ids=25505&


URL: http://heise.de/ 1
URL: http://www.heise.de/ -1

If you experience uncompleted URLs, these can be ignored with the /ignoreurl command line
argument, e.g. /ignoreurl:javascript:* will ignore all BeginDocument events for URLs starting with
"javascript:".
----- document
completed
completed
uncompleted

information ----URL: http://www.orf.at/ 0


URL: http://www.orf.at/# 0
URL: javascript:0 1

Please note that correct termination of WebSpeedTest can only be ensured if the callbacks are set
up properly.
Step 2: determine full page size
To analyze a web page, it should be downloaded several times with the /noquit argument. In this
case WebSpeedTest does not close the download window, the user has to do this manually. You
should watch the status line and wait until no more data is transferred, then close the browser
window. It is recommended to use a fast, reliable internet connection for this step, e.g. a DSL
connection. Watch the results for e.g. 10 measurements (e.g. in the result log file) and see if
constant data volumes and load times occur. If not, you can use the URL file (/logurl) to check the
downloaded files.
Step 3: determine page load without delay
If the full page size has been determined, run several tests without the /noquit and the /closedly
argument. If the download times and byte counters match the previous tests, the Internet Explorer
ActiveX control terminates correctly and WebSpeedTest can be used without special arguments.
If the results do not match, different delays should be tested as described in the next step.
Step 4: find optimum delay
Run WebSpeedTest several times with different close delays (e.g. /closedly:1000, 2000, 3000) and
check the results (e.g. 10 measurements per delay). You should choose the smallest value leading
to stable results plus an extra margin for different/slower internet connections and machines.
Important: If the parameter /closedly is used, the main page load time (m.3011) is not a suitable
performance indicator as it uses the DocumentComplete stop trigger that is probably not the end
of the data transfers. You should use the socket time (m.3020) in this case.

3.2.5 Testing youtube video streaming


WebSpeedTest can be used for video streaming tests in combination with special HTML/javascript
files. A sample file can be found in the WebSpeedTest directory. =0.103=
The HTML file has to be placed on a web server, as the javascript callback functions would not be
executed if it is loaded from the local file system. In addition, loading the HTML file from a web
server resembles the end user's behavior (loading a HTML file from youtube.com).
The file can be modified to meet your requirements, it has to contain the following functions:
Embed the youtube video player into the document in the browser window.
Start the desired video playback.
Analyze status information and timing.
Provide status information, log and result metrics for WebSpeedTest.
Please follow these steps to implement a video streaming test:
Copy and edit the sample HTML file. The configuration parameters are contained almost on top
of the file in a javascript section. Define the video ID, quality, nominal bytes and evaluation
parameters as required.
Load the file and swfobject.js onto a web server.
Ensure the Flash Player is installed on your machine.
WebSpeedTest

0.103 21.Nov.2011

10

Installation and Operation

Download the HTML file with your browser and check if the correct video is played.
Start WebSpeedTest with the HTML file's URL (on your web server) and the argument
/youtube. WebSpeedTest will wait for the video to be played and provide the video analysis
results.
Please refer to the technical specification in chapter 4.8 for additional information.

3.2.6 Writing to files


Most of the progress messages are written to stderr, only the two lines download-legend and
download-result are written to stdout. Thus if you redirect the application's output into a file, e.g.
via
C:\Programme\WebSpedTest>WebSpeedTest http://www.microsoft.com >meas-ms.txt

only the two data lines will be directed to the file, the remaining text will be visible on the screen.
To redirect the entire output into a file, use either
C:\Programme\WebSpedTest>WebSpeedTest http://www.microsoft.com >meas-ms.txt 2>&1

or force WebSpeedTest to write to stdout instead of stderr with the /stdout argument:
C:\Programme\WebSpedTest>WebSpeedTest http://www.microsoft.com /stdout >meas-ms.txt

An alternative is the use of the /log:<file> and /logdebug:<file> arguments, that will cause the
extended measurement data and the log output (normally written to stdout/stderr) to be written to
the specified files.
C:\Programme\WebSpedTest>WebSpeedTest http://www.microsoft.com
/log:meas-ms.txt /logdebug:dbg-ms.txt

The argument /logsock:<fn> or /logsock+:<fn> can be use to log socket operations to a file.
The argument /loghttp:<fn> or /loghttp+:<fn> can be use to log http requests to a file.
The argument /logurl:<fn> or /logurl+:<fn> can be used to log URLs to a file.
The placeholder $time$ is supported for the /logxxx arguments and is replaced by the current local
time.

3.2.7 Parsing and using results


In most cases WebSpeedTest's results will be gathered by other tools in one of two methods:
The default results written to stdout or a log file are parsed for lines starting with downloadresult:

The measurement log file specified with /log argument is parsed for data lines.
Parsing the default results
The default results are output in the form
download-result: status; duration; skt_duration; ws_tx_b; ws_rx_b; hk_tx_b; hk_rx_b;
docs_started; docs_done; num_sock; max_sock; num_conn; num_req; num_ok

Thus the output should be parsed for the last line (there should be exactly one) starting with
download-result: and the remainder of the line be splitted into the individual values. See section
4.1 for a detailed specification of the default results.
Parsing the measurement log file
The measurement log file contains the default measurement results and additional result values
separated by tabs. Additional comments starting with semicolons (;) are written if the log file is
empty to describe the individual columns. See section 4.2 for a detailed specification of the
measurement log file.

3.2.8 Modifying the default behavior


Several arguments can be used to modify WebSpeedTest's behavior.
/quiet

don't display status and progress messages

/verbose

display detailed information, e.g. on cache removal

hide browser window during download (on default it is displayed on top of the command
window)

/hide

WebSpeedTest

0.103 21.Nov.2011

11

Installation and Operation

/noquit

don't close browser window after download

/stdout

write status and progress information to stdout instead of stderr

Several arguments are available to influence the measurements:


/mozilla

use Mozilla COM control (requires separate install)


set timeout in sec (default is 90 sec)

/timeout:<sec>

timeout if the Browser has not reported document completion, but no more
HTTP requests are in progress. This argument can be useful for sites with extensive javascript
usage.

/noreqto:<sec>

additional timeout after measurement is finished (i.e. download count is zero).


The browser window is kept open and a the measurement is continued if a new download (e.g.
triggered by AJAX) starts within this time. A close delay of up to 5 seconds can be required for
AJAX enabled live pages (google.com, facebook.com) to ensure the entire page is downloaded.

/closedly:<ms>

Important: If the parameter /closedly is used, the main page load time (m.3011) is not a
suitable performance indicator as it uses the DocumentComplete stop trigger that is probably
not the end of the data transfers. You should use the socket time (m.3020) in this case.
Usually only one download is executed per call, optionally it is possible to do
several iterations. This option is not available for Mozilla, as with memory cache turned on the
Control will download less files than required and with memory cache turned off it will
download excessive files as duplicate files are not recognized.

/loops:<loops>

delay between measurement iterations if loops is greater than 1

/sleep:<ms>

ignore the specified URLs in download counting. The Internet Explorer control
sometimes generates BeforeNavigate events without successive DocumentComplete events.
These events can be ignored for special URls with the /ignoreurl argument. A trailing asterisk
(*) can be used to specify all URLs starting with the given text. (e.g /ignoreurl:javascript:*).
A list of uncompleted URLs is presented in the log output's section document information. You
can add these URLs to the list of ignored URLs to ensure the end of the download is recognized
properly.

/ignoreurl:<url>

3.2.9 Using HTTP preloads


A HTTP preload can be executed before the web download if required. A preload can be required
to ensure a fast transport channel (e.g. HSDPA) is allocated before a measurement. The behavior
is controlled by the following parameters: =0.102=
The URL to be loaded (no preload is executed if this parameter is empty). Please
note that a different, integrated HTTP client is used for preloads that does not support the full
HTTP feature set and can only download a single file.

/plurl:<url>

/plot:<ms>

Preload timeout in ms or in form 1m1s1ms (default: 5s)

Minimum bytes to be returned by HTTP server to consider the preload as


successful. If the parameter is 0 or not defined, just HTTP result 200 is required.

/plminbytes:<n>

/plretries:<n>

Maximum number of HTTP retries (0 only a single request is executed).

Preload success condition


o rate change rating to 0 if preload fails (default behavior)
o fail skip measurement if preload fails
o ignore ignore preload result

/plcond:<cond>

/pldelay:<ms>

Additional delay after preload in ms or in form 1m1s1ms (default: 0s)

3.2.10 Using RAS connections


WebSpeedTest includes RAS connection/hang up functionality allowing the use of existing RAS
connections. The behavior is controlled by several parameters:
/rasconn:<ras>

specifies the RAS connection to be used. Any existing RAS connection can be

used.

WebSpeedTest

0.103 21.Nov.2011

12

Installation and Operation

user name for RAS connection. If this parameter is not specified, the RAS
connection's user name is used.

/rasuser:<usr>

password for RAS connection. If this parameter is not specified, the RAS
connection's password is used.

/raspass:<pwd>

force hang up of RAS connection even if it is active. If this parameter is not specified,
active RAS connections are kept open.

/rasforce

/rashangup

force hang up of RAS connection after measurement is done.

/rasretries:<n>

# of RAS connection retries (default = 3)

/rastimeout:<s>

RAS connection timeout in seconds (default = 60)

/rasdelay:<ms>

additional delay after RAS connection setup in ms (default = 0)

3.3 Special Topics


This chapter describes special topics that might be of interest for advanced users.

3.3.1 Cache control (Internet Explorer Only)


On default WebSpeedTest empties Internet Explorer's browser cache on application startup but
does not clear cookies. This behavior can be modified with the arguments
/noclear

don't clear cache, this parameter is only used if /rawclear is not specified.

force manual removal of cache files (the files are deleted from the file system, not
with the cache control functions).

/rawclear

clear cookies when clearing the browser cache (only if /rawclear and /noclear are
not specified)

/cookieclear

/onlyclear

clear cache, then exit without download

3.3.2 Mozilla Parameters


The Mozilla ActiveX control operates different than the Internet Explorer ActiveX control:
The browser cache is not deleted on startup, use browser.cache.diske.enable:false instead.
Cookies are not deleted on startup.
All Mozilla parameters can be configured with the /prefs argument.
Please ensure the Mozilla ActiveX control has been installed (it is not part of the Mozilla setup
package) before using the /mozilla argument. Additional information can be found in section
3.1.6.
Mozilla parameters can be specified with the command line argument /prefs. This argument allows
parameters to be set and removed.
Usually parameters are specified in the form /prefs:<identifier>:<value>
Empty parameters are specified in the form /prefs:<identifier>:
A value is deleted if the colon (:) is omitted, i.e. /prefs:<identifier>
Examples for parameters are
/prefs:browser.cache.disk.enable:false
/prefs:general.useragent.override:"Mozilla/4.0 usr"
/prefs:network.proxy.type:1
/prefs:network.proxy.http:192.l68.1.1
/prefs:network.proxy.http_port:8001
/prefs:network.proxy.no_proxies_on:
/prefs:network.proxy.share_proxy_settings:true

Note: browser.cache.disk.enable:false is automatically added to prefs.js if the parameter if not


specified in the prefs.js file, other parameters may be added as well (see the /useragent and
/proxy arguments).
The parameter /showprefs can be used to show the current content of the configuration file.

WebSpeedTest

0.103 21.Nov.2011

13

Installation and Operation

3.3.3 IP Hook
WebSpeedTest uses the IP filter driver iphook.sys to monitor IP traffic via the Windows 2000/XP
packet filter hook. Note that Windows versions prior to 2000/XP do not support the packet filter
hook.
Note: The driver is automatically installed by WebSpeedTest prior to the creation of the web
browser component and de-installed after the measurement is completed. Note that administrative
rights are required to install and start the packet filter driver.
The filter driver is used to count the IP payload and calculate throughput per second, the
measured values are written to the measurement results (columns hk_tx_b and hk_rx_b) and to
the log file (columns ip_hook_txbytes and ip_hook_rxbytes).
Several arguments can be used to modify the IP hook behavior:
/nohook

do not use IP hook driver (same as deleting or renaming iphook.sys)

/dumptraffic

display IP hook packet information on stderr (or stdout/the logfile if specified)

/hkfilter:<addr>

set IP filter to specified IP address (just one single remote IP address is

specified)
/hkfilter:<addr> or /hkfilter!:<addr> include or exclude an interface number from packet
hook. This argument might be useful to avoid byte and packet counting on LAN interfaces when
evaluating RAS connections and the LAN interface has active connections. Please note that the
interface number is the internal number used by the packet filter hook. The interface number for
RAS connection changes every time a connection is opened, the number for LAN connections can
change if the connection is stopped and restarted. Use the column netcap_ipaddrs in the master
log file to get the active interface numbers.

3.3.4 Using Microsoft NetCap


WebSpeedTest can execute the NetCap packet sniffer to capture the network traffic for later
analysis. Please note that in combination with the Test Scheduling System (TSS) it is
recommended that TSS operates the packet sniffer for the target internet connection. TSS has
better knowledge of the internet connection and supports various packet sniffers.
NetCap is a network sniffer provided by Microsoft for Windows 2000 and above. It is available for
free download for example in the Windows XP support tools.
/netcapexe:<fn>

specifies the executable file name for NetCAP

specifies additional arguments for NetCAP. Please note that /C and /N are
provided automatically.
/netcapargs:<arg>

interface name for NetCAP. The name is only required for LAN connections,
otherwise the RAS interface name WAN (PPP/SLIP) Interface is used.
/netcapif:<if>

/netcaplog:<fn>

log file name for NetCAP. Placeholders $time$ and $loop$ are supported.

3.3.5 WS2 interception


Important: WebSpeedTest 0.86 and above uses internal function interception for compatibility
with Windows Vista and above. A custom ws2_32.dll is not required in these versions (and will not
work in Windows Vista and above).
3.3.5.1 Interception methods
WS2 interception is a powerful, but complex method to perform several tasks offered by
WebSpeedTest:

Byte counting on socket level (socket payload bytes)


TCP/UDP protocol analysis (socket payload bytes, socket counting)
HTTP protocol analysis (HTTP payload bytes, request counting)
HTTP header modification

WS2 interception uses either internal function interception or a proxy ws2_32.dll located in the
application directory. Usually Windows will load this dll for the process prior to the ws2_32.dll
located in the %WINDIR%\System32 directory. Unfortunately some applications such as the
WebSpeedTest

0.103 21.Nov.2011

14

Installation and Operation

McAfee Personal Firewall change the load sequence and load the original system dll even if a local
version exists. In this case the system ws2_32.dll has to be replaced to support WS2 interception.
Note: replacing the system ws2_32.dll can influence your entire system, you should only apply
header replacement manually if you recently have created a backup of your machine and are able
to restore it. This procedure is not applicable for Windows Vista and above.
3.3.5.2 Disabling WS2 interception
Use the command line arguments /nows2hook or /nows2ext to disable windows sockets inmemory interception and socket extensions in case of problems.
3.3.5.3 Replacing the system ws2_32.dll
Usually the system ws2_32.dll located in %WINDIR%\system32 is in use by the system and
cannot directly be replaced. Fortunately it can be renamed while the system is running and a new
version can be installed.
ws2_32.dll replacement works in several steps:
Important: Any copies of ws2_32.dll in the DllCache or ServicePackFiles have to be removed
or renamed to prevent the system file protection from restoring these files.
If the original ws2_32.dll is in place, it is renamed to ws2_32_win.dll. This step has to be
skipped if a proxy dll is already installed (i.e. the original ws2_32.dll has already been moved to
ws2_32_win.dll).
The proxy dll is copied to %WINDIR%\system32.
Important: If your system prompts for a CD to repair the changed system file choose cancel.
Depending on your system a restart may be required to release any existing references to the
original dll.
WebSpeedTest supports these steps by applying the argument /replacesocket.
Note: It is strongly recommended to use this argument to install the proxy dll instead of manually
copying the file.
Note: The proxy dll should only be installed to the system directory if it is absolutely necessary
and no other workaround is available. You should have a system backup in case problems occur
after replacing the system ws2_32.dll.
3.3.5.4 Restoring the original ws2_32.dll
To

restore the original dll the procedure described above has to be reversed:
rename the proxy dll from ws2_32.dll to ws2_32_proxy.dll (it cannot be deleted if it's in use)
rename the original ws2_32_win.dll to ws2_32.dll
restart your system

WebSpeedTest supports removing the proxy dll with the /restoresocket switch.

3.3.6 TCP/UDP protocol analysis


If WS2 interception is properly working, TCP and UDP protocols are automatically analyzed. The
result parameters available in the log file are:
the number of sockets created (num_tcp_sockets, num_oth_sockets)
the maximum number of simultaneously opened sockets (max_tcp_sockets, max_oth_sockets)
the number of sockets opened at the end o the measurement (rem_tcp_sockets,
rem_oth_sockets)
the number of socket connects (num_tcp_connect, num_oth_connect)
the number of bytes transmitted (num_tcp_txbytes, num_oth_txbytes)
the number of bytes received (num_tcp_rxbytes, num_oth_rxbytes)

3.3.7 HTTP protocol analysis


If WS2 interception is properly working, HTTP requests are automatically analyzed. The result
parameters available in the log file are:
the maximum number of parallel HTTP GET or POST requests (max_http_sockets)
the number of HTTP GET or POST requests (num_http_request)
the number of HTTP requests that are successfully sent (http_tx_ok)
the number of HTTP requests that are successfully received (http_rx_ok)
WebSpeedTest

0.103 21.Nov.2011

15

Installation and Operation

the number of HTTP payload bytes sent (http_txbytes)


the number of HTTP payload bytes received (http_rxbytes)
In addition to these results, a detailed log file of all HTTP request and response headers including
time stamps, IP addresses and ports, round trip times etc. are written to the HTTP log file if the
parameter /loghttp is specified.
This parameter can be specified in two forms: /loghttp:<file> overwrites an existing log file while
/loghttp+:<file> appends the output to existing files.

3.3.8 HTTP header modification


HTTP header modification is carried out deep in the proxy ws2_32.dll and results in individual
HTTP request headers being modified or removed from the HTTP request.
Note: Though theoretically all HTTP parameters can be modified, certain parameters should not
be touched, e.g. Host, Connection, Proxy-Connection, Referer etc.
The argument /header allows headers to be modified or removed from the request:
/header:<identifier>:<value> adds or modifies a header parameter
/header:<identifier> removes an existing header parameter
Note: The HTTP log file specified with /loghttp contains the modified HTTP headers.

3.3.9 Proxy server specification


Proxy specification is available for both Internet Explorer and Mozilla though different methods are
used.
For Internet Explorer the proxy server configuration is changed with the IE helper API.
For Mozilla several parameters are adjusted in prefs.js.
The arguments required are
name of proxy server to be used (e.g. /proxyname:proxy.my.org). If the proxy
server name is empty, a direct connection will be used.

/proxyname:<px>

RAS connection for proxy server. Usually no connection or the specified RAS
connection is used. If this is not correct, the proper RAS connection has to be specified for
Internet Explorer. This argument is not required for Mozilla.

/proxyconn:<cn>

Proxy server configuration for Internet Explorer


The proxy server is internally configured using the IE helper API, it is important to specify the
correct RAS connection (or none if the LAN connection is used).
Proxy server configuration for Mozilla
Several parameters are automatically configured if the /proxyname argument is applied:
network.proxy.type:1 or 0
network.proxy.http:<proxy>
network.proxy.http_port:<port>
network.proxy.no_proxies_on:
network.proxy.share_proxy_settings:true

3.3.10 User agent specification


User agent modification can be specified for Internet Explorer and Mozilla though different
methods are used:
Internet Explorer requires header modification and thus WS2 interception to change the user
agent.
Mozilla supports changing the user agent with the general.useragent.override parameter in
prefs.js.
The user agent can be specified with the argument
/useragent:<ag>

user agent to be used (Mozilla or IE with header modification)

User agent configuration for Internet Explorer


The proxy server for Internet Explorer is changed by internally adding the argument
/header:User-Agent:"<agent>"

WebSpeedTest

0.103 21.Nov.2011

16

Installation and Operation

User agent configuration for Mozilla


The proxy server for Internet Explorer is changed by internally adding the argument
/prefs:general.useragent.override:"<agent>"

3.3.11 Maximum number of sockets


The maximum number of sockets can be specified for Internet Explorer and Mozilla though
different methods are used:
Internet Explorer accepts the parameters in the registry to limit the maximum number of
connections per server (MaxConnectionsPerServer and MaxConnectionsPer1_0Server).
Mozilla supports changing the maximum number of connections with a parameter in the
prefs.js file (network.http.max-connections).
The maximum number of connections can be specified with the argument
/numsockets:<n>

number of connections per server (IE) or number of connections (Mozilla)

User agent configuration for Internet Explorer


The proxy server for Internet Explorer is changed by internally by applying the registry parameters
MaxConnectionsPerServer and MaxConnectionsPer1_0Server in the HKEY_CURRENT_USER registry
key Software\\Microsoft\\Windows\\CurrentVersion\\Internet Settings.
User agent configuration for Mozilla
The proxy server for Internet Explorer is changed by internally adding the argument
/prefs:network.http.max-connections:<n>

WebSpeedTest

0.103 21.Nov.2011

17

Installation and Operation

Chapter

Technical Reference
This chapter includes the technical specifications of WebSpeedTest.

4.1 Default measurement results


The default measurement results are written to stdout. The data consists of one header line starting with
and a data line starting with download-result.

download-legend

4.1.1 Data format reference


The header line is for informational purposes only, the data line contains several measurement values:

status

indicates the measurement status, possible values are


rasfail RAS connection could not be established
control web browser control could not be created
done measurement finished properly (download count reached 0)
failed measurement terminated with errors (timeout, interrupted by user)
except an error or exception has occured
duration
measurement duration in seconds
skt_duration measurement duration on socket level in seconds
ws_tx_b
number of bytes transmitted on socket level (WS2 interception, socket payload)
ws_rx_b
number of bytes received on socket level (WS2 interception, socket payload)
hk_tx_b
number of bytes transmitted on IP level (hook driver, IP payload + IP headers)
hk_rx_b
number of bytes transmitted on IP level (hook driver, IP payload + IP headers)
docs_started number of web browser's BeforeNavigate events
docs_done number of web browser's DocumentComplete events
num_sock number of sockets that have been opened (WS2 interception)
max_sock maximum number of sockets that have been simultaneously opened (WS2
interception)
num_conn number of socket connects (WS2 interception)
num_req
number of HTTP requests (WS2 interception)
num_ok
number of HTTP requests that have been successfully finished (WS2 interception)

4.1.2 Sample data


A typical measurement data set is
download-legend: status; duration; skt_duration; ws_tx_b; ws_rx_b; hk_tx_b; hk_rx_b;
docs_started; docs_done; num_sock; max_sock; num_conn; num_req; num_ok
download-result: done
s;
5.818;
5.717; 11532; 151451;
18686; 160811;
2; 2; 22; 17; 22; 27; 27

4.1.3 Additional information


Depending on your requirements it might be useful to evaluate not only the status field, but to include
additional checks if num_req is a minimum value and num_ok is equal to num_req. Checking the
receive bytes can be useful as well.

WebSpeedTest

0.103 21.Nov.2011

18

Technical Reference

4.2 Measurement log file


The measurement log file contains more detailed results in a tab separated form if specified with the
command line argument /result.

4.2.1 Data format reference


The measurement log file contains several header lines starting with a semicolon followed by data
lines separated by tabs. Additional data lines are automatically added to the log file, the header
information is only added if the file does not exist.

status

indicates the measurement status, possible values are


rasfail RAS connection could not be established
control web browser control could not be created
done measurement finished properly (download count reached 0)
failed measurement terminated with errors (timeout, canceled by user)
except an error or exception has occurred
loop number
random URL was used
measurement start date and time

loop
random
start time
dl_time
tr_time
ws2_32_txbytes
ws2_32_rxbytes
ws2_32_rx_stop
ws2_32_max_idle
ip_hook_txbytes
ip_hook_rxbytes
ip_hook_tx kb/s
ip_hook_rx kb/s

measurement duration in seconds (download time, please refer to m.3011)


measurement duration on socket level in seconds (transaction time, m.3020)

br_docs_start
br_docs_done
br_docs_incompl

number of web browser's BeforeNavigate events


number of web browser's DocumentComplete events
number of web browser's incomplete documents (start - done)

num_tcp_sockets
max_tcp_sockets
rem_tcp_sockets
num_tcp_connect
tcp_txbytes
tcp_rxbytes
tcp_peak_tx kb/s
tcp_peak_rx kb/s
tcp_dns_delay
tcp_conn_time
ips_acc_time
tcp_xfer_time

number of TCP sockets that have been opened (WS2 intercept)


maximum number of TCP sockets simultaneously opened (WS2 interception)
number of TCP sockets still open at the end of the measurement (WS2 int.)
number of TCP socket connects (WS2 interception)
number of TCP bytes transmitted (WS2 interception)
number of TCP bytes received (WS2 interception)
TCP transmit peak throughput (2 second base, WS2 interception)
TCP receive peak throughput (2 second base, WS2 interception)
time from meas start until first TCP connect (browser lag + DNS, m.3097)
first TCP connect time (i.e. first RTT, refer to m.3094)
IP service access time (i.e. first connect to response, refer to m.3095)
TCP data transfer time (first connect to last transfer, refer to m.3096)

num_oth_sockets
max_oth_sockets
rem_oth_sockets
num_oth_connect
oth_txbytes
oth_rxbytes

number of non-TCP sockets that have been opened (WS2 intercept)


maximum number of non-TCP sockets that simultaneously opened (WS2 int.)
number of non-TCP sockets still open at the end of the measurement
number of non-TCP socket connects (WS2 interception)
number of non-TCP bytes transmitted (WS2 interception)
number of non-TCP bytes received (WS2 interception)

max_http_sockets
http_request
http_tx_ok
http_rx_ok
http_txbytes
http_rxbytes

maximum number of parallel HTTP GET or POST requests (WS2 interception)


number of HTTP GET or POST requests (WS2 interception)
number of HTTP requests that have been successfully transmitted (WS2 int.)
number of HTTP requests that have been successfully finished (WS2 int.)
number of HTTP payload bytes transmitted (without HTTP headers, WS2 int.)
number of HTTP payload bytes received (without HTTP headers, WS2 int.)

WebSpeedTest

number of bytes transmitted on socket level (WS2 interception, socket payload)


number of bytes received on socket level (WS2 interception, socket payload)
number of bytes received on socket level (@ stop trigger of dl_time, m.3025)
maximum time without socket data transfer (refer to m.3026)
number of bytes transmitted on IP level (hook driver, IP payload + IP headers)
number of bytes transmitted on IP level (hook driver, IP payload + IP headers)
IP level tx throughput in 1000bit/s (8 * ip_hook_txbytes / dl_time)
IP level rx throughput in 1000bit/s (8 * ip_hook_rxbytes / dl_time)

0.103 21.Nov.2011

19

Technical Reference

http_rxdecomp

number of HTTP payload bytes after gzip decompression (WS2 int.)

pl_status
pl_bytes
pl_time

preload status (1 = success, 0 = none, -1 = failed)


http payload bytes returned by preload
... preload time in ms

browser
browser (IE or mozilla)
suffix
user defined value provided with /ressuffix argument
url
URL that has been downloaded
own_ipaddrs
list of IP addresses associated to the machine's interfaces during the meas.
iphook_ipaddrs_own list of IP addresses captured by the PF hook, format: <ipaddr>(<iface_no>)
iphook_ipaddrs_rem list of IP addresses captured by the PF hook, format: <ipaddr>(<iface_no>)
Additional columns if argument /youtube is specified: =0.103=

video_id
vd_quality
vd_codec
vd_url

youtube video ID as provided by javascript code


video quality as provided by javascript code
video codec as provided by javascript code
video URL as provided by javascript code

fp_total_loaded
fp_bytes_loaded
fp_bytes_total
fp_bytes_start
fp_video_time

total # of bytes loaded by flash player (for all quality levels)


# of bytes loaded by flash player at end of measurement (final quality level)
# of bytes in video stream reported by flash player (final quality level)
start offset in video stream for flash player (final quality level)
nominal video duration as reported by flash player

total_play_time
netto_play_time
num_relvnt_stalls
relvnt_stall_time
total_stall_time
player_ready_time
player_buf_time
play_delay
vd_transact_time
compression
playback_rate

total video play time (including stalls, m.3220)


netto video play time (without stalls, m.3221)
number of relevant stalls longer than allowed threshold (m.3222)
total duration of relevant stalls (longer than allowed threshold, m.3223)
total duration of all stalls (including short ones, m.3224)
time from BeforeNavigate event until player starts buffering (m.3225)
player buffering time until start of playing (m.3226)
time from BeforeNavigate event until start of playing (m.3227)
total video transaction time (from BeforeNavigate event until stop, m.3228)
fraction of fp_bytes_loaded to configured nominal # of bytes (m.3230)
average playback bit rate (fp_total_loaded / netto_play_time * 8, m.3231)

vs_requests
vs_bytes
vs_acc_time
vs_xfer_time
vs_transact_time
vs_thput

number of HTTP requests containing video streams (using URL filter, m.3240)
number of HTTP header + payload bytes loaded in video streams (m.3241)
IP service access time for first video stream request (m.3242)
data transfer time for all video stream requests (m.3243)
transaction time for video streams (BeforeNavigate to last data byte, m.3244)
average TCP payload throughput for video streams (m.3245)

4.2.2 Sample data


A typical measurement data set is
;note: ws2_32 bytes are TCP+UDP PAYLOAD
;note: ip_hook bytes are IP TOTAL (=TCP+UDP payload + TCP+UDP headers +
;-STAT- -TIME------------------ ------- -SOCK-- ------- -HOOK-- ------;status start time
dl_time ws2_32 ws2_32 ip_hook ip_hook
;
[sec] txbytes rxbytes txbytes rxbytes
;------ ----------------------- ------- ------- ------- ------- ------done
20.10.2006 00:19:52.411
2.524
10188 116852
16005 123892
done
20.10.2006 00:30:22.857
0.911
10189 116832
14607 114187
done
20.10.2006 00:30:28.035
0.841
10186 116829
14047 114917
-TCP--num tcp
sockets
------18
18
18
------other
rxbytes
-------

------max tcp
sockets
------12
13
13
-HTTP-maxhttp
sockets
-------

WebSpeedTest

------rem tcp
sockets
------9
9
9
------http
request
-------

------num tcp
connect
------18
18
18
------http
tx_ok
-------

0.103 21.Nov.2011

------tcp
txbytes
------10115
10114
10114
------http
rx_ok
-------

------tcp
rxbytes
------116779
116757
116757
------http
txbytes
-------

20

-OTHERnum oth
sockets
------1
1
1
------http
rxbytes
-------

------max oth
sockets
------1
1
1
-INFO-browser

IP headers)
-BROWS- ------br docs br docs
start finishd
------- ------4
4
4
4
4
4

------- ------rem oth num oth


sockets connect
------- ------1
1
1
1
1
1
--------url

------other
txbytes
------73
75
72

------- ---------

Technical Reference

73
75
72

11
11
11

29
29
29

29
29
29

29
29
29

0
0
0

108017 IE
108015 IE
108015 IE

www.orf.at
www.orf.at
www.orf.at

4.2.3 Additional information


Depending on your requirements it might be useful to evaluate not only the status field, but to include
additional checks if http_request is a minimum value and http_rx_ok is equal to http_request.
Checking the receive bytes can be useful as well.

4.3 HTTP log file


The HTTP log file lists the decoded HTTP requests in the order of their occurrence. Though the file
format is machine readable it is mainly intended for debugging purposes and error tracking.

4.3.1 Data format reference


The HTTP log file uses a format similar to the HTTP protocol i.e. blocks of data are separated by
empty lines.
The main layout of the file is
measurement separator (---MEAS-START---, several measurements are separated via these lines)
HTTP request block
HTTP response block
HTTP request block
HTTP response block
The measurement separator separates several measurements or loop iterations and contains
important time information.
The measurement start time in calendar format (yyyy-mm-dd hh:nn:ss.sss)
The internal counter value at start time
The offset from the measurement start time to the browser navigate command (i.e. the real start
time is the measurement start time plus this offset)
The format of a block is as follows:
http_request or http_response including the data length
http_request_info including IP addresses and time stamps
HTTP headers including the transmitted or received HTTP headers
optional data separator (--Uplink-- or --Downlink--)
optional hex dump of first 128 data bytes
optional data separator (--Decompressed--)
optional hex dump of first 128 decompressed data bytes
The data fields in http_request are:
tx_bytes
number of bytes transmitted on socket level
tx_bytes_hdr
number of bytes transmitted that are HTTP headers
tx_bytes_data
number of bytes transmitted that are data bytes (POST requests only)
content_length
content length if specified in the request, -1 otherwise
tx_content_failed this value is set to true if tx_bytes_data does not match the content_length.
unclosed
this value is added and set to true if the socket has not been closed
The data fields in http_request_info are:
conn_stamp
socket connection time stamp (even if not the first request on the socket)
tx_stamp
first tx time stamp (for the current request)
rx_stamp
last rx time stamp (for the current request)
tcp_dl_time
time from first tx to last rx
tcp_conn_time
time from socket connection to first tx or -1 if a successive first request
local_addr
local IP address and port
remote_addr
remote IP address and port
The data fields in http_response are:
rx_bytes
number of bytes
rx_bytes_hdr
number of bytes
tx_bytes_data
number of bytes
content_length
content length if
WebSpeedTest

0.103 21.Nov.2011

received on socket level


received that are HTTP headers
received that are data bytes (i.e. HTTP payload bytes)
specified in the request, -1 otherwise
21

Technical Reference

rx_content_failed
unclosed

this value is set to true if rx_bytes_data does not match the content_length.
this value is added and set to true if the socket has not been closed

4.3.2 Sample data


A typical HTTP log file is
---MEAS-START--------- 14.09.2010 10:36:49.763 = 685187937, ofs = 16 --------------------http_request: tx_bytes=321, tx_bytes_hdr=321, tx_bytes_data=0, content_length=-1
http_request_info: conn_stamp=685188000=63, first_tx_stamp=685188031=94, 
 last_tx_stamp=685188031=94, first_rx_stamp=685188031=156, last_rx_stamp=685188125=188, 
 tcp_req_time=94, tcp_conn_time=31, local_addr="IP 192.168.23.43:28926",
 remote_addr="IP 66.249.92.104:80"
GET / HTTP/1.1
Accept: */*
Accept-Language: de-at
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322; 
 .NET CLR 2.0.50727)
Host: www.google.at
Connection: Keep-Alive
Cookie: PREF=ID=6fdfb11dd5ef8a69:TM=1284453317:LM=1284453317:S=UaciWLh9SA8BCsRs
http_response: rx_bytes=5064, rx_bytes_hdr=236, rx_bytes_data=4828, content_length=4828, 
 reused=true
HTTP/1.1 200 OK
Date: Tue, 14 Sep 2010 08:36:50 GMT
Expires: -1
Cache-Control: private, max-age=0
Content-Type: text/html; charset=UTF-8
Content-Encoding: gzip
Server: gws
Content-Length: 4828
X-XSS-Protection: 1; mode=block
--Downlink-1f 8b 08 00 00 00 00 00 02 ff ad 5a db 5a db c8
..Z.Z..
b2 be cf 53 28 ca 8a b1 06 59 3e 60 0e b1 90 e7
S(.Y>`.
33 04 12 72 22 09 30 99 2c 76 16 5f 4b 6a 49 8d
3..r".0.,v._KjI.
5b 07 a4 b6 0d 18 bf c6 be da 8f 32 77 f3 62 ab
[.2w.b.
aa 25 d9 b2 31 c9 5c 6c be c4 52 9f fe ae ae aa
.%..1.\l..R..
ae 43 b7 f6 9f bb b1 23 ee 12 aa 04 22 e4 fd fd
.C..#."
e2 97 12 b7 bf 1f 52 41 a0 5a 24 0d 7a 33 62 63
RA.Z$.z3bc
4b 75 e2 48 d0 48 34 b0 bf aa 14 25 4b 15 f4 56
Ku.H.H4.%K..V
http_request: tx_bytes=372, tx_bytes_hdr=372, tx_bytes_data=0, content_length=-1
http_request_info: conn_stamp=685188000=63, first_tx_stamp=685188125=188, 
 last_tx_stamp=685188125=188, first_rx_stamp=685188125=250, last_rx_stamp=685188187=250, 
 tcp_req_time=62, tcp_conn_time=-1, local_addr="IP 192.168.23.43:28926",
 remote_addr="IP 66.249.92.104:80"
GET /images/close_sm.gif HTTP/1.1
Accept: */*
Referer: http://www.google.at/
Accept-Language: de-at
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322; 
 .NET CLR 2.0.50727)
Host: www.google.at
Connection: Keep-Alive
Cookie: PREF=ID=6fdfb11dd5ef8a69:TM=1284453317:LM=1284453317:S=UaciWLh9SA8BCsRs
http_response: rx_bytes=385, rx_bytes_hdr=309, rx_bytes_data=76, content_length=76, 
 reused=true
HTTP/1.1 200 OK
Content-Type: image/gif
Last-Modified: Thu, 25 Mar 2010 09:42:43 GMT
Date: Tue, 14 Sep 2010 08:36:50 GMT
Expires: Tue, 14 Sep 2010 08:36:50 GMT
Cache-Control: private, max-age=31536000
X-Content-Type-Options: nosniff
Server: sffe
Content-Length: 76
X-XSS-Protection: 1; mode=block
--Downlink47 49 46 38 39 61 0c 00 0c 00 91 00 00 94 ae d6
GIF89a.
e7 ef ff ff ff ff 00 00 00 21 f9 04 00 00 00 00
!
00 2c 00 00 00 00 0c 00 0c 00 00 02 1d 14 8e 69
.,.i
c1 ed 17 60 83 54 a2 08 58 b2 59 5f 3f 7d 98 97
`.T..X.Y_?}..

WebSpeedTest

0.103 21.Nov.2011

22

Technical Reference

80 df 55 3d 99 e4 3c c6 a6 14 00 3b

..U=..<.;

4.4 Socket log file


The socket log file lists decoded HTTP requests sorted by socket. Though the file format is machine
readable it is mainly intended for debugging purposes and error tracking.

4.4.1 Data format reference


The socket log file uses a text format separated by ---MEAS-START--- markers.
The format is
measurement separator (---MEAS-START---, several measurements are separated via these lines)
socket identifier (IP <local addr>:<local port>-<remote addr>:<remote port>)
HTTP request
HTTP request
socket identifier
HTTP request
The measurement separator separates several measurements or loop iterations and contains
important time information.
The measurement start time in calendar format (yyyy-mm-dd hh:nn:ss.sss)
The internal counter value at start time
The offset from the measurement start time to the browser navigate command (i.e. the real start
time is the measurement start time plus this offset)
The HTTP requests start with two blanks and use a tab separated format:
uplink/downlink info
connection time stamp (relative to ---MEAS-START---)
transmission start stamp (relative to ---MEAS-START---)
reception stop stamp (relative to ---MEAS-START---)
HTTP GET/POST request
The uplink/downlink info block contains one character per second (relative to ---MEAS-START---).
Possible characters are
. no transmission during the time period
T transmission (i.e. outgoing request)
R reception (i.e. incoming response)
X both transmission and reception

4.4.2 Sample data


A typical socket log file is
---MEAS-START-------------------- 20.12.2007 01:37:06.218 = 193173000 -------------;socket
ul/dl info [sec]
conn [ms]
start [ms]
stop [ms]
request
IP 192.168.23.62:3981-IP 195.69.192.140:80
..TR 234
5375
6281
GET / HTTP/1.1
TR.. 234
6406
7843
GET /css/oebb.css HTTP/1.1
.TR. 234
7953
8906
GET /Grafiken/Head/head_background.jpg HTTP/1.1
X
234
9437
9937
GET /Grafiken/Servicebox/TL1.gif HTTP/1.1
IP 192.168.23.62:3982-IP 195.69.192.140:80
..TR 7968
8906
9421
GET /Grafiken/Head/oebb_head_img.gif HTTP/1.1
X
7968
9453
9937
GET /Grafiken/Head/railteam_de_164x66.gif HTTP/1.1
---MEAS-START--------------------------- 20.12.2007 01:37:16.468 = 193183250 ------------;socket
ul/dl info [sec]
conn [ms]
start [ms]
stop [ms]
request
IP 192.168.23.62:3984-IP 195.69.192.140:80
TR.. -2250 109
4953
GET / HTTP/1.1
..TR -2250 5000
9953
GET /css/oebb.css HTTP/1.1
X
-2250 9984
9984
GET /Grafiken/Head/head_background.jpg HTTP/1.1

4.5 URL log file


The URL log file is similar to the Socket log file but lists URLS in alphabetical order. This allows to
compare downloads of different test runs.

WebSpeedTest

0.103 21.Nov.2011

23

Technical Reference

4.5.1 Data format reference


The URL log file uses a text format separated by ---MEAS-START--- markers.
The format is
measurement separator (---MEAS-START---, several measurements are separated via these lines)
a header line starting with a semicolon and showing the columns
HTTP request
HTTP request
The measurement separator separates several measurements or loop iterations and contains
important time information.
The measurement start time in calendar format (yyyy-mm-dd hh:nn:ss.sss)
The internal counter value at start time
The offset from the measurement start time to the browser navigate command (i.e. the real start
time is the measurement start time plus this offset)
The header line starts with a semicolon (to mark it as a comment) and presents a tab separated list of
all columns and their units if applicable.
The HTTP request lines use a tab separated format:
remote IP address, consisting of "IP", the IP address and the port
the request (GET/POST)
the path requested on the server
the request version (HTTP/1.1)
the local IP address, consisting of "IP", the IP address and the port
the HTTP status code (200 = OK)
connection time stamp (relative to ---MEAS-START---)
transmission start stamp (relative to ---MEAS-START---)
reception stop stamp (relative to ---MEAS-START---)
the transmitted header bytes
the transmitted payload bytes
the received header bytes
the received payload bytes

4.5.2 Sample data


A typical url log file is
---MEAS-START--------------------------- 2010-09-14 10:36:49.763 = 685187937, ofs = 16 ----;host req
path
vers
socket stat
conn [ms]
start [ms]
stop [ms]

tx_hdr [bytes]
tx_pl [bytes] x_hdr [bytes] rx_pl [bytes]
IP 66.249.92.104:80 GET
/
HTTP/1.1
IP 192.168.23.43:28926 
 200
63
94
188
321
0
236
4828
IP 66.249.92.104:80 GET
/extern_js/f/CgJkkUM.js
HTTP/1.1 IP 192.168.23.43:28932
 200
234
297
438
532
0
319
17369
IP 66.249.92.104:80 GET
/images/cb_c.gif
HTTP/1.1
IP 192.168.23.43:28930
 200
188
250
344
368
0
310
156
IP 66.249.92.104:80 GET
/images/cb_l.gif
HTTP/1.1
IP 192.168.23.43:28928 
200
188
234
313
368
0
310
652
IP 66.249.92.104:80 GET
/images/cb_r.gif
HTTP/1.1
IP 192.168.23.43:28929
 200
188
234
328
368
0
310
654
IP 66.249.92.104:80 GET
/images/chrome_48.gif HTTP/1.1
IP 192.168.23.43:28927
 200
188
234
297
373
0
311
2450
IP 66.249.92.104:80 GET
/images/close_sm.gif HTTP/1.1
IP 192.168.23.43:28926
 200
63
188
250
372
0
309
76
IP 66.249.92.104:80 GET
/images/nav_logo8.png HTTP/1.1
IP 192.168.23.43:28926
 N/A
63
375
375
373
0
0
0
IP 66.249.92.104:80 GET
/intl/en_com/img/logo_plain2.png HTTP/1.1 IP 192.168.23.43:28931
 200
219
266
375
387
0
311
7582

4.6 QTS Ticket file


WebSpeedTest can create XML tickets compatible with the QTS (Quality Ticket System) format if
specified with the command line arguments /report, /scenario and /instance.

WebSpeedTest

0.103 21.Nov.2011

24

Technical Reference

4.6.1 Metric reference


Please refer to the QTS Administrator's manual for a detailed specification of the QTS XML ticket
format. This chapter defines the metrics in the QTS ticket.
Note: throughputs are calculated with =0.102=
thput_time = max(meas_time, socket_time)

The QTS ticket contains one or several scenarios (one scenario per loop iteration).
metrics in QTS ticket
text metric 110 (x.110)

tool, version, branding

WST/0.75 MK

The current tool id, version and branding in form WST/<ver> or WST/<ver> <brand>.
text metric 111 (x.111)

task

WST.Web

The task description. The value is always WST.Web.


text metric 3001 (x.3001)

browser

IE or Mozilla

The browser control used for the measurement (IE or Mozilla).


num. metric 3002 (m.3002)

random

0 or 1

1 if random URL parameters have been used for the current request/loop iteration.
text metric 3003 (x.3003)

URL

<url>

The URL as specified in the command line.


text metric 3004 (x.3004)

user suffix

<suffix>

The user defined suffix as specified with command line argument /ressuffix.
num. metric 3005 (m.3005)

loop

<loop>

status

<status>

The current loop iteration (1..N).


text metric 3010 (x.3010)

The measurement status (rasfail, control, done, failed, except).


num. metric 3011 (m.3011)

meas_time

<sec>

Measurement duration in seconds (as reported by the browser component).


start trigger: start of measurement (browser's BeforeNavigate event)
stop trigger: browser's last matching DocumentComplete event

Important: If the argument /closedly is used, the main page load time (m.3011) is not a suitable
performance indicator as it uses the DocumentComplete stop trigger that is probably not the end
of the data transfers. You should use the socket transaction time (m.3020) in this case.
Important: If the argument /youtube is used, m.3011 only describes the main page load time,
but not the video stream and other content. While m.3011 still is a valid metric for the main page,
m.3244 should be used to analyze the video streaming transaction.
num. metric 3020 (m.3020)

socket_transact_time

<sec>

Measurement duration in seconds (as derived from socket interception).


start trigger: start of measurement (browser's BeforeNavigate event)
stop trigger: last TCP/UDP payload bytes received by windows sockets

Important: If the argument /youtube is used, m.3020 describes all HTTP requests within the
measurement. These include the main page, javascript and flash code, the video streams and
additional finalization requests. Thus m.3020 may be larger than m.3244, that can be used to
analyze the video streaming transaction.
num. metric 3021 (m.3021)

ws2_32_txbytes

<bytes>

Number of bytes transmitted on socket level (WS2 interception, TX TCP+UDP socket payload),
trigger points as in m.3020.
num. metric 3022 (m.3022)

ws2_32_rxbytes

<bytes>

Number of bytes received on socket level (WS2 interception, RX TCP + UDP socket payload), trigger
points as in m.3020,
num. metric 3023 (m.3023)

ws2_32_txthput

<bit/s>

Average transmit throughput (WS2 interception, m.3021 / max(m.3011, m.3020) * 8).


num. metric 3024 (m.3024)

ws2_32_rxthput

<bit/s>

Average receive throughput (WS2 interception, m.3022 / max(m.3011, m.3020) * 8).


num. metric 3025 (m.3025)

ws2_32_rx_stop

<bytes>

Number of bytes received on socket level until browser's stop trigger (i.e. bytes transferred during
m.3011). Trigger points as in m.3011.
WebSpeedTest

0.103 21.Nov.2011

25

Technical Reference

num. metric 3026 (m.3026)

ws2_32_max_idle

<sec>

Maximum socket time between send/receive events, i.e. maximum time without a data transfer.
Trigger points: max. time between socket receive operations returning data
num. metric 3031 (m.3031)

ip_hk_txbytes

<bytes>

Number of bytes transmitted on IP level (hook driver, IP payload + IP headers). Note: can contain
traffic from other processes in the system, too.
start trigger: start of measurement
stop trigger: end of measurement + 1 second (to compensate driver lag)
num. metric 3032 (m.3032)

ip_hk_rxbytes

<bytes>

Number of bytes received on IP level (hook driver, IP payload + IP headers). Note: can contain
traffic from other processes in the system, too. Trigger points as in m.3031.
num. metric 3033 (m.3033)

ip_hk_txthput

<bit/s>

Average transmit throughput (hook driver, m.3031 / max(m.3011, m.3020) * 8).


num. metric 3034 (m.3034)

ip_hk_rxthput

<bit/s>

Average receive throughput (hook driver, m.3032 / max(m.3011, m.3020) * 8).


num. metric 3040 (m.3040)

br_docs_started

<docs>

Number of web browser's BeforeNavigate events.


num. metric 3041 (m.3041)

br_docs_finished

<docs>

Number of web browser's DocumentComplete events.


num. metric 3042 (m.3042)

br_docs_incomplete

<docs>

Number of web browser's incomplete documents (i.e. number of documents without matching
BeforeNavigate/DocumentComplete events).
num. metric 3050 (m.3050)

num_tcp_sockets

<sockets>

Number of TCP sockets that have been opened (WS2 interception).


num. metric 3051 (m.3051)

max_tcp_sockets

<sockets>

Maximum number of TCP sockets simultaneously opened (WS2 interception).


num. metric 3052 (m.3052)

rem_tcp_sockets

<sockets>

Number of TCP sockets still open at the end of the measurement.


num. metric 3053 (m.3053)

num_tcp_connects

<requests>

Number of TCP socket connects (WS2 interception).


num. metric 3054 (m.3054)

tcp_txbytes

<bytes>

Number of TCP bytes transmitted (WS2 interception, socket payload only).


num. metric 3055 (m.3055)

tcp_rxbytes

<bytes>

Number of TCP bytes received (WS2 interception, socket payload only).


num. metric 3056 (m.3056)

tcp_tx_thput

<bit/s>

Average TCP transmit throughput (m.3054 / max(m.3011, m.3020) * 8).


num. metric 3057 (m.3057)

tcp_rx_thput

<bit/s>

Average TCP receive throughput (m.3057 / max(m.3011, m.3020) * 8).


num. metric 3058 (m.3058)

tcp_tx_peak_thput

<bit/s>

TCP transmit peak throughput (2 second base, WS2 interception, socket payload only)
num. metric 3059 (m.3059)

tcp_rx_peak_thput

<bit/s>

TCP receive peak throughput (2 second base, WS2 interception, socket payload only)
num. metric 3060 (m.3060)

num_oth_sockets

<sockets>

Number of non-TCP sockets that have been opened (WS2 interception).


num. metric 3061 (m.3061)

max_oth_sockets

<sockets>

Maximum number of non-TCP sockets simultaneously opened (WS2 interception).


num. metric 3062 (m.3062)

rem_oth_sockets

<sockets>

Number of non-TCP sockets still open at the end of the measurement (WS2 interception).
num. metric 3063 (m.3063)

num_oth_connects

<requests>

Number of non-TCP socket connects (WS2 interception).


num. metric 3064 (m.3064)

oth_txbytes

<bytes>

Number of non-TCP bytes transmitted (WS2 interception, socket payload only).


num. metric 3065 (m.3065)

oth_txbytes

<bytes>

Number of non-TCP bytes received (WS2 interception, socket payload only).

WebSpeedTest

0.103 21.Nov.2011

26

Technical Reference

num. metric 3070 (m.3070)

http_max_sockets

<sockets>

Maximum number of parallel HTTP GET or POST requests (WS2 interception).


num. metric 3071 (m.3071)

http_req_total

<requests>

Number of HTTP GET or POST requests (WS2 interception).


num. metric 3072 (m.3072)

http_req_tx_ok

<requests>

Number of HTTP requests that have been successfully transmitted (WS2 interception).
num. metric 3073 (m.3073)

http_req_rx_ok

<requests>

Number of HTTP requests that have been successfully finished (WS2 interception).
num. metric 3074 (m.3074)

http_txbytes

<bytes>

Number of HTTP payload bytes transmitted (without HTTP headers, WS2 interception).
num. metric 3075 (m.3075)

http_rxbytes

<bytes>

Number of HTTP payload bytes received (without HTTP headers, WS2 interception).
num. metric 3076 (m.3076)

http_txthput

<bit/s>

Average HTTP transmit throughput (HTTP TX bytes / max(m.3011, m.3020) * 8).


num. metric 3077 (m.3077)

http_rxthput

<bit/s>

Average HTTP receive throughput (HTTP RX bytes / max(m.3011, m.3020) * 8).


num.metric 3078 (m.3078)

http_rxdecomp

<bytes>

Number of HTTP payload bytes after gzip decompression. If no gzip encoding is used, this
parameter is equal to m.3075. If content cannot be decompressed, the value is set to -1. =0.97=
text metric 3080 (x.3080)

own_ipaddrs

<ip addr>[,<ip addr>]

List of IP addresses assigned to the machine's interfaces during the measurement.


text metric 3081 (x.3081)

iphook_ipaddrs_loc

<ip addr>[,<ip addr>]

List of local IP addresses captured by the hook driver.


text metric 3082 (x.3082)

iphook_ipaddrs_rem

<ip addr>[,<ip addr>]

List of remote IP addresses captured by the hook driver.


text metric 3090 (x.3090)

tcp_tx_thput_list

<bytes>[,<bytes>]

List of sent TCP bytes per second (raw), i.e. throughput data for up to 25 seconds (as in m.3056)
text metric 3091 (x.3091)

tcp_4x_thput_list

<bytes>[,<bytes>]

List of received bytes per second (raw), i.e. throughput data for up to 25 seconds (as in m.3057).
text metric 3092 (x.3092)

tcp_tx_thput_filtd

<bytes>[,<bytes>]

List of sent bytes per second (filtered), i.e. throughput data for up to 25 seconds (TCP throughput
data as in m.3056 with smoothing filter applied).
text metric 3093 (x.3093)

tcp_rx_thput_filtd

<bytes>[,<bytes>]

List of received bytes per second (filtered), i.e. throughput data for up to 25 seconds (TCP
throughput data as in m.3056 with smoothing filter applied).
num. metric 3094 (m.3094)

tcp_connect_time

<sec>

First TCP connect time (i.e. first RTT) in seconds. =0.100=


start trigger: first socket connect request
stop trigger: first socket connect success or first transmitted data
num. metric 3095 (m.3095)

ipsvc_access_time

<sec>

IP service access time, i.e. time from first TCP connect until first server response data. =0.100=
start trigger: first socket connect request
stop trigger: first server response with HTTP payload or header data
num. metric 3096 (m.3096)

tcp_xfer_time

<sec>

TCP data transfer time. =0.100=


start trigger: first socket connect request
stop trigger: last socket payload bytes
num. metric 3097 (m.3097)

tcp_dns_delay

<sec>

Delay from start of measurement until first TCP connect. Note: this metric includes a browser lag
(typ. 100..150 ms) and the DNS lookup time. Please calibrate your measurement system in LAN
situations to determine the (nearly) constant browser lag. =0.101=
start trigger: start of measurement (browser's BeforeNavigate event)
stop trigger: first socket connect request
num. metric 3100 (m.3100)

preload_status

Preload status (1 = success, 0 = none, -1 = failed) =0.102=


num. metric 3101 (m.3101)

preload_bytes

<bytes>

HTTP payload bytes returned by preload. =0.102=


WebSpeedTest

0.103 21.Nov.2011

27

Technical Reference

num. metric 3102 (m.3102)

preload_time

<sec>

Time required for HTTP preload. =0.102=


start trigger: socket connect request for preload
stop trigger: socket receive for last data byte of preload

Additional metrics if argument /youtube is specified (sample javascript output can be found in chapter
4.8): =0.103=
text metric 3200 (x.3200)

video_id

Video ID as returned by javascript code (js.9000) typically the 11 digit youtube video ID, i.e. a
configuration parameter in the HTML page, e.g. _BNmXx4p3Vw
text metric 3201 (x.3201)

quality

Video quality as returned by javascript (js.9001). The default HTML page returns the quality
reported by the video player, typically hd1080, hd720, large, medium, small
text metric 3202 (x.3202)

codec

Video codec as returned by javascript (js.9002). Cannot be determined automatically, thus is a


configuration parameter in the HTML file.
text metric 3203 (x.3203)

video URL

Video URL as returned by javascript (js.9003). The default HTML page returns the video URL
provided by the flash player, e.g. http://www.youtube.com/watch?v=_BNmXx4p3Vw&amp;
num. metric 3210 (m.3210)

total_bytes_loaded

<bytes>

All bytes loaded by the video player as returned by javascript (js.9010). The default JS
implementation returns the sum of loaded bytes for all video qualities after playing has started, i.e.
the sum of all player.getVideoBytesLoaded()
Please note that a small part of the video stream for the initial quality (that is loaded before playing
starts) is not included in m.3210 as the player starts loading the target quality stream at position 0
in this case. Thus if quality is changed to a higher level by the script at the beginning of the
download, these extra bytes are ignored in m.3210. In this case m.3210 and m.3211 contain the
same value, the number of bytes loaded for the target quality level.
If the quality is changed during measurement (either by script or interactively), m.3210 will contain
all bytes loaded while m.3211 will only contain the bytes loaded for the last quality level.
num. metric 3211 (m.3211)

video_bytes_loaded

<bytes>

Bytes loaded by video player for the last video stream or quality level (js.9011). The default JS
implementation returns the player's number of bytes loaded for the target quality level, i.e.
player.getVideoBytesLoaded()
num. metric 3212 (m.3212)

video_bytes_total

<bytes>

The number of bytes for the last video stream or quality level (js.9012). This is the # of bytes that
should have been loaded if the entire stream is played, it should match m.3213 + m.3211. The
default JS implementation returns player.getVideoBytesTotal()
num. metric 3213 (m.3213)

video_bytes_start

<bytes>

The start position in the last video stream or quality level (js.9013). Usually this value should be 0 if
the entire stream has been played with the same quality level. The default JS implementation
returns player.getVideoStartBytes()
num. metric 3214 (m.3214)

video_time

<sec>

The nominal duration of the video stream (js.9014). The default JS implementation returns
player.getCurrentTime() when the stop event occurs.
num. metric 3220 (m.3220)

total_play_time

<sec>

Time from first play event until final stop event (js.9020). This is the total play time including all
video stalls.
start trigger: first JS playing event
stop trigger: JS stop event
num. metric 3221 (m.3221)

netto_play_time

<sec>

The video playing time without stalls, i.e. m.3220 - m.3224. This metric should roughly match
m.3214 if the entire clip has been played, though differences up to 0.5 seconds have been
observed.
num. metric 3222 (m.3222)

num_relvnt_stalls

<int>

Number of relevant stalls, i.e. # of all replay pauses (from buffering event to playing event except
the first pre-buffering phase) larger than the threshold defined in the HTML file. This value should
be zero if no significant stalls have occurred.
WebSpeedTest

0.103 21.Nov.2011

28

Technical Reference

start trigger: JS buffering event (except first one)


stop trigger: JS playing event (except first one)
num. metric 3223 (m.3223)

relvnt_stall_time

<sec>

Cumulated duration of all relevant stalls, i.e. the cumulated time of all events as in m.3222. Trigger
points as in m.3222.
num. metric 3224 (m.3224)

total_stall_time

<sec>

Cumulated duration of all stalls, i.e. cumulated time from buffering event to playing event except
first pre-buffering phase. Trigger points as in m.3222
num. metric 3225 (m.3225)

player_ready_time

<sec>

Time from start of measurement until player is ready to buffer the video stream. Calculated from
js.9025 plus the JS start delay.
start trigger: BeforeNavigate event
stop trigger: first JS buffering event (i.e. player starts pre-buffering)
num. metric 3226 (m.3226)

player_buffer_time

<sec>

Duration of video pre-buffering, i.e. from first buffering event to start of video playback, as provided
in js.9026.
start trigger: first JS buffering event (i.e. player starts pre-buffering)
stop trigger: first JS playing event (i.e. player starts video playback)
num. metric 3227 (m.3227)

play_delay

<sec>

Delay from start of measurement until player starts video playback, calculated as m.3225 + m.3226.
start trigger: BeforeNavigate event
stop trigger: first JS playing event (i.e. player starts video playback)
num. metric 3228 (m.3228)

video_transact_time

<sec>

Total video transaction time from start of measurement until replay is finished.
start trigger: BeforeNavigate event
stop trigger: final JS stop event
num. metric 3230 (m.3230)

compression

<0.0>..<1.0>

Video compression ratio, i.e. loaded bytes divided by nominal bytes as in js.9030. The default
implementation calculates player. getVideoBytesTotal() / cfg_nominal bytes. The nominal number of
bytes is a configuration parameter in the HTML file, thus this metric can be used to detect if the
video was transcoded.
num. metric 3231 (m.3231)

playback_rate

<bit/s>

This is a fictive parameter defining the nominal playback rate of the video as provided in js.9031.
The default JS implementation calculates totalBytesLoaded / netto_playTime_s.
num. metric 3240 (m.3240)

video_http_requests

<int>

Number of HTTP requests matching the filter criteria provided by js.9006. Typically this metric
includes all video streams, e.g. http://<server>/videoplayback*. Please ensure that valid filters are
used for the video streaming server.
If only a single quality level is accessed, this number should be 1, if the quality level is changed by
the script, the number should be 2. In case of communication problems and retries other numbers
may occur.
num. metric 3241 (m.3241)

video_http_bytes

<int>

TCP payload bytes (i.e. HTTP headers + HTTP payload) for all HTTP requests as in m.3240. This
value should roughly match m.3210..m.3212 though it will be higher due to HTTP headers and
discarded requests for lower quality levels.
num. metric 3242 (m.3242)

video_svcacc_time

<sec>

IP service access time for first video stream request (i.e. first HTTP request as in m.3240).
start trigger: socket connect request (similar to SYN) of first request matching filter
stop trigger: first socket recv response with data on same socket (comp. first data packet)
num. metric 3243 (m.3243)

video_xfer_time

<sec>

Data transfer time for all HTTP requests matching filter as in m.3240. This time is used for
throughput calculation, thus it's simply first data packet .. last data packet.
start trigger: first socket recv response on any socket matching filter
stop trigger: last socket recv response on any socket matching filter
num. metric 3244 (m.3244)

video_transact_time

<sec>

Total video transaction time on socket level, i.e. from start of measurement until last video stream
byte is delivered.
start trigger: BeforeNavigate event
stop trigger: last socket recv response on any socket matching filter

WebSpeedTest

0.103 21.Nov.2011

29

Technical Reference

num. metric 3245 (m.3245)

video_http_thput

<bit/s>

Average video stream throughput for all HTTP streams (socket payload = HTTP headers + HTTP
payload). Calculated as m.3241 / m.3243 * 8

4.6.2 Special metrics


This chapter describes special metrics.
4.6.2.1 Peak throughput
Peak throughput is calculated with the following filter algorithm. The algorithm is required to remove
e.g. bursts in TCP payload caused by packet loss and retransmissions.
Throughputs are calculated as TCP payloads as delivered by the IP stack. No packet sniffer is
used, i.e. the throughput does not contain retransmissions, just the TCP payload bytes.
The received/transmitted bytes per direction are summarized in buffers of 1 second duration.
If the throughput per second is more than 5% larger than the throughput in the previous second,
the excessive throughput is divided onto all previous intervals with a flooding algorithm.
The largest 2-second average is used as peak throughput.
If the average throughput is larger than the peak throughput, this value is used.

4.6.3 Sample data


A typical QTS ticket is
<?xml version="1.0" encoding="ISO-8859-1"?>
<?xml version="1.0" encoding="ISO-8859-1"?>
<ticket version="2.0">
<instance></instance>
<scenario id="0" tic="0">
<mtime>2011-07-22T20:02:49.875+02:00</mtime>
<agent id="0">WebSpeedTest</agent>
<qi>10.000</qi>
<rating>1</rating>
<duration>13.125</duration>
<eid>20110722-200249</eid>
<mfid>WST.Web</mfid>
<metrics>
<metric id="3002" comment="random">0</metric>
<metric id="3005" comment="loop">1</metric>
<metric id="3011" comment="meas_time" unit="sec">11.703</metric>
<metric id="3020" comment="socket_time" unit="sec">11.703</metric>
<metric id="3021" comment="ws2_32_txbytes" unit="bytes">168665</metric>
<metric id="3022" comment="ws2_32_rxbytes" unit="bytes">2067620</metric>
<metric id="3023" comment="ws2_32_txthput" unit="bit/s">115296</metric>
<metric id="3024" comment="ws2_32_rxthput" unit="bit/s">1413394</metric>
<metric id="3025" comment="ws2_32_rx_stop" unit="bytes">2067620</metric>
<metric id="3026" comment="ws2_32_max_idle" unit="sec">0.235</metric>
<metric id="3031" comment="ip_hk_txbytes" unit="bytes">323477</metric>
<metric id="3032" comment="ip_hk_rxbytes" unit="bytes">2160393</metric>
<metric id="3033" comment="ip_hk_txthput" unit="bit/s">221124</metric>
<metric id="3034" comment="ip_hk_rxthput" unit="bit/s">1476813</metric>
<metric id="3040" comment="br_docs_started" unit="docs">4</metric>
<metric id="3041" comment="br_docs_finished" unit="docs">3</metric>
<metric id="3042" comment="br_docs_incomplete" unit="docs">0</metric>
<metric id="3050" comment="num_tcp_sockets" unit="socks">284</metric>
<metric id="3051" comment="max_tcp_sockets" unit="socks">262</metric>
<metric id="3052" comment="rem_tcp_sockets" unit="socks">252</metric>
<metric id="3053" comment="num_tcp_connects" unit="reqs">142</metric>
<metric id="3054" comment="tcp_txbytes" unit="bytes">167131</metric>
<metric id="3055" comment="tcp_rxbytes" unit="bytes">2066086</metric>
<metric id="3056" comment="tcp_tx_thput" unit="bit/s">114248</metric>
<metric id="3057" comment="tcp_rx_thput" unit="bit/s">1412346</metric>
<metric id="3058" comment="tcp_tx_peak_thput" unit="bit/s">424076</metric>
<metric id="3059" comment="tcp_rx_peak_thput" unit="bit/s">1721034</metric>
<metric id="3060" comment="num_oth_sockets" unit="socks">2</metric>
<metric id="3061" comment="max_oth_sockets" unit="socks">2</metric>
<metric id="3062" comment="rem_oth_sockets" unit="socks">2</metric>
<metric id="3063" comment="num_oth_connects" unit="socks">1</metric>
<metric id="3064" comment="oth_txbytes" unit="bytes">1534</metric>
<metric id="3065" comment="oth_rxbytes" unit="bytes">1534</metric>
<metric id="3070" comment="http_max_sockets" unit="socks">86</metric>
<metric id="3071" comment="http_req_total" unit="reqs">191</metric>
<metric id="3072" comment="http_req_tx_ok" unit="reqs">191</metric>
<metric id="3073" comment="http_req_rx_ok" unit="reqs">178</metric>
<metric id="3074" comment="http_txbytes" unit="bytes">0</metric>
WebSpeedTest

0.103 21.Nov.2011

30

Technical Reference

<metric id="3075" comment="http_rxbytes" unit="bytes">2012865</metric>


<metric id="3076" comment="http_txthput" unit="bit/s">0</metric>
<metric id="3077" comment="http_rxthput" unit="bit/s">1375965</metric>
<metric id="3078" comment="http_rxdecomp" unit="bytes"/>
<text id="110" comment="tool">WST/0.97</text>
<text id="111" comment="task">WST.Web</text>
<text id="3001" comment="browser">IE</text>
<text id="3003" comment="url">http://derstandard.at</text>
<text id="3004" comment="suffix"/>
<text id="3010" comment="status">done</text>
<text id="3080" comment="own_ipaddrs">192.168.23.44</text>
<text id="3081" comment="iphook_ipaddrs_loc">192.168.23.44</text>
<text id="3082" comment="iphook_ipaddrs_rem">192.168.23.1,194.116.243.20, 
194.116.243.21,194.116.243.23,77.72.164.29,192.168.23.62,194.116.242.80,94.198.59.134, 
66.102.13.139,77.72.164.222</text>
<text id="3090" comment="tcp_tx_thput_list">
13664,92355,0,981,22739,366,35623,527,0,0,876,0</text>
<text id="3091" comment="tcp_rx_thput_list">
221842,101878,225042,17617,134831,311500,101987,305277,205655,0,166213,274244</text>
<text id="3092" comment="tcp_tx_thput_filtd">
47893,58126,7907,12951,12951,12951,12951,652,250,250,250,0</text>
<text id="3093" comment="tcp_rx_thput_filtd">
246796,183463,161834,140206,186881,201843,201843,201843,163686,125529,125529,126634</text>
<metric id="3094" comment="tcp_connect_time" unit="sec">0.010</metric>
<metric id="3095" comment="ipsvc_access_time" unit="sec">0.016</metric>
<metric id="3096" comment="tcp_xfer_time" unit="sec">11.655</metric>
<metric id="3097" comment="tcp_dns_delay" unit="sec">0.172</metric>
<metric id="3100" comment="preload_status">1</metric>
<metric id="3101" comment="preload_bytes" unit="bytes">50192</metric>
<metric id="3102" comment="preload_time" unit="sec">0.188</metric>
</metrics>
</scenario>
</ticket>

4.7 Metric mapping


If required, the default metrics as specified in the previous section can be mapped to different metrics
or extensions. The default mapping is named mapping.cfg and has to be placed in the application
directory. A different mapping file can be specified with the command line argument /mapping.
The mapping file is searched in the current directory and the application directory.

4.7.1 Mapping specification


The mapping file has to be a sectioned configuration file as shown in the next section. Comments are
started with the semicolon (;)
The WebSpeedTest mapping file has to contain a section [WST.Web] defining the mapping for
WebSpeedTest's data format WST.Web. The section can include one mfid parameter and metric
parameters as required. Alternatively the section [default] is used if [WST.Web] is not found.
The parameter mfid defines the target measurement format as reported in the QTS ticket. The
measurement format can be used by the dashboard or reporting tool to look up the correct metric
descriptions. If the parameter is not specified, the metric Id WST.Web.User will be used.
Text and numeric metrics can be remapped with the arguments x.nnnn and m.nnnn. Every metric can
be mapped to 0, 1 or several destination metrics. If no destination is specified, the metric is removed
from the ticket. In addition to x.nnnn and m.nnnn metrics, extensions can be specified with
e.<id>.<field> where id is the extension id (as defined in the QTS database table d_extensions) and
field is the column name in the QTS extension table.
Please note that it will not be possible to map text metrics to numeric metrics due to data conversion
problems and that the extension columns have to match the data in the ticket.

4.7.2 Sample mapping file


The content of a sample mapping file is:
[WST.Web]
; mapping for measurement WST.Web (default for WebSpeedTest)
; the destination measurement format in the QTS ticket will be WST.Web.User
; note: metrics can be mapped to no, one or several other metrics
mfid:
WST.Web.User
x.3003:
x.3003,e.ext1.url

WebSpeedTest

0.103 21.Nov.2011

31

Technical Reference

m.3024:

m.3024,e.ext1.thput

4.8 Video streaming HTML/Javascript reference


This chapter describes technical details for video streaming measurements.

4.8.1 Measurement procedure


A special HTML file with javascript code is required for video streaming measurements. A sample file
can be found in the WebSpeedTest directory. =0.103=
The HTML file has to be placed on a web server (together with a helper file), as the javascript callback
functions would not be executed if it is loaded from the local file system. In addition, loading the
HTML file from a web server resembles the end user's behavior (loading the HTML from the youtube
server).
The sample file loads the video player for a short video clip and analyzes the playback behavior. The
sample file has to be modified to meet your requirements, please refer to the configuration
parameters described in the next section.
If the video loads correctly (you can test the file from the local file system in your web browser), it
has to be uploaded to a web server, together with swfobject.js. Different HTML files can be used to
test different videos.
To run a video streaming test, WebSpeedTest has to be started with the command line argument
/youtube and the URL of the HTML file on the server. Please refer to section 4.8.4 for metrics the
script has to provide when the measurement has finished.

4.8.2 Youtube requirements


The sample HTML file uses a special javascript (swfobject.js) to load the youtube video player. This is
the method recommended by youtube.
The player first loads a flash file (.swf) describing the video and the video stream for the default
quality. A different quality can be requested after the swf object has been loaded. Thus the quality
change can be done after the first buffering event, but not earlier. As a result, some bytes of the
initial video stream will be loaded and dropped, then the entire video stream for the target quality will
be loaded. The reference HTML file can be used to play the default or a custom quality, both test
cases will be analyzed correctly.

4.8.3 Configuration parameters


The sample HTML file contains some HTML <div> elements and a javascript doing the video stream
analysis. The script starts with configuration parameters that need to be modified for individual
measurements. =0.103=
Configuration parameters in HTML file for streaming analysis
// ----- configuration variables ----// video data
cfg_video_id = "_BNmXx4p3Vw"; // video ID to load
cfg_quality = "hd1080";
// requested quality ("","medium","large","hd720","hd1080")
cfg_nominal_bytes = 4713128;
// nominal # of bytes (to calculate compression)
cfg_codec = "N/A";
// codec (just for log/ticket output, cannot be determined)
cfg_req_filter = "/videoplayback*"; // URL filter for video streams (separate with pipe)
// analysis thresholds
cfg_timeout_total_s = 90;
cfg_timeout_start_s = 30;
cfg_stall_thres_ms = 100;
cfg_stall_maxnum = 5;
cfg_stall_maxtime_ms = 5000;

//
//
//
//
//

// debugging
cfg_showlog = false;

// make log div visible

total timeout in seconds


start timeout in seconds
ignore stalls less then this duration
max. # of stalls above threshold
maximum stall time in milliseconds

Description of configuration parameters


cfg_video_id

<string>

e.g. "_ BNmXx4p3Vw"

The video ID to be viewed. This parameter is passed to the youtube video player.
WebSpeedTest

0.103 21.Nov.2011

32

Technical Reference

cfg_quality

<string>

e.g. "" or "hd1080"

The target quality. Leave this parameter empty to use the video's default quality. If a non-empty
value is defined, the script tries to change the quality. The video player will choose the highest
available quality less or equal to the specified quality. Please note that a HTTP request for the initial
quality will be sent in any case though it will be cancelled after a short time.
cfg_nominal_bytes

<int>

e.g. 4713128

The nominal number of bytes for the configured video ID and quality. This parameter will only be
used to calculate the compression ratio. Thus it should be set to the # of bytes provided by the
video player if no transcoding or compression is applied.
cfg_codec

<string>

The codec used for the video. The parameter is only passed to an output parameter and is not used
internally.
cfg_req_filter

<string>

Request filters for the socket analysis in WebSpeedTest. Only HTTP requests matching the given
paths will be treated as video streams and considered in the video stream socket analysis.
A typical value for youtube is /videoplayback*. Multiple filters can be separated by pipes, e.g.
/videoplayback*|/videodownload*. Please note that filters are case sensitive and wildcards are only
supported at the end of a filter item.
cfg_timeout_total_s

<int>

e.g. 90

Total measurement timeout in seconds (from javascript start to playback stop) or -1 to disable the
check. If this threshold is exceeded, status is set to 0 (failed).
cfg_timeout_start_s

<int>

e.g. 30

Start timeout in seconds (from javascript start to first playing event) or -1 to disable the check. If
this threshold is exceeded, status is set to 0 (failed).
cfg_stall_thres_ms

<int>

e.g. 100

Threshold for stalls (i.e. buffering states during playback). Stalls up to the defined value are
considered minor and are not counted. Stalls longer than the given threshold are considered
significant and are counted and cumulated.
cfg_stall_maxnum

<int>

e.g. 5

Maximum number of allowed significant stalls or -1 to disable the check. If this threshold is
exceeded, status is set to 0 (failed).
cfg_stall_maxtime_ms

<int>

e.g. 5000

Maximum allowed cumulated significant stall time or -1 to disable the check. If this threshold is
exceeded, status is set to 0 (failed).
cfg_showlog

<bool>

e.g. false

Set this parameter to true to show the <div> containing the log output. The parameter can be set
to false to reduce CPU load due to display updates.

4.8.4 Javascript log and metrics


The javascript code has to place log and metric output in a <div> element with ID "ytapilog".
WebSpeedTest reads the HTML content in this div to determine the measurement status, the log and
the result parameters.
Javascript log format
Elements shall be added line by line (separated by <BR>), different prefixes are used to distinguish
log messages and metrics, the used formats are:
log: <time> ms: <message>
metric: js.<id> (name): <value>

Where <time> is the time offset from start in ms and <id> is the metric ID. The following dump
shows the log output of the reference script. Please note that the first line (log 0.0.1) is ignored by
WebSpeedTest.
Sample log output
log 0.0.1
log: 0 ms: start 2011-11-19T23:53:19.250
log: 0 ms: javascript starting, video _BNmXx4p3Vw...
log: 0 ms: player embedded (player ready to follow if not prevented by security rules).
log: 2062 ms: player ready...
WebSpeedTest

0.103 21.Nov.2011

33

Technical Reference

log: 2062 ms: player found: myytplayer


log: 2062 ms: listeners set.
log: 2078 ms: new state: -1=unstarted
log: 3062 ms: quality changed to medium, bytes loaded: 0
log: 3515 ms: new state: 3=buffering
log: 3515 ms: initial quality: medium
log: 3515 ms: quality changed to hd720, bytes loaded: 948
log: 3609 ms: quality hd1080 requested, hd720 achieved.
log: 7312 ms: new state: 1=playing
log: 16906 ms: new state: 3=buffering
log: 22406 ms: new state: 1=playing
log: 22406 ms: stalled 5500 ms
log: 31343 ms: new state: 2=paused
log: 31484 ms: new state: 0=ended
metric: js.9000 (video id): _BNmXx4p3Vw
metric: js.9001 (quality): hd720
metric: js.9002 (codec): N/A
metric: js.9003 (url): http://www.youtube.com/watch?v=_BNmXx4p3Vw&amp;feature=player_embedded
metric: js.9004 (levels): hd720,large,medium,small
metric: js.9005 (nominal bytes): 4713128
metric: js.9006 (request filters): /videoplayback*
metric: js.9010 (total bytes loaded): 4713128
metric: js.9011 (video bytes loaded): 4713128
metric: js.9012 (video bytes total): 4713128
metric: js.9013 (video bytes start): 0
metric: js.9014 (video time): 18.505
metric: js.9020 (total play time [s]): 24.172
metric: js.9021 (netto play time [s]): 18.672
metric: js.9022 (significant stall count): 1
metric: js.9023 (significant stall time [s]): 5.500
metric: js.9024 (total stall time [s]): 5.500
metric: js.9025 (player ready time [s]): 3.515
metric: js.9026 (buffer time [s]): 3.797
metric: js.9027 (play delay [s]): 7.312
metric: js.9028 (session time [s]): 31.484
metric: js.9030 (compression): 1.0000
metric: js.9031 (playback rate [bytes/s]): 252416.88
metric: js.success (playback success): 0
metric: js.start (start time): 2011-11-19T23:53:19.250
metric: js.stop (stop time): 2011-11-19T23:53:50.734

Javascript metric specification


metric js.900

video_id

Video ID (as configured in script and requested from server)


metric js.9001

quality

Video quality (as provided by player)


metric js.9002

codec

Video codec (configuration parameter), please refer to cfg_codec for details.


metric js.9003

url

Video URL (as provided by player)


metric js.9004

levels

Available quality levels as provided by player.


metric js.9005

nominal bytes

Nominal # of bytes (if no transcoding applied, configuration parameter), please refer to


cfg_nominal_bytes for details.
metric js.9006

request filters

Used to forward the HTTP request filters for video streams to WebSpeedTest. Please refer to
cfg_req_filter for details.
metric js.9010

total bytes loaded

<bytes>

The total number of bytes loaded by the video player. Calculated as the final
player.getVideoBytesLoaded() plus player.getVideoBytesLoaded() before changing a quality level.
Please refer to m.3210 for details.
metric js.9011

video bytes loaded

<bytes>

The number of bytes reported by the video player at the end of the measurement, i.e.
player.getVideoBytesLoaded().
metric js.9012

video bytes total

<bytes>

The number of total video bytes for the played video stream, i.e. player.getVideoBytesTotal() at the
end of the measurement.
WebSpeedTest

0.103 21.Nov.2011

34

Technical Reference

metric js.9013

video bytes start

<bytes>

The start offset reported by the video player, i.e. player.getVideoStartBytes() at the end of the
measurement, should be 0 except if quality was changed when playback was running.
metric js.9014

video time

<sec>

Nominal video duration in seconds as reported by player, i.e. player.getCurrentTime() at the end of
the measurement.
js.9020

total play time

<sec>

The playback time from the first playing event to the final stop event (i.e. including stalls).
js.9021

netto play time

<sec>

The netto playback time without stalls, calculated as js.9020 js.9024.


js.9022

significant stall count

Number of stalls exceeding the configured threshold (cfg_stall_thres_ms).


js.9023

significant stall time

<sec>

Cumulated time of stalls exceeding the configured threshold (cfg_stall_thres_ms).


js.9024

total stall time

<sec>

player ready time

<sec>

Cumulated time of all stalls.


js.9025

Time from javascript start until player starts buffering. Please note that the javascript start delay is
added for metric m.3225.
js.9026

buffer time

<sec>

Time from first buffering event until first playing event.


js.9027

play delay

<sec>

Time from javascript start until first playing event (i.e. js.9025 + js.9026). Please note that the
javascript start delay is added for metric m.3227.
js.9028

session time

<sec>

Time from javascript start to stop event.


js.9030

compression

Fraction from player.getVideoBytesTotal() / cfg_nominal_bytes.


js.9031

playback rate

<bytes/s>

Average playback rate (without stalls), i.e. js.9010 / js.9021


js.success

success state

<0/1>

Success state, 1 if measurement was successful, 0 if one of


o total timeout exceeded (cfg_timeout_total_s)
o start timeout exceeded (cfg_timeout_start_s)
o number of stalls exceeded (cfg_stall_maxnum)
o stall time exceeded (cfg_stall_maxtime_ms)
o video not entirely played (js.9021 < js.9014 1 sec)
js.start

start time

<xml time stamp>

javascript start time (has to match internal time stamp 0)


js.stop

stop time

<xml time stamp>

javascript stop time (at time of stop event)

WebSpeedTest

0.103 21.Nov.2011

35

Technical Reference

Contents
Introduction................................................................................................................................................1
1.1 What is WebSpeedTest........................................................................................................................1
1.2 Field of application ..............................................................................................................................1
1.3 Revision History ..................................................................................................................................2
1.4 This manual........................................................................................................................................3
Architecture ................................................................................................................................................1
2.1 Architecture ........................................................................................................................................1
2.1.1 Module description ........................................................................................................................1
2.1.2 Web Browser COM Control ............................................................................................................2
2.1.3 Youtube video streaming...............................................................................................................2
2.1.4 Socket Interception.......................................................................................................................2
2.1.5 Packet Filter .................................................................................................................................2
2.1.6 Windows Vista and 7 Compatibility.................................................................................................2
Installation and Operation ...........................................................................................................................3
3.1 Installation .........................................................................................................................................3
3.1.1 System requirements ....................................................................................................................3
3.1.2 Removing previous installations .....................................................................................................3
3.1.3 Installing WebSpeedTest ...............................................................................................................3
3.1.4 Running in Demo mode.................................................................................................................4
3.1.5 Installing the unlocking code .........................................................................................................4
3.1.6 Installing the Mozilla ActiveX Control ..............................................................................................5
3.2 Operation ...........................................................................................................................................6
3.2.1 Running Simple Measurements ......................................................................................................6
3.2.2 Getting Help .................................................................................................................................8
3.2.3 Passing arguments........................................................................................................................9
3.2.4 Ensuring correct downloads...........................................................................................................9
3.2.5 Testing youtube video streaming ................................................................................................. 10
3.2.6 Writing to files ............................................................................................................................ 11
3.2.7 Parsing and using results............................................................................................................. 11
3.2.8 Modifying the default behavior..................................................................................................... 11
3.2.9 Using HTTP preloads................................................................................................................... 12
3.2.10 Using RAS connections .............................................................................................................. 12
3.3 Special Topics ................................................................................................................................... 13
3.3.1 Cache control (Internet Explorer Only) ......................................................................................... 13
3.3.2 Mozilla Parameters...................................................................................................................... 13
3.3.3 IP Hook...................................................................................................................................... 14
3.3.4 Using Microsoft NetCap ............................................................................................................... 14
3.3.5 WS2 interception ........................................................................................................................ 14
3.3.6 TCP/UDP protocol analysis........................................................................................................... 15
3.3.7 HTTP protocol analysis ................................................................................................................ 15
3.3.8 HTTP header modification ........................................................................................................... 16
3.3.9 Proxy server specification ............................................................................................................ 16
3.3.10 User agent specification............................................................................................................. 16
3.3.11 Maximum number of sockets ..................................................................................................... 17
Technical Reference .................................................................................................................................. 18
4.1 Default measurement results ............................................................................................................. 18
4.1.1 Data format reference ................................................................................................................. 18
4.1.2 Sample data ............................................................................................................................... 18
4.1.3 Additional information ................................................................................................................. 18
4.2 Measurement log file ......................................................................................................................... 19
4.2.1 Data format reference ................................................................................................................. 19
4.2.2 Sample data ............................................................................................................................... 20
4.2.3 Additional information ................................................................................................................. 21
4.3 HTTP log file ..................................................................................................................................... 21
4.3.1 Data format reference ................................................................................................................. 21
WebSpeedTest

0.103 21.Nov.2011

36

Contents

4.3.2 Sample data ............................................................................................................................... 22


4.4 Socket log file ................................................................................................................................... 23
4.4.1 Data format reference ................................................................................................................. 23
4.4.2 Sample data ............................................................................................................................... 23
4.5 URL log file ....................................................................................................................................... 23
4.5.1 Data format reference ................................................................................................................. 24
4.5.2 Sample data ............................................................................................................................... 24
4.6 QTS Ticket file .................................................................................................................................. 24
4.6.1 Metric reference.......................................................................................................................... 25
4.6.2 Special metrics ........................................................................................................................... 30
4.6.3 Sample data ............................................................................................................................... 30
4.7 Metric mapping ................................................................................................................................. 31
4.7.1 Mapping specification .................................................................................................................. 31
4.7.2 Sample mapping file.................................................................................................................... 31
4.8 Video streaming HTML/Javascript reference........................................................................................ 32
4.8.1 Measurement procedure.............................................................................................................. 32
4.8.2 Youtube requirements................................................................................................................. 32
4.8.3 Configuration parameters ............................................................................................................ 32
4.8.4 Javascript log and metrics ........................................................................................................... 33
Contents................................................................................................................................................... 36

WebSpeedTest

0.103 21.Nov.2011

37

Contents

Potrebbero piacerti anche