用法:
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()
分享到:
相关推荐
拉取请求分析样本这是一个示例代码,用于可视化开发团队的生产率指数。 有关详细信息,请参见 。
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 (有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出版的的代码存储库。 它包含从头到尾完成本书所必需的所有支持项目文件。 ##说明和导航所有代码都组织在文件夹中。 每个文件夹均以数字开头,后跟应用程序名称。 ...
并以字典的格式分发,例如:{ '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 1. 介绍 ResourceTiming 是 W3C Web Performance working group 的 一个规范,目标是为了得到一个准确性能指标,对所有的资源下载页面加载期间的经历,比如图像、CSS和JavaScript。 ...
request回来,锵锵锵~ 2. 寻找学长学姐帮忙后期校验 在群里找大二的学长学姐(大三的最近很忙)在后期做一个学习成果已经内容的检验 3. 开始 首先根据自己所选择的部分在Mobile-Dev-Ananalysis文件夹里面新建一个...
新建Pull Request 特技 使用Readme_XXX.md来支持不同的语言,例如Readme_en.md,Readme_zh.md Gitee官方博客 你可以这个地址来了解Gitee上的优秀开源项目 全称是Gitee最有价值的开源项目,是综合评估出的优秀开源...
小组项目 数据A.下载-GSV图片B.模型数据C.冲撞下载-冲撞的GSV图片数据库-... lib-库文件index.html-最终的html文件readme.txt-TA的设置草稿存档-存档文件注意:要进行重大更改时,请提交“ PULL REQUEST” 。 谢谢!
软件架构软件架构说明安装教程xxx xxx xxx使用说明xxx xxx xxx参与贡献叉本仓库新建Feat_xxx分支提交代码新建Pull Request特技使用Readme_XXX.md来支持不同的语言,例如Readme_en.md,Readme_zh.md Gitee官方博客你...
该演示还说明了使用X-DCSS-MEDIA-REQUEST-TOKEN标头来请求DCSS服务器的媒体。 目录 server.js 核心套接字服务。 这协调了请求,分析和响应。 该服务将使用客户端连接时收到的auth.token从DCSS服务器请求媒体,以对...
LIB ├──application.js ├──context.js ├──request.js └──response.js 首先先放上最简单的新建服务实现 cosnt Koa = require ( 'koa' ) ; const app = new Koa ( ) ; app . listen ( port ) 我们就由...
5. 理解ElasticSearch工作原理(索引、analysis、mapping等) 6. 能够使用ElasticSearch集成IK分词器 7. 完成对ElasticSearch的索引和文档的CRUD操作 8. Request Body Search和Search API(URI)学习 9. 了解...
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 Trevor Carpenter,在Setareh Rafatirad博士的建议下 ...request和bs4 :用于在新闻网站上进行网络抓取的python库,以查找重要日期 初始过程构想(粗略) 我的约会会发现全年的重要事件 找出热门话题标签
条款客户在整个文档中,“客户端”一词始终指DCSS应用程序,该应用程序正在将request消息连接并发送到服务。服务器在整个文档中,服务器一词始终指的是远程服务。 该存储库包含此上下文中服务器的演示。大事记...
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分析 Koa.js源码分析 目录结构 . ├── LICENSE ...├── request.js 请求对象 └── response.js 响应对象 一切从这三段代码说起 const Koa = require ( 'koa' ) const app = new Koa ( ) app . use