`
gainfirst
  • 浏览: 14655 次
  • 性别: Icon_minigender_1
  • 来自: 青海
最近访客 更多访客>>
社区版块
存档分类
最新评论

关于压力测试的简单脚本实现

阅读更多

     接口代码开发自己测试完毕后,最后的步骤就是和对端厂商进行压力测试,以便考验代码性能情况(这里面包含了代码,硬件,中间件部署等性能的测试)。这个是最烦人的步骤,尤其是你的对端厂商没有测试环境,更是令人闹心,要等到很晚系统本身不用的时候进行环境切换,如果测试顺利通过还行,如果不能通过要每晚都加班才能进行测试。一般处理并发量比较大的程序,都是通过多路硬件方式并发共同调用一个接口,以达到模拟大规模信息量的处理过程。硬件不是随时都具备的,当然也可以用流行的压测框架,但是部署太复杂。无奈之下,自己只好动手写了简单脚本,这里利用主进程里面启动多线程,每个线程里面循环多次的原理,也就是不断向自己接口端发送数据请求。代码如下:

   

一、主进程代码:

 

   package bss.intf.thread;

/**
 * 压测小脚本
 * @author zhangyp
 * @version 2009-02-28
 *
 */
public class MainControl {
 private static long sucessNum = 1;
 private static long shiNum = 1;

 public static void main(String[] args) {

  int i = 0;
  int num = 100;
  while (i < num) {
   i++;
   ThreadClient client = new ThreadClient();
   client.setNum(i);
   System.out.println("^^^^^^^^^线程" + i + "启动^^^^^^^^^^^^");
   client.start();//启动线程
  }
 }
}

 

 

二、线程脚本:


package bss.intf.thread;
import java.rmi.RemoteException;
import crmwsi.crm.WSSPortTypeProxy;

/**
 * @author zhangyp
 * @version 2009-02-28
 */
public class ThreadClient extends Thread {
 int num;
 public void setNum(int n) {
  this.num = n;
 }

//在run里面变动业务处理的逻辑
 public void run() {
  int i = 0;
  String accNbr = "18920020202";
  int accNbrType = 4;
  String password = "111";

  int passwordType = 1;
  int encryptFlag = 1;
  String areaCode = "022";

  String channelId = "-10000";
  String staffCode = "-10000";

  String outXml = "";
  while (i < 40) {
   System.out.println("==========第"+ num + "线程里面,第"+ i + "次请求START=======");
   WSSPortTypeProxy proxy = new WSSPortTypeProxy();
   proxy.setEndpoint(
    "http://136.64.44.237:9010/BssCrmWebService/services/CustomerService_B");
   try {
    outXml =
     proxy.checkPassword(
      accNbr,
      accNbrType,
      password,
      passwordType,
      encryptFlag,
      areaCode,
      channelId,
      staffCode);

    System.out.println(" outXml=" + outXml);
    i++;
    System.out.println(
     "***********第" + num + "线程里面,第" + i + "次请求END*****");
   } catch (RemoteException e) {
    System.out.println("ERROR");
    e.printStackTrace();
   }

  }

 }
 public static void main(String[] args) {
 }
}

 

      说明:这个是模拟客户端调用webservice的时候的测试脚本,效果很好的。大家也可以对run部分进行修改,我曾经测试过自己写的脚本,当线程启动是1000个,每个线程是里面循环100次的时候机器(小型机的配置24个CPU,40G的内存,中间件用的是weblogic8.1,数据库ORACLE9i)就会被压垮(不是机子挂掉,只是很多队列都塞满了,主机进程有死锁的),这时客户端就会报超时。未优化应用前,只要启动50个线程,每个线程里面循环10次,客户端就会报告超时。

     相同硬件效果的对比度:一般来说当启动200个线程循环100次,就相当于一秒钟200次业务处理量,也就是基本上可以硬件上一秒并发200次的效果,这个是做过测试的,我的客户需要一秒处理60次业务量,未优化前一秒30次都达不到,可是优化我先用这个脚本测试通过后,和华为(我的对端厂商,他们一般都用硬件进行压力测)测试后不仅达到他们的要求,而且一秒200次的并发量都没有问题

      缺点:没有加载时间,没有统计失败和成功次数,这个用的时候可以自己加上。不能够测试业务处理比较复杂的接口,正在改进!大家有好的想法也可以说下哈~!

分享到:
评论

相关推荐

    本地脚本的压力测试工具LocalLoader.zip

    一个简单的对本地脚本的压力测试的简单实现,使用控制并发工作线程的方式控制压力~ 标签:LocalLoader 压力测试

    LoadRunner使用技巧及相关知识点滴

    实现的方式,当然是通过简单的编程来调用错误日志里的信息,另外本文中还简单介绍了关于LoadRunner工具使用的一些常用注意事项、脚本处理技巧和一些常用性能参数的分析及性能测试中机器瓶颈的定义和查看机器瓶颈的...

    测试工具Jmeter安装包

    一、Jmeter是什么工具? JMeter是Apache组织开发的开源项目,设计之初是用于做...2.支持接口测试,压力测试等多种功能,支持录制回放,入门简单 3.相较于自己编写框架或其他开源工具,有较为完善的UI界面,便于接口调试

    消息中间件 RocketMQ 性能压测工具

    功能优势: 1 保证绝无 BUG,该工具封装自 RocketMQ 团队的 Benchmark,且经过本人测试。 2 功能强大,覆盖普通消息、定时(延时)消息、事务消息(提交、回滚)等基本场景的发送场景。...测试开发同学进行压力测试。

    《网站测试解决方案》(Empirix e Test Suite 8.01 )英文[ISO]

    该产品由三部分组成:e-TESTER、e-LOAD和e-MONITOR,这三种工具分别适用于应用功能测试、压力测试以及应用监控,每一部分的功能相互独立,测试过程中又可以彼此协同,从多方面保障了Web应用的成功。  e-TESTER:...

    loadrunner测试资料

    Loadrunner是一个强大有力的压力测试工具,它的脚本可以录制生成,自动关联。测试场景面向指标,实现了多方监控。而且测试结果采用图表显示,可以自由拆分组合。通过Loadrunner的测试结果图表对比,你可以寻找出系统...

    自动化测试与手动测试的优缺点

    测试工作无论是手工测试还是自动化测试都是软件质量保障的一个...它可以用简单的脚本,实现大量的重复的操作。从而通过对测试结果的分析,得出结论,这样不仅节省了大量的人力和物力,而且使测试的结果更准确。对于一

    C++课程作业基于跳表实现的轻型键值型数据库源码+项目说明.zip

    对数据库性能进行了简单的压力测试,采用了随机写读的方法,在不同数据规模下获得了每秒可处理请求数(QPS)指标。 &gt; - 如发现文档中或者源代码中有错误,欢迎大家在 `Issues` 中研究讨论,欢迎大家 `Fork` 和 `Pull...

    手工测试和自动测试的比较

    测试工作无论是手工测试还是自动化测试都是软件质量保障的一个途径。如何更好的使两者相互结合也是我们现在所要讨论的话题。...它可以用简单的脚本,实现大量的重复的操作。从而通过对测试结果的分析,得

    cpuPress:(A simple Linux CPU pressure test tools which can assign time lasts and CPU Utilization based on core numbers) 一个简单的、可指定压力值和时长的 Linux CPU 压力工具

    一个简单的、可指定压力值和时长的 Linux CPU 压力工具简介cpuPress 对cpu使用率的限制是基于cpulimit实现的,需要安装cpulimit工具,CentOS系统下cpuPress默认会帮你安装,脚本已在CentOS7.2测试通过,可以在脚本...

    OA办公完整源码(含数据库脚本)

    3、系统设计开发的规范性与全面性,利于系统的实现、测试、维护、版本升级等。开发人员既可全面了解OA系统所涉及的业务,也能对本身技术提升有所助益,同时减轻了团队开发压力,节约了开发成本; 4、采用B/S架构,...

    基于C++实现的HTTP服务器改进版源码+项目使用说明+详细注释.zip

    **6)改进方向**:待进行压力测试并提高抗压性能、可处理的HTTP请求较为简单(数据体的处理还待增加以及CGI功能的完善)、内存池。 3、编译使用 **服务端**:进入linux系统后,进入当前文件夹,首先修改可执行...

    Fiddler或Charles转换jmx

    解决脚本录制问题,可以将Fiddler或Charles转换成对应的Jmeter脚本,实现部分内容的参数化配置,通过修改部分参数或参数化可以对http协议的接口进行自动化测试或简单的压力测试。 1.打开Fiddler/Charles录制请求 2. 将...

    基于Python的网站路径扫描工具+源代码+文档说明

    **SitePathScan** 是一个扫描路径的脚本工具,基于 Python 语言,总体结构较简单,Tag v1.0参照王松师傅之前所写的 [webdirscan](https://github.com/Strikersb/webdirscan) 实现了多线程;Tag v2.0受b0uya师傅帮助...

    对python 自定义协议的方法详解

    前面说到最近在写python的一些东西,然后和另外一位小伙伴定义了协议,然后昨天我有一部分东西没理解对,昨天上午我自己重写了一遍接收和发送的全部逻辑,昨天下午补了压力测试的脚本,自测没问题之后告知联调的小...

    PrimoCache V2.6.0 重置试用期

    由于有监控存在,此方法如果想用老方法运行简单脚本去清理的话,本虽然可以清理, 但由于受监控,所以会失败,所以必须借助其他第三方工具处理注册表, 当然删除系统占用的文件也得用特殊工具。基本上两个工具在BAT...

    vc++ 应用源码包_1

    该实例可进行局域网的聊天、一对多、多对一、和多对多的传送和续传,理论上这是我本人的实现目的,而且目前经测试已基本实现了上述功能,而且网速一般有几M/S。另外有只打开一个应用程序、CRichEdit的使用、最小到...

    vc++ 应用源码包_2

    该实例可进行局域网的聊天、一对多、多对一、和多对多的传送和续传,理论上这是我本人的实现目的,而且目前经测试已基本实现了上述功能,而且网速一般有几M/S。另外有只打开一个应用程序、CRichEdit的使用、最小到...

    vc++ 应用源码包_6

    该实例可进行局域网的聊天、一对多、多对一、和多对多的传送和续传,理论上这是我本人的实现目的,而且目前经测试已基本实现了上述功能,而且网速一般有几M/S。另外有只打开一个应用程序、CRichEdit的使用、最小到...

Global site tag (gtag.js) - Google Analytics