成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專(zhuān)欄INFORMATION COLUMN

聊聊 Jmeter 如何并發(fā)執(zhí)行 Python 腳本

王巖威 / 2432人閱讀

摘要:前言大家好,我是測(cè)試君最近有小伙伴后臺(tái)給我留言,說(shuō)自己用寫(xiě)了一個(gè)大文件上傳的接口,現(xiàn)在想本地檢驗(yàn)一下接口并發(fā)的穩(wěn)定性,問(wèn)我有沒(méi)有好的方案本篇文章以文件上傳為例,聊聊并發(fā)執(zhí)行腳本的完整流程實(shí)現(xiàn)文件上傳大文件上傳包含個(gè)步驟,

1. 前言

大家好,我是測(cè)試君!

最近有小伙伴后臺(tái)給我留言,說(shuō)自己用 Django 寫(xiě)了一個(gè)大文件上傳的 Api 接口,現(xiàn)在想本地檢驗(yàn)一下接口并發(fā)的穩(wěn)定性,問(wèn)我有沒(méi)有好的方案

本篇文章以文件上傳為例,聊聊 Jmeter 并發(fā)執(zhí)行 Python 腳本的完整流程

2. Python 實(shí)現(xiàn)文件上傳

大文件上傳包含 3 個(gè)步驟,分別是:

  • 獲取文件信息及切片數(shù)目
  • 分段切片,并上傳 - API
  • 文件合并 - API
  • 文件路徑參數(shù)化

2-1 獲取文件信息及切片數(shù)目

首先,獲取文件的大小

然后,利用預(yù)設(shè)的切片大小獲取分段總數(shù)

最后,獲取文件名及 md5 值

import osimport mathimport hashlibdef get_file_md5(self, file_path):    """獲取文件的md5值"""    with open(file_path, "rb") as f:         data = f.read()         return hashlib.md5(data).hexdigest()def get_filename(self, filepath):    """獲取文件原始名稱(chēng)"""    # 文件名帶后綴    filename_with_suffix = os.path.basename(filepath)    # 文件名    filename = filename_with_suffix.split(".")[0]    # 后綴名    suffix = filename_with_suffix.split(".")[-1]    return filename_with_suffix, filename, suffixdef get_chunk_info(self, file_path):    """獲取分段信息"""    # 獲取文件總大小(字節(jié))    file_total_size = os.path.getsize(file_path)    print(file_total_size)    # 分段總數(shù)    total_chunks_num = math.ceil(file_total_size / self.chunk_size)    # 文件名(帶后綴)    filename = self.get_filename(file_path)[0]    # 文件的md5值    file_md5 = self.get_file_md5(file_path)    return file_total_size, total_chunks_num, filename, file_md5

2-2 切片及分段上傳

利用分段總數(shù)和分段大小,對(duì)文件進(jìn)行切片,調(diào)用分段文件上傳接口

import requestsdef do_chunk_and_upload(self, file_path):?    """將文件分段處理,并上傳"""    file_total_size, total_chunks_num, filename, file_md5 = self.get_chunk_info(file_path)    # 遍歷    for index in range(total_chunks_num):        print("第{}次文件上傳".format(index + 1))        if index + 1 == total_chunks_num:            partSize = file_total_size % chunk_size        else:            partSize = chunk_size        # 文件偏移量        offset = index * chunk_size        # 生成分片id,從1開(kāi)始        chunk_id = index + 1        print("開(kāi)始準(zhǔn)備上傳文件")        print("分片id:", chunk_id, "文件偏移量:", offset, ",當(dāng)前分片大小:", partSize, )        # 分段上傳文件        self.__upload(offset, chunk_id, file_path, file_md5, filename, partSize, total_chunks_num)def __upload(self, offset, chunk_id, file_path, file_md5, filename, partSize, total):    """分次上傳文件"""    url = "http://**/file/brust/upload"    params = {"chunk": chunk_id,                "fileMD5": file_md5,                "fileName": filename,                "partSize": partSize,                "total": total                }    # 根據(jù)文件路徑及偏移量,讀取文件二進(jìn)制數(shù)據(jù)    current_file = open(file_path, "rb")    current_file.seek(offset)    files = {"file": current_file.read(partSize)}    resp = requests.post(url, params=params, files=files).text    print(resp)

2-3 合并文件

最后調(diào)用合并文件的接口,將分段小文件合成大文件

def merge_file(self, filepath):        """合并"""        url = "http://**/file/brust/merge"        file_total_size, total_chunks_num, filename, file_md5 = self.get_chunk_info(filepath)?        payload = json.dumps(            {                "fileMD5": file_md5,                "chunkTotal": total_chunks_num,                "fileName": filename            }        )        print(payload)        headers = {            "Content-Type": "application/json"        }        resp = requests.post(url, headers=headers, data=payload).text        print(resp)

2-4 文件路徑參數(shù)化

為了并發(fā)執(zhí)行,將文件上傳路徑參數(shù)化

# fileupload.py...if __name__ == "__main__":    filepath = sys.argv[1]    # 每一段切片的大小(MB)    chunk_size = 2 * 1024 * 1024    fileApi = FileApi(chunk_size)    # 分段上傳    fileApi.do_chunk_and_upload(filepath)    # 合并    fileApi.merge_file(filepath)

3. Jmeter 并發(fā)執(zhí)行

在使用 Jmeter 創(chuàng)建并發(fā)流程前,我們需要編寫(xiě)批處理腳本

其中,執(zhí)行批處理腳本時(shí),需要跟上文件路徑一起執(zhí)行

# cmd.bat@echo offset filepath=%1python  C:/Users/xingag/Desktop/rpc_demo/fileupload.py %*

然后,在本地新建一個(gè) CSV 文件,寫(xiě)入多個(gè)文件路徑

# 準(zhǔn)備多個(gè)文件路徑(csv)C://Users//xingag//Desktop//charles-proxy-4.6.1-win64.msiC://Users//xingag//Desktop//V2.0.pdfC://Users//xingag//Desktop//HBuilder1.zipC://Users//xingag//Desktop//HBuilder2.zip

接著,就可以使用 Jmeter 創(chuàng)建并發(fā)流程了

完整步驟如下:

  • 創(chuàng)建一個(gè)測(cè)試計(jì)劃,下面添加一個(gè)線(xiàn)程組

這里線(xiàn)程組數(shù)目與上面文件數(shù)目保持一致即可

  • 線(xiàn)程組下,添加「 同步定時(shí)器 」

同步定時(shí)器中的「 模擬用戶(hù)組的數(shù)量 」和上面參數(shù)數(shù)量保持一致

  • 添加 CSV 數(shù)據(jù)文件設(shè)置

指向上面準(zhǔn)備的 csv 數(shù)據(jù)文件,設(shè)置文件格式為 UTF-8,變量名稱(chēng)設(shè)置為 file_path,最后將線(xiàn)程共享模式設(shè)置為「 當(dāng)前線(xiàn)程組 」

  • 添加調(diào)試取樣器,方便調(diào)試

  • 添加 OS 進(jìn)程取樣器

選擇上面創(chuàng)建的批處理文件,命令行參數(shù)設(shè)置為「 ${file_path} 」

  • 添加查看結(jié)果數(shù)

4. 最后

運(yùn)行上面創(chuàng)建的 Jmeter 并發(fā)流程,在結(jié)果數(shù)中可以查看并發(fā)上傳文件的結(jié)果

當(dāng)然,我們可以增加并發(fā)數(shù)量去模擬真實(shí)的使用場(chǎng)景,只需要修改 CSV 數(shù)據(jù)源及 Jmeter 參數(shù)即可

如果你覺(jué)得文章還不錯(cuò),請(qǐng)大家 點(diǎn)贊、分享、留言 下,因?yàn)檫@將是我持續(xù)輸出更多優(yōu)質(zhì)文章的最強(qiáng)動(dòng)力!

最后: 可以關(guān)注公眾號(hào):傷心的辣條 ! 進(jìn)去有許多資料共享!資料都是面試時(shí)面試官必問(wèn)的知識(shí)點(diǎn),也包括了很多測(cè)試行業(yè)常見(jiàn)知識(shí),其中包括了有基礎(chǔ)知識(shí)、Linux必備、Shell、互聯(lián)網(wǎng)程序原理、Mysql數(shù)據(jù)庫(kù)、抓包工具專(zhuān)題、接口測(cè)試工具、測(cè)試進(jìn)階-Python編程、Web自動(dòng)化測(cè)試、APP自動(dòng)化測(cè)試、接口自動(dòng)化測(cè)試、測(cè)試高級(jí)持續(xù)集成、測(cè)試架構(gòu)開(kāi)發(fā)測(cè)試框架、性能測(cè)試、安全測(cè)試等。

如果我的博客對(duì)你有幫助、如果你喜歡我的博客內(nèi)容,請(qǐng) “點(diǎn)贊” “評(píng)論” “收藏” 一鍵三連哦!


好文推薦

轉(zhuǎn)行面試,跳槽面試,軟件測(cè)試人員都必須知道的這幾種面試技巧!

面試經(jīng):一線(xiàn)城市搬磚!又面軟件測(cè)試崗,5000就知足了…

面試官:工作三年,還來(lái)面初級(jí)測(cè)試?恐怕你的軟件測(cè)試工程師的頭銜要加雙引號(hào)…

什么樣的人適合從事軟件測(cè)試工作?

那個(gè)準(zhǔn)點(diǎn)下班的人,比我先升職了…

測(cè)試崗反復(fù)跳槽,跳著跳著就跳沒(méi)了…

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/119796.html

相關(guān)文章

  • App 端自動(dòng)化的最佳方案,完全解放雙手!

    摘要:前言大家好,我是安果之前寫(xiě)過(guò)一篇文章,文中提出了一種方案,可以實(shí)現(xiàn)每天自動(dòng)給微信群群發(fā)新聞早報(bào)如何利用爬蟲(chóng)實(shí)現(xiàn)給微信群發(fā)新聞早報(bào)詳細(xì)但是對(duì)于很多人來(lái)說(shuō),首先編寫(xiě)一款需要一定的移動(dòng)端開(kāi)發(fā)經(jīng)驗(yàn),其次還需要另外編寫(xiě)無(wú)障礙服務(wù)應(yīng)用,如此顯得有一定難1. 前言大家好,我是安果!之前寫(xiě)過(guò)一篇文章,文中提出了一種方案,可以實(shí)現(xiàn)每天自動(dòng)給微信群群發(fā)新聞早報(bào)如何利用 Python 爬蟲(chóng)實(shí)現(xiàn)給微信群發(fā)新聞早報(bào)?...

    番茄西紅柿 評(píng)論0 收藏2637
  • Python 和Java 哪個(gè)更適合做自動(dòng)化測(cè)試?

    摘要:而對(duì)于功能測(cè)試升級(jí)來(lái)說(shuō),一般有這么個(gè)主流的發(fā)展方向一是性能測(cè)試,一是接口測(cè)試,一是自動(dòng)化測(cè)試。主要被應(yīng)用于的接口測(cè)試之中。 很多小伙伴工作在功能測(cè)試行業(yè)工作了2、3年后,發(fā)現(xiàn)自己已經(jīng)把功能測(cè)試做的非常好了,已經(jīng)到職業(yè)發(fā)展和薪資發(fā)展的瓶頸期了,就想著學(xué)點(diǎn)東西,提提升一下技能。? ?而對(duì)于功能...

    jkyin 評(píng)論0 收藏0
  • jmeter web性能測(cè)試實(shí)例

    jmeter web性能測(cè)試實(shí)例 img{ display:block; margin:0 auto !important; width:100%; } body{ width:75%; ma...

    IT那活兒 評(píng)論0 收藏1191
  • 論性能測(cè)試

    摘要:吞吐量一般結(jié)合業(yè)務(wù)需求而定服務(wù)器資源占用占用率內(nèi)存使用率命中率篇是一種預(yù)測(cè)系統(tǒng)行為和性能的負(fù)載測(cè)試工具。負(fù)載測(cè)試與壓力測(cè)試都是性能測(cè)試。通過(guò)平臺(tái)接口可進(jìn)行合理的性能測(cè)試。有利于測(cè)試人員及時(shí)定位問(wèn)題。 Part 1:性能測(cè)試 性能測(cè)試是通過(guò)自動(dòng)化的測(cè)試工具模擬多種正常、峰值以及異常負(fù)載條件來(lái)對(duì)系統(tǒng)的各項(xiàng)性能指標(biāo)進(jìn)行測(cè)試。 A. 類(lèi)別 性能測(cè)試包括負(fù)載測(cè)試、壓力測(cè)試、基準(zhǔn)測(cè)試等。 i. 負(fù)...

    qpal 評(píng)論0 收藏0
  • 還在問(wèn)用什么來(lái)做接口測(cè)試?萬(wàn)能Jmeter打造性能測(cè)試數(shù)據(jù)平臺(tái)。jmeter 【 yyds】

    摘要:況且,即便使用了插件,也不能實(shí)現(xiàn)歷史數(shù)據(jù)追溯,數(shù)據(jù)持久化保存等功能。先來(lái)說(shuō)下這套解決方案的原理,在運(yùn)行過(guò)程中,將產(chǎn)生的性能數(shù)據(jù)寫(xiě)入到數(shù)據(jù)庫(kù)里,然后定時(shí)從數(shù)據(jù)庫(kù)中讀取性能數(shù)據(jù),并分類(lèi)展示到頁(yè)面上。而提供了將性能數(shù)據(jù)寫(xiě)入到的組件。 前 言 在服務(wù)端性能測(cè)試工具中,Jmeter毫無(wú)疑問(wèn)是其中的王...

    notebin 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<