python實現(xiàn)接口并發(fā)測試腳本
常用的網(wǎng)站性能測試指標有:并發(fā)數(shù)、響應時間、吞吐量、性能計數(shù)器等。
1、并發(fā)數(shù)
并發(fā)數(shù)是指系統(tǒng)同時能處理的請求數(shù)量,這個也是反應了系統(tǒng)的負載能力。
2、響應時間
響應時間是一個系統(tǒng)最重要的指標之一,它的數(shù)值大小直接反應了系統(tǒng)的快慢。響應時間是指執(zhí)行一個請求從開始到最后收到響應數(shù)據(jù)所花費的總體時間。
3、吞吐量
吞吐量是指單位時間內(nèi)系統(tǒng)能處理的請求數(shù)量,體現(xiàn)系統(tǒng)處理請求的能力,這是目前最常用的性能測試指標。
QPS(每秒查詢數(shù))、TPS(每秒事務數(shù))是吞吐量的常用量化指標,另外還有HPS(每秒HTTP請求數(shù))。
跟吞吐量有關的幾個重要是:并發(fā)數(shù)、響應時間。
QPS(TPS),并發(fā)數(shù)、響應時間它們?nèi)咧g的關系是:
QPS(TPS)= 并發(fā)數(shù)/平均響應時間
4、性能計數(shù)器
性能計數(shù)器是描述服務器或操作系統(tǒng)性能的一些數(shù)據(jù)指標,如使用內(nèi)存數(shù)、進程時間,在性能測試中發(fā)揮著"監(jiān)控和分析"的作用,尤其是在分析統(tǒng)統(tǒng)可擴展性、進行新能瓶頸定位時有著非常關鍵的作用。
Linux中可以使用top或者uptime命令看到當前系統(tǒng)的負載及資源利用率情況。
資源利用率:指系統(tǒng)各種資源的使用情況,如cpu占用率為68%,內(nèi)存占用率為55%,一般使用"資源實際使用/總的資源可用量"形成資源利用率。
壓測腳本(下單的接口):
#!/usr/bin/env python
#-*- coding:utf-8 -*-
import requests,time,json,threading,random
class Presstest(object):
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.121 Safari/537.36',
'Content-Type': 'application/json; charset=UTF-8',
}
def __init__(self,login_url,press_url,phone="1376193000",password="123456"):
self.login_url = login_url
self.press_url = press_url
self.phone = phone
self.password = password
self.session = requests.Session()
self.session.headers = self.headers
def login(self):
'''登陸獲取session'''
data = data = {'t': int(time.time() * 1000), 'userName': self.phone, 'passWord': self.password}
res = self.session.post(self.login_url,data=json.dumps(data))
XToken = res.json().get('data').get('companyToken')
self.session.headers['X-Token'] = XToken
def testinterface(self):
'''壓測接口'''
self.session.headers['X-UnionId'] = 'of6uw1CUVhP533sQok'
data = {"id": int(''.join(str(random.choice(range(10))) for _ in range(10))),
"openId": "oMr0c5LGJjlTc", "addressId": 10, "shipType": "SELF", "totalAmount": 5,
"receivable": 5, "carts": [
{"amount": 1, "barcode": "1234567890", "skuId": 1, "spec": "34", "itemAmount": 5, "price": 0,
"cover": "xxxx-dd.oss-cn-shanghai.aliyuncs.com/dfc91fd067ac464c096c90af33a196a5.png",
"name": "沙宣洗發(fā)水", "packingType": "瓶", "placeOfOrigin": "上海", "productId": "310153323435134976",
"retailPrice": 5, "suitableAge": "1-100"}], "formId": "the formId is a mock one", "comments": "aa"}
global ERROR_NUM
try:
html = self.session.post(self.press_url, data=json.dumps(data))
if html.json().get('code') != 0:
print(html.json())
ERROR_NUM += 1
except Exception as e:
print(e)
ERROR_NUM += 1
def testonework(self):
'''一次并發(fā)處理單個任務'''
i = 0
while i < ONE_WORKER_NUM:
i += 1
self.work()
time.sleep(LOOP_SLEEP)
def run(self):
'''使用多線程進程并發(fā)測試'''
t1 = time.time()
Threads = []
for i in range(THREAD_NUM):
t = threading.Thread(target=self.testonework, name="T" + str(i))
t.setDaemon(True)
Threads.append(t)
for t in Threads:
t.start()
for t in Threads:
t.join()
t2 = time.time()
print("===============壓測結果===================")
print("URL:", self.press_url)
print("任務數(shù)量:", THREAD_NUM, "*", ONE_WORKER_NUM, "=", THREAD_NUM * ONE_WORKER_NUM)
print("總耗時(秒):", t2 - t1)
print("每次請求耗時(秒):", (t2 - t1) / (THREAD_NUM * ONE_WORKER_NUM))
print("每秒承載請求數(shù):", 1 / ((t2 - t1) / (THREAD_NUM * ONE_WORKER_NUM)))
print("錯誤數(shù)量:", ERROR_NUM)
if __name__ == '__main__':
login_url = 'https://ds.xxxxx.com/sys/sysUser/login'
press_url = 'https://ds.xxxxx.com/weshop/order/checkout'
phone = "1376193000"
password = "123456"
THREAD_NUM = 1 # 并發(fā)線程總數(shù)
ONE_WORKER_NUM = 5 # 每個線程的循環(huán)次數(shù)
LOOP_SLEEP = 0.1 # 每次請求時間間隔(秒)
ERROR_NUM = 0 # 出錯數(shù)
obj = Presstest(login_url=login_url,press_url=press_url,phone=phone,password=password)
obj.login()
obj.run()
輸出結果:
===============壓測結果=================== URL: https://ds.xxxxx.com/weshop/order/checkout 任務數(shù)量: 1 * 5 = 5 總耗時(秒): 1.9810078144073486 每次請求耗時(秒): 0.39620156288146974 每秒承載請求數(shù): 2.5239678327547805 錯誤數(shù)量: 0
以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
相關文章
python改變?nèi)罩?logging)存放位置的示例
示例主要解決的問題是通過傳入日志文件參數(shù)的方式來改變?nèi)罩镜拇娣盼恢?需要的朋友可以參考下2014-03-03
Python趣味實戰(zhàn)之手把手教你實現(xiàn)舉牌小人生成器
前幾天寫了一個嬰兒級別的爬蟲圖文教程,大家很喜歡.恰好周末看到有人咨詢這個 “舉牌小人” 怎么做?基于此,我想借此為大家再寫一篇 “爬蟲應用” 的文章,教你制作一個好玩兒的 “舉牌小人” ,需要的朋友可以參考下2021-06-06
python2.7讀取文件夾下所有文件名稱及內(nèi)容的方法
python,本身來說是一門高級編程語言,python它入門簡單,有基礎的學起來很快就能有簡單的應用,但是在非常高的抽象計算中,高級的python程序設計也是非常難學的。接下來給大家介紹python2.7讀取文件夾下所有文件名稱及內(nèi)容的方法,一起看看吧2018-02-02
selenium+python配置chrome瀏覽器的選項的實現(xiàn)
這篇文章主要介紹了selenium+python配置chrome瀏覽器的選項的實現(xiàn)。文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2020-03-03
python使用tkinter模塊實現(xiàn)文件選擇功能
這篇文章主要介紹了python使用tkinter模塊實現(xiàn)文件選擇功能,文章圍繞主題展開詳細的內(nèi)容介紹,具有一定的參考價值,需要的小伙伴可以參考一下2022-06-06

