7

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

 3 years ago
source link: https://mp.weixin.qq.com/s?__biz=MzIxMTg4NDg0MA%3D%3D&%3Bmid=2247485440&%3Bidx=1&%3Bsn=c1f985577510665acb25b3353279d362
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

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

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

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

显示性能测试进度

前些天逛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 命令工具.

aMRRnmj.png!mobile

最新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不香吗?

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

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

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

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


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK