自己編寫Python壓力測試工具

2021-10-08 06:07:34 字數 4603 閱讀 6912

寫這個東西的初衷是因為,馬上就要壓力測試,想要寫乙個工具並可以根據結果生成圖表,在該專案基礎上可以定製化開發,喜歡或對你有幫助給個start謝謝啦

完整**github位址

用到的技術和依賴包

多執行緒鎖

requests

pyecharts

配置了兩種發起請求方式(這裡如果數量過多還可以再優化多執行緒迴圈)

快速請求,將請求池中的請求全部傳送

慢速請求,在指定的時間內全部傳送完畢

def

fast_run

(begin, end)

: log.logger.warning(

"開始index{} 結束index{}"

.format

(begin, end)

) run_start_time = time.time(

) log.logger.info(

'開始發起快速非同步請求....'

)for request in syncpool[

int(begin)

:int

(end)]:

request.start(

) log.logger.warning(

"請求消耗時間 豪秒"

.format

((time.time(

)- run_start_time)

*1000))

defslow_run

(begin, end, slowtime)

: log.logger.warning(

"開始index{} 結束index{}"

.format

(begin, end)

) run_start_time = time.time(

) log.logger.info(

'開始發起慢速非同步請求....'

)if slowtime ==0:

fast_run(begin, end)

else

: waittime =

round((

(slowtime *

1000)/

len(syncpool))/

1000,3

) log.logger.info(

"延遲時間為{}毫秒"

.format

(waittime *

1000))

for request in syncpool[

int(begin)

:int

(end)]:

request.start(

) time.sleep(waittime)

log.logger.warning(

"請求消耗時間 {} 豪秒"

.format

((time.time(

)- run_start_time)

*1000

))

資料統計

def

out(length)

: log.logger.warning(f"總請求次數 次"

) log.logger.warning(f"成功請求 次"

) log.logger.warning(f"失敗請求 次"

) log.logger.warning(f"限流請求 次"

) log.logger.warning(

"成功率 %"

.format((

len(sync.success)

/int

(length))*

100)

) log.logger.warning(

"失敗率 %"

.format((

len(sync.fail)

/int

(length))*

100)

) log.logger.warning(

"限流百分比 %"

.format

(sync.limit /

int(length)

*100))

log.logger.warning(

"最長請求時間 毫秒"

.format

(max

(sync.response_time)))

log.logger.warning(

"最短請求時間 毫秒"

.format

(min

(sync.response_time)))

log.logger.warning(

"平均請求時間 毫秒"

.format

(sum

(sync.response_time)

/len

(sync.response_time)))

# 列印成功請求的request中資訊

for success in sync.success:

log.logger.debug(success.content)

# 列印失敗請求的request中資訊

for fail in sync.fail:

if fail is

notnone

: log.logger.debug(fail.content)

多執行緒請求物件

class

syncrequesttask

(threading.thread)

:def

__init__

(self, threadid, url, method, params, header, timeout=10)

: threading.thread.__init__(self)

self.setname(f"sync-"

) self.url = url

self.method = method

self.params = params

self.timeout = timeout

self.header = header

# 傳送請求

defrequest

(self)

: req =

none

try:

if self.method ==

'get'

: req = self.doget(

) self.add(req)

else

: req = self.dopost(

) self.add(req)

except exception as e:

print

(e)def

doget

(self)

: starttime = time.time(

) s = sessions.session(

) req = s.get(self.url, headers=self.header, timeout=self.timeout)

data_build(self.getname(

), time.time(

)- starttime)

req.close(

)return req

defdopost

(self)

:# request_body = json.dumps(self.params)

s = sessions.session(

) starttime = time.time(

) req = s.post(self.url, data=self.params, headers=self.header, timeout=self.timeout)

data_build(self.getname(

), time.time(

)- starttime)

req.close(

)return req

@staticmethod

defadd

(request)

:global lock

global limit

lock.acquire(

)if request.status_code ==

200:

elif request.status_code ==

429:

limit +=

1else

: lock.release(

)def

run(self)

:# 開始傳送請求

用Python編寫WEB伺服器壓力測試工具

code by 李嘉 不對因使用 產生任何後果負任何責任 需要測試的 url 列表,每一次的訪問,我們隨機取乙個 urls test?page test2?orderby a page test2?orderby d page max page 10000 server name 192.168.0...

用Python編寫WEB伺服器壓力測試工具

code by 李嘉 不對因使用 產生任何後果負任何責任 需要測試的 url 列表,每一次的訪問,我們隨機取乙個 urls test?page test2?orderby a page test2?orderby d page max page 10000 server name 192.168.0...

Python壓力測試工具 Locust

locust一款開源效能測試工具,易於使用 指令碼化 可擴充套件,對開發者非常友好。特性 pip install locust import json import tornado.web import tornado.ioloop login false 是否登入 deffib n 計算斐波那契數...