首页 > 编程语言 > 详细

也说性能测试,顺便说python的多进程嵌套多线程

时间:2015-12-18 20:21:14      阅读:1140      评论:0      收藏:0      [点我收藏+]

  最近需要一个web系统进行接口性能测试,这里顺便说一下性能测试的步骤吧,大概如下
  一、分析接口频率
  根据系统的复杂程度,接口的数量有多有少,应该优先对那些频率高,数据库操作频繁的接口进行性能测试,所以先和开发根据业务情况,找到频率最高的几个接口。
  二、找到合适的测试工具
  性能测试工具简直数不胜数,最著名莫过于loadrunner,因为它支持windows,呵呵呵,这也是我刚毕业时用的工具(当然是盗版了。。。),简单易用,功能强大,不过收费版是真贵。我现在用得最多是jmeter,用起来也很简单。
  三、根据实际调整测试频率
  有的性能测试纯粹为了对比新旧版本的性能提升的,那就不用管三七二十一,全力去压既可。有的性能测试只是为了找到正常情况下,系统能支撑的最大并发之类,那么就要根据实际情况调整测试频率了,比如业务不繁忙时应该按多大频率,业务繁忙时应该按多大频率,业务正常时应该按多大频率。
  四、分析测试结果
  测试结果用于分析被测系统的性能瓶颈,它并不单单指测试工具的测试结果,还包括被测系统的日志,例如数据库访问日志,打印慢查询之类,作为一个性能测试人员,应该需要具备分析日志和测试工具结果的能力。
  下面说我在本次测试中遇到的难题,因为被测系统会对接口请求内容进行分析,如果格式不对就直接返回失败,所以用jmeter模拟请求时我都是根据实际请求内容来模拟的,其中有一个接口怎么模拟都返回失败,通过wireshark抓包后发现,正常的包接口请求参数中换行符是“0a”,用jmeter模拟的请求参数却是"0d0a",和开发沟通后才知道,被测系统要求换行符必须是"\r",而windows的postdata内容的换行都是用换行符"\r\n"的。。。google到一个看起来比较靠谱的方法,修改jemter的配置文件,貌似是改用"\r"做结尾之类,不过后来发现仍然不行,折腾许久,最终用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(random.randint(1, 1000000000)))#每个线程干的活,就是实际的被测试接口,随机数用来尽量保证每次请求不同的内容,可以用其他方法来实现,不过要挑选性能比较好的方法,以免浪费资源在这上面
            t.start()#启动线程
            a+=1
        
if __name__ == ‘__main__‘:
    jobs = []
    for i in range(int(process)):#并发进程
        p = multiprocessing.Process(target=perf)#启动多个进程,每个进程启动同样的线程
        jobs.append(p)
        p.start()

  有时间再用绿色urllib2来实现一次,看看是不是更好一些。

也说性能测试,顺便说python的多进程嵌套多线程

原文:http://www.cnblogs.com/idbeta/p/5057978.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!