自己上手写性能测试工具(二)

依赖库
requests2.22.0
gevent
20.9.0
numpy1.19.2
click
7.1.2
click 库
今天的主角是click库。

中文文档:https://www.osgeo.cn/click/index.html

第一个例子(hello.py):

import click

@click.command()
@click.argument('name')
@click.option('-c', default=1, help='number of greetings')
def hello(name, c):
for x in range(c):
click.echo('Hello %s!' % name)

if name == "main":
hello()
查看帮助:

python3 hello.py --help
Usage: hello.py [OPTIONS] NAME

Options:
-c INTEGER number of greetings
--help Show this message and exit.
使用:

python3 hello.py 虫师 -c 3
Hello 虫师!
Hello 虫师!
Hello 虫师!
现在已经掌握了click 的基本用法。

实现命令行性能测试工具
接下来,将click引入到kb.py性能测试脚本中。

from future import print_function
import gevent
from gevent import monkey
monkey.patch_all()
import time
import click
import requests
from numpy import mean

class statistical:
pass_number = 0
fail_number = 0
run_time_list = []

def running(url, numbers):
for _ in range(numbers):
start_time = time.time()
r = requests.get(url)
if r.status_code == 200:
statistical.pass_number = statistical.pass_number + 1
print(".", end="")
else:
statistical.fail_number = statistical.fail_number + 1
print("F", end="")

    end_time = time.time()
    run_time = round(end_time - start_time, 4)
    statistical.run_time_list.append(run_time)

@click.command()
@click.argument('url')
@click.option('-u', default=1, help='运行用户的数量,默认 1', type=int)
@click.option('-q', default=1, help='单个用户请求数,默认 1', type=int)
def main(url, u, q):
print("请求URL: {url}".format(url=url))
print("用户数:{},循环次数: {}".format(u, q))
print("============== Running ===================")

jobs = [gevent.spawn(running, url, q) for _url in range(u)]
gevent.wait(jobs)

print("
============== Results ===================")
print("最大:       {} s".format(str(max(statistical.run_time_list))))
print("最小:       {} s".format(str(min(statistical.run_time_list))))
print("平均:       {} s".format(str(round(mean(statistical.run_time_list), 4))))
print("请求成功", statistical.pass_number)
print("请求失败", statistical.fail_number)
print("============== end ===================")

if name == "main":
main()
查看帮助:

python3 kb.py --help
Usage: kb.py [OPTIONS] URL

Options:
-u INTEGER 运行用户的数量,默认 1
-q INTEGER 单个用户请求数,默认 1
--help Show this message and exit.
使用方法:

python3 kb.py https://wwww.baidu.com -u 10 -q 10

请求URL: https://wwww.baidu.com
用户数:10,循环次数: 10
============== Running ===================
....................................................................................................
============== Results ===================
最大: 0.955 s
最小: 0.2573 s
平均: 0.4585 s
请求成功 100
请求失败 0
============== end ===================

本篇作者:虫师
博客出处:https://i.cnblogs.com/posts/edit

原文地址:https://www.cnblogs.com/wwyydd/p/14215748.html