---
title: "测试 GeoDjango 应用程序"
version: 4.2
locale: zh-hans
source: https://docs.djangoproject.com/zh-hans/4.2/ref/contrib/gis/testing/
canonical: https://djangodocs.dev/zh-hans/4.2/ref/contrib/gis/testing/
---
# 测试 GeoDjango 应用程序

本文档中还包括一些供 [PostGIS](#testing-postgis) 用户使用的附加注释和设置。

## PostGIS

### 配置

> **Note**
>
> 下面的设置具有合理的默认值，不应需要手动设置。

#### `POSTGIS_VERSION`

当 GeoDjango 的空间后端在 PostGIS 上初始化时，必须执行一个 SQL 查询来确定版本，以便了解可用的功能。希望防止这个额外查询的高级用户可以手动设置版本，使用一个由整数三元组指定的 PostGIS 的主要、次要和微版本号。例如，要配置为 PostGIS X.Y.Z，您可以使用以下方式：

```
POSTGIS_VERSION = (X, Y, Z)
```

### 获得足够的权限

根据您的配置，本节描述了配置具有足够权限以在 PostgreSQL 上运行 GeoDjango 应用程序测试的数据库用户的几种方法。如果您的 [空间数据库模板](/zh-hans/4.2/ref/contrib/gis/install/postgis/#spatialdb-template) 是按照说明创建的，那么您的测试数据库用户只需要具有创建数据库的能力。在其他配置中，您可能需要使用数据库超级用户。

#### 创建数据库普通用户

要创建一个具有创建数据库能力的数据库用户，请使用以下命令：

```shell
$ createuser --createdb -R -S <user_name>
```

`-R -S` 标志表示我们不希望用户具有创建其他用户（角色）或成为超级用户的能力。

或者，您可以从 SQL shell 更改现有用户的角色（假设这是从现有超级用户帐户执行的）：

```psql
postgres# ALTER ROLE <user_name> CREATEDB NOSUPERUSER NOCREATEROLE;
```

#### 创建数据库超级用户

这可以在创建用户的同时完成，例如：

```shell
$ createuser --superuser <user_name>
```

或者，您可以从 SQL shell 更改用户的角色（假设这是从现有超级用户帐户执行的）：

```psql
postgres# ALTER ROLE <user_name> SUPERUSER;
```

### Windows

在 Windows 平台上，您可以使用 pgAdmin III 实用程序将超级用户权限添加到您的数据库用户。

默认情况下，在 Windows 上的 PostGIS 安装程序中包含一个名为 `template_postgis` 的空间数据库模板。

## GeoDjango 测试

要在使用 `runtests.py` 运行 Django 测试套件时执行 GeoDjango 测试，设置文件中的所有数据库必须使用其中一个 [空间数据库后端](/zh-hans/4.2/ref/contrib/gis/db-api/#spatial-backends)。

### 例如

以下是一个示例的简单设置文件，其中包含可以用来运行整个 Django 测试套件的空间后端，包括 [`django.contrib.gis`](/zh-hans/4.2/ref/contrib/gis/#module-django.contrib.gis) 中的测试：

```
DATABASES = {
    "default": {
        "ENGINE": "django.contrib.gis.db.backends.postgis",
        "NAME": "geodjango",
        "USER": "geodjango",
    },
    "other": {
        "ENGINE": "django.contrib.gis.db.backends.postgis",
        "NAME": "other",
        "USER": "geodjango",
    },
}

SECRET_KEY = "django_tests_secret_key"
```

假设上述设置位于与 `runtests.py` 相同目录中的 `postgis.py` 文件中，那么在执行以下命令时，将执行所有 Django 和 GeoDjango 测试：

```shell
$ ./runtests.py --settings=postgis
```

要仅运行 GeoDjango 测试套件，请指定 `gis_tests`：

```shell
$ ./runtests.py --settings=postgis gis_tests
```
