web网站怎么做压力测试

这篇具有很好参考价值的文章主要介绍了web网站怎么做压力测试。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

 Web网站性能体现在并发用户数已经网站的吞吐量和时延。

  最简单的压力测试工具就是ab "Apache Benchmark"

  下面将介绍ab的安装和使用:

  1. ab的安装

  ab的安装非常简单,安装了httpd,就自带ab。

  CentOS下的安装:

 yum install -y httpd

  Ubuntu下的安装:

 apt-get install apache2

安装好后,就可以使用ab了。

  2. ab使用前的准备工作

  由于ab是压力测试工具,我们需要把允许打开文件的数量调大。可以修改/etc/security/limits.conf

echo "* soft nofile 65535" >> /etc/security/limits.conf;echo "* hard nofile 65535" >> /etc/security/limits.conf

 文章来源地址https://www.toymoban.com/news/detail-843668.html

更改了这个配置后,需要重新启动VM。

  或者采用临时命令:

ulimit -n 65535

 

这样更改不需要重启机器。

  3. 运行ab,或wrk

  网上有很多ab和wrk使用的介绍,这里就不细讲了。一般打流量的命令是:

 ab -c 5000 -r -n 40000000 http://xx.xx.xx.xx/

 其中-c表示并发连接数;-n表示总共的请求数量;-r表示出现错误不退出,这个参数可以保证测试的连续性。注意http链接最后一定要是"/",否则报错。

wrk -t1 -c6000 -d2000s http://x.x.x.x/ 

4. 脚本

  为了保证测试的连续性,下面的小脚本可以检测ab测试程序是否在运行。如果有,表示正在测试,等待10s,继续检测;如果没有,表示ab已经测试结束,需要重新启动。具体脚本如下:

#!/bin/bash
  while true
  do
    flag=`ps -ef | grep "ab -c" | grep -v grep| wc -l`
    [ "$flag" = 1 ] && continue || ab -c 5000 -r -n 40000000 http://x.x.x.x/
    sleep 10
  done

  wrk的脚本如下:

#!/bin/bash
  while true
  do
  flag=`ps -ef | grep "wrk -t" | grep -v grep| wc -l`
  [ "$flag" = 1 ] && continue || /root/wrk-master/wrk -t1 -c6000 -d2000s http://x.x.x.x/
  sleep 10
  done

把此脚本后台运行。

  5. 时延测试

  在服务器压力上去后,服务器的带宽和时延的检测成为检测服务器能力的指标之一。

  带宽的检测,可以采用nload、Zabbix等工具。

  时延的检测,也可以采用Zabbix等带外方式。本文采用的是比较简单的time工具。

  由于time和一般的Shell命令不同,grep、awk等语句不能正常的抓取执行结果。我们一般采用把执行结果输出到文件,再检索文件的方式。并且time的重定向是stderr的定向。具体命令是:

(time -p curl http://x.x.x.x > /dev/null) &>> out.txt

 

 然后再采用grep real out.txt来获取时延。

  6. 时延脚本

  可以通过下面的脚本收集时延:

#!/bin/bash
  while true
    do
    (time -p curl http://x.x.x.x > /dev/null) &> out.txt
    grep real out.txt | awk '{print $0 "\t" strftime()}' >> delay.txt
    sleep 10
  done

 

 7. 服务器端查看同时在线人数的命令

  netstat -n | awk '/^tcp/ {++state[$NF]} END {for(key in state) print key,"t",state[key]}'

  结果如下:

TIME_WAIT t 32502
  FIN_WAIT1 t 4171
  FIN_WAIT2 t 267
  ESTABLISHED t 993
  SYN_RECV t 610
  CLOSING t 274
  LAST_ACK t 1

 或者用下面的命令:

  netstat -s | grep "connections established"
  4288 connections established

8. 通过curl统计时延插入数据库

  #!/bin/bash
  while true
  do
    (time -p curl http://x.x.x.x > /dev/null) &> out.txt
    grep real out.txt | awk '{print $0 "\t" strftime()}' >> delay.txt
    time=$(TZ=Asia/Shanghai date "+%Y-%m-%d %H:%M:%S")
    webDelay=`grep real out.txt | awk '{print $2}'`
    hostn=`hostname`
    mysql -hxxxx -uxxxx -pxxxx -e "use delay; insert into delay2 (delay, time, host) values($webDelay,'$time','$hostn');"
  sleep 20
  done

 8.1 通过python脚本把时延插入数据库

#!/usr/bin/env python
  import StringIO
  import pycurl
  import sys
  import os
  import time
  import MySQLdb
  import socket
  def getHTTPTime(url):
      crl = pycurl.Curl()
      #crl.setopt(pycurl.VERBOSE,1)
      crl.setopt(pycurl.FOLLOWLOCATION, 1)
      crl.setopt(pycurl.MAXREDIRS, 5)
      crl.fp = StringIO.StringIO()
      crl.setopt(pycurl.URL, url)
      crl.setopt(crl.WRITEFUNCTION, crl.fp.write)
      p = crl.perform()
      time = crl.getinfo(pycurl.TOTAL_TIME)
      return time
  url = "http://xx.xx.xx.xx/"
  myhost = socket.gethostname()
  host="xxx.mysqldb.chinacloudapi.cn"
  user="xxx"
  passwd="xxxxxx"
  db="delay"
  port=3306
  try:
    conn=MySQLdb.connect(host=host,user=user,passwd=passwd,port=port)
    conn.select_db(db)
    conn.select_db(db)
    cur=conn.cursor()
    while True:
      curtime=time.strftime("%Y-%m-%d %H:%M:%S",time.localtime())
      mytime = float(getHTTPTime(url))
      T = []
      T.append(mytime)
      T.append(curtime)
      T.append(myhost)
      cur.execute('insert into delay10  (delay, time, host) values(%s,%s,%s)',T);
      conn.commit()
      #aa=cur.execute('select id,delay,time from delay10')
      #print aa
      #for data in cur.fetchall():
      #  print data
      time.sleep(60)
  except MySQLdb.Error,e:
    print "Mysql Error %d: %s" % (e.args[0], e.args[1])

 9. 通过paping检测时延,并插入数据库

 #!/bin/bash
  while true
  do
    getDelay=`/root/paping -p 80 -c 1 x.x.x.x | grep time= | awk '{print $4}' | awk 'BEGIN{FS="="} {print $2}'`
    time=$(TZ=Asia/Shanghai date "+%Y-%m-%d %H:%M:%S")
    #webDelay=`echo ${a%ms*}`
    [ $getDelay ] && webDelay=$getDelay || webDelay=1000
    hostn=`hostname`
    mysql -hhwdelay.mysqldb.chinacloudapi.cn -uhwdelay%hengwei -pabc@123456 -e "use delay; insert into delay4 (delay, time, host) values('$webDelay','$time','$hostn');"
  sleep 20
  done

10. php页面反应实际时延情况:

 <?php
      echo "xxx时延测试</br>";
      echo "大于1秒钟时延的统计";
      $mysql_server_name="xxxxxx"; //数据库服务器名称
      $mysql_username="xxxxx"; // 连接数据库用户名
      $mysql_password="xxxxx"; // 连接数据库密码
      $mysql_database="delay"; // 数据库的名字
      // 连接到数据库
      $conn=mysql_connect($mysql_server_name, $mysql_username,
                          $mysql_password);
       // 从表中提取信息的sql语句
      $strsql="select * from delay2 where delay > 1 order by id desc";
      // 执行sql查询
      $result=mysql_db_query($mysql_database, $strsql, $conn);
      // 获取查询结果
      $row=mysql_fetch_row($result);
      echo '<font face="verdana">';
      echo '<table border="1" cellpadding="1" cellspacing="2">';
      // 显示字段名称
      echo "</b><tr></b>";
      for ($i=0; $i<mysql_num_fields($result); $i++)
      {
        echo '<td bgcolor="#FF0000"><b>'.
        mysql_field_name($result, $i);
        echo "</b></td></b>";
      }
      echo "</tr></b>";
      // 定位到第一条记录
      mysql_data_seek($result, 0);
      // 循环取出记录
      while ($row=mysql_fetch_row($result))
      {
        echo "<tr></b>";
        for ($i=0; $i<mysql_num_fields($result); $i++ )
        {
          echo '<td bgcolor="#00FF00">';
          echo $row[$i];
          echo '</td>';
        }
        echo "</tr></b>";
      }
      echo "</table></b>";
      echo "</font>";
      // 释放资源
      mysql_free_result($result);
      // 关闭连接
      mysql_close($conn);
  ?>

11. 多监测点合并网页:

<!DOCTYPE html>
  <html>
    <head>
      <title>HWTEST.html</title>
      
      <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"/>
      <meta http-equiv="description" content="this is my page"/>
      <meta http-equiv="content-type" content="text/html; charset=UTF-8"/>
      <link rel="stylesheet" type="text/css" href="./test.css">
    </head>
    <body>
    <!-- Logo div -->
    <div class="logo">
     <h1>xxx时延测试比较页面</h1> 
    </div>
    <!-- Adv div -->
    <div class="ad">
      <div class="stuad">
      <h4>Azure上海VM检测Azure北京VM时延</br></h4>
      <h4>大于1秒钟时延的统计</h4>
      <?php
        $mysql_server_name="xxx.chinacloudapi.cn"; //数据库服务器名称
        $mysql_username="xxx"; // 连接数据库用户名
        $mysql_password="xxx"; // 连接数据库密码
        $mysql_database="delay"; // 数据库的名字
        // 连接到数据库
        $conn=mysql_connect($mysql_server_name, $mysql_username,
                            $mysql_password);
         // 从表中提取信息的sql语句
        $strsql="select id,delay,time from delay2 where delay > 1 order by id desc";
        //$strsql="select * from delay2 where delay > 1 order by id desc";
        // 执行sql查询
        $result=mysql_db_query($mysql_database, $strsql, $conn);
        // 获取查询结果
        $row=mysql_fetch_row($result);
        echo '<font face="verdana">';
  //    echo '<table border="1" cellpadding="1" cellspacing="2">';
        echo '<table border="1" cellpadding="1" cellspacing="2" align="center">';
        // 显示字段名称
        echo "</b><tr></b>";
        for ($i=0; $i<mysql_num_fields($result); $i++)
        {
          echo '<td bgcolor="#FF0000"><b>'.
          mysql_field_name($result, $i);
          echo "</b></td></b>";
        }
        echo "</tr></b>";
        // 定位到第一条记录
        mysql_data_seek($result, 0);
        // 循环取出记录
        while ($row=mysql_fetch_row($result))
        {
          echo "<tr></b>";
          for ($i=0; $i<mysql_num_fields($result); $i++ )
          {
            echo '<td bgcolor="#00FF00">';
            echo $row[$i];
            echo '</td>';
          }
          echo "</tr></b>";
        }
        echo "</table></b>";
        echo "</font>";
        // 释放资源
        mysql_free_result($result);
        // 关闭连接
        mysql_close($conn);
    ?>
      </div>
      <div class="ad2">
      <h4>家中采用curl检测页面时延</br></h4>
      <h4>大于1秒钟时延的统计</h4>
      <?php
        $mysql_server_name="xxx.chinacloudapi.cn"; //数据库服务器名称
        $mysql_username="xxx"; // 连接数据库用户名
        $mysql_password="xxx"; // 连接数据库密码
        $mysql_database="delay"; // 数据库的名字
        // 连接到数据库
        $conn=mysql_connect($mysql_server_name, $mysql_username,
                            $mysql_password);
         
         // 从表中提取信息的sql语句
        $strsql="select id,delay,time from delay3 where delay > 1 order by id desc";
        // 执行sql查询
        $result=mysql_db_query($mysql_database, $strsql, $conn);
        // 获取查询结果
        $row=mysql_fetch_row($result);
        echo '<font face="verdana">';
  //    echo '<table border="1" cellpadding="1" cellspacing="2">';
        echo '<table border="1" cellpadding="1" cellspacing="2" align="center" >';
        // 显示字段名称
        echo "</b><tr></b>";
        for ($i=0; $i<mysql_num_fields($result); $i++)
        {
          echo '<td bgcolor="#FF0000"><b>'.
          mysql_field_name($result, $i);
          echo "</b></td></b>";
        }
        echo "</tr></b>";
        // 定位到第一条记录
        mysql_data_seek($result, 0);
        // 循环取出记录
        while ($row=mysql_fetch_row($result))
        {
          echo "<tr></b>";
          for ($i=0; $i<mysql_num_fields($result); $i++ )
          {
            echo '<td bgcolor="#00FF00">';
            echo $row[$i];
            echo '</td>';
          }
          echo "</tr></b>";
        }
        echo "</table></b>";
        echo "</font>";
        // 释放资源
        mysql_free_result($result);
        // 关闭连接
        mysql_close($conn);
    ?>
     
      </div>
      <div class="house">
      <h4>家中采用paping测试</br></h4>
      <h4>大于100ms时延的统计</h4>
      <?php
        $mysql_server_name="xxx.chinacloudapi.cn"; //数据库服务器名称
        $mysql_username="xxx"; // 连接数据库用户名
        $mysql_password="xxx"; // 连接数据库密码
        $mysql_database="delay"; // 数据库的名字
        // 连接到数据库
        $conn=mysql_connect($mysql_server_name, $mysql_username,
                            $mysql_password);
         
         // 从表中提取信息的sql语句
        $strsql="select id,delay,time from delay4 where delay > 100 order by id desc";
        // 执行sql查询
        $result=mysql_db_query($mysql_database, $strsql, $conn);
        // 获取查询结果
        $row=mysql_fetch_row($result);
        echo '<font face="verdana">';
  //    echo '<table border="1" cellpadding="1" cellspacing="2">';
        echo '<table border="1" cellpadding="1" cellspacing="2" align="center" >';
        // 显示字段名称
        echo "</b><tr></b>";
        for ($i=0; $i<mysql_num_fields($result); $i++)
        {
          echo '<td bgcolor="#FF0000"><b>'.
          mysql_field_name($result, $i);
          echo "</b></td></b>";
        }
        echo "</tr></b>";
        // 定位到第一条记录
        mysql_data_seek($result, 0);
        // 循环取出记录
        while ($row=mysql_fetch_row($result))
        {
          echo "<tr></b>";
          for ($i=0; $i<mysql_num_fields($result); $i++ )
          {
            echo '<td bgcolor="#00FF00">';
            echo $row[$i];
            echo '</td>';
          }
          echo "</tr></b>";
        }
        echo "</table></b>";
        echo "</font>";
        // 释放资源
        mysql_free_result($result);
        // 关闭连接
        mysql_close($conn);
    ?>
      </div>
    </div>
   
    </body>
  </html>

 CSS文件:

body{
  width:950px;
  margin: 0 auto;
  background-color: white;
  border: 1px solid red;
  font-size: 16px;
  }
  .logo{
  width: 950px;
  height: 68px;
  background-color: yellow;
  float: left;
  margin-top: 5px;
  text-align: center;
  }
  .ad{
  width: 950px;
  /*height: 212px;*/
  /*background-color: pink;*/
  margin-top: 5px;
  float: left;
  }
  .stuad{
  width: 310px;
  /*height: 196px;*/
  float: left;
  background-color: #ADFEDC;
  margin: 4px 0 0 4px;
  text-align: center;
  }
  .ad2{
  width: 310px;
  /*height: 196px;*/
  float: left;
  background-color: #D2A2CC;
  margin: 4px 0 0 4px;
  text-align: center;
  }
  .house{
  width: 310px;
  /*height: 196px;*/
  float: left;
  background-color: #FC7E8C;
  margin: 4px 0 0 4px;
  text-align: center;
  }

 12. 检测程序是否运行的脚本

#!/bin/bash
  while true
  do
  cflag=`ps -ef | grep delay.sh | grep -v grep | wc -l`
  pflag=`ps -ef | grep mypachk.sh | grep -v grep | wc -l`
  echo $cflag  $pflag
  #[ "$flag" = 1 ] && continue || /root/delay.sh &
  [ "$cflag" = 0 ] && /root/delay.sh  || echo "curl is ok" >> record.txt
  [ "$pflag" = 0 ] && /root/mypachk.sh  || echo "paping is ok" >> record.txt
  sleep 600
  done

 感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:

web网站怎么做压力测试,压力测试,测试工具,测试用例,功能测试,单元测试,selenium,postman

这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你!有需要的小伙伴可以点击下方小卡片领取 

web网站怎么做压力测试,压力测试,测试工具,测试用例,功能测试,单元测试,selenium,postman

 

到了这里,关于web网站怎么做压力测试的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 功能测试(八)—— APP之专项测试、性能测试、性能测试工具SoloPi

    目录 APP测试要点 目标 一、APP专项测试 1.1 兼容性 1.2 安装 1.3 卸载 1.4 升级 1.5 干扰测试(交叉事件测试) 1.6 Push推送 1.7 用户体验 二、 性能测试工具 2.1 APP性能测试工具介绍 —— SoloPi简介 2.2 APP性能测试工具 —— SoloPi使用 三、APP性能测试 3.1 CPU 3.2 内存 3.3 流量 3.4 电

    2024年02月03日
    浏览(57)
  • 一款超酷的一体化网站测试工具:Web-Check

    Web-Check 是一款功能强大的一体化工具,用于发现网站/主机的相关信息。用于检查网页的工具,用于确保网页的正确性和可访问性。它可以帮助开发人员和网站管理员检测网页中的错误和问题,并提供修复建议。 它只需要输入一个网站就可以查看一个网站几乎所有信息,如

    2024年02月03日
    浏览(59)
  • Postman,一个功能强大的API开发和测试工具

    最近有粉丝在群里说在找 postman 的使用教程,案例等文章。 那么今天我就来写一个。 Postman 是一个功能强大的 API 开发和测试工具,它提供了丰富的功能,帮助开发人员更好地管理、测试和文档化 API。无论是单独开发还是团队协作,Postman 都可以提高开发效率,并提供可靠的

    2024年04月15日
    浏览(49)
  • Klocwork—符合功能安全要求的自动化静态测试工具

    产品概述 Klocwork是Perforce公司产品,主要用于C、C++、C#、Java、 python和Kotlin代码的自动化静态分析工作,可以提供编码规则检查、代码质量度量、测试结果管理等功能。Klocwork可以扩展到大多数规模的项目,与大型复杂环境、各种开发工具集成,并提供控制、协作和报告。Klo

    2024年01月20日
    浏览(55)
  • 软件测试(功能、工具、接口、性能、自动化、测开)详解

    一、软件测试功能测试 测试用例编写是软件测试的基本技能;也有很多人认为测试用例是软件测试的核心;软件测试中最重要的是设计和生成有效的测试用例;测试用例是测试工作的指导,是软件测试的必须遵守的准则。 黑盒测试常见测试用例编写方法 1、等价类 选取少数

    2024年02月07日
    浏览(83)
  • 自动化API测试工具ReadyAPI新增业务历史记录功能

    解锁无缝软件开发:探索ReadyAPI虚拟化 的力量 在快速发展的软件开发环境中,创建稳健且反应灵敏的应用程序已然成为重中之重。 让我们一起来看看ReadyAPI虚拟化。这个解决方案让开发人员能够在受控的环境中模拟和测试其应用程序的性能,从而确保无缝的用户体验。 随着

    2024年02月06日
    浏览(45)
  • 什么是软件压力测试?软件压力测试工具和流程有哪些?

    软件压力测试 一、含义: 软件压力测试是一种测试应用程序性能的方法,通过模拟大量用户并发访问,测试应用程序在压力情况下的表现和响应能力。软件压力测试的目的是发现系统潜在的问题,如内存泄漏、线程锁、资源泄漏等,以及在高峰期或高负载情况下系统的响应

    2024年02月11日
    浏览(58)
  • 压力测试+接口测试(工具jmeter)

    jmeter是apache公司基于java开发的一款开源压力测试工具,体积小,功能全,使用方便,是一个比较轻量级的测试工具,使用起来非常简单。因 为jmeter是java开发的,所以运行的时候必须先要安装jdk才可以。jmeter是免安装的,拿到安装包之后直接解压就可以使用,同时它在 linux

    2024年01月17日
    浏览(56)
  • 虹科教您 | 可实现带宽计量和延迟计算的时间敏感网络测试工具RELY-TSN-LAB操作指南与基本功能测试

    时间敏感网络(TSN)能够合并OT和IT世界,这将是真正确保互操作性和标准化的创新性技术。这项技术的有效开发将显著降低设备成本、维护、先进分析服务的无缝集成以及减少对单个供应商的依赖。为了在这些网络中实现确定性,需要控制连接到网络的设备的延迟和带宽,并预

    2024年02月07日
    浏览(55)
  • 不同规模的测试团队分别适合哪些测试用例管理工具?测试用例管理工具选型指南

    随着软件系统规模的持续增大,业务复杂度的持续增加,软件测试的复杂度也随之越来越大。软件测试工作的复杂性主要体现在测试用例的编写、维护、执行和管理方面。而创建易于阅读、维护和管理的测试用例能够显著减轻测试工作的复杂性。 本篇文章将较为系统的探讨测

    2024年02月11日
    浏览(52)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包