欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

python 寫(xiě)一個(gè)性能測(cè)試工具(一)

 更新時(shí)間:2020年10月24日 10:59:07   作者:蟲(chóng)師  
這篇文章主要介紹了利用python 寫(xiě)一個(gè)性能測(cè)試工具,幫助大家更好的理解和使用python,感興趣的朋友可以了解下

國(guó)慶重新學(xué)習(xí)了一下go的gin高性能測(cè)試框架。

用JMeter來(lái)測(cè)試gin與flask接口的性能,差別很大。

為什么我自己不嘗試寫(xiě)一個(gè)性能工具,性能工具的核心就是 并發(fā) 和 請(qǐng)求。

請(qǐng)求可以選擇Python的requests庫(kù)。

并發(fā)可以通過(guò)python的 進(jìn)程、線(xiàn)程、協(xié)程模擬。

這么一想,也不是很難了,上手?jǐn)]一個(gè)。

依賴(lài)庫(kù)

requests==2.22.0
gevent==20.9.0
numpy==1.19.2

requests 大家并不陌生,HTTP請(qǐng)求庫(kù)。

gevent是python協(xié)程庫(kù),通過(guò)協(xié)程模擬并發(fā)更節(jié)省資源,在同樣配置下能模擬更多的并發(fā)。

numpy 是python的數(shù)據(jù)計(jì)算庫(kù),提供大量組數(shù)和矩陣運(yùn)算,這里用它求列表的平均值。

實(shí)現(xiàn)腳本

好了,接下來(lái)開(kāi)始上手寫(xiě)代碼了。

from __future__ import print_function
import time
import gevent
from gevent import monkey
monkey.patch_all()

import requests
from numpy import mean


users = 10 # 用戶(hù)數(shù)
numbers = 100 # 請(qǐng)求次數(shù)
req_url = "http://127.0.0.1:8080/user/tom" # 請(qǐng)求URL

print("請(qǐng)求URL: {url}".format(url=req_url))

print("用戶(hù)數(shù):{},循環(huán)次數(shù): {}".format(users, numbers))

print("============== Running ===================")

pass_number = 0
fail_number = 0

run_time_list = []

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

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


jobs = [gevent.spawn(running, req_url) for _url in range(users)]
gevent.wait(jobs)

print("\n============== Results ===================")
print("最大:    {} s".format(str(max(run_time_list))))
print("最小:    {} s".format(str(min(run_time_list))))
print("平均:    {} s".format(str(round(mean(run_time_list), 4))))
print("請(qǐng)求成功", pass_number)
print("請(qǐng)求失敗", fail_number)
print("============== end ===================")

設(shè)計(jì)思路

在JMeter中創(chuàng)建線(xiàn)程組有兩個(gè)參數(shù) 線(xiàn)程數(shù)和 循環(huán)數(shù),即 用戶(hù)數(shù) 和請(qǐng)求數(shù),設(shè)置多少個(gè)用戶(hù),每個(gè)用戶(hù)用戶(hù)跑多少次,用戶(hù)數(shù)通過(guò)協(xié)程模擬,每次用戶(hù)運(yùn)行次數(shù)通過(guò)for循環(huán)實(shí)現(xiàn)。

至于請(qǐng)求就比較簡(jiǎn)單了,直接通過(guò)requests發(fā)送請(qǐng)求。通過(guò)判斷影響的狀態(tài)碼是否為200來(lái)判斷是否成功,通過(guò)分別計(jì)算成功和失敗的請(qǐng)求個(gè)數(shù)。

關(guān)于請(qǐng)求時(shí)間統(tǒng)計(jì),在每次請(qǐng)求前后獲得當(dāng)前時(shí)間戳,然后計(jì)算時(shí)間差就是單個(gè)接口的調(diào)用時(shí)間。最大,最小,平均通過(guò)計(jì)算就可輕松的得到。

> python3 ab.py

請(qǐng)求URL: http://127.0.0.1:8080/user/tom
用戶(hù)數(shù):10,循環(huán)次數(shù): 100
============== Running ===================
...............................................................................................................
...............................................................................................................
...............................................................................................................
...............................................................................................................
...............................................................................................................
...............................................................................................................
...............................................................................................................
...............................................................................................................
...............................................................................................................
.
============== Results ===================
最大:    0.0352 s
最小:    0.0036 s
平均:    0.0204 s
請(qǐng)求成功 1000
請(qǐng)求失敗 0
============== end ===================

后續(xù)

把a(bǔ)b.py腳本做成 ab 命令行工具。

支持更多的請(qǐng)求類(lèi)型(get/post/put/delete)和參數(shù)。

更多統(tǒng)計(jì)維度,吞吐量、吞吐率

增加啟動(dòng)時(shí)間,思考時(shí)間等

...

以上就是python 寫(xiě)一個(gè)性能測(cè)試工具(一)的詳細(xì)內(nèi)容,更多關(guān)于python 性能測(cè)試工具的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

最新評(píng)論