`

Request Analysis

阅读更多
用法:

python bencher.py threadcount duration hitfile


TEST SUMMARY
============
21 REQUESTS in 3s (7.00/s)
7.00 CYCLES in 3s (2.33/s)
  http://www.tl50.com/ status_count: 200=9 (avg 1338ms/req)
  http://www.google.com.hk/ status_count: 200=6 (avg 671ms/req)
  http://www.baidu.com/ status_count: 200=6 (avg 156ms/req)

编写test.txt 内容如下

http://www.google.com.hk/
http://www.baidu.com/




import socket
import thread
import httplib
import time
import sys
import urlparse
import Queue
import os

def check_urls(urls):
    for u in urls:
        url_o = urlparse.urlparse(u)
        conn = httplib.HTTPConnection(url_o.hostname, url_o.port)
        try:
            conn.request("GET", "%s%s?%s" % (url_o.path, url_o.params, url_o.query))
        except socket.gaierror:
            error("the url '%s' contains an unknown hostname" % u)
        except socket.error:
            error("the url '%s' contains an host/port combo that did not respond" % u)

        resp = conn.getresponse()
       
        if resp.status != 200:
            error("the url '%s' did not return 200 is %s" % (u,resp.status))

from itertools import cycle
def test_thread(q, duration, urls):
    looper = cycle(urls)
    ind_bench = dict((u, []) for u in urls)
    start = time.time()
    count = 0
    while time.time() - start < duration:
        url = looper.next()
        url_o = urlparse.urlparse(url)
        m_s = time.time()
        conn = httplib.HTTPConnection(url_o.hostname, url_o.port)
        conn.request("GET", "%s%s?%s" % (url_o.path, url_o.params, url_o.query))
        resp = conn.getresponse()
        ind_bench[url].append((time.time() - m_s, resp.status))
        count += 1
    q.put((count, ind_bench))

def thread_details(num, amt, urls, duration, details):
    def out(s):
        if 'VERBOSE' in os.environ:
            print s
    out('- Thread #%d -' % num)
    cycles = amt / float(len(urls))
    out('  %d total requests (%.2f/s), %.1f cycles (%.1f/s)' % (amt, float(amt) / duration,
    cycles, cycles / duration))
    url_data = {}
    for url in urls:
        stats = details[url]
        status_acc = {}
        tot_time = 0
        for tm, status in stats:
            tot_time += tm
            try:
                status_acc[status] += 1
            except KeyError:
                status_acc[status] = 1
        avg_time = tot_time / float(len(stats))
        out('  %s status_count: %s (avg %dms/req)' % (
        url, ', '.join([('%s=%s' % (k, v)) for k, v in status_acc.iteritems()]),
        avg_time * 1000))
        url_data[url] = (avg_time, status_acc)
    return cycles, url_data

def run_test(count, duration, urls):
    check_urls(urls)
    rec_q = Queue.Queue()
    for x in xrange(count):
        thread.start_new_thread(test_thread, (rec_q, duration, urls))

    results = []
    for x in xrange(count):
        results.append(rec_q.get())

    tot = 0
    cycles = 0
    total_acc = dict((u, {}) for u in urls)
    times = dict((u, 0) for u in urls)
    for x, res in enumerate(results):
        amt, details = res
        cyc, url_data = thread_details(x + 1, amt, urls, duration, details)
        tot += amt
        cycles += cyc
        for url, (avg_time, status_acc) in url_data.iteritems():
            times[url] += avg_time
            for code, c_count in status_acc.iteritems():
                try:
                    total_acc[url]
 += c_count
                except KeyError:
                    total_acc[url]
 = c_count

    print "TEST SUMMARY"
    print "============"
    print "%s REQUESTS in %ss (%.2f/s)" % (tot, duration, tot / float(duration))
    print "%.2f CYCLES in %ss (%.2f/s)" % (cycles, duration, cycles / float(duration))
    for url in urls:
        print '  %s status_count: %s (avg %dms/req)' % (
        url, ', '.join([('%s=%s' % (k, v)) for k, v in total_acc[url].iteritems()]),
        (times[url] / float(count)) * 1000)

   
def error(msg):
    sys.stderr.write('error: %s\n' % msg)
    sys.stderr.write('usage: %s threadcount duration hitfile\n' % sys.argv[0])
    raise SystemExit, 1

def get_urls_from_file(fn):
    return [line.strip() for line in open(fn) if line.strip()]

def main_with_argv():
    args = sys.argv[1:]
    if len(args) != 3:
        error("exactly three arguments are required")
    count, duration, hitfile = args
    try:
        count = int(count)
    except ValueError:
        error("argument #1 (count) must be an int")
    try:
        duration = int(duration)
    except ValueError:
        error("argument #2 (duration) must be an int")
    try:
        urls = get_urls_from_file(hitfile)
    except IOError:
        error("could not retrieve URL list from file '%s'" % hitfile)
    run_test(count, duration, urls)

if __name__ == '__main__':
    main_with_argv()

分享到:
评论

相关推荐

    pull-request-analysis-sample

    拉取请求分析样本这是一个示例代码,用于可视化开发团队的生产率指数。 有关详细信息,请参见 。

    英文原版-Qualitative Data Analysis Practical Strategies 1st Edition

    Lecturers/instructors only - request a free digital inspection copy here Written by an experienced researcher in the field of qualitative methods, this dynamic new book provides a definitive ...

    pandas 0.19.2 : powerful Python data analysis toolkit

    pandas 0.19.2 (有API,带书签,英文) pandas: powerful Python data analysis toolkit Release 0.19.2 Wes McKinney & PyData Development Team Dec 24, 2016

    Practical-Data-Analysis-Second-Edition:实用数据分析第二版,由packt发行

    #Practical Data Analysis-Second Edition这是Packt出版的的代码存储库。 它包含从头到尾完成本书所必需的所有支持项目文件。 ##说明和导航所有代码都组织在文件夹中。 每个文件夹均以数字开头,后跟应用程序名称。 ...

    Apache-Log-Analysis:Apache 日志分析框架

    并以字典的格式分发,例如:{ 'remote': '123.125.71.36', 'datetime': datetime.datetime(2017, 4, 6, 18, 9, 25, tzinfo=datetime.timezone(datetime.timedelta(seconds=28800))), 'request': {'method': 'GET', '...

    web-performance-analysis

    web-performance-analysis 1. 介绍 ResourceTiming 是 W3C Web Performance working group 的 一个规范,目标是为了得到一个准确性能指标,对所有的资源下载页面加载期间的经历,比如图像、CSS和JavaScript。 ...

    JAVA之hashmap源码分析-Mobile-Dev-Analysis:android或java的分析

    request回来,锵锵锵~ 2. 寻找学长学姐帮忙后期校验 在群里找大二的学长学姐(大三的最近很忙)在后期做一个学习成果已经内容的检验 3. 开始 首先根据自己所选择的部分在Mobile-Dev-Ananalysis文件夹里面新建一个...

    animation-analysis-station-b

    新建Pull Request 特技 使用Readme_XXX.md来支持不同的语言,例如Readme_en.md,Readme_zh.md Gitee官方博客 你可以这个地址来了解Gitee上的优秀开源项目 全称是Gitee最有价值的开源项目,是综合评估出的优秀开源...

    Street_Safety_Analysis_Cyclist

    小组项目 数据A.下载-GSV图片B.模型数据C.冲撞下载-冲撞的GSV图片数据库-... lib-库文件index.html-最终的html文件readme.txt-TA的设置草稿存档-存档文件注意:要进行重大更改时,请提交“ PULL REQUEST” 。 谢谢!

    four-kinds-of-analysis

    软件架构软件架构说明安装教程xxx xxx xxx使用说明xxx xxx xxx参与贡献叉本仓库新建Feat_xxx分支提交代码新建Pull Request特技使用Readme_XXX.md来支持不同的语言,例如Readme_en.md,Readme_zh.md Gitee官方博客你...

    dcss-media-analysis-agent

    该演示还说明了使用X-DCSS-MEDIA-REQUEST-TOKEN标头来请求DCSS服务器的媒体。 目录 server.js 核心套接字服务。 这协调了请求,分析和响应。 该服务将使用客户端连接时收到的auth.token从DCSS服务器请求媒体,以对...

    koa2-source-code-analysis:koa2原始码解析-源码解析

    LIB ├──application.js ├──context.js ├──request.js └──response.js 首先先放上最简单的新建服务实现 cosnt Koa = require ( 'koa' ) ; const app = new Koa ( ) ; app . listen ( port ) 我们就由...

    elasticsrarch(ELK文档).rar

    5. 理解ElasticSearch工作原理(索引、analysis、mapping等) 6. 能够使用ElasticSearch集成IK分词器 7. 完成对ElasticSearch的索引和文档的CRUD操作 8. Request Body Search和Search API(URI)学习 9. 了解...

    apache kafka教程

    analysis. Operational data is data about the performance of servers (CPU, IO usage, request times, service logs, etc) and a variety of different approaches to aggregating operational data are used. In...

    2020-Analysis

    推特分析2020 Trevor Carpenter,在Setareh Rafatirad博士的建议下 ...request和bs4 :用于在新闻网站上进行网络抓取的python库,以查找重要日期 初始过程构想(粗略) 我的约会会发现全年的重要事件 找出热门话题标签

    emoji-analysis

    条款客户在整个文档中,“客户端”一词始终指DCSS应用程序,该应用程序正在将request消息连接并发送到服务。服务器在整个文档中,服务器一词始终指的是远程服务。 该存储库包含此上下文中服务器的演示。大事记...

    Game Physics Second Edition

    Computer Science, emphasis in image analysis, algorithms, and object-oriented software development. Software Engineering related to the development of large-scale commercial products. Cross-...

    koa-analysis:Koa.js继承分析

    KOA分析 Koa.js源码分析 目录结构 . ├── LICENSE ...├── request.js 请求对象 └── response.js 响应对象 一切从这三段代码说起 const Koa = require ( 'koa' ) const app = new Koa ( ) app . use

Global site tag (gtag.js) - Google Analytics