电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術文章
文章詳情頁

python如何進行基準測試

瀏覽:84日期:2022-06-21 09:49:17

基準測試屬于性能測試的一種,用于評估和衡量軟件的性能指標。我們可以在軟件開發的某個階段通過基準測試建立一個已知的性能水平,稱為'基準線'。當系統的軟硬件環境發生變化之后再進行一次基準測試以確定那些變化對性能的影響。 這是基準測試最常見的用途。

Donald Knuth在1974年出版的《Structured Programming with go to Statements》提到:

毫無疑問,對效率的片面追求會導致各種濫用。程序員會浪費大量的時間在非關鍵程序的速度上,實際上這些嘗試提升效率的行為反倒可能產生很大的負面影響,特別是當調試和維護的時候。我們不應該過度糾結于細節的優化,應該說約97%的場景:過早的優化是萬惡之源。當然我們也不應該放棄對那關鍵3%的優化。一個好的程序員不會因為這個比例小就裹足不前,他們會明智地觀察和識別哪些是關鍵的代碼;但是僅當關鍵代碼已經被確認的前提下才會進行優化。對于很多程序員來說,判斷哪部分是關鍵的性能瓶頸,是很容易犯經驗上的錯誤的,因此一般應該借助測量工具來證明。

雖然經常被解讀為不需要關心性能,但是的少部分情況下(3%)應該觀察和識別關鍵代碼并進行優化。

基準(benchmarking)測試工具

python中提供了非常多的工具來進行基準測試。

為了使演示的例子稍微有趣,我們來隨機生成一個列表,并對列表中數字進行排序。

import randomdef random_list(start, end, length): ''' 生成隨機列表 :param start: 隨機開始數 :param end: 隨機結束數 :param length: 列表長度 ''' data_list = [] for i in range(length):data_list.append(random.randint(start, end)) return data_listdef bubble_sort(arr): ''' 冒泡排序: 對列表進行排序 :param arr 列表 ''' n = len(arr) for i in range(n):for j in range(0, n - i - 1): if arr[j] > arr[j + 1]:arr[j], arr[j + 1] = arr[j + 1], arr[j] return arrif __name__ == ’__main__’: get_data_list = random_list(1, 99, 10) ret = bubble_sort(get_data_list) print(ret)

運行結果如下:

❯ python .demo.py[8, 16, 22, 31, 42, 58, 66, 71, 73, 91]timeit

timeit是python自帶的模塊,用來進行基準測試非常方便。

if __name__ == ’__main__’: import timeit get_data_list = random_list(1, 99, 10) setup = 'from __main__ import bubble_sort' t = timeit.timeit(stmt='bubble_sort({})'.format(get_data_list),setup=setup) print(t)

運行結果:

❯ python .demo.py5.4201355

以測試bubble_sort()函數為例。timeit.timeit() 參數說明。

stmt:需要測試的函數或語句,字符串形式. setup: 運行的環境,本例子中表示if __name__ == ’__main__’:. number: 執行的次數,省缺則默認是1000000次。所以你會看到運行bubble_sort() 耗時 5秒多。 pyperf

https://github.com/psf/pyperf

pyperf 的用法與timeit比較類似,但它提供了更豐富結果。(注:我完全是發現了這個庫才學習基準測試的)

if __name__ == ’__main__’: get_data_list = random_list(1, 99, 10) import pyperf setup = 'from __main__ import bubble_sort' runner = pyperf.Runner() runner.timeit(name='bubble sort', stmt='bubble_sort({})'.format(get_data_list), setup=setup)

運行結果:

❯ python .demo.py -o bench.json.....................bubble sort: Mean +- std dev: 5.63 us +- 0.31 us

測試結果會寫入bench.json 文件。可以使用pyperf stats命令分析測試結果。

❯ python -m pyperf stats bench.jsonTotal duration: 15.9 secStart date: 2021-04-02 00:17:18End date: 2021-04-02 00:17:36Raw value minimum: 162 msRaw value maximum: 210 msNumber of calibration run: 1Number of run with values: 20Total number of run: 21Number of warmup per run: 1Number of value per run: 3Loop iterations per value: 2^15Total number of values: 60Minimum: 4.94 usMedian +- MAD: 5.63 us +- 0.12 usMean +- std dev: 5.63 us +- 0.31 usMaximum: 6.41 us 0th percentile: 4.94 us (-12% of the mean) -- minimum 5th percentile: 5.10 us (-9% of the mean) 25th percentile: 5.52 us (-2% of the mean) -- Q1 50th percentile: 5.63 us (+0% of the mean) -- median 75th percentile: 5.81 us (+3% of the mean) -- Q3 95th percentile: 5.95 us (+6% of the mean)100th percentile: 6.41 us (+14% of the mean) -- maximumNumber of outlier (out of 5.07 us..6.25 us): 6pytest-benchmark

https://github.com/ionelmc/pytest-benchmark

pytest-benchmark是 pytest單元測試框架的一個插件。 單獨編寫單元測試用例:

from demo import bubble_sortdef test_bubble_sort(benchmark): test_list = [5, 2, 4, 1, 3] result = benchmark(bubble_sort, test_list) assert result == [1, 2, 3, 4, 5]

需要注意:

導入bubble_sort() 函數。 benchmark 作為鉤子函數使用,不需要導入包。前提是你需要安裝pytest和pytest-benchmark。 為了方便斷言,我們就把要排序的數固定下來了。

運行測試用例:

❯ pytest -q .test_demo.py. [100%]------------------------------------------------ benchmark: 1 tests -----------------------------------------------Name (time in us)Min Max Mean StdDev Median IQR Outliers OPS (Kops/s) Rounds Iterations-------------------------------------------------------------------------------------------------------------------test_bubble_sort 1.6000 483.2000 1.7647 2.6667 1.7000 0.0000 174;36496 566.6715 181819 1-------------------------------------------------------------------------------------------------------------------Legend: Outliers: 1 Standard Deviation from Mean; 1.5 IQR (InterQuartile Range) from 1st Quartile and 3rd Quartile. OPS: Operations Per Second, computed as 1 / Mean1 passed in 1.98s

加上 --benchmark-histogram 參數,你會得到一張圖表

❯ pytest -q .test_demo.py --benchmark-histogram.[100%]------------------------------------------------ benchmark: 1 tests -----------------------------------------------Name (time in us)Min Max Mean StdDev Median IQR Outliers OPS (Kops/s) Rounds Iterations-------------------------------------------------------------------------------------------------------------------test_bubble_sort 1.6000 53.9000 1.7333 0.3685 1.7000 0.0000 1640;37296 576.9264 178572 1-------------------------------------------------------------------------------------------------------------------Generated histogram: D:githubtest-circlearticlecodebenchmark_20210401_165958.svg

圖片如下:

python如何進行基準測試

關于基準測試的工具還有很多,這里就不再介紹了。

經過基準測試發現程序變慢了,那么接下來需要做的就是代碼性能分析了,我下篇再來介紹。

以上就是python如何進行基準測試的詳細內容,更多關于python 基準測試的資料請關注好吧啦網其它相關文章!

標簽: Python 編程
相關文章:
主站蜘蛛池模板: 工业风机_环保空调_冷风机_工厂车间厂房通风降温设备旺成服务平台 | 定硫仪,量热仪,工业分析仪,马弗炉,煤炭化验设备厂家,煤质化验仪器,焦炭化验设备鹤壁大德煤质工业分析仪,氟氯测定仪 | 发电机组|柴油发电机组-批发,上柴,玉柴,潍柴,康明斯柴油发电机厂家直销 | 河南正规膏药生产厂家-膏药贴牌-膏药代加工-修康药业集团官网 | 书信之家_书信标准模板范文大全| 济南铝方通-济南铝方通价格-济南方通厂家-山东鲁方通建材有限公司 | 通风气楼_通风天窗_屋顶风机-山东美创通风设备有限公司 | 重庆轻质隔墙板-重庆安吉升科技有限公司 | 【星耀裂变】_企微SCRM_任务宝_视频号分销裂变_企业微信裂变增长_私域流量_裂变营销 | led全彩屏-室内|学校|展厅|p3|户外|会议室|圆柱|p2.5LED显示屏-LED显示屏价格-LED互动地砖屏_蕙宇屏科技 | 陶氏道康宁消泡剂_瓦克消泡剂_蓝星_海明斯德谦_广百进口消泡剂 | 细砂提取机,隔膜板框泥浆污泥压滤机,螺旋洗砂机设备,轮式洗砂机械,机制砂,圆锥颚式反击式破碎机,振动筛,滚筒筛,喂料机- 上海重睿环保设备有限公司 | 周易算网-八字测算网 - 周易算网-宝宝起名取名测名字周易八字测算网 | 仪器仪表网 - 永久免费的b2b电子商务平台 | 合肥卓创建筑装饰,专业办公室装饰、商业空间装修与设计。 | 车件|铜件|车削件|车床加工|五金冲压件-PIN针,精密车件定制专业厂商【东莞品晔】 | 碳刷_刷握_集电环_恒压簧_电刷厂家-上海丹臻机电科技有限公司 | 蒸压釜-陶粒板隔墙板蒸压釜-山东鑫泰鑫智能装备有限公司 | 浙江宝泉阀门有限公司| 真空泵维修保养,普发,阿尔卡特,荏原,卡西亚玛,莱宝,爱德华干式螺杆真空泵维修-东莞比其尔真空机电设备有限公司 | 世纪豪门官网 世纪豪门集成吊顶加盟电话 世纪豪门售后电话 | 天津仓储物流-天津电商云仓-天津云仓一件代发-博程云仓官网 | 塑料薄膜_PP薄膜_聚乙烯薄膜-常州市鑫美新材料包装厂 | 昆山新莱洁净应用材料股份有限公司-卫生级蝶阀,无菌取样阀,不锈钢隔膜阀,换向阀,离心泵 | Dataforth隔离信号调理模块-信号放大模块-加速度振动传感器-北京康泰电子有限公司 | 合肥注册公司|合肥代办营业执照、2024注册公司流程 | 北京网络营销推广_百度SEO搜索引擎优化公司_网站排名优化_谷歌SEO - 北京卓立海创信息技术有限公司 | 振动时效_振动时效仪_超声波冲击设备-济南驰奥机电设备有限公司 北京宣传片拍摄_产品宣传片拍摄_宣传片制作公司-现像传媒 | 南京办公用品网-办公文具用品批发-打印机耗材采购 | 深圳APP开发_手机软件APP定制外包_小程序开发公司-来科信 | 纸塑分离机-纸塑分离清洗机设备-压力筛-碎浆机厂家金双联环保 | 无缝钢管-聊城无缝钢管-小口径无缝钢管-大口径无缝钢管 - 聊城宽达钢管有限公司 | 讲师宝经纪-专业培训机构师资供应商_培训机构找讲师、培训师、讲师经纪就上讲师宝经纪 | 大立教育官网-一级建造师培训-二级建造师培训-造价工程师-安全工程师-监理工程师考试培训 | 脉冲除尘器,除尘器厂家-淄博机械 | 尾轮组_头轮组_矿用刮板_厢式刮板机_铸石刮板机厂家-双驰机械 | 2025福建平潭岛旅游攻略|蓝眼泪,景点,住宿攻略-趣平潭网 | 圣才学习网-考研考证学习平台,提供万种考研考证电子书、题库、视频课程等考试资料 | 工业铝型材-铝合金电机壳-铝排-气动执行器-山东永恒能源集团有限公司 | 动力配电箱-不锈钢配电箱-高压开关柜-重庆宇轩机电设备有限公司 聚天冬氨酸,亚氨基二琥珀酸四钠,PASP,IDS - 远联化工 | 水质传感器_水质监测站_雨量监测站_水文监测站-山东水境传感科技有限公司 |