【问题标题】:How to track & trend end to end performance (the client experience)如何跟踪和趋势端到端性能(客户体验)
【发布时间】:2017-03-16 08:53:48
【问题描述】:

我正在尝试找出如何最好地跟踪和趋势版本之间的端到端性能。端到端我的意思是,客户端通过浏览器访问这个应用程序的体验是什么。这包括下载时间、dom渲染、javascript渲染等。

目前我正在使用 Jmeter 运行负载测试,这对于证明应用程序和数据库的容量非常有用。不幸的是,Jmeter 永远不会让我展示用户体验的全貌。 Jmeter 不是浏览器,因此永远不会模拟 javascript 和 dom 渲染的影响。 IE:如果第一个字节的时间是 100 毫秒,但是浏览器需要 10 秒来下载资源并渲染 dom,我们就有问题了。

我需要一个工具来帮助我解决这个问题。我最初的想法是利用 Selenium。它可以运行一组测试(登录、查看、创建)并以某种方式记录每个测试的时间。我们需要多次运行相同的场景,并且可能需要通过一组浏览器。这将在每次发布之前完成,并允许我识别用户体验的变化。

例如,这是我想要生成的:

action      |  v1.5  |  v1.6   |  v1.7
----------------------------------------
login       |  2.3s  |  3.1s  |   1.2s
create user |  2.9s  |  2.7s  |   1.5s

selenium 的问题在于 1. 我不确定它是否为此而设计 2. 似乎 DOM 就绪或 javascript 渲染真的很难检测到。

这是正确的道路吗?有没有人有任何指示?有没有我可以利用的工具?

【问题讨论】:

    标签: performance selenium selenium-webdriver jmeter performance-testing


    【解决方案1】:
    1. 关于“JMeter 不是浏览器”。它实际上不是浏览器,但它可能会像经过适当配置的浏览器一样运行,因此请确保您:

      • 将HTTP Cookie Manager 添加到您的测试计划以表示浏览器cookie 并处理基于cookie 的身份验证
      • 添加HTTP Header Manager 以发送相应的标头
      • 通过HTTP Request Defaults配置HTTP请求采样器到

        • 检索所有嵌入资源
        • 使用大约 5 个并发线程的线程池来执行此操作
      • 添加HTTP Cache Manager 表示浏览器缓存(即每个虚拟用户每次迭代仅检索一次嵌入式资源)
      • 如果您的应用程序是基于 AJAX 构建的 - 您还需要模仿 AJAX requests with JMeter

      关于“渲染”,例如,您检测到您的应用程序在某个浏览器上渲染缓慢,并且您无法通过调整应用程序来做任何事情。下一步是什么?您将开发补丁或向浏览器开发人员提出问题?我建议关注您可以控制的区域,而通过浏览器呈现 DOM 不是您可以做到的。

    2. 如果您出于任何原因仍需要这些客户端指标,您可以考虑将WebDriver Sampler 与主要的 JMeter 负载测试一起使用,以便也可以将真实的浏览器指标添加到最终报告中。您甚至可以使用Navigation API 收集确切的时间并将它们添加到负载测试报告中

      请参阅Using Selenium with JMeter's WebDriver Sampler 以开始使用。

    3. 有多个选项可用于跟踪构建(和 JMeter 测试执行)之间的应用程序性能,即

    【讨论】:

      【解决方案2】:

      我认为你有很好的目标,但我会把它们分开:

      • 测量 DOM 渲染、javascript 渲染等并不是“客户通过浏览器访问此应用程序的体验”的一部分,因为您的客户通常不知道您正在“渲染 dom”或“运行 javasript” - 他们不在乎。但它们是我希望在每次提交更改后解决的问题,而不仅仅是发布到发布,因为如果此类测试没有一直运行,可能很难将退化追溯到特定更改。所以我会把它放在构建级别的持续集成中。看到一个很好的讨论here

      • 那么您可能想知道服务器端性能是相同还是变差(或更好)。因为 JMeter 是理想的。此类测试可以按某个时间表进行(例如,每晚或每个版本),并且可以使用例如用于 Jenkins 的 JMeter 插件自动化。如果服务器端性能变差,您就不需要端到端测试,因为您已经知道会发生什么。

      • 1234563 (junit、nunit 等),它也适合自动化流程,并且可以生成一些报告,包括持续时间(例如,JUnit 有一个TestWatcher,它允许您为每个测试添加一致的持续时间测量)。
      • 在所有这些自动化之后,我还将进行“真正的最终用户体验”测试,同时针对同一台服务器同时运行 JMeter 性能测试:让真人在应用程序处于运行状态时对其进行体验加载。因为与自动化不同,人是不可预测的,这有利于发现错误。

      【讨论】:

        猜你喜欢
        • 2017-08-25
        • 1970-01-01
        • 2016-05-31
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-12-16
        相关资源
        最近更新 更多