zoukankan      html  css  js  c++  java
  • 自己上手写性能测试工具(二)

    依赖库
    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

  • 相关阅读:
    《设计原本》读书笔记01
    SQL SERVER存储过程的几种示例
    SQLSERVER2008 存储过程基本语法
    (转)C#程序开发中经常遇到的10条实用的代码
    (转)C#正则表达式Regex类的用法
    常用正则表达式
    (转)通过WMI获取网卡MAC地址、硬盘序列号、主板序列号、CPU ID、BIOS序列号
    checkbox:全选与反全选
    checkbox:获取所有已选中的值
    Quartz(任务调度)- Cron
  • 原文地址:https://www.cnblogs.com/wwyydd/p/14215748.html
Copyright © 2011-2022 走看看