<commit_before>== 测试前的准备

正如我们上个章节里面看到的， `Test::Nginx` 提供了一个简单规范的格式来表达测试用例。
每个测试用例都用一个测试块来表示。一个测试块由一个标题、一个可选的描述和几个数据段，
用于指定输入和期望的输出。在这一节我们将仔细看看对于不同的测试要求，如何准备这样的测试案例。

设计测试用例在很多方面都是一门艺术。有时候可能设计测试案例花费的时间和精力，多于实现要测试的功能，
这个和我们自己的经验有关。`Test::Nginx` 努力尝试让编写测试用例尽可能的简单，
但仍然做不到让整个测试用例设计的过程自动化。只有你才确切的知道测试什么，以及如何去测试。
本节讲侧重于 `Test::Nginx` 提供的基本原语，基于此你可以设计出巧妙和有效的测试用例。

=== 准备 NGINX 的配置

在一个测试块里面，我们可以用不同的数据节来指定我们自定义的代码片段，
放在由 `Test::Nginx` 生成的最终的 `nginx.conf` 配置文件的不同位置中。

最常见的是 `config` 节，它用来在默认测试服务器的 `server {}` 配置块中插入自定义代码片段。
我们也可以在 `nginx.conf` 的 `http {}` 配置块中，用 `http_config` 节来插入自定义的内容。
`main_config` 节可以在 NGINX 配置的最上层范围中插入自定义内容。
一起看看下面这个例子。

[source,test-base]
----
=== TEST 1:
--- main_config
env MY_ENVIRONMENT;

--- http_config
    init_worker_by_lua_block {
        print("init")
    }<commit_msg>data section 翻译为 数据节<commit_after>== 测试前的准备

正如我们上个章节里面看到的， `Test::Nginx` 提供了一个简单规范的格式来表达测试用例。
每个测试用例都用一个测试块来表示。一个测试块由一个标题、一个可选的描述和几个数据节footnote:[data section 本书统一翻译为『数据节』]，
用于指定输入和期望的输出。在这一节我们将仔细看看对于不同的测试要求，如何准备这样的测试案例。

设计测试用例在很多方面都是一门艺术。有时候可能设计测试案例花费的时间和精力，多于实现要测试的功能，
这个和我们自己的经验有关。`Test::Nginx` 努力尝试让编写测试用例尽可能的简单，
但仍然做不到让整个测试用例设计的过程自动化。只有你才确切的知道测试什么，以及如何去测试。
本节讲侧重于 `Test::Nginx` 提供的基本原语，基于此你可以设计出巧妙和有效的测试用例。

=== 准备 NGINX 的配置

在一个测试块里面，我们可以用不同的数据节来指定我们自定义的代码片段，
放在由 `Test::Nginx` 生成的最终的 `nginx.conf` 配置文件的不同位置中。

最常见的是 `config` 节，它用来在默认测试服务器的 `server {}` 配置块中插入自定义代码片段。
我们也可以在 `nginx.conf` 的 `http {}` 配置块中，用 `http_config` 节来插入自定义的内容。
`main_config` 节可以在 NGINX 配置的最上层范围中插入自定义内容。
一起看看下面这个例子。

[source,test-base]
----
=== TEST 1:
--- main_config
env MY_ENVIRONMENT;

--- http_config
    init_worker_by_lua_block {
        print("init")
    }
{'fraction_non_alphanumeric': 0.1199026171637249, 'fraction_numerical': 0.0012172854534388314, 'mean_word_length': 7.5625, 'pattern_counts': {'":': 0, '<': 3, '<?xml version=': 0, '>': 3, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '2462241', 'n_tokens_mistral': 1233, 'n_tokens_neox': 1441, 'n_words': 103}