chrispenny / silverstripe-webpagetest
向WebPageTest提交性能测试请求并消费结果
Requires
- php: ^7.1
- guzzlehttp/guzzle: ^6.0
- guzzlehttp/psr7: ^1.0
- opis/json-schema: ^1.0
- silverstripe/cms: ^4@dev
- silverstripe/framework: ^4@dev
- silverstripe/vendor-plugin: ^1.0
Requires (Dev)
- phpunit/phpunit: ^5.7
This package is auto-updated.
Last update: 2024-09-15 05:08:09 UTC
README
此模块的目标是提供一个队列和查看WebPageTest性能测试的方式。然而,这还处于早期阶段——我们有一些基本功能,但这绝对不能取代付费的测试服务(至少目前还不能)。
开箱即用
- 提供请求和服务类,您可以用于队列和消费WebPageTest性能测试结果。
- 提供dev/tasks,可用于按计划队列和消费WebPageTest性能测试结果。
- 基本ModelAdmin用于查看您的提交和WebPageTest性能测试结果。
待定
- 报告!
- 图表?
- 消费更多性能测试结果数据
安装
$ composer require chrispenny/silverstripe-webpagetest
获取WebPageTest的API密钥
如果您想使用此模块与公共API,那么您需要请求一个API密钥。获取API密钥没有要求,只是为了确保人们不会滥用API。
https://webpagetest.org/getkey.php
所需配置
您可以使用不同的方式使用此模块,但假设您只想使用提供的/dev/tasks
,您需要添加两个配置设置,然后才能继续。
key
(您在上面请求的API密钥)url
(您希望WebPageTest对其运行测试的URL)
因此,开箱即用,我们只对相同的单个URL运行性能测试。
在此模块的早期阶段,如果您想支持测试多个不同的URL,则需要实现自己的/dev/task
。有关详细信息,请参阅使用服务。
默认配置
默认情况下,在_config/submission.yml
中,我们设置了一些默认配置
base_url: http://www.webpagetest.org/runtest.php
format: json
base_url
是WebPageTest的标准请求URL。该模块支持的格式是json
。
推荐配置
location
(如果您不提供位置,则将随机选择,这使得您的持续测试变得有点随机,因为您可能会从不同的位置获得不同的结果)
可用位置可在此处找到:https://webpagetest.org/getLocations.php?f=html
其他配置
开箱即用,该模块支持您发送WebPageTest RESTful API中当前支持的任何/所有GET参数。
使用dev/tasks
有两个dev/tasks
可供您使用。
ChrisPenny\WebPageTest\Submission\Task
ChrisPenny\WebPageTest\TestResult\Task
Cron支持不是作为此模块的一部分添加的,但您可以设置cron以(例如)每天运行一次Submission\Task
(导致每天请求一个新的WebPageTest),并且您可能希望将TestResult\Task
设置为每小时运行一次。
以下是对每个任务执行的操作的完整描述。
Submission\Task
当运行此任务时,它将向WebPageTest发送单个GET请求,请求他们排队进行与您在配置中指定的测试匹配的测试。
WebPageTest上的RESTful API文档将显示如果没有提供,默认值是什么:https://sites.google.com/a/webpagetest.org/docs/advanced-features/webpagetest-restful-apis
需要注意的是,通过WebPageTest进行的测试不一定立即处理。如果您使用的是免费服务,那么您的请求将进入队列,并且当您在队列前端时才会处理。然后,测试当然也需要一段时间才能完成。这就是我们为什么要有一个单独的任务来检索测试数据。
一旦我们从WebPageTest收到“OK”(或其他)响应,我们就会创建一个测试提交记录,您可以在/admin/performance-tests/
下的ModelAdmin中查看。
这些提交记录有三种可能的状态,这些状态表示测试本身的状态。
- 挂起(WebPageTest仍在处理我们的请求——他们还没有测试我们的URL)
- 成功(测试已由WebPageTest完成,我们应该有结果)
- 失败(出了点问题…)
如果您希望每天运行一次新的性能测试,那么您应该设置一个cron,每天触发这个任务运行一次。
TestResult\Task
当运行此任务时,它会检查当前设置状态为Pending
的提交。然后,它会从WebPageTest请求更新该测试的状态。
一般来说,有三种可能性
- 您仍在队列中,测试尚未开始
- 您的测试目前正在运行
- 您的测试已完成
在前两种情况下,我们将创建(或更新)一个测试结果记录,并将数据设置为您在队列中的位置,或者测试正在进行。
在测试完成的情况下,我们将用我们(目前)关心的结果数据填充测试结果记录。
这些测试结果中有很多数据。所以,目前我们只存储基本数据。我欢迎任何人为我们添加存储结果数据的功能。
如果您每天运行cron来触发测试提交,您可能想要在提交发生后的一段时间内排队检索结果,或者,您可以简单地触发这个任务每20分钟运行一次。如果没有挂起的提交,则任务不会做任何事情。
查看提交和结果
ModelAdmin可以在以下位置找到:/admin/performance-tests/
这将列出您所提交的所有提交。
如果您点击您的任何一个提交,您将看到当前状态,一旦有结果,就会出现一个Result
选项卡,您可以在其中查看结果及其“运行”(您可能要求WebPageTest执行多次运行,默认情况下,它还会执行“首次查看”和“重复查看”测试)。