Python壓力測(cè)試

安裝progressbar

pip install progressbar2

使用多線程測(cè)試代碼

import threading
import os
import requests
import random
import uuid
import json
import time
import csv
import shutil
from progressbar import *

class PostFile(threading.Thread):
    def __init__(self, tid, num, url, dir, output):
        super(PostFile, self).__init__()
        self.url = url
        self.tid = tid
        self.dir = dir
        self.num = num
        self.output = output
        self.receive_count = 0
        self.token_accept = 0
        self.file_list = os.listdir(self.dir)

    def send_post(self):
        token = uuid.uuid4().__str__()
        file_name = self.file_list[random.randint(0, len(self.file_list)-1)]
        file = {'file': (file_name, open(os.path.join(self.dir, file_name), 'rb'))}
        data = {'keepFile': 1, 'token': token}
        global global_count
        global_count += 1
        try:
            start = time.time()
            response = requests.post(self.url, files=file, data=data)
            end = time.time()
            response = json.loads(response.text)
            if response['token'] is not None:
                self.receive_count += 1
            if token == response['token']:
                self.token_accept += 1
            item = [token, response['token'], file_name, response['label'], end-start]
        except Exception as e:
            item = [token, '', file_name, '', 0]
        finally:
            return item


    def run(self):
        response = []
        thread_start = time.time()
        for i in range(self.num):
            item = self.send_post()
            response.append(item)
        thread_end = time.time()
        with open(os.path.join(self.output, "thread-[{}]-receive-[{}]-token-same-[{}]-cost-[{:.4f}].csv"
                .format(self.tid, self.receive_count, self.token_accept, thread_end-thread_start)),
                  'w', newline='') as t:
            writer = csv.writer(t)
            writer.writerows(response)


def build_worksapce(dir):
    dir = os.path.abspath(dir)
    if os.path.exists(dir):
        shutil.rmtree(dir)
    os.mkdir(dir)

if __name__ == '__main__':
    send_num = 100000
    thread_num = 100
    url = 'post_url'
    dir = './post_file_dir'
    output = './log_dir'
    global_count = 0
    build_worksapce(output)
    widgets = ['Progress: ', Percentage(), ' ', Bar('#'), ' ', Timer(), ' ', ETA(), ' ']
    pbar = ProgressBar(widgets=widgets, maxval=send_num).start()
    start = time.time()
    for i in range(thread_num):
        post = PostFile(tid=i, num=send_num//thread_num, url=url, dir=dir, output=output)
        post.start()

    while global_count != send_num:
        pbar.update(global_count+1)

    end = time.time()
    print('\nSend: {}, used: {:.4f} s.'.format(send_num, end-start))

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容