zoukankan      html  css  js  c++  java
  • 也说性能测试,顺便说python的多进程+多线程、协程

      最近需要一个web系统进行接口性能测试,这里顺便说一下性能测试的步骤吧,大概如下
      一、分析接口频率
      根据系统的复杂程度,接口的数量有多有少,应该优先对那些频率高,数据库操作频繁的接口进行性能测试,所以先和开发根据业务情况,找到频率最高的几个接口。完成这些后再逐步完成剩余接口的测试。
      二、找到合适的测试工具
      性能测试工具简直数不胜数,最著名莫过于loadrunner,因为它支持windows,呵呵呵,这也是我刚毕业时用的工具(当然是盗版了。。。),简单易用,功能强大,不过收费版是真贵。我现在用得最多是jmeter,用起来也很简单。
      三、根据实际调整测试频率
      有的性能测试纯粹为了对比新旧版本的性能提升的,那就不用管三七二十一,全力去压既可。有的性能测试只是为了找到正常情况下,系统能支撑的最大并发之类,那么就要根据实际情况调整测试频率了,比如业务不繁忙时应该按多大频率,业务繁忙时应该按多大频率,业务正常时应该按多大频率。
      四、分析测试结果
      测试结果用于分析被测系统的性能瓶颈,它并不单单指测试工具的测试结果,还包括被测系统的日志,例如数据库访问日志,打印慢查询之类,作为一个性能测试人员,应该需要具备分析日志和测试工具结果的能力。
      下面说我在本次测试中遇到的难题,因为被测系统会对接口请求内容进行分析,如果格式不对就直接返回失败,所以用jmeter模拟请求时我都是根据实际请求内容来模拟的,其中有一个接口怎么模拟都返回失败,通过wireshark抓包后发现,正常的包接口请求body中有的换行符是"0a"有的是"0d0a"而且不能乱否则达不到想要的效果(同时多条数据查询),用jmeter模拟的请求参数却只能全是"0a"(用parameters的detail模拟)或者全是"0d0a"(用body data模拟),折腾许久仍然不行,最终只能郁闷地用python写代码来对这个接口做性能测试,其实真心不建议这样做,如果可以的话宁可让开发修改接口来临时绕过也好,因为术业有专攻,python毕竟不是专门用来做性能测试的,用它做性能测试是下策。windows下用python做性能测试大概有几种方案:
      1、多线程
      2、多进程
      3、协程

      本来打算用eventlet(基于协程),却发现用eventlet需要用它的“绿色标准库”,我这个接口请求内容如果用它的“绿色urllib2”来模拟的话又比较麻烦,用pycurl则简单许多,为了利用多核CPU的优势,我决定先用多进程+多线程的方式来实现一个比较挫的“接口性能测试”了。代码大概如下:

    import string, threading, time 
    import random
    import multiprocessing
    
    def perf():    
        a=0
        while a<int(packets):#请求包总数,如果用时间长短来限制是更好的
            for i in xrange(int(vusers)):#并发数,即并发线程数
                t = threading.Thread(target=cloudquery,args=(random.randint(1, 1000000000)))#cloudquery是指每个线程干的活,就是实际的被测试接口,随机数用来尽量保证每次请求不同的内容,可以用其他方法来实现,不过要挑选性能比较好的方法,以免浪费资源在这上面
                t.start()#启动线程
                a+=1
            
    if __name__ == '__main__':
        jobs = []
        for i in range(int(process)):#并发进程
            p = multiprocessing.Process(target=perf)#启动多个进程,每个进程启动同样的线程
            jobs.append(p)
            p.start()
        for aa in jobs:
            aa.join()
    

      有时间再用绿色urllib2来实现一次,看看是不是更好一些。
      后记:已经用多进程+协程实现了,不过不知道是否我用法错误,从抓包看两者并发没有比多进程+多线程快啊。2进程*100线程的并发 > 2进程*协程的并发。。。

    作者:肥狐
    出处:http://idbeta.cnblogs.com/
    本博客内除了标题带[转]字样外的所有文章,均采用“署名-非商业性使用-禁止演绎 2.5 中国大陆”授权,任何违反本协议的行为均属于非法行为。如需非商业性转载,必须保留此段声明,且在文章页面明显位置给出原文连接。如需商业性转载出版,请直接和我联系。
    如果您看了本篇博客,觉得对您有所收获,请点击右下方的【推荐】,同时欢迎您【关注我】
    Creative Commons License
  • 相关阅读:
    msp430入门编程41
    msp430入门编程40
    msp430入门编程37
    msp430入门编程36
    msp430入门编程35
    msp430入门编程34
    msp430入门编程33
    msp430入门编程31
    msp430入门编程32
    msp430入门编程30
  • 原文地址:https://www.cnblogs.com/idbeta/p/5057978.html
Copyright © 2011-2022 走看看