Blog

Blog

PHODAL

twill 网站登录压力测试

意外发现了twill可以进行压力测试,于是对比了一下。

常规压力测试

正常情况下,我们的压力测试是这样的:

boom -n 1000 -c 100 http://127.0.0.1:5000/login

返回每个页面的结果:

1000 / 1000 Booooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo! 100.00 %

Summary:
  Total:    2.3932 secs.
  Slowest:  0.2570 secs.
  Fastest:  0.0172 secs.
  Average:  0.2282 secs.
  Requests/sec: 417.8490
  Total Data Received:  2048000 bytes.
  Response Size per Request:    2048 bytes.

Status code distribution:
  [200] 1000 responses

Response time histogram:
  0.017 [1] |
  0.041 [10]    |
  0.065 [11]    |
  0.089 [10]    |
  0.113 [10]    |
  0.137 [11]    |
  0.161 [11]    |
  0.185 [11]    |
  0.209 [11]    |
  0.233 [175]   |∎∎∎∎∎∎∎∎∎
  0.257 [739]   |∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎

Latency distribution:
  10% in 0.2197 secs.
  25% in 0.2327 secs.
  50% in 0.2393 secs.
  75% in 0.2425 secs.
  90% in 0.2483 secs.
  95% in 0.2531 secs.
  99% in 0.2564 secs.

但是这没有办法,模仿真实环境下的压力测试。

twill 压力测试

这时如果我们要模拟登录这个过程的压力测试的话,那么我们可以这样子。

twill-fork -n 500 -p 10 login.twill

(ps: 测试脚本参见 twill Python下的轻量级网站测试工具)

最后结果:

Form #1
## ## __Name__________________ __Type___ __ID________ __Value__________________
1     csrf_token               hidden    csrf_token   1423387579##ceaaadf260e3df6129683d1d ...
2     email                    email     email        None
3     password                 password  password     None
4     login                    submit    (None)       登入

AT LINE: login.twill:3
AT LINE: login.twill:4
AT LINE: login.twill:5
AT LINE: login.twill:6
Setting action for form  (<Element form at 0x10644ec00>,) to  ('http://127.0.0.1:5000/login',)
AT LINE: login.twill:7
Note: submit is using submit button: name="login", value="登入"

==> at http://127.0.0.1:5000/login
AT LINE: login.twill:9
==> at http://127.0.0.1:5000/login

---
n processes: 10
total executed: 500
total time to execute: 105.789509
average time: 0.211579

平均每个网页的Requests/sec大概是400,这样下来大概要四次。

当我试着提高线程的时候,发现挂 了。

[2015-02-06 23:15:59 +0800] [21467] [INFO] Using worker: sync
[2015-02-06 23:15:59 +0800] [21470] [INFO] Booting worker with pid: 21470
[2015-02-06 23:16:01 +0800] [21470] [INFO] Worker exiting (pid: 21470)
[2015-02-06 23:16:01 +0800] [21467] [INFO] Handling signal: int
[2015-02-06 23:16:01 +0800] [21467] [INFO] Shutting down: Master
[2015-02-06 23:19:40 +0800] [22366] [INFO] Starting gunicorn 19.1.1
[2015-02-06 23:19:40 +0800] [22366] [INFO] Listening at: http://127.0.0.1:8000 (22366)
[2015-02-06 23:19:40 +0800] [22366] [INFO] Using worker: sync
[2015-02-06 23:19:40 +0800] [22369] [INFO] Booting worker with pid: 22369

于是修改了gunicorn的参数

 gunicorn xunta.wsgi --log-file=xunta.log --workers=2 -k gevent

再进行测试

 twill-fork -n 1000 -p 10 login.twill

最后结果

---
n processes: 10
total executed: 1000
total time to execute: 216.028105
average time: 0.216028

再将workers变成4,将process变成100,结果

---
n processes: 100
total executed: 1000
total time to execute: 2043.460434
average time: 2.043460

变成2000多了。。

关于我

Github: @phodal     微博:@phodal     知乎:@phodal    

微信公众号(Phodal)

围观我的Github Idea墙, 也许,你会遇到心仪的项目

QQ技术交流群: 321689806

新书《全栈应用开发:精益实践》

这不是一本深入前端、后台、运维、设计、分析等各个领域的书籍。本书以实践的方式,将这一系列的领域及理论知识结合到一起,来帮助读者构建全栈Web 开发的知识体系,并辅以精益及敏捷的思想,来一步步开发Web 应用:从创建一个UI 原型到编写出静态的前端页面;从静态的前端页面到带后台的应用,并部署应用;从Web 后台开发API 到开发移动Web 应用。在这个过程中,我们还将介绍一些相辅相成的步骤:使用构建系统来加速Web 应用的开发;为应用添加数据分析工具来改进产品;使用分析工具来改善应用的性能;通过自动化部署来加快上线流程;从而帮助读者开发出一个真正可用的全栈 Web 应用。同时,我们也将帮助读者把这些步骤应用到现有的系统上,改进现有系统的开发流程。

comment

Feeds

RSS / Atom

最近文章

关于作者

Phodal Huang

Developer, Consultant, Writer, Designer

ThoughtWorks 高级咨询师

工程师 / 咨询师 / 作家 / 设计学徒

开源深度爱好者

出版有《前端架构:从入门到微前端》、《自己动手设计物联网》、《全栈应用开发:精益实践》

联系我: h@phodal.com

微信公众号: 与我沟通

标签