测试 ASP.NET 核心应用程序的装入测试
您的应用程序在您的笔记本电脑 . 单元测试 pass@. 集成测试 PassQ. 中完美运作。 您调用您制作了 @,}, 然后突然将所有磨碎到一个停止的. •500个真正的用户同时进入您的主页,\ 并且您的服务器开始返回 <503> 错误 MS K7 #你精心设计的缓冲策略\ mSSK8} 结果它像您想象的那样, “'” 相当有效 就像您认为“.” 这个数据库查询是快速的吗?
这是每个开发者都害怕的噩梦情景 ,,但大多数Don's '测试 性能测试是't可选的MS K1 it' 成功发射和MSC3AM紧急页面=.之间的差别 此两个“ - @ part ” 指南将展示您如何使用 k6,}这个现代载荷测试工具来防止这一场景的发生, 该工具对于企业应用程序来说足够强大但又简单到可以运行在您的 CIQ/\ CD Prouto@.}
这是 部分#1 以 k6: 来进行负载测试时的 2 -\ part 序列
- 本篇文章=)@ :_ 介绍 k6,_ 安裝@ MS K2} 測試型態 @ MPK3} 以及為什麼 k6}
- 《实际实施》:写测试@,CI/CD整合 @,剖析_,和真实的#-世界示例
一. 导言导言 导言 导言 导言
性能测试对于任何生产 ASP.NET Core application@.你是否正在建立一个简单的博客{,}(一个复杂的微服务架构_,)或企业应用程序{MS K5你需要知道 您的应用程序在 Matt.下是如何运行的吗?
此综合指南演示您如何使用 ASP.}NET 核心应用程序装入测试 k6 -}其中最强大的 Open@-}源载负载测试工具之一 最小浏览量 我们的示例应用程序 @ ( @ a a 简单标记@ MS K1}以博客为例,其中含有内存和输出 caching_ ),}% 这里显示的技术和模式应用到 ASP.NET 核心应用程序.
到了这两次-系列的结尾 你就知道该如何"MSC3"
- 在任何平台上安装和配置 k6@ 窗口 @ , MacMS K3Linux @ MPK4
- 编写不同情景的全面性业绩测试报告
- 与 GitHub Action 连接到您的 CI/}CD 管道
- 使用剖析工具@( @ dootTrace @ , @ dotMemory @)}与 k6一起寻找瓶颈
- 实施不同的测试策略 @:烟_,load@,压力_,加注,和浸泡检测
- 建立性能回归检测机制,防止低速代码进入生产
为何以 MiminimalBlog 为例? @? @ '它是一個真正的 ASP.NET Core &9.0應用程式, 有共同的樣式Name:Razor Pages,記憶力在抓取 ,產品 MS K6檔案 IMS K7OMSKO8和標記處理}.你MSOK10將學會的測試方法 平等适用于您的 MVC aptsMS k11Web APIsMPK12Blazor 應用軟體MS13或最小的 APIS{.
什么是K6 和为什么使用它□?
k6 是一个为开发者构建的现代负荷测试工具@. @ 不同于旧的工具, 如JMeter 或 MalodRunner,_ k 6 is\ :}
- 开发者 @-# 友好“:”测试用 JavaScript {(}ES6+)}写成。
- CLI=-=第一位“: 完美于CI/CD管道”
- 轻重量: 單一二進位 *, 沒有依屬性
- 准确性: 以 Go 寫入精确度量
- 脚本* : 复杂情景的完整编程能力
- 云云 M- 已就绪: 能夠與 k6 雲 MS K2 Grafana , 普羅米修斯
对于最小的Blog@ , @ k6 @ 是理想的, 因为 < :\
- 我们可以测试缓存@:@ k6}可以校验缓存信头和行为
- 我们可以模拟真实交通流量: 测试多个同时使用的用户
- 我们可以验证履约索赔衡量实际反应时间
- 我们可以与 CI/CD结合“: ” 我们管道中的自动测试
- 我们可以测试具体情景@:_ 分类过滤@,_ 个人邮件 @MS K2_ 主页
正在安裝 k 6 @
Window 安装
使用巧克力的选项 @(}推荐@)
choco install k6
使用 winget 的选项@2:
winget install k6 --source winget
手册安装
- 下载最新的 Windows 释放 GitHub 释放
- 解开
k6.exe文件文件 - 将目录添加到您的 PATH 或移动
k6.exe已经在 PATH 中的目录
檢查安裝@: @%
k6 version
Mac 安装
使用主机的选项 @1:_@(}推荐{)}
brew install k6
使用 MacPorts 的选项 @2:%
sudo port install k6
手册安装
# Download and install the latest release
curl -O -L https://github.com/grafana/k6/releases/latest/download/k6-macos-amd64.zip
unzip k6-macos-amd64.zip
sudo cp k6-macos-amd64/k6 /usr/local/bin/
sudo chmod +x /usr/local/bin/k6
檢查安裝@: @%
k6 version
Linux 安装
使用软件包管理员
用于 乌本图(Ubuntu):
sudo gpg -k
sudo gpg --no-default-keyring --keyring /usr/share/keyrings/k6-archive-keyring.gpg --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys C5AD17C747E3415A3642D57D77C6C491D6AC1D69
echo "deb [signed-by=/usr/share/keyrings/k6-archive-keyring.gpg] https://dl.k6.io/deb stable main" | sudo tee /etc/apt/sources.list.d/k6.list
sudo apt-get update
sudo apt-get install k6
用于 费多拉·/Centos/RHEL:
sudo dnf install https://dl.k6.io/rpm/repo.rpm
sudo dnf install k6
使用 Snap 选项“ 2:”
sudo snap install k6
手册安装
# Download the latest release
curl -O -L https://github.com/grafana/k6/releases/latest/download/k6-linux-amd64.tar.gz
tar -xzf k6-linux-amd64.tar.gz
sudo cp k6-linux-amd64/k6 /usr/local/bin/
sudo chmod +x /usr/local/bin/k6
使用 docker 选项“ 4:”
docker pull grafana/k6:latest
# Run a test
docker run --rm -i grafana/k6:latest run - <script.js
檢查安裝@: @%
k6 version
理解 k6测试解剖
在我们潜入测试前 , Let's understand k6" test
import http from 'k6/http';
import { check, sleep } from 'k6';
// Test configuration
export const options = {
vus: 10, // Virtual users
duration: '30s', // Test duration
};
// Setup function (runs once before test)
export function setup() {
// Prepare test data
return { baseUrl: 'http://localhost:5000' };
}
// Main test function (runs for each VU)
export default function(data) {
const response = http.get(data.baseUrl);
// Assertions
check(response, {
'status is 200': (r) => r.status === 200,
'response time < 200ms': (r) => r.timings.duration < 200,
});
sleep(1); // Wait between iterations
}
// Teardown function (runs once after test)
export function teardown(data) {
// Clean up
}
关键概念@: @%
- 虚拟用户 @(_VUs)}@: 模拟同时用户
- 持续期限*:* 测试运行了多久
- 检查检查@:_session 停止测试的语句
- 阈下限: Pass/不合格标准
- 计量数:反应时间,通过putMS K2错误率
性能测试类型
在测试您的应用程序前@, @ let @ ' @ 理解五个主要负荷测试类型, 以及何时使用每Q:}
graph TD
A[Performance Testing Types] --> B[Smoke Test]
A --> C[Load Test]
A --> D[Stress Test]
A --> E[Spike Test]
A --> F[Soak Test]
B --> B1[1-2 VUs<br/>30s-1min<br/>Basic Functionality]
C --> C1[Normal Load<br/>5-15 minutes<br/>Verify SLAs]
D --> D1[Gradual Increase<br/>10-30 minutes<br/>Find Breaking Point]
E --> E1[Sudden Spike<br/>5-10 minutes<br/>Test Recovery]
F --> F1[Normal Load<br/>Hours/Days<br/>Memory Leaks]
style B stroke:#90EE90
style C stroke:#87CEEB
style D stroke:#FFD700
style E stroke:#FF6347
style F stroke:#DDA0DD
1.烟雾测试
目的宗旨的目的: 校验系统在最低负荷下运行
何时使用:
- 每次改变代码后
- 在进行更密集的测试之前
- 作为在 CI/CD 中检查是否精神正常
特征特点:
- “1-2VUs (虚拟用户’)
- 短时间 @(30 @s @sQ}-1_min)#
- 测试基本功能
2. 装入测试
目的宗旨的目的评估预期正常载荷下的性能
何时使用:
- 确定基准绩效
- 为核实苏丹解放军是否得到满足
- 定期业绩回归测试
特征特点:
- 实际用户数
- 持续负载
- 典型持续时间@: @ @ @ 5-15 @ minutes
3.压力测试
目的宗旨的目的: 查找系统断点
何时使用:
- 理解能力限度
- 查明瓶颈
- 按比例规划
特征特点:
- 逐步增加的负载
- 超出正常能力
- 持续时间: : @ @ @ MS K1 @ 分钟
4.斯派克测试
目的宗旨的目的校对:Portnoy
何时使用:
- 准备产品发布
- 测试自动 *% -_ 缩放
- 校验后退行为
特征特点:
- 装载量突然大幅增加
- 短短高峰期
- 时间总长度 @: @ @ 5-10 @ 分钟@
5. 吸收测试 MS K1 延长试验 MSC2
目的宗旨的目的发现随时间推移的内存泄漏和退化
何时使用:
- 重大释放前
- 测试远程服务
- 审定资源清理
特征特点:
- 正常负载水平
- 延长期限@(/小时或天数 @)
- 降解监测器
graph LR
A[Start] --> B{Smoke Test Pass?}
B -->|No| C[Fix Issues]
C --> A
B -->|Yes| D{Load Test Pass?}
D -->|No| E[Optimize]
E --> D
D -->|Yes| F{Stress Test}
F --> G{Found Limit?}
G -->|Yes| H[Document Capacity]
G -->|No| I[Increase Load]
I --> F
H --> J{Spike Test Pass?}
J -->|No| K[Improve Resilience]
K --> J
J -->|Yes| L{Soak Test}
L --> M{Memory Stable?}
M -->|No| N[Fix Memory Leaks]
N --> L
M -->|Yes| O[Production Ready]
style O stroke:#90EE90
{\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}为什么?
使用如此多的负载测试工具@ , @ 为何您要选择 k6? @ LetMS K2} 和流行的替代品比较 k6\ ?
k6vs Apache Jometer 诉阿帕奇
阿帕奇·哈利梅特 是载荷测试工具的老兵@(}自 @1999).
| 特写 @ | @ k6} @ MS K3 @ Jometer @ | @ | |
|---|---|---|---|
| 安装装置 | 单二进制,没有依附关系MS K2需要 Java,更重的安裝}{ | ||
| 试验定义 | JavaScript 代码 @ | XML 或图形界面@ | |
| 资源使用量 轻量级的(GO)}重力的 | |||
| CD 融合 | 精美的 @CLI-第一位 @MS K3 | 需要插件{ | } |
| 学习曲线 “ | 对开发商来说容易 ” @ | Stepeper,GUIMS K3聚焦@ | # |
| 程序支持 | HTTP,WebSocketesMS K2GRPC | MSSK4FTPMPK5JDBC□,SMTP},等 |
何时使用 Jimeter 代替@ : @
- 用于非{-} 技术测试器的 GUI
- 超过 HTTP 的测试规程@( @JDBC,}LDAPMS K2_SOAP})}%
- 已经拥有Jimeter团队中的专门知识
- 需要广泛的插件生态系统
为什么对大多数 ASP=.=NET Core appts@:}来说K6#是更好的?
- 快速写入测试@ ( @ JavaScript vs XML=)}
- 较轻资源足迹
- 更好地整合 CI/CD
- 更现代的开发者经验
k6 与 Locust 之比
蝗灾 是一个基于 Python 的负载测试工具@,}在 Pytheon 商店很受欢迎 @.}
| @ | @ 地貌 @ | @ k6 @ @ I | @ Locust @ MPK4 @ |
|---|---|---|---|
| 语言语文 | JavaScript | PythonMS K2 | |
| 业绩表现 实绩 @ | }非常快 (#Go runtime~) | #慢速{($Python GIL_)}@ | # |
| 使用范围 简单 JavaScript @ | @ Pythonic@,# 简便 @ | } | |
| 分布式测试 @ | @ k6 @ 云端 @ I} 已付的 MS K3 @ * | # 内建了-@ in @ NSK6 @ free @ MPK7 @ * @ O | # |
| Web 界面 -=YTET -伊甸园字幕组=- 翻译: | |||
| 计量导出 @ | @ 多种格式 @ | @ CSV#, @ web UI # | @ |
何时使用 Locust 代替@ : @
- Python - 第一队
- 需要免费分发检测
- 测试时想要真实的网络界面@- @time Web UI
- 测试中复杂的 Python逻辑
为什么对大多数 ASP=.=NET Core appts@:}来说K6#是更好的?
- 提高准确衡量指标的绩效
- JavaScript 更熟悉网络开发者
- 更清洁的下限@ / @ assertion 语法
- 更好的普罗米修斯 /Grafana融合
k6 诉 Gatling
加注 是一个基于 Scala-}工具,其报告功能极佳 @.
| @ | @ 地貌 @ | @ k6} @ I | @ 加特林 @ MPK4 @ |
|---|---|---|---|
| 语言语文 @ | @ JavaScript @ * Scala+/# #Java @ | @ | |
| 《报告》报告 @ | _Basic {(+} 扩展)} | #美丽的建筑_-}#HTML reports@ | }* |
| 学习曲线 “ | 简单”“ | 中调” “MS K2”“Scala DSL ) MSC4 ” | |
| 业绩表现 实绩 {\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}太棒了! | |||
| 开放源码 @ | _ 完全打开@ | } 打开企业加+#-ons *% | } |
| 云云服务处 -=YTET -伊甸园字幕组=- 翻译: |
何时使用 Gatling 代替@ : @
- JVM /+Scala团队专长
- 需要令人惊叹的建筑 -报告
- 测试复杂的HTTP假设情景
- 企业支助所需资源
为什么对大多数 ASP=.=NET Core appts@:}来说K6#是更好的?
- JavaScript 更方便使用
- 简易设置和执行
- 更方便快速的 CI/}CD检查
- 简单 HTTP 测试更直接
k6对火炮
火炮 是另一个 JavaScript 负载测试工具@. @%
| @ | @ 地物 @ | @ k6} @ I | @ 火炮 @ | # |
|---|---|---|---|---|
| 试验定义 JavaScript代码 | -YAML JS勾起 | |||
| 业绩表现 实绩 @ | _ ahead@ MS K1_ Go_ } @ I | _ 慢速 @ MPK4 @ node. @jsQ @ | # | |
| 使用范围 | =代码-=基于 | =YAML config}-=以 | = | |
| 建于 | 负载测试 @ | 加载 *+ 功能测试@ | ||
| 发售 -=YTET 翻译: | ||||
| 扩展性 | 扩展@ | 插件 @ |
何时使用火炮代替:
- 优先选择YAML超过代码
- 需要 [email protected] 测试
- 想要合并加载 *+}功能测试
- 已经使用节点@ . @js 生态系统
为什么对大多数 ASP=.=NET Core appts@:}来说K6#是更好的?
- 更精确的量度@(Go 相对于NOde.}js)
- 更好的门槛值制度
- 清洁的 JavaScript API
- 更加成熟和稳定
{\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}
w平方公里 是轻量级 HTTP 基准工具@.
| @ | @ 地貌 @ | @ k6 @ @ I | @ wrk @ MPK4 @ |
|---|---|---|---|
| 使用范围 -=YTET -伊甸园字幕组=- 翻译: | |||
| 假设情景 | 丰富场景支持 @ | 基本 HTTP 只@ | |
| 计量数 -=YTET -伊甸园字幕组=- 翻译: | |||
| 脚本 ~ JavaScript ~ | Lua ~ 马斯克2 ~ | ||
| 使用大小写 @ | 全面负载测试 | }快速基准 @MS K2# |
何时使用 wrk 代替@ : @
- 需要绝对最低限度的间接费用
- 快速一-关闭基准
- 测试原HTTP性能
- Low - 协议级别测试
为什么对大多数 ASP=.=NET Core appts@:}来说K6#是更好的?
- 更容易写作测试
- 改进报告和衡量标准
- 方案支持 @(ramp@-_up},}阶段=)
- CD 友好型
k6 @ vs Playwright@ / @ Cypress @ MS K2_ browser @ MPK3}% based @ )
lay人赖 和 闪压缩 是浏览器自动化工具,有时用于装载测试@. @%
| @ | @ 地物 @ I | @ k6 @ @ MPK3} 播放机@ MS K4 @ 网络记者 @ MISSK5 @ | |
|---|---|---|---|
| 方 式方法 | 协议-级 HTTP @ | 真正的浏览器 @MS K3 | |
| 业绩表现 实绩 上千个VUs * | * 10个浏览器* | * | |
| 资源使用量 *轻量级 轻度 *重度 * *browser MS K3 MSC4 | |||
| JavaScript 执行 # | @ 不,不, | # 是 @ | @ |
| 首用个案 | 负载测试 @ | E2E 功能测试@ |
何时使用 Playwright @ / @ 网络按键代替@ MS K1
- 需要测试 JavaScript 执行
- 必须验证浏览器配置
- 测试复合SPA
- 功能性 E2E测试
为什么对大多数 ASP=.=NET Core appts@:}来说K6#是更好的?
- 协议@- @ level 测试足够服务器@ - @ rendered apps
- 需要模拟同时用户@ 100+ @% 1}
- 提高资源使用效率
摘述: : @ k6'}甜点
当您想要 :\ \ 时选择 k6\
- 快速,}准确的负载测试
- 开发者@- @% 友好 JavaScript API
- 优秀的CI/CD融合
- 协议 - 级别 HTTP 测试 @(no 浏览器需要@)
- 富有的情景支持 @( @smoke@,}load_,压力=,加注+,
- 利用良好生态系统的现代工具
- 轻量资源使用
@ k6_ 完美地适合@ :}
- AIP和网络服务
- Server - @%side 已提供应用程序
- CD 性能大门
- 开发者@- @% 驱动的性能测试
- Cloud M- 本地应用
需要时,可考虑替代方案 @: @
- 浏览器@ - @ 基于 broad 测试 #% MS K1_ use lay人赖)
- HTTP @(use 以外的广泛的协议支持 赫米特)
- 免费分发测试@(_use 蝗灾)
- 美丽的建筑@- @in reports @(_use 加注)
- 用于非{-} 技术测试器的 GUI @ (_ use 赫米特)
下一步步骤
现在,你明白什么是 k\ 6 @\ MPK1 是如何安装它的 , _ 可用的性能测试类型@ MS K3\ 和为什么 k\ 6\ 是一个伟大的选择 对于 ASP\ I. NET Core application_ , 您已经准备好开始写实际的测试@.}
继续 《实际实施》 {\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}在哪里?
- 设置测试环境
- 填充烟雾@,load @,压力 @ ,加注 @ I,和浸泡测试
- 测试缓存行为
- 现实的用户旅途模拟
- 与GitHub行动整合的CD
- 性效回归检测
- 用点跟踪和点记忆分析
- 最佳做法和排除故障
资源资源资源 资源和资源资源资源
k6文档
- 官方的 k{6} docs “-”完整 k6}文档
- k6 JavaScript API APIP( JPA ) -所有可用的 k6APIs
- k6 示例 - 示例测试脚本
- k6 度量 理解度量
- k6 阈值 @ -_ 设置通道@ MS K1_ fail description