软测实验5:熟悉性能测试工具

124 阅读5分钟

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实验步骤

  1. 添加线程组

线程数:

虚拟用户数。一个虚拟用户占用一个进程或线程。设置多少虚拟用户数在这里也就是设置多少个线程数。

Ramp-Up Period(in seconds)准备时长:设置的虚拟用户数需要多长时间全部启动。如果线程数为10,准备时长为2,那么需要2秒钟启动10个线程,也就是每秒钟启动5个线程。

循环次数:

每个线程发送请求的次数。如果线程数为10,循环次数为10,那么每个线程发送10次请求。总请求数为10*10=100。

  1. 添加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,表示需要校验的用户名。

  1. 添加查看结果树

可以在此处查看发送的请求和响应的具体信息。

请求头:

请求体:

响应头:

响应体:

  1. 添加聚合报告
  2. 添加图形结果

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.测试执行结果

测试用例的结果表明,在逐渐增加用户数量的情况下,网站的响应时间随着用户数量的增加而增加,吞吐量也随之增加,但在一定数量后达到饱和状态,再大幅增加负载,吞吐量下降。