用python实现高性能测试工具(二)


本文摘自php中文网,作者little bottle,侵删。

在上一篇文章《用python实现高性能测试工具(一)》中我们通过换python的解析器来优化性能,但离实际需求还很远。本文介绍的是自动化测试的优化代码。

方案2: 优化代码

工欲善其事,必先利其器。要优化代码,必须先找到代码的瓶颈所在,最土的方法是添加log, 或者print, 调试完成还需要删除,比较麻烦。python里面也提供了很多profile工具:profile, cProfile, hotshot, pystats, 但这些工具提供的结果可读性不是很好,不够直观的一眼就能看到那个函数或者那一行占用时间最多。 python line_profiler 提供了这样的功能,可以很直观的看到哪一行占用的时间最多,可谓“快准狠”,下载地址: http://pythonhosted.org/line_profiler/

安装完line_profiler后,在C:\Python27\Lib\site-packages 目录下会有一个kernprof.py,在可能存在瓶颈的函数上添加 @profile, 如以下例子:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

@profile

def create_msg2(self,H,msg):

    li = msg.keys()

    msg_type=li[0]

    ULR_avps=[]

    ULR=HDRItem()

    ULR.cmd=self.dia.dictCOMMANDname2code(self.dia.MSG_TERM[msg_type])

 

    if msg_type[-1]=='A':

        msg=msg[msg_type]

        self.dia.setAVPs_by_dic(msg_type,msg,ULR_avps)

        ULR.appId=H.appId

        ULR.EndToEnd=H.EndToEnd

        ULR.HopByHop=H.HopByHop

        msg=self.dia.createRes(ULR,ULR_avps)

 

    else:

        self.dia.setAVPs(msg_type,msg,ULR_avps)

        ULR.appId=self.dia.APPID

        self.dia.initializeHops(ULR)

        msg=self.dia.createReq(ULR,ULR_avps)

 

    return msg

运行此文件: kernprof.py -l -v D:\project\mp\src\protocols\libdiametermt.py, 得到如下结果。 从这图中可以很直观的看到setAVPS方法占用了96.6%的时间,再进一步定位到此函数,再次添加@proflie修饰符(可以一次在多个函数上添加Profile), 可以再进一步看到setAVPS函数中各行代码的占用时间比。


通过一步步的分析中看到,开源协议库中,setAVPS的方法中,查找avp的属性是从一个3000的循环里面查找的,每个AVP都需要循环3000次,一个diameter消息中至少10个avp,每次encoding一个avp需要循环3W次。 我们初始的解决方法是删除了很多我们性能测试中用不到的avp(没办法,测试开发资源有限,很多时候没有很好的设计,先做出满足需求的东西再说。), 但也只是提高到了150左右,离需求还差的很远。所以我们把AVP都改成了字典方式,可以根据名字快速查找到AVP的属性。

除了代码的优化,同时还增加了encoding avp的线程数,后面章节将会讲到多线程和多进程,对性能的影响。待续。。。。

【推荐课程:Python视频课程】

以上就是用python实现高性能测试工具(二)的详细内容,更多文章请关注木庄网络博客!!

相关阅读 >>

基于Python2基础的实例详解

Python卸载容易吗

Python如何实现一个登陆验证(文件验证)

Python中enumerate什么意思

Python如何向集合追加元素

Python和go之间的区别是什么?

Python dll是什么意思

Python版简单工厂模式的介绍

怎么在cmd运行Python

Python生成器与迭代器的区别

更多相关阅读请进入《Python》频道 >>




打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...