【week07】作业

用户头像
chengjing
关注
发布于: 2020 年 07 月 22 日

作业1

测试分为几个阶段,性能测试,负载测试,压力测试,稳定性测试

a点为开始测试的点

开始测试时以设计目标为目的进行测试,逐步加大到设计目标的系统负荷。随着系统负荷的增加,响应时间基本不变;吞吐量逐步加大,和系统负荷基本成线性关系。到达b点

达到设计目标后,进行负载测试,继续增加系统负荷,此时响应时间缓慢增加,吞吐量线程或抛物线增加,逐步达到最大吞吐量。到达 c点

之后是压力测试,继续增加系统负荷,响应时间逐步加大,吞吐量缓慢下降,某些系统资源处于不足的情况,继续加大系统负荷,最后导致系统崩溃,系统对请求失去响应,响应时间无穷大,吞吐量为0。到达d点



作业2

import time
import argparse
import concurrent.futures
import asyncio
import aiohttp
async def req_url_aio(url, idx, sem):
status = 0
starttime = time.time()
async with sem:
try:
async with aiohttp.ClientSession() as session:
async with session.get(url) as resp:
status = resp.status
await resp.text()
finally:
pass
return (idx, {"s":status, "t":(time.time()- starttime)})
class TestUrl_AIO():
def __init__(self, url, concurrency_num, request_num):
self.url = url
self.concurrency_num = concurrency_num
self.request_num = request_num
async def begin(self):
sem = asyncio.Semaphore(self.concurrency_num)
return_dict = {}
task_to_req = [ asyncio.create_task(req_url_aio(self.url, reqidx, sem)) for reqidx in range(0, self.request_num)]
for f in asyncio.as_completed(task_to_req):
ret = await f
return_dict[ret[0]] = ret[1]
return return_dict
async def main():
parser = argparse.ArgumentParser(description='scanner of ip or port')
parser.add_argument('-n', metavar='concurrency number', type=int, nargs=1, help='you can set concurrency number, default is 1', required=True )
parser.add_argument('-m', metavar='requests number', type=int, nargs=1, help='max request number, default is 1', required=True )
parser.add_argument('-url', metavar='request url', type=str, nargs=1, help='scan ip set ip1-ip2, scan tcp port set ip', required=True )
parser.add_argument('-w', metavar='file name', type=str, nargs=1, help='can save result to a json file', required=False )
args = parser.parse_args()
test = TestUrl_AIO(args.url[0], args.n[0], args.m[0])
starttime = time.time()
ret = await test.begin()
data = ret.copy()
#获取结果
p = [(v["t"]) for v in data.values()]
#求平均值
avg = sum(p)/100
print(f'avg time:{avg}')
#排序
p.sort()
print(f'95% time:{p[94]}')
print(time.time()- starttime)
if __name__ == "__main__":
ioloop = asyncio.new_event_loop()
ioloop.run_until_complete(main())
ioloop.close()



使用Python的aio协程异步处理并发操作,并发结果放入变量中。

系统参数 -n 并发数 -m 请求数 -url 请求的url -w 结果写入文件

平均响应时间:sum(每个请求的响应时间)/请求数目

95%响应时间:响应时间排序,第95%位的响应时间

执行命令行:.\concurrency_test.py -n 10 -m 100 -url "https://www.60jia.com.cn" -w test07.json

得到结果



avg time:3.6924855422973635

95% time:6.4427711963653564



用户头像

chengjing

关注

程靖 2018.06.06 加入

还未添加个人简介

评论 (1 条评论)

发布
用户头像
请加“极客大学架构师训练营”标签,便于分类
2020 年 07 月 22 日 18:15
回复
没有更多了
【week07】作业