V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
iyaozhen
V2EX  ›  Python

Python 业务压测工具

  •  
  •   iyaozhen ·
    iyaozhen · 2016-05-06 21:32:21 +08:00 · 6402 次点击
    这是一个创建于 3123 天前的主题,其中的信息可能已经有所发展或是发生改变。

    最近有一个压测需求,一开始使用 boom 来压测,是比较好用,但是接口后端有 memcache 很容易就会命中缓存,压不出效果。

    接口接受一个 uid 列表的 json 数据( POST ),需要每次变化,这样一般的压测工具感觉不适用了。这样的话需要自己写 http 请求来压测吗?但不确定并发是否能上去(希望 qps 能达到 1k+)。

    是否有什么框架来做这个?大家是怎么做的?

    谢谢各位了

    13 条回复    2016-05-07 17:41:38 +08:00
    lecher
        1
    lecher  
       2016-05-06 21:47:19 +08:00 via Android
    一般的压测工具读取一个构造好的 URL 列表,顺序读完去并发执行,很多工具都支持读取构造的 URL 列表。
    iyaozhen
        2
    iyaozhen  
    OP
       2016-05-06 22:04:59 +08:00
    @lecher 这个我知道,但是我的 URL 是一个, POST 的参数不同,才能达到压测目的。
    rale
        3
    rale  
       2016-05-06 22:09:40 +08:00
    或许你只需要的是一个造假数据的包: http://faker.readthedocs.io/en/latest/ 外加 requests
    iyaozhen
        4
    iyaozhen  
    OP
       2016-05-06 22:13:09 +08:00
    @rale rl 大神。数据都有,可以不用造。 requests 发包会不会太慢了,怕压不上去。
    rale
        5
    rale  
       2016-05-06 22:19:30 +08:00
    @iyaozhen 没事儿,多起几个线程就可以了。。
    iyaozhen
        6
    iyaozhen  
    OP
       2016-05-06 22:21:34 +08:00
    @rale 0_0 哈哈,而且机器多不用怕。
    lecher
        7
    lecher  
       2016-05-06 22:26:11 +08:00 via Android
    tornado 内置的 httpclient 吧支持异步,单进程 qps 可以到一百多,多开几个进程就可以了。
    不好的是不能限制并发数。
    feelapi
        8
    feelapi  
       2016-05-06 22:28:45 +08:00
    http://locust.io/
    比较好用。
    xdz
        9
    xdz  
       2016-05-06 22:38:52 +08:00 via Android
    siege ,可以列表文件带 post 数据压力测试,之前用过。
    2225377fjs
        10
    2225377fjs  
       2016-05-06 23:24:38 +08:00
    常规的 一些 python 的 http 请求库, urllib , urllib2 之类的,加上 gevent ,打上 monkey 的补丁,然后用协程并发请求,应该能解决问题。
    iyaozhen
        11
    iyaozhen  
    OP
       2016-05-07 00:19:21 +08:00
    感谢,我先自己用 http 请求库加上子进程之类的试试吧。
    @lecher
    @2225377fjs
    iyaozhen
        12
    iyaozhen  
    OP
       2016-05-07 00:20:29 +08:00
    @feelapi
    @xdz

    看起来不错,自己的轮子搞不定再用一下这些吧。
    SlipStupig
        13
    SlipStupig  
       2016-05-07 17:41:38 +08:00
    gevent pool+curl+多进程,轻松 10k+, dns 记得 cache 一下
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2732 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 21ms · UTC 10:02 · PVG 18:02 · LAX 02:02 · JFK 05:02
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.