自己上手写性能工具(三)

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

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

我又来更新第三篇了,因为我又改进了一些功能。

显示性能测试进度

前些天逛github发现了tqdm,他可以动态显示程序的执行进度。根据前面开发的功能,在运行性能时,如果并发用户和请求数很大,那么终端就处于执行状态,不会有任何信息输出,直到运行结果,结果才被打印出来。

> 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 ===================

这个体验非常糟糕。加入tqdm,体验就好很多了。
tqdm的用法超级简单,看一个简单的例子:

from time import sleep
from tqdm import trange

for i in trange(10):
sleep(0.5)

在终端运行上面的程序,动态显示执行进度。

> python demo.py
100%|██████████████████████████████████████████████████████████████████████████████████| 10/10 [00:05<00:00, 2.00it/s]

生成 kb 命令

上一篇借助 click 来给python文件执行时接收参数

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

这样很不专业,也不够方便。 ab
是这样执行:

> ab -c 10 -n 100 https://wwww.baidu.com

那么,能不能把 kb.py
变成一个命令,一次安装,到处执行,并且去掉前面的  python

很简单,只需要使用python的 argparse
模块即可。

import argparse

def main():
"""
API test: parse command line options and run commands.
"""


parser = argparse.ArgumentParser(description=__description__)

parser.add_argument(
'-v', '--version', dest='version', action='store_true',
help="show version")

args = parser.parse_args()

if args.version:
print("kb {}".format(__version__))
sys.exit(0)

return 0


def console_main():
main()
return 0

配合 setup.py
安装文件,就可以生成 命令工具了。

# setup.py 

entry_points='''
[console_scripts]
kb=kb.run:console_main
'
''

执行 setup.py
命令安装

python setup.py install

在 python安装目录下生成 kb
命令工具.

最新kb使用

  • install
> git clone https://github.com/SeldomQA/kb
> cd kb
> python3 setup.py install
  • 使用

查看帮助:

> kb --help
usage: kb [-h] [-v] [-u USERS] [-q REQUESTS] [url]

kb is a simple performance testing tool, Simulate concurrent requests through
a coroutine.

positional arguments:
url URL to hit

optional arguments:
-h, --help show this help message and exit
-v, --version show version
-u USERS, --users USERS
Number of concurrent users
-q REQUESTS, --requests REQUESTS
Number of requests
  • 运行

通过 kb
命令实现URL并发请求

> kb https://www.baidu.com -u 5 -q 20
URL: https://www.baidu.com
users: 5, requests: 20
============== Running ===================
100%|████████████████████████████████████████████████████████████████████████████████████████████| 5/5 [00:00<?, ?it/s]
100%|██████████████████████████████████████████████████████████████████████████████████| 20/20 [00:01<00:00, 10.45it/s]
100%|██████████████████████████████████████████████████████████████████████████████████| 20/20 [00:01<00:00, 10.41it/s]
100%|██████████████████████████████████████████████████████████████████████████████████| 20/20 [00:01<00:00, 10.31it/s]
100%|██████████████████████████████████████████████████████████████████████████████████| 20/20 [00:01<00:00, 10.20it/s]
100%|██████████████████████████████████████████████████████████████████████████████████| 20/20 [00:01<00:00, 10.14it/s]

============== Results ===================
Max: 0.2601 s
Min: 0.054 s
Average: 0.0968 s
pass: 100
fail: 0
total: 100
================== end ===================

最后

可能会有以下留言,我先来提前解答哈!

这也能叫性能测试工具?

这当然算性能测试工具了,性能测试工具的核心是模拟并发,对被测服务产生压力。这个工具做到了。只不过,很简单而已。

JMeter不香吗?xxx不香吗?

市面那么多优秀的工具/平台了,我拿来用就好了。为什么要学习开发这么鸡肋的工具。这么想也没错,只不过你要接受工资比会开发测试工具/平台的人低。如果将来要优化测试人员,你的风险会更大,因为会开发工具/平台的人完全可以把它做得更智能一些,可以不需要人来操作了,你说是不是很香呢?

开发这个有什么用?我又不做开发。

你可以不知道有一个职业叫 测试开发
,你可以不知道 测试开发
和  开发
的上限是一样高的,我说的上限是技术上限和薪资上限。

你可能不知道大公司有大量测试工具和测试相关平台都是 测试开发
自研的。如果知道还这么问,你一定是不想学了,但是又看到别人在不停的学习,从而产生了焦虑!所以,抛出一些的自认为“无比正确”的观点鼓动别人。没关系,不听、不闻、不看,不停默念我自已是最优秀。