遵义网站建设制作公司,想要一个免费的网站,windows服务器安装wordpress,溧水网站建设基准测试可以发现程序变慢了#xff0c;那么是因为什么原因导致性能变慢的#xff0c;需要进一步做代码性能分析。python同样提供了性能分析工具。
cProfile
cProfile是python默认的性能分析器#xff0c;他只测量CPU时间#xff0c;并不关心内存消耗和其他与内存相关联的…基准测试可以发现程序变慢了那么是因为什么原因导致性能变慢的需要进一步做代码性能分析。python同样提供了性能分析工具。
cProfile
cProfile是python默认的性能分析器他只测量CPU时间并不关心内存消耗和其他与内存相关联的信息。
from time import sleep
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)sleep(1)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)import cProfilecProfile.run(bubble_sort({}).format(get_data_list))继续使用上一篇文章中的例子引用cProfile模块run()方法参数说明。
run(statement, filenameNone, sort-1)
statement: 需要测试的代码或者函数函数名fielname: 结果保存的位置 默认为stdoutsort: 结果排序方法常用的有cumtime: 累积时间 name: 函数名 line: 行号
为了使结果统计出耗时部分我们加了sleep结果如下
❯ python demo.py6 function calls in 1.004 secondsOrdered by: standard namencalls tottime percall cumtime percall filename:lineno(function)1 0.000 0.000 1.004 1.004 string:1(module)1 0.000 0.000 1.004 1.004 demo.py:19(bubble_sort)1 0.000 0.000 1.004 1.004 {built-in method builtins.exec}1 0.000 0.000 0.000 0.000 {built-in method builtins.len}1 1.004 1.004 1.004 1.004 {built-in method time.sleep}1 0.000 0.000 0.000 0.000 {method disable of _lsprof.Profiler objects}6 function calls in 1.004 seconds 6个函数调用被监控耗时1.004秒。 ncalls 函数被调用的次数。如果这一列有两个值就表示有递归调用第二个值是原生调用次数第一个值是总调用次数。 tottime 函数内部消耗的总时间。可以帮助优化 percall 是tottime除以ncalls一个函数每次调用平均消耗时间。 cumtime 之前所有子函数消费时间的累计和。 filename:lineno(function) 被分析函数所在文件名、行号、函数名。
line_profiler
line_profiler 可以提供有关时间是如何在各行之间分配的信息直白一点就是给出程序每行的耗时在无法确定哪行语句最浪费时间这很有用。
line_profiler是一个第三方模块需要安装。
https://github.com/pyutils/line_profiler
from time import sleep
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_listprofile
def bubble_sort(arr):冒泡排序: 对列表进行排序:param arr 列表n len(arr)sleep(1)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)bubble_sort(get_data_list)给需要监控的函数加上profile 装饰器。通过kernprof命令运行文件安装完line_profiler生成的命令。
参数说明 -l以使用函数line_profiler -v以立即将结果打印到屏幕
运行结果
kernprof -l -v demo.py
Wrote profile results to demo.py.lprof
Timer unit: 1e-06 sTotal time: 1.00416 s
File: demo.py
Function: bubble_sort at line 18Line # Hits Time Per Hit % Time Line Contents
18 profile19 def bubble_sort(arr):20 21 冒泡排序: 对列表进行排序22 :param arr 列表23 24 1 8.0 8.0 0.0 n len(arr)25 1 1004030.0 1004030.0 100.0 sleep(1)26 11 15.0 1.4 0.0 for i in range(n):27 55 44.0 0.8 0.0 for j in range(0, n - i - 1):28 45 41.0 0.9 0.0 if arr[j] arr[j 1]:29 20 21.0 1.1 0.0 arr[j], arr[j 1] arr[j 1], arr[j]30 1 1.0 1.0 0.0 return arr输出非常直观分成了6列。
Line #运行的代码行号。Hits代码行运行的次数。Time代码行的执行时间单位为微秒。Per HitTime/Hits。% Time代码行总执行时间所占的百分比。Line Contents代码行的内容。
只需查看% Time列就可清楚地知道时间都花在了什么地方。
总结
性能测试分析站在项目层面是一个很庞大的话题以前为测试工程师关注的是性能工具的使用以及用户维度的性能[1]作为开发工程师每个功能都是由一个个函数/方法组成我们去分析每个函数/方法甚至是每行代码的耗时才能更好的进行代码层面的性能优化。
最后感谢每一个认真阅读我文章的人礼尚往来总是要有的这些资料对于【软件测试】的朋友来说应该是最全面最完整的备战仓库虽然不是什么很值钱的东西如果你用得到的话可以直接拿走 这些资料对于【软件测试】的朋友来说应该是最全面最完整的备战仓库这个仓库也陪伴上万个测试工程师们走过最艰难的路程希望也能帮助到你