title: "测试" post_status: publish comment_status: open taxonomy: category: - hosting-handbook post_tag: - Repos - Data - Docs Translate
测试
为提升与 WordPress 的兼容性,WordPress 托管团队为托管公司提供工具,使其能在自身基础设施上运行 WordPress 自动化测试以改善兼容性。测试结果可发布至托管测试结果信息页面,向 WordPress 社区展示其兼容状态。
该方案包含两个工具:运行器负责在主机上执行核心 PHPUnit 测试,并可选择将信息发送至结果页面;报告器则是运行于托管页面并展示测试结果的插件。
这是什么
运行器
托管公司可能托管着数百万个 WordPress 网站,因此确保其配置尽可能与软件兼容至关重要。
为了验证这种兼容性,WordPress 社区提供了一系列 PHPUnit 测试,用于检查 WordPress 在任何环境中的运行情况。
报告器
Runner 测试会生成一份报告,其中包含与关联于网络主机的机器人用户相关的测试结果,这些结果会被捕获并显示在主机测试结果页面上。
试用 PHPUnit 测试运行器
什么是 phpunit-test-runner
phpunit-test-runner 是一个旨在让托管公司更轻松地运行 WordPress 项目自动化测试的工具。
关于此工具有完整的文档。此外,如果您愿意,您可以让您的测试结果出现在 WordPress 的托管测试结果页面上。
该工具可以手动运行,也可以通过像 Travis 这样的自动化系统运行。本文档的目的是展示如何手动运行测试,以说明其工作原理。
要求
要使用 Runner,需要满足以下条件: * 一台具有常规配置的服务器/托管(基础设施) * 一个可供测试的数据库(该数据库将被多次创建和销毁) * NodeJS 20.x
NodeJS 安装
如果您使用 Debian / Ubuntu 系统,请使用以下命令安装或更新 NodeJS:
curl -fsSL https://deb.nodesource.com/setup_20.x | sudo -E bash -
sudo apt -y install nodejs
node -v
如果您使用 RHEL / CentOS 系统,请使用以下命令安装或更新 NodeJS:
curl -fsSL https://rpm.nodesource.com/setup_20.x | sudo -E bash -
sudo yum install -y nodejs
node -v
安装运行器
首先,下载软件。此示例使用 /home/wptestrunner/ 文件夹,但请根据环境设置为最佳路径。
cd /home/wptestrunner/
git clone https://github.com/WordPress/phpunit-test-runner.git
cd phpunit-test-runner/
下一步是配置环境。为此,复制示例文件并进行配置。
cp .env.default .env
vim .env
内容(摘要形式)可以如下所示:
# 文件在交付到环境之前可以准备的目录路径。
export WPT_PREPARE_DIR=/home/wptestrunner/wordpress
# 可以复制 `wordpress-develop` 仓库并从中运行测试的目录路径。在同一环境中运行测试时,将 WPT_TEST_DIR 设置为 WPT_PREPARE_DIR
export WPT_TEST_DIR=$WPT_PREPARE_DIR
# 用于向报告服务进行身份验证的 API 密钥,格式为 'username:password'。请查看"创建你的机器人"部分以获取身份验证信息。
export WPT_REPORT_API_KEY=
#export WPT_REPORT_API_KEY=examplehostingcompanybot:XXXX XXXX XXXX XXXX
# (可选)定义替代的报告 URL
export WPT_REPORT_URL=
# 可写入和重置的数据库凭据。警告!!!此数据库将在测试之间被销毁。仅使用安全的数据库凭据。
export WPT_DB_NAME=wordpress
export WPT_DB_USER=wordpress
export WPT_DB_PASSWORD=__PASSWORD__
export WPT_DB_HOST=localhost
# (可选)设置自定义表前缀以允许对同一数据库进行并发操作。
export WPT_TABLE_PREFIX=${WPT_TABLE_PREFIX-wptests_}
# (可选)定义要调用的 PHP 可执行文件
export WPT_PHP_EXECUTABLE=${WPT_PHP_EXECUTABLE-php}
# (可选)定义 PHPUnit 命令执行调用。如果由于某些原因无法直接调用 `php phpunit.phar`,请使用此选项。
export WPT_PHPUNIT_CMD=
# (可选)定义删除测试目录的命令执行。如果由于某些原因无法直接调用 `rm -r`,请使用此选项。
export WPT_RM_TEST_DIR_CMD=
# SSH 连接字符串(也可以是别名)。如果测试计划在同一环境中运行,请留空。
export WPT_SSH_CONNECT=
# 传递给 SSH 连接的任何选项。默认为 '-o StrictHostKeyChecking=no'
export WPT_SSH_OPTIONS=
# SSH 私钥,base64 编码。
export WPT_SSH_PRIVATE_KEY_BASE64=
# 输出日志记录。使用 'verbose' 增加详细程度
export WPT_DEBUG=
配置用于下载 WordPress 软件和进行数据库访问以准备测试的文件夹。
环境准备
在执行首次测试前,让我们更新所有组件。如果您希望保持环境最新,可以在每次测试前运行此流程,但这更多取决于是否处于生产环境。
cd /home/wptestrunner/phpunit-test-runner/
git pull
source .env
准备测试
现在环境已就绪,运行测试准备工作。
php prepare.php
系统将运行一系列漫长的安装、配置和不同组件的编译过程来准备测试。如果出现警告信息,不必过于担心,这完全正常。在流程结束时,如果缺少某些必要组件,系统会发出提示。如果一切顺利,最终应该会看到类似这样的输出:
完成。
正在替换 wp-tests-config.php 中的变量
成功:环境准备就绪。
环境准备完成后,下一步就是首次运行测试。
[info]每次运行测试都必须执行全部 4 个步骤。这包括每次都要通过运行 prepare.php 来准备环境,即使环境配置没有发生任何更改。[/info]
运行测试
现在环境已准备就绪,让我们运行测试。为此,请执行将执行测试的文件。
php test.php
这些符号代表什么?
. → 每个点表示测试已正确通过。
S → 表示测试已被跳过。这通常是因为这些测试仅在特定配置下有效。
F → 表示测试失败。失败原因的信息会在末尾显示。
E → 表示测试因 PHP 错误而失败,可能是错误、警告或通知。
I → 表示测试被标记为未完成。
如果遵循这些步骤,一切应该都能完美运行,并且不会出现任何错误。如果在遵循这些步骤后遇到错误,可能是由于某些缺失的调整或 PHP 扩展等原因。我们建议您调整配置,直到其正常工作。毕竟,此工具旨在帮助您优化该基础设施中 WordPress 的最佳配置。
创建报告
即使测试失败,也会生成报告。第一份报告显示环境信息。其中最重要的元素包括 WordPress 中常用的扩展以及一些通常很有用的工具。
cat /home/wptestrunner/wordpress/env.json
该文件内容大致如下:
{
"php_version": "7.4.5",
"php_modules": {
"bcmath": false,
"curl": "7.4.5",
"filter": "7.4.5",
"gd": false,
"libsodium": false,
"mcrypt": false,
"mod_xml": false,
"mysqli": "7.4.5",
"imagick": false,
"pcre": "7.4.5",
"xml": "7.4.5",
"xmlreader": "7.4.5",
"zlib": "7.4.5"
},
"system_utils": {
"curl": "7.58.0 (x86_64-pc-linux-gnu) libcurl\/7.58.0 OpenSSL\/1.1.1g zlib\/1.2.11 libidn2\/2.3.0 libpsl\/0.19.1 (+libidn2\/2.0.4) nghttp2\/1.30.0 librtmp\/2.3",
"ghostscript": "",
"imagemagick": false,
"openssl": "1.1.1g 21 Apr 2020"
},
"mysql_version": "mysql Ver 15.1 Distrib 10.4.12-MariaDB, for debian-linux-gnu (x86_64) using readline 5.2",
"os_name": "Linux",
"os_version": "4.15.0-20-generic"
}
除了这份报告,还会提供一个包含测试过程中所有信息的最终文件。该文件包含所有执行的测试(超过 10,000 项),提供每项测试的执行时间以及可能出现的任何问题。
cat /home/wptestrunner/wordpress/junit.xml
此时,如果需要,我们可以通过将报告发送到 WordPress.org 来生成报告。即使您尚未包含 WordPress 用户(创建方法见下文),仍然可以运行此文件。
php report.php
清理环境以便进行其他测试
测试运行成功后,剩下的就是删除所有已创建的文件,以便重新开始。为此,请执行以下命令:
php cleanup.php
自动化执行
完成首次手动测试后,请将所有步骤编写为自动化脚本,因为每次测试执行都需要按顺序完成这些步骤。
该脚本应在 WordPress 主分支发生变更/提交时运行。许多托管服务商会通过 cron 定时任务(每隔数小时/数天)或在代码变更时运行此脚本,以执行相应的检查。
优化配置
请勿忘记,此工具旨在验证环境和基础设施是否为 WordPress 运行的最佳配置。因此,遵循示例,您可以进行多项改进,例如安装 bcmath、gd、libsodium、mcrypt、mod_xml 和 imagick 等扩展,或 ghostscript 和 imagemagick 等实用工具。
目标何在?实现零错误,并获得完美配置的绿灯。
[alert]某些测试可能会被跳过,或者可能存在 PHPUnit 认为“有风险”的测试。[/alert]
如何报告:为 WordPress.org 创建你的机器人
如果你/你的公司希望测试结果能显示在 WordPress.org 页面上,请为此创建一个用户。
首先要做的是在 WordPress.org 上创建一个用户。例如,如果你的公司名为 ExampleHostingCompany, Inc,可以将你的用户名命名为类似 examplehostingcompanybot。请注意,应经常检查关联的电子邮件账户,因为会收到关于测试可能运行的邮件。
在测试页面创建一个议题,请求将该机器人作为 测试报告者 包含在结果页面中,并注明你为该用户使用的电子邮件账户。
[tip]此用户的头像必须是贵公司的徽标,且名称和 URL 必须明确显示是哪家公司。[/tip]
[info]托管团队中的成员将审核该请求,并为你添加用户,或要求提供更多信息。团队会尽快回复,但由于此步骤是手动的,请耐心等待。[/info]
一旦用户在系统中创建完成,你将通过电子邮件收到加入邀请。然后,你可以登录 make.wordpress.org/hosting,并在 用户 -> 你的个人资料 中创建一个应用程序密码。
为了使报告正常工作,请将机器人的用户名以及应用程序密码放在 .env 文件中,内容大致如下:export WPT_REPORT_API_KEY='examplehostingcompanybot:ABCD 1234 abcd 4567 EFGH efgh'。
[info]如果你有兴趣改进本手册,请查看 Github 手册仓库,或在官方 WordPress Slack 的 #hosting 频道中留言。[/info]