8. OGC一致性测试

开放地理空间联盟(OGC)提供可免费运行的测试,以确保服务器符合特定规范。本章提供了在Ubuntu系统上设置WMS和OGC API功能测试的快速教程。有关详细文档,请访问 OGC website

8.1. 果蝇试验

pyogctest 是一款致力于轻松运行OGC测试的Python工具。安装可以在虚拟环境中完成:

git clone https://github.com/pblottiere/pyogctest
virtualenv venv
source venv/bin/activate
pip install -e pyogctest/

8.2. WMS 1.3.0测试套件

要成功运行WMS 1.3.0测试套件,需要特定的测试数据集。它可以通过以下方式下载 pyogctest

./pyogctest.py -s wms130 --download

下载后,会显示一个 teamengine_wms_130.qgs 项目在新版本中提供 data 目录。此项目必须注册为QGIS Server的默认项目,这要感谢 QGIS_SERVER_PROJECT_FILE 环境变量。这样,我们就不需要显式设置 MAP 供应商-QGIS服务器的参数。

为了符合元数据测试,还需要特定的配置。事实上,一些元数据在 data/metadata 目录,并且必须通过URL才能用于OGC测试框架。最简单的选择是将您的Web服务器配置为具有访问权限,如下所示 http://XXX.XXX.XXX.XXX/metadata/Autos.xml 。这些元数据URL在项目中定义并插入到WMS中 GetCapabilities 文件。因此,需要根据您的测试环境更新项目,以便让QGIS Server生成有效的XML文档:

./pyogctest.py -s wms130 -m http://XXX.XXX.XXX.XXX/metadata

现在一切都已正确配置,我们可以运行WMS 1.3.0测试套件:

./pyogctest.py -s wms130 -u http://XXX.XXX.XXX.XXX/qgisserver
========================== OGC test session starts ============================
testsuite: WMS 1.3.0
collected 184 items

data-independent::basic_elements::version-negotiation::negotiate-no-version .
data-independent::basic_elements::version-negotiation::negotiate-basic_elements-version .
data-independent::basic_elements::version-negotiation::negotiate-higher-version .
...
...
...

=========================== 184 passed in 40 seconds ===========================

8.3. OGC API功能测试套件

要运行OGC API Feature 1.0测试套件,需要一个测试数据集。考虑到底层QGIS项目不需要为此测试套件进行特定配置,我们可以使用 .qgs 培训库中提供的文件:

git clone https://github.com/qgis/QGIS-Training-Data
ls QGIS-Training-Data/exercise_data/qgis-server-tutorial-data/world.qgs

下载后,会显示一个 world.qgs 项目可在 qgis-server-tutorial 子目录。此项目必须注册为QGIS Server的默认项目,这要感谢 QGIS_SERVER_PROJECT_FILE 环境变量。这样,我们就不需要显式设置 MAP 供应商-QGIS服务器的参数。

现在一切都已正确配置,我们可以运行OGC API Feature 1.0测试套件了:

./pyogctest.py -s ogcapif -u http://XXX.XXX.XXX.XXX/qgisserver

=========================== OGC test session starts ============================
collected 56 items

collections::FeatureCollections::retrieveApiModel .
collections::FeatureCollections::noOfCollections .
collections::FeatureCollections::requirementClasses .
...
...
...

=========================== 56 passed in 24 seconds ============================