ezsystems / profiler-bundle
Requires
- php: ~5.4 || ~7.0
- ezsystems/ezpublish-kernel: ~5.3.5@dev || ~5.4.2@dev || ^6.0@dev
- fzaninotto/faker: ~1.4
- jdorn/sql-formatter: ~1.2
This package is auto-updated.
Last update: 2024-09-18 23:49:07 UTC
README
此软件包包含两种分析eZ Publish安装和配置场景的方法,以便能够持续测试并跟踪存储引擎(s)的性能退化。
此软件包包含两种分析您的eZ Publish栈的方法。
-
API分析器
API分析器针对公共API或直接针对SPI执行测试。它能够执行不同的场景。
-
jMeter测试
jMeter测试针对HTTP前端运行测试。目前仅实现了一个随机浏览器。这对于与后台进行的某些分析结合以检测实际瓶颈非常有用。
API分析器
警告
Running the performance tests / profiling will chnage the contents of your
database. Use with care.
使用方法
在现有ez-platform安装中安装此软件包:
composer.phar require ezsystems/profiler-bundle dev-master
在内核中启用软件包,通过添加以下内容:
new eZ\Publish\ProfilerBundle\EzPublishProfilerBundle(),
然后您可以使用以下命令运行性能测试:
php app/console profiler:run papi vendor/ezsystems/profiler-bundle/docs/profile_example.php
提供的文件指定了要运行的性能测试。此处提到的文件是软件包中提供的示例文件。您可以对公共API(papi
)或直接对SPI(spi
)运行测试。
配置
要模拟与示例文件中提供的不同的场景,则配置稍微复杂一些。
类型
首先,我们定义多个内容类型。内容类型定义比测试的API简单,但相应地进行了映射:
$articleType = new ContentType( 'article', [ 'title' => new Field\TextLine(), 'body' => new Field\XmlText( new DataProvider\XmlText() ), 'author' => new Field\Author( new DataProvider\User( 'editor' ) ), // … ], [$defaultLanguage, 'ger-DE', 'fra-FR'], // Languages of content 8 // Average number of versions );
首先定义类型的名称,然后定义其字段。每个字段应分配一个数据提供程序,该提供程序提供随机测试数据。
可选地,我们可以定义多种语言,在这些语言中创建内容。也可以定义平均版本数来“老化”内容。您可以定义尽可能多的类型。
演员
演员实际上使用定义的类型做些事情。目前有三种不同的演员,但您可以定义更多。
-
Actor\Create
创建内容结构。您可以将多个
Create
演员堆叠以创建深层内容结构:
$createTask = new Task( new Actor\Create( 1, $folderType, new Actor\Create( 12, $folderType, new Actor\Create( 50, $articleType, new Actor\Create( 5, $commentType ), $articles = new Storage\LimitedRandomized() ) ) ) );
此示例将创建一个文件夹类型的结构,最终将包含文章,其中将包含评论。指定的数字是创建的平均子项数量。
如果您想引用一些创建的内容对象,例如下一个演员,可以指定对象存储。
-
Actor\SubtreeView
此演员通过执行类似内容存储库的查询来模拟eZ Platform内容对象的视图操作:
$viewTask = new Task( new Actor\SubtreeView( $articles ) );
您应该为演员提供一个对象存储,以便它可以从多个现有内容对象中选择,这些对象将被应用程序的用户查看。
-
Actor\Search
此演员仅执行搜索。搜索指定为在公共API或SPI中使用公共的
Query
对象。
执行
最后,我们想要执行配置的由类型和演员组成的场景。为此,使用了一个执行器:
$executor->run( array( new Constraint\Ratio( $createTask, 1/10 ), new Constraint\Ratio( $viewTask, 1 ), new Constraint\Ratio( $simpleSearchTask, 1/3 ), new Constraint\Ratio( $sortedSearchTask, 1/5 ), ), new Aborter\Count(200) );
执行器将提供与任务关联的Constraint
对象数组。在这种情况下,使用Constraint\Ratio
对象,这些对象将根据给定的概率执行任务。
中止定义了何时停止执行。它还可以检查创建的内容对象的数量或只需在给定时间段后中止。Count
中止在给定次数迭代后中止。
您可能像示例中那样定义多个执行器,然后它们将依次执行。
jMeter测试
使用方法
可以通过在根目录下执行 ant
来运行 jMeter 测试。第一次运行时,jMeter 将被下载。在后续运行中,将使用已下载的文件。运行示例需要 Ant 1.8。
测试会击中配置的主机,并将创建文件,为您提供关于运行的统计信息
-
build/result.jtl
jMeter 日志文件,用于进一步分析
-
build/result.csv
按 URL 简单分组响应时间
配置
您可以通过创建一个文件 jmeter.properties.local
来配置运行,以覆盖 jmeter.properties
文件中的变量。您绝对需要将那里的 jmeter.server
修改为指向要测试的网站。所有选项都在 jmeter.properties
文件中有文档说明。
实现的 "随机浏览器" 只执行 GET
请求,访问从配置的起始页面开始的随机链接。它不会登录或提交任何表单(搜索)。
有两个选项定义了随机浏览者的行为
-
crawler.usertype.a.breadth
平均来说,在同一个页面上点击了多少个链接。这会导致用户在起始页面和随后的页面上点击更多链接。(默认:2)
-
crawler.usertype.a.depth
平均来说,用户会点击多深才能进入网站。这会导致用户跟随链接进入网站结构更深的位置。(默认:3)
另一个重要的配置是 jmeter.users
的值。它定义了将有多少用户并行访问/浏览网站。默认的 5 意味着 5 个用户将同时浏览网站。根据配置的时间,这意味着大约 1 Req/s 到 2 Req/s。