Web压力架构
张占岭
Web压力架构... 1
一 系统性能测试概述... 1
1.1 性能测试概述... 1
1.2 性能测试的指标... 2
1.3 关键点的描述... 2
1.4 性能测试的目的... 2
1.5 测试项目开发规范... 2
二 使用VS压力测试工具进行测试... 3
2.1 性能测试(WebTest). 3
2.1.1 概念... 3
2.1.2 如何建立性能测试... 3
2.1.3 使用CS代码快速建立性能测试... 5
2.1.4 运行当前性能测试... 6
2.2 负载(压力)测试(LoadTest)... 6
2.2.1 概念... 6
2.2.2 目的... 6
2.2.3 术语... 6
2.2.4 如何建立负载测试... 7
2.2.5 负载测试运行时的说明... 10
2.2.6 分析报告说明... 11
2.3 测试场景描述... 12
2.4 主要业务模块... 12
三 测试数据的填充... 13
3.1 Webtest工具填充... 13
3.2 手动编辑业务代码... 13
3.3 使用RedGate.SQLDataGenerator工具进行填充... 13
一 系统性能测试概述
1.1 性能测试概述
本次测试是针对学习吧系统在应对密集整转的压力下业务处理能力的测试,检验系统的吞吐率。本系统的压力测试主要是针对主要用户注册,登录,用户中心,班级圈、订单,检查在应用高峰时期,并发用户数较多的时候的处理能力等等。
1.2 性能测试的指标
1 应用系统的负载能力:即系统所能容忍的最大用户数量,也就是在正常的响应时间中,系统能够支持的最多的客户端的数量。
2 应用系统的吞吐率:即应用系统在单位时间内完成的交易量,也就是在单位时间内,应用系统针对不同的负载压力,所能完成的交易数量。
3 系统的响应能力:即在各种负载压力情况下,系统的响应时间,也就是从客户端请求发起,到服务器端应答返回所需要的时间,包括网络传输时间和服务器处理时间。
4 应用系统的可靠性:即在连续工作时间状态下,系统能够正常运行的时间,即在连续工作时间段内没有出错信息
1.3 关键点的描述
系统在不同用户数量(并发)压力下的表现,即:支持的并发用户数目和并发用户发送频率,以及在较大压力下,系统的处理能力以及CPU、数据库I/O和内存的使用情况,并找出相应的性能瓶颈
1.4 性能测试的目的
压力测试的目的就是检验系统的最大吞吐量,检验现行的业务系统在各种压力交易
量下的运行状况,检验系统地运行瓶颈,获取系统的处理能力等等。
本次针对系统所进行的压力测试的测试目的为:
1 给出系统当前的性能状况
2 定位系统性能瓶颈或潜在性能瓶颈
3 总结一套合理的、可操作的、适合公司现实情况的性能测试方案,为后续的性能测试工作提供基本思路
1.5 测试项目开发规范
1 在具体项目解决方案中添加测试项目
2 为每个模块建立各自的文件夹
3 开发人员可以采用代码方法建立性能测试,非专业人员可以通过录制建立性能测试
4 测试域名不采用IP地址,可以在HOSTS中配置虚拟域名,这样方便以后修改
5 数据动态参数采用CSV文件,对于非加密信息可以采用直接连接数据库的方式得到真实数据
二 使用VS压力测试工具进行测试
2.1 性能测试(WebTest)
2.1.1 概念
将一些测试的流程进行录制,并保存成一个webtest 就生成了一个web性能测试,这些性能测试文件可以添加到负载测试项目,完成压力测试。(负载测试项目由多个web性能测试组成)
2.1.2 如何建立性能测试
- 需要安装 Visual Studio 旗舰版
- 创建 Web 性能和负载测试项目
1 创建 Web 性能测试
你的 Web 浏览器随即打开。
2 输入要测试的网站的 URL。
3 如果你希望客户使用自己的应用程序,也请你使用。 例如,搜索项并将其添加到购物车中。记录器将捕获 HTTP 请求和响应。
4 完成后,请停止记录。
现在,Visual Studio 为你的每个 HTTP 请求的 HTTP 响应查找动态参数。 发生这种情况时,将显示进度栏。
5 重命名你的测试。 例如,学民吧首页.webtest。
6 编辑测试属性以指定性能目标。 例如,可以将页面响应时间目标设置为 1 秒。(这个值在负载测试时会用到)
7 保存测试。
2.1.3 使用CS代码快速建立性能测试
通过向导生成性能测试后,也可以将它生成代码文件,方便我们开发人员直接编辑它
2.1.4 运行当前性能测试
运行性能测试后,它会模拟你定义的请求,代你完成整个流程
测试结果在运行后被显示出来
2.2 负载(压力)测试(LoadTest)
2.2.1 概念
负载测试(Load Testing)是确定在各种工作负载下系统的性能,目标是测试当负载逐渐增加时,系统组成部分的相应输出项,例如通过量、响应时间、CPU负载、内存使用等来决定系统的性能。负载测试是一个分析软件应用程序和支撑架构、模拟真实环境的使用,从而确定能够接收的性能过程。压力测试(Stress Testing)是通过确定一个系统的瓶颈或者不能接收的性能点,来获得系统能提供的最大服务级别的测试。
2.2.2 目的
通过压力测试,判断当前应用环境情况下系统的负载能力,为今后应用范围扩大,用户量上升后,服务器扩容、升级等提供必要的技术支撑,及服务器规划等。
2.2.3 术语
应用服务器
网站/软件架构中的应用处理服务器,提供请求的接收、处理、返回WEB请求
数据库服务器
网站/软件架构中的数据处理服务器,提供数据的存储和读取等功能
测试机
专门用来压力测试的计算机,通常为常用的PC机
系统用户数
是指实际可能使用应用系统的总用户数
在线用户数
是指当前登录应用系统,处于正在操作或空闲状态的用户数
并发用户数
是指当前登录应用系统,并同时进行操作的用户数
响应时间
是指服务器从接收请求到返回请求之间的处理时间。压力测试中,忽略网络传输时间及测试机中处理时间,测试机上获得响应时间即作为服务器的响应时间
2.2.4 如何建立负载测试
1 在 Web 性能和负载测试项目中创建新的负载测试。
2 负载测试向导出现后,请选择负载模式步骤。
将负载模式更改为分级负载。 这将随着时间逐渐添加用户。
3 选择测试组合步骤。
添加创建的 Web 性能测试。
将 Web 性能测试移至要运行的测试列表中。
4 完成向导后,Web 性能测试就会添加到负载测试并显示在负载测试编辑器中。
2.2.5 负载测试运行时的说明
在测试运行时,你可能会发展某个页的响应时间超过你设置的值。
添加分析注释以跟踪问题。
负载测试完成后,将显示摘要。
已完成测试的结果包含性能计数器数据、阈值冲突和错误信息。 注意,如果在性能测试中,这个相应时间没有设置(默认为0)表示,不去关心这个数据,即使你的响应时间再慢,它不会出现未通过的情况,如图
2.2.6 分析报告说明
负载测试摘要
整体结果
最大用户负载 |
225 |
测试/秒 |
15.9 |
未通过的测试 |
6,928 |
平均测试时间(秒) |
12.9 |
每秒事务数 |
0 |
平均事务时间(秒) |
0 |
每秒页数 |
20.1 |
平均页面时间(秒) |
10.2 |
请求/秒 |
174 |
失败的请求数 |
0 |
缓存的请求数占总请求数的百分比 |
57.7 |
平均响应时间(秒) |
1.20 |
平均内容长度(字节) |
1,346 |
关键统计信息: 最慢的 5 个页面
URL (更多详细信息的链接) |
95% 页面时间(秒) |
xxx |
19.0 |
xxx |
8.08 |
xxx |
0.13 |
关键统计信息: 最慢的 5 个测试
名称 |
95% 测试时间(秒) |
29.1 |
测试结果
测试结果部分列出了负载测试中的所有测试和方案。 它将显示测试名称、方案、运行次数、失败次数以及平均测试时间。 您可以选择某个测试的名称以打开“测试”表和查看该测试的更多详细信息。
名称(性能测试名称) |
方案(方案名称) |
测试总数 |
失败的测试数(占总数的百分比) |
平均测试时间(秒) |
xxx |
我的班级圈 |
2,507 |
0 (0) |
21.4 |
xx |
学生登陆-增量测试 |
5,346 |
5,325 (99.6) |
10.1 |
xxx |
学生登陆-桓定测试 |
1,666 |
1,603 (96.2) |
8.80 |
页结果
页面结果部分列出了负载测试中的所有网页。 将显示 URL、方案、测试名称、平均页面时间和计数。 您可以选择某个页面的 URL 以打开“页”表和查看该页面的更多详细信息。
页结果
URL (更多详细信息的链接) |
方案 |
测试 |
平均页面时间(秒) |
计数 |
xxx |
我的班级圈 |
我的班级圈 |
11.5 |
2,507 |
xxx |
学生登陆-增量测试 |
登陆 |
10.1 |
5,346 |
xxx |
我的班级圈 |
我的班级圈 |
9.87 |
2,550 |
xxx |
学生登陆-桓定测试 |
登陆 |
8.80 |
1,666 |
错误
错误部分列出了在负载测试过程中发生的所有错误。 将显示错误类型和子类型、计数和最新消息。 您可以选择某个错误以打开“错误”表,并查看该错误的更多详细信息。
类型 |
子类型 |
计数 |
最后一条消息 |
SocketException |
2 |
由于连接方在一段时间后没有正确答复或连接的主机没有反应,连接尝试失败。 163.177.72.159:80 |
事务结果
事务结果部分列出了负载测试中的所有事务。 将显示事务名称、方案、名称、响应时间、已用时间和计数。 您可以选择某个事务的名称以打开“事务”表,并查看该事务的更多详细信息。
控制器和代理资源
控制器和代理资源部分列出了用于运行测试的计算机。 将显示计算机名、处理器时间百分比和可用内存。 您可以选择某个计算机名称以打开“控制器和代理”图形,并查看不同时间的资源使用量。
用户分布图
测试结果表格
关系图表
2.3 测试场景描述
测试中,使用逐步加压的模式,测试运行场景安排如下:
- 每隔2秒增加1个用户连接,最多增加到100个用户,查看并记录运行情况
- 每隔2秒增加2个用户连接,最多增加到200个用户,查看并记录运行情况
- 每隔2秒增加1个用户连接,最多增加到300个用户,查看并记录运行情况
- 每隔3秒增加1个用户连接,最多增加到400个用户,查看并记录运行情况
- 常量负载,用户数固定100个,200个,500个
每个场景都包括:
- 用户登录
- 业务操作
- 业务完成
- 退出系统,所有用例都按以上场景
- 用户注册
- 用户登录
- 老师认证
- 老师中心
- 老师开通班级圈
- 老师建立课程
- 老师建立作业
- 老师建立试题
- 学生中心
- 学生购买
- 学生学习
- 学生充值
- 班级圈展示页
- 班级圈列表页
- 首页
2.4 主要业务模块
三 测试数据的填充
3.1 Webtest工具填充
使用webTest对指定页面逻辑进行录制,如用户注册,建立课程等,之后使用压力测试工具loadtest进行测试同时测试数据即可写入真实库。
3.2 手动编辑业务代码
由开发人员去针对指定模块的业务进行二次开发,再使用如循环的方式将数据批量注入真实数据库即可
3.3 使用RedGate.SQLDataGenerator工具进行填充
操作简单,上手容易!
1 定义生成数据的数量
2 预览生成的数据结果
3 可以对指定数据列进行编辑,对数值类型的列可以进行随机生机,增量生成,设置最大值和最小值等等
4 对字符类型的列,可以进行正则表达式的过滤
5 对日期时间类型的列,可以设置起始日期和结束日期,及随机产生和增量产生及时间段产生等
6 一键生成数据,并提供数据生成的报表
本文转自博客园张占岭(仓储大叔)的博客,原文链接:压力测试~一套完整的压力测试项目文档,如需转载请自行联系原博主。