TA的每日心情 | 无聊 2024-7-12 13:16 |
---|
签到天数: 1 天 连续签到: 1 天 [LV.1]测试小兵
|
Locust运行模式在开始运行Locust脚本之前,我们先来看下Locust支持的运行模式。
运行Locust时,通常会使用到两种运行模式:单进程运行和多进程分布式运行。
单进程运行模式的意思是,Locust所有的虚拟并发用户均运行在单个Python进程中,具体从使用形式上,又分为no_web和web两种形式。该种模式由于单进程的原因,并不能完全发挥压力机所有处理器的能力,因此主要用于调试脚本和小并发压测的情况。
当并发压力要求较高时,就需要用到Locust的多进程分布式运行模式。从字面意思上看,大家可能第一反应就是多台压力机同时运行,每台压力机分担负载一部分的压力生成。的确,Locust支持任意多台压力机(一主多从)的分布式运行模式,但这里说到的多进程分布式运行模式还有另外一种情况,就是在同一台压力机上开启多个slave的情况。这是因为当前阶段大多数计算机的CPU都是多处理器(multiple processor cores),单进程运行模式下只能用到一个处理器的能力,而通过在一台压力机上运行多个slave,就能调用多个处理器的能力了。比较好的做法是,如果一台压力机有N个处理器内核,那么就在这台压力机上启动一个master,N个slave。当然,我们也可以启动N的倍数个slave,但是根据我的试验数据,效果跟N个差不多,因此只需要启动N个slave即可。
脚本调试Locust脚本编写完毕后,通常不会那么顺利,在正式开始性能测试之前还需要先调试运行下。
不过,Locust脚本虽然为Python脚本,但却很难直接当做Python脚本运行起来,为什么呢?这主要还是因为Locust脚本中引用了HttpLocust和TaskSet这两个类,如果要想直接对其进行调用测试,会发现编写启动脚本是一个比较困难的事情。因为这个原因,刚接触Locust的同学可能就会觉得Locust脚本不好调试。
但这个问题也能克服,那就是借助Locust的单进程no_web运行模式。
在Locust的单进程no_web运行模式中,我们可以通过--no-web参数,指定并发数(-c)和总执行次数(-n),直接在Terminal中执行脚本。
在此基础上,当我们想要调试Locust脚本时,就可以在脚本中需要调试的地方通过print打印日志,然后将并发数和总执行次数都指定为1,执行形式如下所示。
$ locust -f locustfile.py --no-web -c 1 -n 1通过这种方式,我们就能很方便地对Locust脚本进行调试了。
执行测试Locust脚本调试通过后,就算是完成了所有准备工作,可以开始进行压力测试了。
Locust是通过在Terminal中执行命令进行启动的,通用的参数有如下两个:
- -H, --host:被测系统的host,若在Terminal中不进行指定,就需要在Locust子类中通过host参数进行指定;
- -f, --locustfile:指定执行的Locust脚本文件;
除了这两个通用的参数,我们还需要根据实际测试场景,选择不同的Locust运行模式,而模式的指定也是通过其它参数来进行控制的。
单进程运行no_web
- <p>如果采用<code>no_web</code>形式,则需使用<code>--no-web</code>参数,并会用到如下几个参数。</p>
- <ul>
- <li>
- <code>-c, --clients</code>:指定并发用户数;</li>
- <li>
- <code>-n, --num-request</code>:指定总执行测试;</li>
- <li>
- <code>-r, --hatch-rate</code>:指定并发加压速率,默认值位1。</li>
- </ul>
- <pre class="highlight shell"><code><span class="gp">$ </span>locust -H http://debugtalk.com -f demo.py --no-web -c1 -n2
- <span class="o">[</span>2017-02-21 21:27:26,522] Leos-MacBook-Air.local/INFO/locust.main: Starting Locust 0.8a2
- <span class="o">[</span>2017-02-21 21:27:26,523] Leos-MacBook-Air.local/INFO/locust.runners: Hatching and swarming 1 clients at the rate 1 clients/s...
- Name <span class="c"># reqs # fails Avg Min Max | Median req/s</span>
- --------------------------------------------------------------------------------------------------------------------------------------
- --------------------------------------------------------------------------------------------------------------------------------------
- Total 0 0<span class="o">(</span>0.00%<span class="o">)</span> 0.00
- <span class="o">[</span>2017-02-21 21:27:27,526] Leos-MacBook-Air.local/INFO/locust.runners: All locusts hatched: WebsiteUser: 1
- <span class="o">[</span>2017-02-21 21:27:27,527] Leos-MacBook-Air.local/INFO/locust.runners: Resetting stats
- Name <span class="c"># reqs # fails Avg Min Max | Median req/s</span>
- --------------------------------------------------------------------------------------------------------------------------------------
- GET /about/ 0 0<span class="o">(</span>0.00%<span class="o">)</span> 0 0 0 | 0 0.00
- --------------------------------------------------------------------------------------------------------------------------------------
- Total 0 0<span class="o">(</span>0.00%<span class="o">)</span> 0.00
- Name <span class="c"># reqs # fails Avg Min Max | Median req/s</span>
- --------------------------------------------------------------------------------------------------------------------------------------
- GET /about/ 1 0<span class="o">(</span>0.00%<span class="o">)</span> 17 17 17 | 17 0.00
- --------------------------------------------------------------------------------------------------------------------------------------
- Total 1 0<span class="o">(</span>0.00%<span class="o">)</span> 0.00
- <span class="o">[</span>2017-02-21 21:27:32,420] Leos-MacBook-Air.local/INFO/locust.runners: All locusts dead
- <span class="o">[</span>2017-02-21 21:27:32,421] Leos-MacBook-Air.local/INFO/locust.main: Shutting down <span class="o">(</span><span class="nb">exit </span>code 0<span class="o">)</span>, bye.
- Name <span class="c"># reqs # fails Avg Min Max | Median req/s</span>
- --------------------------------------------------------------------------------------------------------------------------------------
- GET / 1 0<span class="o">(</span>0.00%<span class="o">)</span> 20 20 20 | 20 0.00
- GET /about/ 1 0<span class="o">(</span>0.00%<span class="o">)</span> 17 17 17 | 17 0.00
- --------------------------------------------------------------------------------------------------------------------------------------
- Total 2 0<span class="o">(</span>0.00%<span class="o">)</span> 0.00
- Percentage of the requests completed within given <span class="nb">times
- </span>Name <span class="c"># reqs 50% 66% 75% 80% 90% 95% 98% 99% 100%</span>
- --------------------------------------------------------------------------------------------------------------------------------------
- GET / 1 20 20 20 20 20 20 20 20 20
- GET /about/ 1 17 17 17 17 17 17 17 17 17
- --------------------------------------------------------------------------------------------------------------------------------------
- </code></pre>
- <p><strong>web</strong></p>
- <p>如果采用<code>web</code>形式,,则通常情况下无需指定其它额外参数,<code>Locust</code>默认采用<code>8089</code>端口启动<code>web</code>;如果要使用其它端口,就可以使用如下参数进行指定。</p>
- <ul>
- <li>
- <code>-P, --port</code>:指定web端口,默认为<code>8089</code>.</li>
- </ul>
- <pre class="highlight shell"><code><span class="gp">$ </span>locust -H http://debugtalk.com -f demo.py
- <span class="o">[</span>2017-02-21 21:31:26,334] Leos-MacBook-Air.local/INFO/locust.main: Starting web monitor at <span class="k">*</span>:8089
- <span class="o">[</span>2017-02-21 21:31:26,334] Leos-MacBook-Air.local/INFO/locust.main: Starting Locust 0.8a2
- </code></pre>
- <p>此时,<code>Locust</code>并没有开始执行测试,还需要在Web页面中配置参数后进行启动。</p>
- <p>如果<code>Locust</code>运行在本机,在浏览器中访问<code>http://localhost:8089</code>即可进入<code>Locust</code>的Web管理页面;如果<code>Locust</code>运行在其它机器上,那么在浏览器中访问<code>http://locust_machine_ip:8089</code>即可。</p>
- <p>在<code>Locust</code>的Web管理页面中,需要配置的参数只有两个:</p>
- <ul>
- <li>
- <code>Number of users to simulate</code>: 设置并发用户数,对应中<code>no_web</code>模式的<code>-c, --clients</code>参数;</li>
- <li>
- <code>Hatch rate (users spawned/second)</code>: 启动虚拟用户的速率,对应着<code>no_web</code>模式的<code>-r, --hatch-rate</code>参数。</li></ul>
复制代码 参数配置完毕后,点击【Start swarming】即可开始测试。
|
|