最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

如何用python做簡單的接口壓力測試

 更新時間:2023年09月05日 14:07:23   作者:星旅zl  
這篇文章主要介紹了如何用python做簡單的接口壓力測試問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教

最近研究了一下接口的壓力測試,主要來說就是連續(xù)頻繁的對接口的調(diào)用,來測試接口的響應速度、返回結果,找到接口的性能瓶頸,最大承受極限等。

做接口壓力測試的方法和工具很多,比較常用的工具有postman、jmeter,這兩種都是界面形式的操作

當然也可以使用代碼來跑~~我懷疑你在裝逼,但是沒有證據(jù)!

那接下來就是如何用python腳本進行接口測試了,這里使用的是python3,相關的下載安裝和環(huán)境配置這里不做多說,很多文章都有介紹。

首先我們先要了解要用到http.client.HTTPConnection網(wǎng)絡請求,可以去這篇文章看具體使用方法

python3 http.client 網(wǎng)絡請求方式

然后就是需要到線程的支持,最后是對執(zhí)行結果的輸出分析。

注:下文分段解釋,但是執(zhí)行時請放在一個.py文件下(代碼有參考借鑒一些別的文章)

一、引入所需庫和設置需要到的參數(shù)

import threading
import time
import http.client
import urllib
import requests
from requests.packages.urllib3.exceptions import InsecureRequestWarning
pararms = urllib.parse.urlencode({'token':'xxx'})
rqheaders={ #'DeviceToken':'xxxxxxxxx','OSVersion':'1.0.3','AppVersion':'14',
'Accept':'application/json, text/plain, */*',
'Accept-Encoding':'gzip, deflate, br',
'Accept-Language':'zh-CN,zh;q=0.9',
'Host':'deve.xxx.com',
'Origin':'https://www.xxx.com',
'Referer':'https://www.xxx.com/xxx_test/',
'token':'xxx',
'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.157 Safari/537.36'}
HOST1 = "www.baidu.com"; #主機地址 例如192.168.1.101   nanning.anjuke.com,
HOST_L = "deve.xxx.com"
HOST_IP = "xxx.xx.xxx.xx"  #ip地址
PORT = 9999 #端口
METHOD = {1:"GET",2:"POST",3:"OPTIONS"}
URI = "/api/web/XXX" #相對地址
TOTAL = 0 #總數(shù)
SUCC = 0 #響應成功數(shù)
FAIL = 0 #響應失敗數(shù)
EXCEPT = 0 #響應異常數(shù)
MAXTIME=0 #最大響應時間
MINTIME=100 #最小響應時間,初始值為100秒
GT3=0 #統(tǒng)計3秒內(nèi)響應的
LT3=0 #統(tǒng)計大于3秒響應的
# 并發(fā)的線程數(shù)
thread_count = 5

這里請根據(jù)真實的接口地址進行配置,有需要到token的請自行拿到token值,不需要頭部的的可以在下面中寫headers = {}

二、創(chuàng)建一個 threading.Thread 的派生類

class RequestThread(threading.Thread):
    # 構造函數(shù)
    def __init__(self, thread_name):
        threading.Thread.__init__(self)
        self.test_count = 0
        print ("===========task init===========METHOD=",METHOD[3])
    # 線程運行的入口函數(shù)
    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請刪掉這個參數(shù)
                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 ts<MINTIME:
                MINTIME=ts

res.read().decode('utf-8')這個方法會返回接口響應的所有內(nèi)容

三、使用派生類方法寫執(zhí)行

# 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
#并發(fā)數(shù)所有都完成或大于60秒就結束
while TOTAL<thread_count|t>60:
        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,即執(zhí)行一次請求

cmd進入到相應的py文件夾下,運行腳本結果如下所示:

F:\pythonTest>python testInterfacePressure.py
===========task start===========
===========task init===========METHOD= OPTIONS
res.status = 200
res.read = {..........,"code":1,"message":"數(shù)據(jù)讀取成功","status":200}

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

總結

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關文章

  • tensorflow學習教程之文本分類詳析

    tensorflow學習教程之文本分類詳析

    初學tensorflow,借鑒了很多別人的經(jīng)驗,參考博客對評論分類(感謝博主的一系列好文),本人也嘗試著實現(xiàn)了對文本數(shù)據(jù)的分類,下面這篇文章主要給大家介紹了關于tensorflow學習教程之文本分類的相關資料,需要的朋友可以參考下
    2018-08-08
  • Python技能樹共建之python?urllib?模塊

    Python技能樹共建之python?urllib?模塊

    這篇文章介紹了Python技能樹共建之python?urllib?模塊,urllib模塊是?Python?標準庫,更多相關介紹需要的小伙伴可以參考下面文章的詳細內(nèi)容
    2022-05-05
  • 基于Python實現(xiàn)一個高效本地文件智能搜索工具

    基于Python實現(xiàn)一個高效本地文件智能搜索工具

    在日常工作中,我們經(jīng)常需要在本地磁盤中搜索特定文件,本文將基于Python開發(fā)一款輕量高效的文件智能搜索工具,文中的示例代碼講解詳細,需要的可以了解下
    2025-12-12
  • 關于Python3爬蟲利器Appium的安裝步驟

    關于Python3爬蟲利器Appium的安裝步驟

    在本篇文章里小編給大家整理的是一篇關于Python3爬蟲利器Appium的安裝步驟,需要的朋友們可以跟著參考下。
    2020-07-07
  • Python實現(xiàn)開根號的五種方式

    Python實現(xiàn)開根號的五種方式

    在日常數(shù)據(jù)處理、數(shù)學計算甚至算法題中,開根號是一個高頻操作,但你知道嗎?Python中實現(xiàn)開根號的方式遠不止一種!本文總結了5種常用方法,感興趣的小伙伴跟著小編一起來看看吧
    2025-08-08
  • python?import?logging日志(日志封裝)詳解

    python?import?logging日志(日志封裝)詳解

    文章介紹了如何使用Python的logging模塊創(chuàng)建和配置日志類,包括初始化logger對象、設置日志級別和格式、自動分割日志文件等,還展示了如何在多個文件中使用日志功能,并通過配置文件進行日志配置
    2026-01-01
  • 基于PyQt5實現(xiàn)一個串口接數(shù)據(jù)波形顯示工具

    基于PyQt5實現(xiàn)一個串口接數(shù)據(jù)波形顯示工具

    這篇文章主要為大家詳細介紹了如何利用PyQt5實現(xiàn)一個串口接數(shù)據(jù)波形顯示工具,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起了解一下
    2023-01-01
  • matplotlib繪制多子圖共享鼠標光標的方法示例

    matplotlib繪制多子圖共享鼠標光標的方法示例

    這篇文章主要介紹了matplotlib繪制多子圖共享鼠標光標的方法示例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-01-01
  • python科學計算之scipy——optimize用法

    python科學計算之scipy——optimize用法

    今天小編就為大家分享一篇python科學計算之scipy——optimize用法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-11-11
  • 詳解如何使用Python網(wǎng)絡爬蟲獲取招聘信息

    詳解如何使用Python網(wǎng)絡爬蟲獲取招聘信息

    在疫情階段,想找一份不錯的工作變得更為困難,很多人會選擇去網(wǎng)上看招聘信息??墒钦衅感畔⒂幸恍┦清e綜復雜的。本文將為大家介紹用Python爬蟲獲取招聘信息的方法,需要的可以參考一下
    2022-03-03

最新評論

平舆县| 来安县| 章丘市| 奉化市| 台东市| 舒城县| 舒城县| 河源市| 漳平市| 萨嘎县| 福建省| 德州市| 普兰店市| 彰化市| 安岳县| 稷山县| 遂平县| 花垣县| 耒阳市| 南涧| 贵港市| 拜泉县| 霞浦县| 乐陵市| 安化县| 名山县| 丰原市| 土默特左旗| 双牌县| 晋江市| 五原县| 长宁县| 福鼎市| 广宗县| 嘉鱼县| 泾阳县| 长丰县| 海门市| 奈曼旗| 磐安县| 乳源|