用python做簡單的介面壓力測試

2021-09-27 01:54:28 字數 4452 閱讀 7239

乙個多月沒有更博了,最近研究了一下介面的壓力測試,主要來說就是連續頻繁的對介面的呼叫,來測試介面的響應速度、返回結果,找到介面的效能瓶頸,最大承受極限等。

做介面壓力測試的方法和工具很多,比較常用的工具有postman、jmeter,這兩種都是介面形式的操作,具體可以參考這篇文章

強大的介面測試與壓力測試工具——postman&jmeter

當然也可以使用**來跑~~我懷疑你在裝逼,但是沒有證據!

首先我們先要了解要用到http.client.httpconnection網路請求,可以去這篇文章看具體使用方法

然後就是需要到執行緒的支援,最後是對執行結果的輸出分析。

一、引入所需庫和設定需要到的引數

host1 = "www.baidu.com"; #主機位址 例如192.168.1.101 nanning.anjuke.com,

host_l = "deve.***.com"

host_ip = "***.xx.***.xx" #ip位址

port = 9999 #埠

method =

uri = "/api/web/***" #相對位址

total = 0 #總數

succ = 0 #響應成功數

fail = 0 #響應失敗數

except = 0 #響應異常數

maxtime=0 #最大響應時間

mintime=100 #最小響應時間,初始值為100秒

gt3=0 #統計3秒內響應的

lt3=0 #統計大於3秒響應的

# 併發的執行緒數

thread_count = 5這裡請根據真實的介面位址進行配置,有需要到token的請自行拿到token值,不需要頭部的的可以在下面中寫headers = {}

二、建立乙個 threading.thread 的派生類

class requestthread(threading.thread):

# 建構函式

def __init__(self, thread_name):

threading.thread.__init__(self)

self.test_count = 0

print ("**********=task init**********=method=",method[3])

# 執行緒執行的入口函式

def run(self):

self.test_performace()

def test_performace(self):

global total

global succ

global fail

global except

global gt3

global lt3

try:

st = time.time()

conn = http.client.httpconnection(host1,port) #若沒有port請刪掉這個引數

req = conn.request(method[1], uri, body = {}, headers = rqheaders) # or post headers=rqheaders

res = conn.getresponse()

#print ('msg:', res.msg)

#print ('headers:', res.getheaders())

print("res.status =",res.status)

print('res.read =',res.read().decode('utf-8'))

start_time

if res.status == 200:

total = total+1

succ = succ+1

print("total = ",total)

else:

total = total+1

fail = fail+1

print("total = ",total)

time_span = time.time()-st

print ("%s:%f\n"%(self.name,time_span))

self.maxtime(time_span)

self.mintime(time_span)

if time_span>3:

gt3 = gt3+1

else:

lt3 = lt3+1

except exception as e:

print("e =",e)

total = total+1

except = except+1

conn.close()

def maxtime(self,ts):

global maxtime

print(ts)

if ts>maxtime:

maxtime=ts

def mintime(self,ts):

global mintime

if tsres.read().decode('utf-8')這個方法會返回介面響應的所有內容

三、使用派生類方法寫執行

# main **開始

print ("**********=task start**********=")

# 開始的時間

start_time = time.time()

i = 1

while i <= thread_count:

t = requestthread("thread" + str(i))

t.start()

i = i + 1

t=0#併發數所有都完成或大於60秒就結束

while total60:

print ("total:%d,succ:%d,fail:%d,except:%d\n"%(total,succ,fail,except))

print (host,uri)

t = t+1

time.sleep(2)

time.sleep(2)

print ("**********=task end**********=")

print ("total:%d,succ:%d,fail:%d,except:%d"%(total,succ,fail,except))

print ("response maxtime:",maxtime)

print ("response mintime:",mintime)

print ("great than 3 seconds:%d,percent:%0.2f"%(gt3,float(gt3)/total))

print ("less than 3 seconds:%d,percent:%0.2f"%(lt3,float(lt3)/total))

四、上面就是所有的**,然後我們開啟cmd來執行這個指令碼,這裡設定thread_count = 1,即執行一次請求

cmd進入到相應的py資料夾下,執行指令碼結果如下所示:

f:\pythontest>python testinte***cepressure.py

**********=task start**********=

**********=task init**********=method= options

res.status = 200

res.read =

total =  1

thread-1:0.149927

0.14992666244506836

**********=task end**********=

total:1,succ:1,fail:0,except:0

response maxtime: 0.14992666244506836

response mintime: 0.14992666244506836

great than 3 seconds:0,percent:0.00

less than 3 seconds:1,percent:1.00

JMeter做http介面壓力測試

測前準備 用jmeter做介面的壓測非常方便,在壓測之前我們需要考慮這幾個方面 場景設定 場景分單場景和混合場景。針對乙個介面做壓力測試就是單場景,針對乙個流程做壓力測試的時候就是混合場景,需要多個介面共同作用。壓測時間設定 通常時間設為10 15 分鐘,如果涉及疲勞測試的話時間可根據實際情況設定,...

用nc做網路壓力測試

1 資料的收發正常,沒有出現丟包 2 平均資料接髮速率為 112mb s,基本用完的千兆頻寬。測試方法 1 通過ftp拷貝3.6g centos安裝包到102服務中,大小為3.6g,通過無線用時為5分鐘 2 通過nc命令建立tcp服務,並儲存接收到資料到檔案 3 另一台打壓伺服器通過nc命令建立客戶...

如何使用ab做介面壓力測試

壓力測試是通過不斷向被測系統施加 壓力 測試系統在壓力情況下的效能表現,考察當前軟硬體環境下系統所能承受的最大負荷並幫助找出系統瓶頸所在,也就是我們可以模擬巨大的工作負荷以檢視應用程式在峰值使用情況下如何執行操作。壓力 負載 效能測試之間的區別壓力測試 stresstesting 也稱為強度測試,通...