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

    上周教大家如何通过Python实现性能测试工具,最后留了一下问题,今天我们继续来实现命令行工具。

    依赖库

    requests==2.22.0
    gevent==20.9.0
    numpy==1.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://github.com/SeldomQA/kb

    来源  :  虫师   https://www.cnblogs.com/fnng/

  • 相关阅读:
    Threejs学习 一
    Mapbox的表达式
    mapbox 不加载地图
    SQL Server将查询出数据进行列转行操作
    SQL Server 常用近百条SQL语句(收藏版)
    SQL Server DATEDIFF() 函数用法
    SQL Server 数据库开启日志CDC记录,导致SQL Server 数据库日志异常增大
    查询SQL Server数据库使用的版本号信息
    windows 无法启动 SQL Server (MSSQLSERVER) 服务(位于本地计算机上)。错误 1069由于登入失败而无法启动 。
    SQL Server 不同数据间建立链接服务器进行连接查询
  • 原文地址:https://www.cnblogs.com/rxxbb123/p/14231762.html
Copyright © 2011-2022 走看看