最近需要一个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进程*协程的并发。。。

也说性能测试,顺便说python的多进程+多线程、协程的更多相关文章

  1. python采用 多进程/多线程/协程 写爬虫以及性能对比,牛逼的分分钟就将一个网站爬下来!

    首先我们来了解下python中的进程,线程以及协程! 从计算机硬件角度: 计算机的核心是CPU,承担了所有的计算任务.一个CPU,在一个时间切片里只能运行一个程序. 从操作系统的角度: 进程和线程,都 ...

  2. python 多进程/多线程/协程 同步异步

    这篇主要是对概念的理解: 1.异步和多线程区别:二者不是一个同等关系,异步是最终目的,多线程只是我们实现异步的一种手段.异步是当一个调用请求发送给被调用者,而调用者不用等待其结果的返回而可以做其它的事 ...

  3. Python 多进程 多线程 协程 I/O多路复用

    引言 在学习Python多进程.多线程之前,先脑补一下如下场景: 说有这么一道题:小红烧水需要10分钟,拖地需要5分钟,洗菜需要5分钟,如果一样一样去干,就是简单的加法,全部做完,需要20分钟:但是, ...

  4. 进击的Python【第十章】:Python的socket高级应用(多进程,协程与异步)

    Python的socket高级应用(多进程,协程与异步)

  5. Python多线程、多进程和协程的实例讲解

    线程.进程和协程是什么 线程.进程和协程的详细概念解释和原理剖析不是本文的重点,本文重点讲述在Python中怎样实际使用这三种东西 参考: 进程.线程.协程之概念理解 进程(Process)是计算机中 ...

  6. python爬虫——多线程+协程(threading+gevent)

    上一篇博客中我介绍了如何将爬虫改造为多进程爬虫,但是这种方法对爬虫效率的提升不是非常明显,而且占用电脑cpu较高,不是非常适用于爬虫.这篇博客中,我将介绍在爬虫中广泛运用的多线程+协程的解决方案,亲测 ...

  7. python进阶——进程/线程/协程

    1 python线程 python中Threading模块用于提供线程相关的操作,线程是应用程序中执行的最小单元. #!/usr/bin/env python # -*- coding:utf-8 - ...

  8. 多线程、多进程、协程、IO多路复用请求百度

    最近学习了多线程.多进程.协程以及IO多路复用,那么对于爬取数据来说,这几个方式哪个最快呢,今天就来稍微测试一下 普通方式请求百度5次 import socket import time import ...

  9. windows下多进程加协程并发模式

    好久没更新博客了.正好最近要整理一下最近这段时间做过的项目以及学习python的一些心得.如标题所示,今天就来说说windows下多进程加协程并发模式.其实网上还是蛮多在linux下的多进程加协程并发 ...

随机推荐

  1. java高级---->Java观察者的原理

    观察者模式定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象.这个主题对象在状态上发生变化时,会通知所有观察者对象,让他们能够自动更新自己.今天我们通过模拟按钮的处理事件来深入Java ...

  2. Golang 的 协程调度机制 与 GOMAXPROCS 性能调优

    作者:林冠宏 / 指尖下的幽灵 掘金:https://juejin.im/user/587f0dfe128fe100570ce2d8 博客:http://www.cnblogs.com/linguan ...

  3. 好用的Quartz管理器类

    转发的代码,原理就不提了 下面直接上代码: QuartzManager.java 动态添加.修改和删除定时任务管理类 import org.quartz.CronScheduleBuilder; im ...

  4. ArcGIS AddIN 10.3项目与10.1项目的相互转换

    1. .sln修改 用记事本打开.sln文件,在最上面将10的I昂么修改为12的项目 将下图 修改为下图 反之亦然 2. .csproj项目修改 用记事本打开.csproj文件, vs 2010文件如 ...

  5. Changing Ethernet Media Speed for AIX

    ITS UNIX Systems Changing Ethernet Media Speed for AIX First you need to find out the device name of ...

  6. RunExecuteFile

    using System; using System.Collections.Generic; using System.Diagnostics; using System.Linq; using S ...

  7. 关于springMVC的日志管理

    主要是基于在spring aop特性. 1. 创建一个系统日志的操作类,类里面提供一个方法,可以向数据库或者表中写入:访问用户名,访问IP,操作时间,访问包名,具体函数名. /** * @Name S ...

  8. 变量存储缓存机制 Number (int bool float complex)

    # ###变量存储的缓存机制(为了节省空间) #Number (int bool float complex) # (1) int -5~正无穷范围内 var1 = 18 var2 = 18 var1 ...

  9. 图片居中table-cell

  10. ARIMA模型总结

    时间序列建模基本步骤 获取被观测系统时间序列数据: 对数据绘图,观测是否为平稳时间序列:对于非平稳时间序列要先进行d阶差分运算,化为平稳时间序列: 经过第二步处理,已经得到平稳时间序列.要对平稳时间序 ...