ezsystems/profiler-bundle

此软件包最新版本(v0.5.0)的许可证信息不可用。

安装: 12

依赖关系: 0

建议者: 0

安全性: 0

星标: 1

关注者: 21

分支: 2

开放问题: 0

类型:ezplatform-bundle

v0.5.0 2017-09-06 09:14 UTC

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。