1.测试需求
对自编写的校验用户名格式demo进行性能测试,以确定在不同负载下,网站能够处理的用户数量和响应时间。
本地服务器编写了一个校验用户名格式的demo:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<h1>欢迎用户: <p id="username"></p>
</h1>
<script>
// 获取URL中的查询字符串
var queryString = window.location.search;
// 创建URLSearchParams对象来处理查询字符串
var urlParams = new URLSearchParams(queryString);
// 通过参数名获取参数值
var nameValue = urlParams.get('name');
console.log(nameValue)
// 根据参数值进行相应的操作
console.log(document.getElementById("username"))
//定义正则:正确的用户名格式为字母数字6-7位
var reg = /^[a-zA-Z-0-9]{5,7}$/;
//校验
var res = reg.test(nameValue);
if (!res) {
//格式不正确,在usernameMsg给出相应提示信息
document.getElementById("username").innerText = "用户名格式错误!!";
} else {
document.getElementById("username").innerText = nameValue;
}
</script>
</body>
</html>
测试时通过设置url中的name参数传递用户名,js中用简单的逻辑校验用户名。
在后续具体测试中发现服务器开始表现过于“好”,考虑是服务器后台并未对用户名做真正的校验工作,服务器的工作只是根据get请求返回页面内容,校验工作是浏览器运行js完成的。
但在请求数增加很多时,也能观察到响应时间的变化。(即使服务器的工作只是处理GET请求返回index.html)
改进之处:将校验用户名格式的功能交给服务器实现,观察服务器在真正“工作”时的性能表现。
2.测试设计
确定测试环境:
- 服务器:使用具有一定配置的服务器来承载网站,确保服务器能够满足测试需求。
- 网络环境:确保网络环境稳定,以便准确测试网站的性能。
- 客户端配置:确定测试所用的客户端配置,包括操作系统、浏览器版本等。
确定性能指标:
- 响应时间:测量用户发送请求后服务器响应的时间。
- 吞吐量:测量在单位时间内服务器处理的请求数量。
确定负载模型:
- 逐渐增加用户数量:从少量用户逐步增加到大量用户,观察服务器的响应情况和吞吐量变化。
确定测试工具:
- JMeter:使用JMeter进行性能测试,包括设置测试计划、配置线程组等。
3.测试用例集
3.1测试用例
逐渐增加用户数量(通过改变线程数实现),记录响应时间和吞吐量。
3.2实验步骤
- 添加线程组
线程数:
虚拟用户数。一个虚拟用户占用一个进程或线程。设置多少虚拟用户数在这里也就是设置多少个线程数。
Ramp-Up Period(in seconds)准备时长:设置的虚拟用户数需要多长时间全部启动。如果线程数为10,准备时长为2,那么需要2秒钟启动10个线程,也就是每秒钟启动5个线程。
循环次数:
每个线程发送请求的次数。如果线程数为10,循环次数为10,那么每个线程发送10次请求。总请求数为10*10=100。
- 添加HTTP请求
Http请求主要参数详解:
Web服务器:
协议:向目标服务器发送HTTP请求协议,可以是HTTP或HTTPS,默认为HTTP
服务器名称或IP :HTTP请求发送的目标服务器名称或IP,本实验中为localhost。
端口号:目标服务器的端口号。
Http请求:
方法:发送HTTP请求的方法,可用方法包括GET、POST等。本实验中为GET。
路径:目标URL路径(URL中去掉服务器地址、端口及参数后剩余部分)。
Content encoding :编码方式。
在请求中发送的URL参数,用户可以将URL中所有参数设置在本表中,表中每行为一个参数(对应URL中的 name=value)。本实验添加参数name,值为jackyy8888,表示需要校验的用户名。
- 添加查看结果树
可以在此处查看发送的请求和响应的具体信息。
请求头:
请求体:
响应头:
响应体:
- 添加聚合报告
- 添加图形结果
3.3 执行性能测试
线程数10,循环次数10,总请求数100:
一般而言,性能测试中我们需要重点关注的数据有: #样本(本次测试发送多少个请求),平均值(单个 Request 的平均响应时间),Min 最小响应时间,Max 最大响应时间,异常率(错误请求数/请求总数)及吞吐量(默认情况下表示每秒完成的请求数)。
本次测试平均响应时间为0,服务器表现很好,继续增加请求数量。
线程数100,循环次数10,总请求数1000:
本次测试平均响应时间为0,请求数较上次增加,但从平均响应时间来看还远未到服务器性能瓶颈。
线程数1000,循环次数10,总请求数10000:
平均响应时间为1,吞吐量增加。考虑继续增加请求数测试服务器性能。
线程数5000,循环次数10,总请求数50000:
本次测试请求数大幅增加,平均响应时间增加到170,吞吐量距上次减少(9398->8238),可以看出大致到达服务器性能瓶颈了(已经饱和了)。不妨再增加负载,看看服务器性能。
线程数10000,循环次数10,总请求数100000:
此次平均响应时间增加为222,吞吐量进一步下降(8238->4409),且下降幅度增大,说明服务器确实到达性能瓶颈了(已经饱和了)。
4.测试执行结果
测试用例的结果表明,在逐渐增加用户数量的情况下,网站的响应时间随着用户数量的增加而增加,吞吐量也随之增加,但在一定数量后达到饱和状态,再大幅增加负载,吞吐量下降。