Visual studio压力测试
需要安装VS企业正式版本,VS企业使用版本在做压测时,线程数有最多设置250人的限制
VS企业正式版本安装包:VS 2015 Installation.msg
创建一个Web Performance And Load Test项目
1. 打开Visual Studio,选择File->New->Project->Test->Web Performance and Load Test Project
注意:项目路径请选择D盘或其他磁盘,尽量不要选择C盘,以免磁盘空间不足,对测试结果准确性造成影响
添加调用方式为Get类型的API (API没有缓存,做压测的时候可以用这一个API来压,即每次请求的参数不需要变化)
1. 选中新建好的工程项目,右键Add Web Performance Test
2. 双击打开工程项目里的WebTest1,右键添加API请求
在配置里,调用方式选择GET,添加API url请求后save一下
3. 有的API需要添加Headers参数
右键url->Add Header,在配置里添加Name和Value值
4. 本地运行一下,确保API调用没有问题后再开始做压测
点击Run Test,查看API调用结果是否返回200-成功
在request里勾上Show raw data可以看到请求的原始参数
添加调用方式为Get类型的API(API有缓存,即每次请求的参数需要变化),
可以通过add datasource或者generate code的方式更改每次请求的参数,这里以WebTest1为例,每次请求里的contactid取不同的值
add datasource
1. 从数据库里以拼接字符串的方式取不同的contactid,把查询结果存放在xml文件里
xml文件参照:第一组200002864079-20002964075.xml
2. 在url里点击add data source,选择数据源的格式为xml格式,导入xml文件,选中uri
3. 在url里点击data source,点击uri_Text,此时请求的url显示成{{DataSource1.uri.uri._Text}},本地运行一下,确保API调用没有问题后再开始做压测
generate code
1. 点击generate code按钮,生成WebTest1Coded.cs文件
注意此时webtest文件和生成的coded cs文件是两个独立的文件,在后面介绍的压测中添加API时需要选择coded cs文件
2. 在cs文件里添加C#代码,右键点击Run Coded Web Performance Test,确保cs文件运行没有问题后再开始做压测
添加调用方式为post类型的API(API没有缓存,做压测的时候可以用这一个API来压,即每次请求的参数不需要变化)
1. 选中新建好的工程项目,右键Add Web Performance Test
2. 双击打开工程项目里的WebTest2,右键添加API请求
在配置里,调用方式选择POST,添加API url请求后save一下
3. 右键WebTest2,选择open with xml格式,把<FormPostHttpBody />去掉
添加下面代码:
<Headers>
<Header Name="Content-Type" Value="application/json" />
</Headers>
<StringHttpBody />
Save一下
4. 双击打开WebTest2
填写content-type和stringbody
Save一下
添加Load Test开始做压测
1. 右键工程项目,Add Load Test
2. 按向导配置模式、线程数、运行时间、网络 选择On-Premise Load Test在本机做压测
一般不填写think time,选择默认的场景。思考时间:被用来模拟人的行为, 使人们在与网站的互动中等待。
思考时间发生在Web测试中的请求和负载测试场景中的测试迭代之间。在负载测试中使用思考时间对于创建更精确的负载模拟是有用的。
一般选择持续的线程模式,step load是增量的线程模式
默认选择第一种模式,基于请求的总数出压测报告
添加进行压测的webtest或者coded cs文件
选择网络,默认选择LAN局域网
选择浏览器,默认选择Internet explorer 9.0,点击Finish按钮
3. 点击Run Load Test
4. Summary Report中几项重要的压测指标
Max User Load:线程数
Duration:压测运行时间
Total Tests:线程数在运行时间内发起的总请求数
Failed Tests(% of total):请求失败的次数/请求总数
Avg.Test Time(sec):服务器平均一秒内处理的请求数
Errors:截图中的get geo locations error可以忽略,通常在线程数逐渐增多的情况下,会出现500-服务器内部错误、504-服务器响应超时错误等等
5. 压测报告模板
观察在运行时间恒定的情况下,随着线程数不断增加,服务器每秒处理的请求数不再增加反而减少了,说明这个API的性能已经达到峰值。
如果在压测过程中看到有大量的500、504或者其他错误,让dev查下原因,看能否优化下SP脚本和代码