2.11压力与模拟测试(性能测试)
在开发面向互联网或需承受多人并发访问的应用系统时,性能压测和接口自动化模拟测试成为部署前的关键环节。通过这两项测试获取的报告指标,我们能在系统上线前对代码进行优化,确保其满足最低上线要求。
在开发面向互联网或需承受多人并发访问的应用系统时,性能压测和接口自动化模拟测试成为部署前的关键环节。通过这两项测试获取的报告指标,我们能在系统上线前对代码进行优化,确保其满足最低上线要求。
以 Furion 框架官网为例,进行压力测试:
var stressTestHarnessResult = await httpRemoteService.StressTestHarnessAsync("https://furion.net/");Console.WriteLine(stressTestHarnessResult.ToString()); // 打印压力测试结果测试结果概览:
Stress Test Harness Result: Total Requests: 100 // 总请求次数 Total Time (s): 7.95 // 总用时(秒) Successful Requests: 100 // 成功请求次数 Failed Requests: 0 // 失败请求次数 QPS: 12.58 // 每秒查询率 (QPS) Min RT (ms): 676.38 // 最小响应时间(毫秒) Max RT (ms): 7,419.72 // 最大响应时间(毫秒) Avg RT (ms): 3,314.94 // 平均响应时间(毫秒) P10 RT (ms): 1,288.82 // P10 响应时间(毫秒) P25 RT (ms): 2,057.10 // P25 响应时间(毫秒) P50 RT (ms): 3,064.56 // P50 响应时间(毫秒) P75 RT (ms): 4,100.03 // P75 响应时间(毫秒) P90 RT (ms): 5,026.08 // P90 响应时间(毫秒) P95 RT (ms): 7,330.71 // P95 响应时间(毫秒) P99 RT (ms): 7,416.20 // P99 响应时间(毫秒) P99.99 RT (ms): 7,419.72 // P99.99 响应时间(毫秒)stressTestHarnessResult 变量类型为 StressTestHarnessResult,包含以下属性和方法:
-
属性:
TotalRequests:总请求次数(long类型)。TotalTimeInSeconds:总用时(秒)(double类型)。SuccessfulRequests:成功请求次数(long类型)。FailedRequests:失败请求次数(long类型)。QueriesPerSecond:每秒查询率 (QPS)(double类型)。MinResponseTime:最小响应时间(毫秒)(double类型)。MaxResponseTime:最大响应时间(毫秒)(double类型)。AverageResponseTime:平均响应时间(毫秒)(double类型)。Percentile10ResponseTime:P10响应时间(毫秒)(double类型)。Percentile25ResponseTime:P25响应时间(毫秒)(double类型)。Percentile50ResponseTime:P50响应时间(毫秒)(double类型)。Percentile75ResponseTime:P75响应时间(毫秒)(double类型)。Percentile90ResponseTime:P90响应时间(毫秒)(double类型)。Percentile95ResponseTime:P95响应时间(毫秒)(double类型)。Percentile99ResponseTime:P99响应时间(毫秒)(double类型)。Percentile9999ResponseTime:P99.99响应时间(毫秒)(double类型)。
-
方法:
ToString():输出带缩进的详细报告字符串。
默认情况下,压力测试执行 1 轮,每次包含 100 个并发请求,最大并发度为 100。为获取更精确的测试结果,可按需调整这些参数:
var stressTestHarnessResult = await httpRemoteService.SendAsync(HttpRequestBuilder.StressTestHarness("https://furion.net/") .SetNumberOfRequests(1000) // 设置并发请求数量 .SetNumberOfRounds(5) // 设置压测轮次 .SetMaxDegreeOfParallelism(500)); // 设置最大并发度// 在大多数情况下,只需要设置并发请求数量即可var stressTestHarnessResult = await httpRemoteService.StressTestHarnessAsync("https://furion.net/", 500);var stressTestHarnessResult = await httpRemoteService.SendAsync(HttpRequestBuilder.StressTestHarness("https://furion.net/", 500));