如何测试现代角度应用程序的性能/负载

时间:2019-01-28 16:05:48

标签: angular performance testing performance-testing load-testing

我想加载/性能测试一个使用角度6+作为前端框架的Web应用程序。该应用程序很大,并使用了许多向导/模式等。 我想做一些“真正的” e2e-frontend-tests(不仅测试API调用,还包括js渲染等)。

目前可以测试这种应用程序的最新方法和工具是什么?

为澄清起见,我想进行一些真正的端到端性能测试,例如在无头模式下打开浏览器,打开一个向导,getvthevtimevit将持续进行直到向导出现。就像使用硒进行前端测试一样。我也可以用硒来做到这一点,但我不知道它是否合适。

2 个答案:

答案 0 :(得分:4)

测试客户端性能的最佳方法是使用browser developer tools

对应用程序进行性能分析

如果要自动化该过程-应该使用浏览器自动化框架,最受欢迎的是Selenium。您还可以执行JavaScript个调用来访问Performance object,尤其是访问Navigation Timing / User Timing APIs

我还建议您牢记服务器端的性能,例如,当响应时间开始增加或错误开始出现时,您可能希望检查应用程序可以处理多少个并发用户而不会出现问题,饱和点/第一个瓶颈是什么? 。因此,请考虑将客户端性能测试与对应用程序进行预期的负载相结合,因为从客户端的角度来看,渲染速度非常快,但服务器响应速度很慢,从而导致不良的用户体验。根据测试实验室的硬件,您可以选择Selenium Grid启动许多浏览器实例,也可以选择dedicated load testing tool

答案 1 :(得分:0)

您不能仅通过UI浏览器测试来真正对应用程序进行压力测试, 理想情况下,您既要对所有应用程序API调用进行压力测试,又要进行UI /浏览器测试。

要考虑的一个选项可能是endly e2e runner,它可以完成这两项任务,负载测试和并行运行硒测试

如下所示,其中“数据”文件夹包含先前记录的http请求以及符合您的API的可选所需验证规则

@ test.yaml

defaults:
  target:
    URL: ssh://127.0.0.1/
    credentials: localhost
pipeline:
  init:
    action: selenium:start
    version: 3.4.0
    port: 8085
    sdk: jdk
    sdkVersion: 1.8

  test:
    multiAction: true
    stressTest:
      action: run
      request: @load_test
      async: true
    testUI:
      action: selenium:run
      browser: firefox
      remoteSelenium:
        URL: http://127.0.0.1:8085
      commands:
        - get(http://play.golang.org/?simple=1)
        - (#code).clear
        - (#code).sendKeys(package main

          import "fmt"

          func main() {
          fmt.Println("Hello Endly!")
          }
          )
        - (#run).click
        - command: output = (#output).text
          exit: $output.Text:/Endly/
          sleepTimeMs: 1000
          repeat: 10
        - close
      expect:
        output:
          Text: /Hello Endly!/

其中@ load_test.yaml

init
  testEndpoint: rest.myapp.com
pipeline:
  test:
    data:
      []Requests: '@data/*request.json'
    range: '1..1'
    template:
      info:
        action: print
        message: starting load testing
      load:
        action: 'http/runner:load'
        threadCount: 3
        '@repeat': 100000
        requests: $data.Requests
      load-info:
        action: print
        message: 'QPS: $load.QPS: Response: min: $load.MinResponseTimeInMs ms, avg: $load.AvgResponseTimeInMs ms max: $load.MaxResponseTimeInMs ms'