如何测试现代 angular 应用程序的性能/负载
How to test performance / load of a modern angular application
我想加载/性能测试使用 angular 6+ 作为前端框架的 Web 应用程序。该应用程序非常大,使用了大量的向导/模式等。
我想做一些 "real" e2e-frontend-tests(不仅仅是测试 API-calls,还有 js-rendering 等)
当前测试此类应用程序的最先进方法和工具是什么?
为了澄清,我想做一些真正的端到端性能测试,例如以无头模式打开浏览器,打开向导并获取向导出现所需的时间。就像使用 selenium 进行前端测试一样。我也可以用 selenium 做到这一点,但我不知道它是否是正确的工具。
测试客户端性能的最佳方法是使用 browser developer tools
分析应用程序
如果你想自动化这个过程 - 你应该选择浏览器自动化框架,最流行的是 Selenium. You will be also capable of executing JavaScript calls to access Performance object in general and Navigation Timing / User Timing APIs。
我还建议牢记服务器端性能,即您可能想要检查您的应用程序可以毫无问题地处理多少并发用户、饱和点/第一个瓶颈是什么、响应时间开始增加或出现错误时开始发生。因此,请考虑将客户端性能测试与对应用程序进行预期负载相结合,因为从客户端的角度来看,渲染速度非常快,但服务器响应缓慢,从而导致糟糕的用户体验。根据您的测试实验室硬件,您可以选择 Selenium Grid to kick off many browser instances or go for a dedicated load testing tool
您无法仅使用 UI 浏览器测试对您的应用程序进行真正的压力测试,
理想情况下,您希望对所有应用程序 API 调用进行压力测试,同时还对 运行ning UI/browser 进行测试。
要考虑的一个选项可能是 endly e2e runner,它可以并行执行这两项任务,即负载测试和 运行 selenium 测试
它可能看起来像下面这样,其中 "data" 文件夹包含以前记录的 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'
我想加载/性能测试使用 angular 6+ 作为前端框架的 Web 应用程序。该应用程序非常大,使用了大量的向导/模式等。 我想做一些 "real" e2e-frontend-tests(不仅仅是测试 API-calls,还有 js-rendering 等)
当前测试此类应用程序的最先进方法和工具是什么?
为了澄清,我想做一些真正的端到端性能测试,例如以无头模式打开浏览器,打开向导并获取向导出现所需的时间。就像使用 selenium 进行前端测试一样。我也可以用 selenium 做到这一点,但我不知道它是否是正确的工具。
测试客户端性能的最佳方法是使用 browser developer tools
分析应用程序如果你想自动化这个过程 - 你应该选择浏览器自动化框架,最流行的是 Selenium. You will be also capable of executing JavaScript calls to access Performance object in general and Navigation Timing / User Timing APIs。
我还建议牢记服务器端性能,即您可能想要检查您的应用程序可以毫无问题地处理多少并发用户、饱和点/第一个瓶颈是什么、响应时间开始增加或出现错误时开始发生。因此,请考虑将客户端性能测试与对应用程序进行预期负载相结合,因为从客户端的角度来看,渲染速度非常快,但服务器响应缓慢,从而导致糟糕的用户体验。根据您的测试实验室硬件,您可以选择 Selenium Grid to kick off many browser instances or go for a dedicated load testing tool
您无法仅使用 UI 浏览器测试对您的应用程序进行真正的压力测试, 理想情况下,您希望对所有应用程序 API 调用进行压力测试,同时还对 运行ning UI/browser 进行测试。
要考虑的一个选项可能是 endly e2e runner,它可以并行执行这两项任务,即负载测试和 运行 selenium 测试
它可能看起来像下面这样,其中 "data" 文件夹包含以前记录的 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'