WMS Tester

The WMS Tester is provided as a standalone tool to assist with testing Web Map Services (WMS). It is a useful tool for narrowing down problems with a WMS as it runs independently of Weave. As a Weave administrator the WMS Tester can be used with other tools (Weave Administrator Tool and Weave console commands) to help you identify and rectify problems with the operation of WMS within Weave.

What is the WMS Tester

The WMS Tester is a java program that will test the responses from a WMS. It can be used on any WMS, either those from within your organisation or external to it. It can be used when you are having problems with a WMS that is used in Weave, as it will test the WMS itself, without any reference to the WMS in the Weave environment. Sometimes it is difficult to determine whether a problem is originating in Weave or in the data and services that Weave is using and with the WMS Tester you will at least be able to test the performance of the WMS in isolation from Weave.

Downloading the WMS Tester

You can download the latest version of the WMS Tester tool from here.

Using the WMS Tester

The WMS Tester file, wmstest.jar, can be stored anywhere but for the purpose of simplicity we will assume it's been downloaded and stored in your c:\<weave installation folder>, e.g. c:\weave. It requires java to run so if you don't have Java installed you can use the Java executable that is installed with Weave (e.g. c:\weave\jre\bin).

Alternatively you can also download wmstester.jar to your local PC and run it from there, but then you need to ensure that you already have Java installed.


In a Windows environment, open Windows Command Line, and run the following to get a help listing:

c:\weave\jre\bin\java -jar c:\weave\wmstest.jar -h
usage: wmstest -f <filename> | -u <url> [-e <minx,miny,maxx,maxy> | -l <x,y,scale>] [-c <crs>] [-x <scale>] [-s <width,height>] [-D <DPI>] [--ignorescales] [-t <timeout>] [-n] [-o <filename>] [-d] [-b <threads>] [--format <format>] [-U <username>] [-P <password>] [-q] [-h] [-V]

The parameters that can be used in the tester are given in the table below. The - or -- syntax can be used:

ParameterDescription
-f, --file <filename>

Filename of a text file that has a list of base URL's for the WMS services. Each line in the file should contain a single WMS URL.

-u, --url <url>

The base URL for the WMS service, this can be added more than once, but the -f command can also be used for multiple URL's.

-e, --envelope <minx,miny,maxx,maxy>

The envelope to use to draw the map. This is alternative to -l, and can not be set if -l is set.

-l, --location <x,y,scale>

The centre location to use to draw the map. This is alternative to -e, and can not be set if -e is set.

-c, --crs <crs>

The CRS to use for the map requests. If not set a suitable CRS wil be determined by the following logic:

  • If all layers support WGS84 that will be used
  • If all layers have a common CRS one of those will be used
  • If a layer supports WGS84 that will be used
  • If a layer supports any other CRS that will be used
-x, --maxscale <scale>

The maximum scale to use to generate the map.

-s, --size <width,height>

The width and height, in pixels, of the generated map image. The default is 400,400

-D, --dpi <DPI>

DPI to use when creating the map images. The default is 90.71.

-t, --timeout <timeout> 

The network timeout in seconds. The default is 120

-n, --nomap

Just retrieve the capabilities document, and do not generate a map request.

-o, --output <filename>

Output results to a CSV file.

-d, --dump <filename>

Dump the generated images to a file, the default is image.zip.

-b, --background <threads>

Create all the connections in the background at the same time, rather than processing the URLs one by one. Including the <threads> value will specify how may tasks to do at once, if a value for <threads> is not set then all tasks will be performed at once, if this option isn't included at all then each task will be performed one after the other.

-U, --username <username>

Username to connect with, and must be supplied if the password is set.

-P, --password <password>

Password to connect with, and must be supplied if username is set.

-q, --quiet

Do not output results to the console.

-h, --help

Show this help and quit.

-V, --version

Print the version of the WMS Tester and exit.

--ignorescalesDon't make use of the scale ranges reported by the WMS service to adjust the extents of the generated map images.
--format <format>Set the format of the image to generate, the default is jpg. The image formats supported are dependant upon what the WMS server is setup to support.

If neither -l or -e is set then the area to draw will be calculated based on the extent of the layer, but it will be adjusted if a maximum scale range has been applied to the layer, or -x is set, unless --ignorescales is specified.


Examples of the WMS Tester

The WMS Tester allows you to test various aspects of a WMS including specifying the extent, scale, size of images, etc. But it can be used in its simplest form in the following ways:

  • Return the layers in the WMS, the scale at which the layer is drawn and the time taken to draw layer (in milliseconds)

    c:\weave\jre\bin\java -jar c:\weave\wmstest.jar -u http://qgis/cgi-bin/qgis_mapserv.fcgi?map=/mnt/storage/weave/qgis/project.qgs
    connected to http://qgis/cgi-bin/qgis_mapserv.fcgi?map=/mnt/storage/weave/qgis/project.qgs in 2,521ms
    drew "topp:secondary_schools" as jpg at 1:70,894 in 411ms
    drew "topp:school_primary" as jpg at 1:112,940 in 415ms
    drew "topp:buildings" as jpg at 1:119,980 in 417ms
    drew "topp:busstops" as jpg at 1:127,470 in 704ms
    drew "topp:contour10" as jpg at 1:154,230 in 930ms
    drew "topp:contour05" as jpg at 1:152,730 in 1,366ms
    drew "topp:contour02" as jpg at 1:152,720 in 2,765ms
    drew "topp:contour01" as jpg at 1:152,900 in 5,156ms
    drew "topp:drainage" as jpg at 1:127,120 in 764ms
    drew "topp:sewer_pipe" as jpg at 1:136,970 in 711ms
    drew "topp:water_pipe" as jpg at 1:187,430 in 1,710ms
    drew "topp:busroutes" as jpg at 1:130,490 in 431ms
    drew "topp:road" as jpg at 1:17,678 in 359ms
    drew "topp:mainroad" as jpg at 1:140,600 in 452ms
    drew "topp:hydro" as jpg at 1:148,400 in 444ms
    drew "topp:mainhydro" as jpg at 1:146,910 in 459ms
    drew "topp:easement" as jpg at 1:7,071 in 361ms
    drew "topp:property_dissolved" as jpg at 1:7,071 in 367ms
    drew "topp:property" as jpg at 1:7,071 in 363ms
    drew "topp:ward" as jpg at 1:147,260 in 431ms
    drew "topp:suburb" as jpg at 1:149,110 in 461ms
    drew "topp:mccbound" as jpg at 1:147,300 in 426ms
  • Testing a WMS with background processing to simulate multiple users hitting the WMS server at the same time

    c:\weave\jre\bin\java -jar c:\weave\wmstest.jar -u http://qgis/cgi-bin/qgis_mapserv.fcgi?map=/mnt/storage/weave/qgis/project.qgs -b
    connected to http://qgis/cgi-bin/qgis_mapserv.fcgi?map=/mnt/storage/weave/qgis/project.qgs in 2,825ms
    drew "topp:secondary_schools" as image/jpeg at 1:72,316 in 13,051ms
    drew "topp:ward" as jpg at 1:149,830 in 13,432ms
    drew "topp:busroutes" as jpg at 1:132,220 in 13,689ms
    drew "topp:easement" as jpg at 1:10,000 in 13,856ms
    drew "topp:property" as jpg at 1:10,000 in 14,133ms
    drew "topp:hydro" as jpg at 1:151,100 in 14,472ms
    drew "topp:school_primary" as jpg at 1:114,310 in 14,643ms
    drew "topp:mainhydro" as jpg at 1:149,790 in 14,664ms
    drew "topp:buildings" as jpg at 1:121,840 in 14,698ms
    drew "topp:property_dissolved" as jpg at 1:10,000 in 14,809ms
    drew "topp:mccbound" as jpg at 1:149,860 in 14,860ms
    drew "topp:mainroad" as jpg at 1:142,520 in 14,949ms
    drew "topp:road" as jpg at 1:25,000 in 14,962ms
    drew "topp:suburb" as jpg at 1:151,750 in 15,435ms
    drew "topp:busstops" as jpg at 1:128,880 in 17,027ms
    drew "topp:sewer_pipe" as jpg at 1:139,040 in 17,370ms
    drew "topp:contour10" as jpg at 1:156,830 in 17,761ms
    drew "topp:drainage" as jpg at 1:129,140 in 17,818ms
    drew "topp:contour05" as jpg at 1:155,440 in 18,993ms
    drew "topp:water_pipe" as jpg at 1:190,730 in 20,413ms
    drew "topp:contour02" as jpg at 1:155,440 in 22,174ms
    drew "topp:contour01" as jpg at 1:155,440 in 24,777ms
    c:\weave\jre\bin\java -jar c:\weave\wmstest.jar -u http://qgis/cgi-bin/qgis_mapserv.fcgi?map=/mnt/storage/weave/qgis/project.qgs -b 2
    connected to http://qgis/cgi-bin/qgis_mapserv.fcgi?map=/mnt/storage/weave/qgis/project.qgs in 2,885ms
    drew "topp:school_primary" as image/jpeg at 1:114,310 in 755ms
    drew "topp:secondary_schools" as image/jpeg at 1:72,316 in 757ms
    drew "topp:buildings" as jpg at 1:121,840 in 781ms
    drew "topp:busstops" as jpg at 1:128,880 in 1,393ms
    drew "topp:contour10" as jpg at 1:156,830 in 1,629ms
    drew "topp:contour05" as jpg at 1:155,440 in 2,310ms
    drew "topp:contour02" as jpg at 1:155,440 in 5,141ms
    drew "topp:drainage" as jpg at 1:129,140 in 1,440ms
    drew "topp:sewer_pipe" as jpg at 1:139,040 in 1,340ms
    drew "topp:contour01" as jpg at 1:155,440 in 8,851ms
    drew "topp:busroutes" as jpg at 1:132,220 in 850ms
    drew "topp:water_pipe" as jpg at 1:190,730 in 3,369ms
    drew "topp:road" as jpg at 1:25,000 in 769ms
    drew "topp:mainroad" as jpg at 1:142,520 in 696ms
    drew "topp:hydro" as jpg at 1:151,100 in 730ms
    drew "topp:mainhydro" as jpg at 1:149,790 in 787ms
    drew "topp:easement" as jpg at 1:10,000 in 719ms
    drew "topp:property_dissolved" as jpg at 1:10,000 in 764ms
    drew "topp:property" as jpg at 1:10,000 in 749ms
    drew "topp:ward" as jpg at 1:149,830 in 675ms
    drew "topp:suburb" as jpg at 1:151,750 in 736ms
    drew "topp:mccbound" as jpg at 1:149,860 in 629ms
  • Getting map images from a WMS: Creates a file (images.zip) in the current folder containing map images generated based on parameters submitted

    c:\weave\jre\bin\java -jar c:\weave\wmstest.jar -u http://qgis/cgi-bin/qgis_mapserv.fcgi?map=/mnt/storage/weave/qgis/project.qgs -d
    connected to http://qgis/cgi-bin/qgis_mapserv.fcgi?map=/mnt/storage/weave/qgis/project.qgs in 2,914ms
    drew "topp:secondary_schools" as image/jpeg at 1:72,316 in 406ms
    drew "topp:school_primary" as jpg at 1:114,310 in 425ms
    drew "topp:buildings" as jpg at 1:121,840 in 426ms
    drew "topp:busstops" as jpg at 1:128,880 in 730ms
    drew "topp:contour10" as jpg at 1:156,830 in 981ms
    drew "topp:contour05" as jpg at 1:155,440 in 1,471ms
    drew "topp:contour02" as jpg at 1:155,440 in 3,085ms
    drew "topp:contour01" as jpg at 1:155,440 in 5,450ms
    drew "topp:drainage" as jpg at 1:129,140 in 823ms
    drew "topp:sewer_pipe" as jpg at 1:139,040 in 789ms
    drew "topp:water_pipe" as jpg at 1:190,730 in 1,876ms
    drew "topp:busroutes" as jpg at 1:132,220 in 462ms
    drew "topp:road" as jpg at 1:25,000 in 443ms
    drew "topp:mainroad" as jpg at 1:142,520 in 444ms
    drew "topp:hydro" as jpg at 1:151,100 in 450ms
    drew "topp:mainhydro" as jpg at 1:149,790 in 460ms
    drew "topp:easement" as jpg at 1:10,000 in 437ms
    drew "topp:property_dissolved" as jpg at 1:10,000 in 460ms
    drew "topp:property" as jpg at 1:10,000 in 466ms
    drew "topp:ward" as jpg at 1:149,830 in 439ms
    drew "topp:suburb" as jpg at 1:151,750 in 476ms
    drew "topp:mccbound" as jpg at 1:149,860 in 433ms