国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Python接口并發(fā)壓力測試(單接口,多接口參數(shù)化)+異步aiohttp

這篇具有很好參考價(jià)值的文章主要介紹了Python接口并發(fā)壓力測試(單接口,多接口參數(shù)化)+異步aiohttp。希望對大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

一 單接口

#!/usr/bin/env python
# -*- coding:utf-8 -*-

import json
import random
import datetime

import requests
import threading
import time


class Presstest(object):
    headers = {
        'Content-Type': 'application/json; charset=UTF-8'
    }

    def __init__(self, login_url, press_url, phone, password):
        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 = {"mobile": self.phone, "pwd": self.password, "type": "1"}
        res = self.session.post(self.login_url, data=json.dumps(data))
        XToken = res.json().get('data').get('token')
        self.session.headers['token'] = XToken

    def testinterface(self):
        '''壓測接口'''
        # self.session.headers['X-UnionId'] = 'of6uw1CUVhP533sQok'
        data = {"id": 418}
        global ERROR_NUM
        try:
            print('開始調(diào)接口:', datetime.datetime.now().strftime('%Y-%m-%d- %H:%M:%S:%f'))
            response = self.session.post(self.press_url, data=json.dumps(data))
            if response.json().get('code') != 0:
                print(response.json())
                ERROR_NUM += 1
        except Exception as e:
            print(e)
            ERROR_NUM += 1

    def testonework(self):
        '''一次并發(fā)處理單個(gè)任務(wù)'''
        i = 0
        while i < ONE_WORKER_NUM:
            i += 1
            self.testinterface()
        time.sleep(LOOP_SLEEP)

    def run(self):
        '''使用多線程進(jìn)程并發(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("===============壓測結(jié)果===================")
        print("URL:", self.press_url)
        print("任務(wù)數(shù)量:", THREAD_NUM, "*", ONE_WORKER_NUM, "=", THREAD_NUM * ONE_WORKER_NUM)
        print("總耗時(shí)(秒):", t2 - t1)
        print("每次請求耗時(shí)(秒):", (t2 - t1) / (THREAD_NUM * ONE_WORKER_NUM))
        print("每秒承載請求數(shù):", 1 / ((t2 - t1) / (THREAD_NUM * ONE_WORKER_NUM)))
        print("錯(cuò)誤數(shù)量:", ERROR_NUM)


if __name__ == '__main__':
    login_url = 'http://test/sale/login/login'
    press_url = 'http://test/sale/hsOrder/afterExamineAdopt'
    phone = "150000000"
    password = "123456"

    THREAD_NUM = 1  # 并發(fā)線程總數(shù)
    ONE_WORKER_NUM = 5  # 每個(gè)線程的循環(huán)次數(shù)
    LOOP_SLEEP = 0.1  # 每次請求時(shí)間間隔(秒)
    ERROR_NUM = 0  # 出錯(cuò)數(shù)

    obj = Presstest(login_url=login_url, press_url=press_url, phone=phone, password=password)
    obj.login()
    obj.run()

二 多接口參數(shù)化(實(shí)現(xiàn)多接口參數(shù)化并發(fā),data和url必須一一對應(yīng),且THREAD_NUM并發(fā)線程數(shù)不能大于url_list長度)

#!/usr/bin/env python
# -*- coding:utf-8 -*-

import json
import random
import datetime

import requests
import threading
import time


class Presstest(object):
    headers = {
        'Content-Type': 'application/json; charset=UTF-8'
    }

    def __init__(self, login_url, press_url, phone, password):
        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 = {"mobile": self.phone, "pwd": self.password, "type": "1"}
        res = self.session.post(self.login_url, data=json.dumps(data))
        XToken = res.json().get('data').get('token')
        self.session.headers['token'] = XToken

    def testinterface(self):
        '''壓測接口'''
        # self.session.headers['X-UnionId'] = 'of6uw1CUVhP533sQok'
        data = {"id": 418}
        global ERROR_NUM
        try:
            print('開始調(diào)接口111111:', datetime.datetime.now().strftime('%Y-%m-%d- %H:%M:%S:%f'))
            response = self.session.post(self.press_url, data=json.dumps(data))
            if response.json().get('code') != 0:
                print(response.json())
                ERROR_NUM += 1
        except Exception as e:
            print(e)
            ERROR_NUM += 1

    def testinterface2(self, url, data):
        '''壓測接口'''
        # self.session.headers['X-UnionId'] = 'of6uw1CUVhP533sQok'
        # data = {"orderId": 1179, "cause": "讓人"}
        global ERROR_NUM
        try:
            print('開始調(diào)接口2222222:', datetime.datetime.now().strftime('%Y-%m-%d- %H:%M:%S:%f'))
            print("接口請求入?yún)rl,data==", url, data)
            response = self.session.post(url,
                                         data=json.dumps(data))
            if response.json().get('code') != 0:
                print(response.json())
                ERROR_NUM += 1
        except Exception as e:
            print(e)
            ERROR_NUM += 1

    def testonework(self, url, data):
        '''一次并發(fā)處理單個(gè)任務(wù)'''
        i = 0
        while i < ONE_WORKER_NUM:
            i += 1
            self.testinterface2(url, data)
            self.testinterface()
        time.sleep(LOOP_SLEEP)

    def run(self):
        '''使用多線程進(jìn)程并發(fā)測試'''
        t1 = time.time()
        Threads = []
        # 實(shí)現(xiàn)多接口參數(shù)化并發(fā),data和url必須一一對應(yīng),且THREAD_NUM并發(fā)線程數(shù)不能大于url_list長度
        data_list = [{"orderId": 1194, "cause": "讓人"},
                     {"orderId": 1193, "cause": "讓人"},
                     {"orderId": 1192, "cause": "讓人"}]
        url_list = ["http://test/api1",
                    "http://test/api2",
                    "http://test/api3"]
        list_arr = list(range(0, len(data_list)))
        print("index========", list_arr)
        for i in range(THREAD_NUM):
            index = random.choice(list_arr)
            list_arr.remove(index)
            t = threading.Thread(target=self.testonework(url_list[index], data_list[index]), 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("===============壓測結(jié)果===================")
        print("URL:", self.press_url)
        print("任務(wù)數(shù)量:", THREAD_NUM, "*", ONE_WORKER_NUM, "=", THREAD_NUM * ONE_WORKER_NUM)
        print("總耗時(shí)(秒):", t2 - t1)
        print("每次請求耗時(shí)(秒):", (t2 - t1) / (THREAD_NUM * ONE_WORKER_NUM))
        print("每秒承載請求數(shù):", 1 / ((t2 - t1) / (THREAD_NUM * ONE_WORKER_NUM)))
        print("錯(cuò)誤數(shù)量:", ERROR_NUM)


if __name__ == '__main__':
    login_url = 'http://test/login'
    press_url = 'http://test/afterExamineAdopt'
    phone = "1500000000"
    password = "123456"

    THREAD_NUM = 3  # 并發(fā)線程總數(shù)
    ONE_WORKER_NUM = 1  # 每個(gè)線程的循環(huán)次數(shù)
    LOOP_SLEEP = 0  # 每次請求時(shí)間間隔(秒)
    ERROR_NUM = 0  # 出錯(cuò)數(shù)

    obj = Presstest(login_url=login_url, press_url=press_url, phone=phone, password=password)
    obj.login()
    obj.run()

三 多接口并發(fā)調(diào)用方法二

import datetime
import json

import requests
import threading
import time


def post_request(url, data):
    start_time = time.time()
    print('開始調(diào)接口111111:', datetime.datetime.now().strftime('%Y-%m-%d- %H:%M:%S:%f'))
    response = requests.post(url, data=json.dumps(data), headers={"Content-Type": "application/json;charset=UTF-8"})
    print('調(diào)用結(jié)束:', datetime.datetime.now().strftime('%Y-%m-%d- %H:%M:%S:%f'))
    end_time = time.time()
    duration = end_time - start_time
    print("Response from", url, ":", data, response.text)
    print("Request duration:", duration * 1000, "ms")


data = [{"orderId": 1194, "cause": "讓人"},
        {"orderId": 1193, "cause": "讓人"},
        {"orderId": 1192, "cause": "讓人"}]
urls = ["http://test/api1",
        "http://test/api2",
        "http://test/api3"]

threads = []
for i in range(len(urls)):
    t = threading.Thread(target=post_request, args=(urls[i], data[i]))
    threads.append(t)
    t.start()

for t in threads:
    t.join()

四 多接口同時(shí)并發(fā)(相當(dāng)于集合點(diǎn))(異步實(shí)現(xiàn)集合點(diǎn))

import asyncio
import datetime
import aiohttp
async def make_request(session, url, data):
    print('開始調(diào)接口:', datetime.datetime.now().strftime('%Y-%m-%d- %H:%M:%S:%f'))
    async with session.post(url, json=data) as response:
        result = await response.json(content_type='text/html', encoding='utf-8')
        return result


async def run_concurrent_requests(urls, datas, max_concurrent_requests):
    headers = {
        "Content-Type": "application/json;charset=UTF-8"
    }
    tasks = []
    async with aiohttp.ClientSession() as session:
        session.headers = headers
        session.headers["token"] = "BEE010F2A6D0696DD90A82FF28B21AF2"
        sem = asyncio.Semaphore(max_concurrent_requests)
        list_arr = list(range(0, len(datas)))
        for index in list_arr:
            await sem.acquire()
            task = asyncio.ensure_future(make_request(session, urls[index], datas[index]))
            task.add_done_callback(lambda t: sem.release())
            tasks.append(task)
        responses = await asyncio.gather(*tasks)
        return responses


if __name__ == '__main__':
    urls = ['http://test/SubmitSettlement'] * 5
    datas = [{"idArr": [2086]}, {"idArr": [2090]}, {"idArr": [2089]}, {"idArr": [2086]}, {"idArr": [2090]}]
    max_concurrent_requests = 5
    loop = asyncio.get_event_loop()
    responses = loop.run_until_complete(run_concurrent_requests(urls, datas, max_concurrent_requests))
    print(responses)

異步接口怎么壓測,python,python,壓力測試文章來源地址http://www.zghlxwxcb.cn/news/detail-738112.html

到了這里,關(guān)于Python接口并發(fā)壓力測試(單接口,多接口參數(shù)化)+異步aiohttp的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • python實(shí)現(xiàn)接口壓力測試

    python實(shí)現(xiàn)接口壓力測試

    直接上代碼: 輸出20次壓測結(jié)果如下:

    2024年02月17日
    瀏覽(15)
  • 接口自動(dòng)化測試框架(pytest+allure+aiohttp+ 用例自動(dòng)生成)

    近期準(zhǔn)備優(yōu)先做接口測試的覆蓋,為此需要開發(fā)一個(gè)測試框架,經(jīng)過思考,這次依然想做點(diǎn)兒不一樣的東西。 接口測試是比較講究效率的,測試人員會(huì)希望很快能得到結(jié)果反饋,然而接口的數(shù)量一般都很多,而且會(huì)越來越多,所以提高執(zhí)行效率很有必要 接口測試的用例其實(shí)

    2024年02月07日
    瀏覽(23)
  • 接口自動(dòng)化測試框架開發(fā)(pytest+allure+aiohttp+ 用例自動(dòng)生成)

    接口自動(dòng)化測試框架開發(fā)(pytest+allure+aiohttp+ 用例自動(dòng)生成)

    近期準(zhǔn)備優(yōu)先做接口測試的覆蓋,為此需要開發(fā)一個(gè)測試框架,經(jīng)過思考,這次依然想做點(diǎn)兒不一樣的東西。 接口測試是比較講究效率的,測試人員會(huì)希望很快能得到結(jié)果反饋,然而接口的數(shù)量一般都很多,而且會(huì)越來越多,所以提高執(zhí)行效率很有必要 接口測試的用例其實(shí)

    2024年01月23日
    瀏覽(22)
  • 接口自動(dòng)化測試框架開發(fā) (pytest+allure+aiohttp+ 用例自動(dòng)生成)

    目錄 前言: 第一部分(整個(gè)過程都要求是異步非阻塞的) 讀取 yaml 測試用例 http 請求測試接口 收集測試數(shù)據(jù) 第二部分 動(dòng)態(tài)生成 pytest 認(rèn)可的測試用例 后續(xù)(yml 測試文件自動(dòng)生成) 前言: 開發(fā)一個(gè)接口自動(dòng)化測試框架是一個(gè)很好的方式,可以提高測試效率和準(zhǔn)確性。在這

    2024年02月16日
    瀏覽(49)
  • 性能測試----負(fù)載測試、壓力測試、并發(fā)測試

    性能測試----負(fù)載測試、壓力測試、并發(fā)測試

    性能測試:檢測一個(gè)軟件的性能。 性能測試的指標(biāo): 響應(yīng)時(shí)間:用戶從請求到服務(wù)器響應(yīng)的時(shí)間 吞吐量:單位時(shí)間內(nèi)成功地傳送數(shù)據(jù)的數(shù)量 并發(fā)數(shù):在線并且在操作的用戶數(shù) 負(fù)載測試:加負(fù)載,找到讓系統(tǒng)崩潰的邊界點(diǎn)。 壓力測試:高負(fù)載的情況下跑,看系統(tǒng)穩(wěn)定性。

    2024年02月15日
    瀏覽(48)
  • 【性能測試】穩(wěn)定性/并發(fā)壓力測試的TPS計(jì)算+5W并發(fā)場景設(shè)計(jì)...

    【性能測試】穩(wěn)定性/并發(fā)壓力測試的TPS計(jì)算+5W并發(fā)場景設(shè)計(jì)...

    1、穩(wěn)定性測試TPS計(jì)算 ①普通計(jì)算公式:TPS=總請求數(shù) / 總時(shí)間按照需求得到基礎(chǔ)數(shù)據(jù)。 在去年第20周,某平臺(tái)有5萬的瀏覽量 那么總請求數(shù)我們可以估算為5萬(1次瀏覽都至少對應(yīng)1個(gè)請求) 總請求數(shù) = 50000請求數(shù) 總時(shí)間:由于不知道每個(gè)請求的具體時(shí)間,我們按照普通方法,

    2024年02月04日
    瀏覽(46)
  • Python向帶有SSL/TSL認(rèn)證服務(wù)器發(fā)送網(wǎng)絡(luò)請求小實(shí)踐(附并發(fā)http請求實(shí)現(xiàn)asyncio+aiohttp)

    Python向帶有SSL/TSL認(rèn)證服務(wù)器發(fā)送網(wǎng)絡(luò)請求小實(shí)踐(附并發(fā)http請求實(shí)現(xiàn)asyncio+aiohttp)

    最近工作中遇到這樣的一個(gè)場景:給客戶發(fā)送文件的時(shí)候,為保證整個(gè)過程中,文件不會(huì)被篡改,需要在發(fā)送文件之間, 對發(fā)送的文件進(jìn)行簽名, 而整個(gè)簽名系統(tǒng)是另外一個(gè)團(tuán)隊(duì)做的, 提供了一個(gè)接口服務(wù)完成簽名,但訪問這個(gè)接口需要提供他們團(tuán)隊(duì)提供的證書鏈先進(jìn)行認(rèn)

    2024年04月16日
    瀏覽(27)
  • JMeter之壓力測試——混合場景并發(fā)

    JMeter之壓力測試——混合場景并發(fā)

    在實(shí)際的壓力測試場景中,有時(shí)會(huì)遇到多個(gè)場景混合并發(fā)的情況,這時(shí)就需要設(shè)置不同的并發(fā)比例對不同場景請求數(shù)量的控制,下面提供兩種方案。 一、多線程組方案 1.業(yè)務(wù)場景設(shè)計(jì)如下:場景A、場景B、場景C,三個(gè)場景按照并發(fā)比例要求進(jìn)行100個(gè)用戶并發(fā)的壓力測試 業(yè)務(wù)

    2024年02月02日
    瀏覽(22)
  • aiohttp 異步爬蟲實(shí)戰(zhàn)

    之前介紹的 asyncio 模塊內(nèi)部 實(shí)現(xiàn)了對 TCP、UDP、SSL 協(xié)議的異步操作,但是對于 HTTP 請求的異步操作來說,我們就需要用到 aiohttp 來實(shí)現(xiàn)了 。aiohttp 是 一個(gè)基于 asyncio 的異步 HTTP 網(wǎng)絡(luò)模塊,它既提供了服務(wù)端,又提供了客戶端 。其中我們用服務(wù)端可以搭建一個(gè)支持異步處理的

    2023年04月22日
    瀏覽(17)
  • tomcat maxThread 壓力測試 700 并發(fā)以內(nèi)最好

    tomcat maxThread 壓力測試 700 并發(fā)以內(nèi)最好

    以前一直簡單的認(rèn)為多線程=高效率。其實(shí)多線程本身并不能提高 cpu 效率,線程過多反而會(huì)降低 cpu 效率。當(dāng) cpu 核心數(shù)線程數(shù)時(shí),cpu 就需要在多個(gè)線程直接來回切換,以保證每個(gè)線程都會(huì)獲得 cpu 時(shí)間,即通常我們說的并發(fā)執(zhí)行。所以? max-threads? 的配置絕對不是越大越好。

    2024年02月12日
    瀏覽(16)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包