精华内容
下载资源
问答
  • 高并发压力测试

    万次阅读 2018-01-07 12:57:50
    一、Introduction ...为了计算出大概的预算,需要根据推算的访问量做并发压力测试。 二、压力测试方法 一般,使用apache自带的ab.exe。ab.exe最高支持并发量不高于1000次/秒。对于提交表单或者读

    一、Introduction

    对于小微企业网站在自主推出某些活动时,可能导致网站产生高并发访问的情况。针对这种情况采用临时租用云服务器是有性价比的应对措施,比如,使用弹性云。这种租用服务有的按照访问流量计费。为了计算出大概的预算,需要根据推算的访问量做并发压力测试。

    二、压力测试方法

    一般,使用apache自带的ab.exe。ab.exe最高支持并发量不高于1000次/秒。对于提交表单或者读取cookie中数据的情景,原理都是提交一段html协议的字符串。获取到提交表单时的html协议数据然后让ab.exe发这个协议可以模拟提交表单数据。

    php中的步骤:

    抓取提交表单时提交的html协议。

    在提交表单向下执行前,让程序die。

    为了完成所有人的下单,在代码中注释掉清空购物车的代码。

    打开浏览器的firebug。

    在网页中执行提交表单,然后在firebug的Network信息栏看到抓取的html。

    在这个html的头信息中,请求头中有cookie信息,form data中有表单数据。

    创建一个用户存放表单数据的文件,内容为form  data中的数据,格式为get提交时的形式:key=value&key=value&key=value,比如:name=下单测试& province=北京& city=东城区。

    将代码中的为了获取html而使用的die去掉,使用ab.exe,输入测试信息,

    ab.exe  -c  20 -n  20  -C  "pgv_pvi=4387399680;PHPSESSID=37qknulookfad61iivpbqnb9i5"  -p  D:/002php/test1/eshop/post_data.txt  -T  "application/x-www-form-urlencoded"   http://www.php2.com/eshop/index.php/Home/Order/add.html

    -c  并发量,访问pc数

    -n  总的访问数

    -C  请求中cookie信息,以""括住数据

    -p  form数据,存放到文件中

    -T  以post提交,以""括住数据

    使用ab.exe测试返回的结果中,time  taken  foe tests记录了测试总耗时,根据总的请求量可以计算出服务器每秒可以处理的并发量,返回结果中的requests  per  second记录了秒并发处理量。

    一般服务器中处理使用了框架搭建的网站的处理类似秒杀的并发处理能力不会太高,除了加服务器、租服务器使用弹性云的解决方案,也可以通过避开秒杀中真实下单连接数据处理的步骤,而是采用发号码的算法,凡是抢到号码的可以后续实际下单,从而疏解秒杀中真实下单的高并发。

    展开全文
  • <div><p>beast库下的async_handshake此接口,在高并发压力测试下,返回结果很慢</p><p>该提问来源于开源项目:boostorg/beast</p></div>
  • 高并发压力测试工具Tsung使用教程

    千次阅读 2018-06-09 07:37:39
    高并发压力测试工具Tsung使用教程 2016-03-05 18852浏览 记录 12评论目录1 下载安装2 运行3 结果4 配置文件4.1 clients4.2 servers4.3 monitoring4.4 load4.5 options4.6 sessionstsung是erlang开发的开源的多...

    高并发压力测试工具Tsung使用教程

    tsungerlang开发的开源的多协议分布式负载测试工具,

    可用作HTTP、WebDAV、SOAP、PostgreSQL、MySQL、LDAP 和 Jabber/XMPP的服务器压力测试。

    tsung可分布在多个客户机,并能够模拟成千上万的虚拟用户数并发。

    1 下载安装

    Tsung 已经在Linux、FreeBSD和Solaris上通过测试,

    其他系统,只要支持Erlang语言的平台上,也是可以工作的(Linux、Solaris、*BSD、Win32 和 Mac OS X)。

    Mac OS X通过 Homebrew 即可安装 tsung,命令:

    brew install tsung

    Ubuntu 安装也很简单,命令:

    apt-get install tsung

    其他系统需要先下载源码包再安装,源码包下载地址:

    tsung 1.6.0为例,下载安装命令:

    wget http://tsung.erlang-projects.org/dist/tsung-1.6.0.tar.gz  # 以1.6.0版本为例
    tar -zxf tsung-1.6.0.tar.gz   # 解压
    cd tsung-1.6.0                # 进入目录
    ./configure                   # 配置,生成 Makefile 文件
    make                          # 编译
    make install                  # 安装

    configure 的时候,如果没有安装 tsung 依赖的 Erlang 语言库,会提示下面的错误:

    ...
    checking for Erlang/OTP root directory... configure: error: in `/root/tsung-1.6.0':
    configure: error: test Erlang program execution failed
    ...

    可以用下面的命令先安装erlang,再 configure

    brew install erlang        # OS X Homebrew
    port install erlang        # OS X MacPorts
    apt-get install erlang     # Ubuntu 和 Debian
    yum install erlang         # Fedora
    pkg install erlang         # FreeBSD

    其他系统需要从源码安装 Erlang,稍微复杂一些,可参考:https://github.com/erlang/otp/blob/maint/HOWTO/INSTALL.md

    2 运行

    tsung安装完成后,会生成两个命令文件:

    1. tsung
    2. tsung-recorder

    默认生成在 /usr/local/bin 目录下,使用-h参数可以查到它们所有的参数:

    tsung -h

    在启动 tsung 之前,我们需要一个 XML 格式的配置文件,tsung会根据该配置文件进行测试。

    /usr/share/doc/tsung/examples 目录下有一些 XML 配置文件范例,

    将其中HTTP测试配置文件 http_simple.xml 拷贝到当前目录,

    再执行,命令如下:

    cp /usr/local/share/doc/tsung/examples/http_simple.xml ./   # 拷贝范例配置文件
    tsung -f http_simple.xml start                              # 指定xml文件并开始。如果不指定,则默认使用 ~/.tsung/tsung.xml

    这个命令会打印出测试的日志目录,直到测试结束。

    3 结果

    tsung 测试结束后,测试结果 Log 保存在目录 ~/.tsung/log/ 下。

    当启动一个新的测试时,会在这个目录下面创建一个新的子目录,用以保存测试的数据。

    Log 格式为当前日期和时间的组合,例如:~/.tsung/log/20160217-0940

    默认情况下,控制节点会启动一个嵌入的网站服务器,侦听8091端口(可以用 -n 选项禁用)。

    测试过程也可以用tail命令查看实时记录:

    tail -f ~/.tsung/log/20140430-1126/tsung.log

    测试结束之后,再用tsung_stats.pl生成报表。

    yum install gnuplot       # tsung_stats.pl 需要用到的 gnuplot
    mkdir http_simple         # 创建用以保存报表的目录
    cd http_simple            # 进入目录
    /usr/local/lib/tsung/bin/tsung_stats.pl --stats ~/.tsung/log/20160305-0933/tsung.log  # 生成报表

    之后,会在 http_simple 目录下生成3个目录和1个 log 文件,其中 images 目录下就是报表图片,类似如下。

    graphes-HTTP_CODE-rate_tn   graphes-Perfs-mean_tn

    以上仅是测试,没有实际用处,因为没有配置要测试的网站,所以所得到的结果没有实际意义。

    需要修改 XML 配置文件后再测试,才会得到有意义的结果。

    4 配置文件

    打开 http_simple.xml ,下面来讲几个关键的配置。

    4.1 clients

    用户产生的方式:

    <clients>
      <client host="localhost" use_controller_vm="true" maxusers="30000"/>
    </clients>

    tsung运行时可以由很多的虚拟机(VM)组成,client配置指明这个client机器上最多生成的用户数,

    如果use_controller_vmtrue的话,那么当用户数达到maxusers,tsung会自动生成新的虚拟机。

    4.2 servers

    <servers>
      <server host="garden.blue.jude.poppen.lab" port="80" type="tcp"></server>
    </servers>

    server段可以配置被测服务器的相关信息,也可以配置成集群,如下

    <servers>
      <server host="server1" port="80" type="tcp" weight="4"></server>
      <server host="server2" port="80" type="tcp" weight="1"></server>
    </servers>

    tsung会根据weight值来选择发起请求的server

    4.3 monitoring

    系统监控服务,配置完后可获取被测server的CPU、内存、负载、数据库等相关信息。

    可以配置成erlang的监控服务和snmp的监控服务。

    <monitoring>
      <monitor host="garden" type="erlang">
        <mysqladmin port="3306" username="root" />
      </monitor>
    </monitoring>

    4.4 load

    <load>
      <arrivalphase phase="1" duration="3" unit="minute">
        <users maxnumber="100" interarrival="0.02" unit="second" ></users>
      </arrivalphase>
    </load>

    load段可配置访问的负载,访问可以配成多个阶段,由phase值指定。

    duration是测试持续时间,unit是单位。

    users段的maxnumber限制了生成的最大用户数,

    interarrival="0.02"表示0.02秒产生一个新用户,用户按照session的配置顺序执行session中的request

    4.5 options

    <options>
     <option type="ts_http" name="user_agent">
     <user_agent probability="80">Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.7.8) Gecko/20050513 Galeon/1.3.21</user_agent>
     <user_agent probability="20">Mozilla/5.0 (Windows; U; Windows NT 5.2; fr-FR; rv:1.7.8) Gecko/20050511 Firefox/1.0.4</user_agent>
     </option>
     </options>

    options段可配置一些请求的信息,如agent信息。

    4.6 sessions

    <sessions>
      <session name="http-example" probability="70" type="ts_http">
        <setdynvars sourcetype="random_number" start="1" end ="100">
          <var name="itemid" />
        </setdynvars>
        <transaction name='getlist'>
          <request subst="true">
            <http url="/comment/getList" method="POST" contents = "item_type=image&amp;item_id=%%_itemid%%"></http>
          </request>
        </transaction>
      </session>
      <session name="http-example" probability="30" type="ts_http">
        <setdynvars sourcetype="random_number" start="1" end="100">
          <var name="itemid" />
        </setdynvars>
        <setdynvars sourcetype="random_number" start="20" end="5000000">
          <var name="content" />
        </setdynvars>
        <transaction name='getlist'>
          <request subst="true">
             <http url="/comment/addComment" method="POST" contents = "item_type=image&amp;item_id=%%_itemid%%&amp;content=%%_content%%"></http>
          </request>
        </transaction>
      </session>
    </sessions>

    可配置多个子session,进而可测试多个api,

    可以设置请求概率,在probability里定义,

    要求每个sessionprobability之和是100,类型是http。

    sessions里可用for来设定请求次数,如下

    <for from="1" to="@loop" incr="1" var="counter">

    在里面可以设置请求的具体信息。

    在请求参数里可以带上随机数。

    随机数和随机字符串的定义如下:

    <setdynvars sourcetype="random_number" start="20" end="5000000">
      <var name="xxx" />
    </setdynvars>
    <setdynvars sourcetype="random_string" length="10">
      <var name="xxx" />
    </setdynvars>

    %%_xxx%%的形式来调用。

    这里必须注意的是,要使用随机数,request必须加上subst="true"参数,不然随机数无法被引用成功。

    随机数也可从文件读取,如csv

    http内部可定义header参数:

    <http_header name="Authorization" value="111"/>
    <http_header name="Cookie" value="authToken=%%_auth_token%%; Path=/"/>
    <!-- content-Type:POST请求参数的格式,如果是json格式可以这样写 -->
    <http_header name="Content-Type" value="application/json"/>

    thinktime可用于定义两个请求的间隔时间

    <thinktime value="1"/>

    另外可定义不同的transaction ,这样子结果里就会显示不同transaction的具体信息。

     

    展开全文
  • 一、 Apache JMeter工具1)简介JMeter——一个100%的纯java桌面应用,它是 Apache组织的开放源代码项目,它是功能和性能测试的工具。JMeter可以用于测试静态或者动态资源的性能(文件、Servlets、Perl脚本、java对象...

    一、 Apache JMeter工具

    1)简介

    JMeter——一个100%的纯java桌面应用,它是 Apache组织的开放源代码项目,它是功能和性能测试的工具。JMeter可以用于测试静态或者动态资源的性能(文件、Servlets、Perl脚本、java对象、数据库和查询、ftp 服务器或者其他资源)。

    http://blog.csdn.net/yjflinchong/article/details/7853928

    3)Apache JMeter 的特性:

    a) 能够对HTTP和FTP服务器进行压力和性能测试, 也可以对任何数据库进行同样的测试(通过JDBC)。

    b) 完全的可移植性和100% 纯Java。

    c) 完全 Swing 和轻量组件支持(预编译的JAR使用 javax.swing.*)包。

    d) 完全多线程 框架允许通过多个线程并发取样和 通过单独的线程组对不同的功能同时取样。

    e) 精心的GUI设计允许快速操作和更精确的计时。

    f) 缓存和离线分析/回放测试结果。

    g) 高可扩展性:

    h) 可链接的取样器允许无限制的测试能力。

    i) 各种负载统计表和可链接的计时器可供选择。

    j) 数据分析和可视化插件提供了很好的可扩展性以及 以及个性化。

    k) 具有提供动态输入到测试的功能(包括Javascrīpt)。

    l) 支持脚本变成的取样器(在1.9.2及以上版本支持BeanShell)。

    二、 JMeter可以做哪些方面的测试

    原先Jemer是为Web/HTTP测试而设计的,但是它已经扩展以支持各种各样的测试模块。它和用于HTTP和SQL数据库(使用JDBC)的模块一起运送。它可以用来测试静止资料库或者活动资料库中的服务器的运行情况,可以用来模拟对服务器或者网络系统加以重负荷以测试它的抵抗力,或者用来分析不同负荷类型下的所有运行情况。它也提供了一个可替换的界面用来定制数据显示,测试同步及测试的创建和执行。

    三、具体事例

    1)测试环境:

    硬件配置 软件环境

    测试时间 2004 年 5 月 25 日

    服务器 P4 512M 内存 Oracle 10g+Tomcat5.5

    客户端 P4 512M 内存 Jmeter

    测试内容 khxx_xg.jsp 接受用户参数、调用 javabean 、输出相关信息。

    2)安装启动JMeter

    请将下载的.zip文件解压缩到C:/JMeter目录下。现在,请使用C:/JMeter/bin下面的jmeter.bat批处理文件来启动JMeter的可视化界面,下面的工作都将在这个可视化界面界面上进行操作。图1就是Jmeter的可视化界面。

    测试计划的内容:

    1、右键单击测试计划,选择添加-〉线程组

    在线程组里设置负载信息,即线程属性。我向测试计划中增加相关负载设置是Jmeter需要模拟十个请求者,每个请求者在测试过程中并发请求,并且连续请求10次。

    线程数: 10

    Ramp-up period(inseconds): 0

    循环次数: 10

    说明:线程数代表发送请求的用户数目,Ramp-up period(inseconds)代表每个请求发生的总时间间隔,单位是秒。假如我的请求数目是5,而这个参数是10,那么每个请求之间的间隔就是10/5,也就是2秒。如果设置为0就代表并发请求。Loop Count代表请求发生的重复次数,如果选择后面的forever(默认),那么 请求将一直继续,如果不选择forever,而在输入框中输入数字,那么请求将重复 指定的次数,如果输入0,那么请求将执行一次。

    2、添加HTTP默认请求值

    右键单击线程组,选择添加-〉配置元件-〉HTTP默认请求值,以下是我设置的信息:

    说明

    名称: HTTP 默认请求值 该元素的名称

    服务器名称或IP:

    localhost 被测试服务器的 IP或者名字

    端口号: 8080 服务器提供服务的端口号,我用的服务器是 Tomcat,所以端口号是8080

    协议: http 发送测试请求时使用的协议

    路径: /hrbin/hg_admin/khxx_xg.jsp 默认的起始位置。

    3、添加HTTP请求

    右键单击线程组,选择添加-〉Sampler-〉HTTP请求,以下是我设置的信息

    说明

    名称: HTTP 默认请求值 该元素的名称

    服务器名称或IP:

    localhost 被测试服务器的IP或者名字

    端口号: 8080 服务器提供服务的端口号,我用的服务器是Tomcat,所以端口号是8080

    协议: http 发送测试请求时使用的协议

    路径: /hrbin/hg_admin/khxx_xg.jsp 默认的起始位置。

    因为我测试的是查询,故添加了一个同请求一起发送的参数(in_id=dsgds):

    4、添加监听器,存放测试结果。

    右键单击测试计划,选择测试计划-〉添加-〉监听器-〉聚合报告

    你也可以选择用表格查看结果、图形结果、查看结果树等。

    4)运行测试

    单击运行,选择启动。

    展开全文
  • elpasedtime)) #多次测试过程 def run(self): while self.counter > 0: self.testprocess() self.counter = self.counter - 1 #获取当前时间戳 def getCurrentTime(self): currentTime = time.strftime("%Y-%m-%d %H...

    压测app:启动时间,cpu,流量,电量,内存,fps,过度渲染

    环境的配置

    1. Android SDK 2. Python 3.pyCharm

    1. Android SDK

    下载网址:http://www.androiddevtools.cn/index.html

    环境变量: ANDROID_HOME:D:\Appium\Android Sdk\android-sdk

    PATH:D:\Appium\Android Sdk\android-sdk\platform-tools

    D:\Appium\Android Sdk\android-sdk\tools

    添加完环境变量后,链接真机,输入 adb devices 有输出,判断android sdk 添加成功

    2.python

    下载地址:https://www.python.org/downloads/

    3.pyCharm 直接下载安装

    获取app的包名和activity名 : adb shell "logcat | grep START" 然后启动app 找到 cmp="com.zgjky.app/.activity.welcomepage.Welcome_Activity”

    启动时间:

    冷启动:程序(进程)首次启动 热启动:程序(进程)推到后台

    # encoding:utf-8

    import csv

    import os

    import time

    #APP类

    class App(object):

    def __init__(self):

    self.content = ""

    self.startTime = 0

    def LaunchApp(self):

    #启动APP

    cmd = "adb shell am start -W -n com.zgjky.app/.activity.welcomepage.Welcome_Activity "

    self.content= os.popen(cmd)

    def StopApp(self):

    #停止APP

    cmd = "adb shell am force-stop com.zgjky.app"

    os.popen(cmd)

    #获取启动时间

    def GetLaunchedTime(self):

    for line in self.content.readlines():

    if "ThisTime" in line:

    self.startTime = line.split(":")[1]

    break

    return self.startTime

    #控制类

    class Controller(object):

    def __init__(self,count):

    self.app = App()

    self.counter = count

    self.alldata = [("timestamp","elpasedtime")]

    #单次测试过程

    def testprocess(self):

    self.app.LaunchApp()

    time.sleep(5)

    elpasedtime = self.app.GetLaunchedTime()

    self.app.StopApp()

    time.sleep(3)

    currenttime = self.getCurrentTime()

    self.alldata.append((currenttime,elpasedtime))

    #多次测试过程

    def run(self):

    while self.counter > 0:

    self.testprocess()

    self.counter = self.counter - 1

    #获取当前时间戳

    def getCurrentTime(self):

    currentTime = time.strftime("%Y-%m-%d %H:%M:%S",time.localtime())

    return currentTime

    #数据的存贮

    def SaveDataToCSV(self):

    csvfile = file("startTime.csv","wb")

    writer = csv.writer(csvfile)

    writer.writerows(self.alldata)

    csvfile.close()

    if __name__ == "__main__":

    controller = Controller(11)

    controller.run()

    controller.SaveDataToCSV()

    遇到问题:当执行程序后,app启动一次,然后就没有然后了

    分析:csv文件,在python3.6中运行错误导致

    展开全文
  • tb(tb))) logging.critical('{0}: {1}'.format(exception_type, exception)) sys.excepthook = log_uncaught_exceptions #网关地址 addr="172.18.2.4" port=8080 thread_count = 15 #单次并发数量 requst_interval =...
  • MAXTIME=ts def mintime(ts): global MINTIME if ts MINTIME=ts def main(): print '===========task start===========' # 开始的时间 start_time = time.time() # 并发的线程数 thread_count = 100 i = 0 while i ...
  • 本文实例讲述了Python实现的多线程http压力测试代码。分享给大家供大家参考,具体如下:# Python version 3.3__author__ = 'Toil'import sys, getoptimport threadingdef httpGet(url, file):import ...
  • 在bin目录中打开命令窗口cmd,输入命令: ab -c 200 -n 1000 http://redistest/testRedisson 压力测试:-c并发数 -n总请求数 地址 总共1000请求:200并发 压5次 在防止缓存击穿,使用分布式锁,不同线程拿到相同的...
  • Node.js是从纯前端走向更阶层的前端,以及全栈工程师的唯一快速途径简单的说Node.js 就是运行在服务端的 JavaScriptNode.js 是一个基于Chrome JavaScript 运行时建立的一个平台Node.js是一个事件驱动I/O服务端...
  • 从事API相关的工作很有挑战性,在高峰期保持系统的稳定及健壮性就是其中之一,这也是我们在Mailgun做很多压力测试的原因。这么久以来,我们已经尝试了很多种方法,从简单的ApacheBench到复杂些的自定义测试套。但是...
  • 一、下载安装 在Apache官网进行下载。...如图: 下载完成后将其解压到某个磁盘位置,进入文件夹的bin目录,运行jmeter.sh文件,即可进入Jmeter的操作页面。...二、创建测试计划 1、新建测试计划 ...
  • 如果想进行压力测试/并发测试,可以使用Java的多线程,下面是代码示例(部分代码引自网络) import java.sql.*; class RunnableDemo implements Runnable { private Thread t; private ...
  • 在run 某个 collection 时,选择次数为5,其请求方式是:第一个请求结束,再去第二次执行该请求,所以其不能作为用于高并发压力测试。 使用Apache压力测试工具:Jmeter 下载地址 使用方法(Jmeter免安装...
  • 在直播、电商、游戏等用户密集型互联网行业,访问并发数通常是非常大的,所以一般会采用产品逻辑优化,倒计时延后请求等方式来缓解瞬时的...那么企业该如何正确发起高并发,如何知道该架构能支持多大的高并发呢? ...
  • 一、 ApacheJMeter工具  1)简介  JMeter——一个100%的纯java桌面应用,它是 Apache组织的开放源代码项目,它是功能和性能测试的工具。JMeter可以用于测试静态或者动态资源的... 2)Jmeter压力测试软件的下载...
  • 它是用于负载测试的网站(或其他系统),弄清楚有多少并发用户系统可以处理。 我们的想法是,在测试期间,一群蝗虫会攻击你的网站。每个蝗虫的行为(或测试用户如果你愿意)被定义为你和聚集过程实时监控从web UI。这将...
  • 利用apache,自带的ab.exe软件就可以,在cmd中,首先输入ab.exe物理地址,然后-c 高并发数量 -n访问请求次数 请求的页面的地址,如-c 10 -n 20,就是-c10相当于10个客户端,每个访问页面两次,总共就是-n20次 ...
  • webbench最多可以模拟3万个并发连接去测试网站的负载能力,个人感觉要比Apache自带的ab压力测试工具好,安装使用也特别方便。  1、适用系统:Linux  2、编译安装: 引用 wget ...
  • 一、 Apache JMeter工具 ...JMeter可以用于测试静态或者动态资源的性能(文件、Servlets、Perl脚本、java对象、数据库和查询、ftp 服务器或者其他资源)。  3)Apache JMeter 的特性:  a) 能
  • 在工作中,要对一个接口进行压测,我当时就想通过python自己编写一个压力发生器。 初步方案(单线程循环发送) 通过循环向服务端发送请求,代码如下: #采用单步循环的方式循环测试 import requests,time ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,589
精华内容 635
关键字:

高并发压力测试