最近要对一个webservice接口做测试,需测试高并发接口是否会以异常数据返回,编写了如下demo,有类似需求的可以参考下。

注意事项:

1,线程使用了callable接口形式,call相对runable接口有个好处是允许带有返回值。

2,线程需要的入参可以在初始化时带入。比如本例中的List<String> keyList, List<String> tenantIdList,就是线程入参。

3,线程出参return 出来即可。使用线程提交到线程池submit时返回的future对象的get()方法可以取得线程的最终返回值,本例中future.get()取得的就是各个线程返回的genIDs的list<String>对象。

import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import java.util.concurrent.*;public class MultiThreadTest {/*** 程序总入口*/public static void main(String[] args) {long millis_start = System.currentTimeMillis();int threadNum = 5;List<String> list = new ArrayList<String>();//创建线程池ExecutorService pool = Executors.newCachedThreadPool();List<String> tenantIdList = new ArrayList<String>();tenantIdList.add("000001");tenantIdList.add("000011");List<String> keyList = new ArrayList<String>();keyList.add("STOCKID");keyList.add("STOCKNAME");for (int i = 0; i < threadNum; i++) {Callable<List<String>> myThread = new CallThread(i, keyList, tenantIdList);Future<List<String>> future = pool.submit(myThread);try {list.addAll(future.get());} catch (InterruptedException e) {e.printStackTrace();} catch (ExecutionException e) {e.printStackTrace();}}pool.shutdown();Set<String> listSet = new HashSet<String>(list);System.out.println("list_size:" + list.size() + " list_set_size:" + listSet.size());if (list.size() != listSet.size()) {System.out.println("数据有重复");System.out.println("list:" + list);System.out.println("listSet:" + listSet);}else{System.out.println("数据无重复");}long millis_end = System.currentTimeMillis();System.out.println("总耗时(s):" + (millis_end - millis_start));}}/*** 可返回list<String>数据的线程,需要自己实现其中的call函数*/
class CallThread implements Callable<List<String>> {private int i; // 第几个线程List<String> tenantIdList;List<String> keyList;List<String> genIDs = new ArrayList<String>();/*** 构造函数,可将任务依赖的变量传入** @param keyList,任务依赖的变量* @param tenantIdList,任务依赖的变量* @return list<String>*/public CallThread(int i, List<String> keyList, List<String> tenantIdList) {this.i = i;this.keyList = keyList;this.tenantIdList = tenantIdList;}public List<String> call() throws Exception {for (int j = 0; j < this.keyList.size(); j++) {for (int k = 0; k < this.tenantIdList.size(); k++) {/*这里的yourdata实际可能为webservice接口的调用,或client的调用*/String yourData = this.i+this.keyList.get(j) + this.tenantIdList.get(k);//String yourData = this.keyList.get(j) + this.tenantIdList.get(k);genIDs.add(yourData);}}return genIDs;}
}

java多线程测试框架(含入参和返回值)相关推荐

  1. java值参_Java陷阱之慎用入参做返回值详解

    正常情况下,在Java中入参是不建议用做返回值的.除了造成代码不易理解.语义不清等问题外,可能还埋下了陷阱等你入坑. 问题背景 比如有这么一段代码: @Named public class AServ ...

  2. java什么时候用有参_Java有陷阱——慎用入参做返回值

    正常情况下,在Java中入参是不建议用做返回值的.除了造成代码不易理解.语义不清等问题外,可能还埋下了陷阱等你入坑. 问题背景 比如有这么一段代码: 上面代码,服务A希望调用服务B,以获取supply ...

  3. java 返回值给c_Java有陷阱,用时需谨慎——慎用入参做返回值

    正常情况下,在Java中入参是不建议用做返回值的.除了造成代码不易理解.语义不清等问题外,可能还埋下了陷阱等你入坑. 问题背景 比如有这么一段代码:@Named public class AServi ...

  4. java 骗局_Java有陷阱,用时需谨慎——慎用入参做返回值

    正常情况下,在Java中入参是不建议用做返回值的.除了造成代码不易理解.语义不清等问题外,可能还埋下了陷阱等你入坑. 问题背景 比如有这么一段代码: @Named public class AServ ...

  5. IntelliJ IDEA设置方法注释模板并解决入参和返回值为空问题

    ## 简介 网上讲解设置方法注释模板的文章很多,尝试了很多方法后,发现在方法体外生成的模板入参值和返回值都是null,而放到方法体内的入参值和返回值就可以自动生成.苦试N次,终于发现诀窍.Idea的这 ...

  6. Spring AOP(获取入参和返回值)及其原理:动态代理

    此篇会先演示Spring AOP(获取入参和返回值),之后再演示AOP的原理:动态代理. Spring AOP: AOP思想: AOP(Aspect Oriented Programming),即面向 ...

  7. Spring Boot AOP处理方法的入参和返回值

    前言 IOC和AOP是Spring 中最重要的两个模块.这里练习一下如何使用Spring Boot AOP处理方法的入参和返回值. Spring AOP的简单介绍: AOP(Aspect-Orient ...

  8. fastapi基本使用之:入参,返回值与异常处理

    fastapi针对前后端分离的api操作做了相当多的订制,对于体现在入参.返回值以及异常处理上. 传入的参数可以有三种,路径参数,查询参数以及请求体. 参数的自动匹配,类型转换: 传统的web开发,需 ...

  9. 根据WebService地址展示方法列表、入参和返回值(解析wsdl)

    项目源码:https://gitee.com/xuchuruo/parsing_wsdl(有些jar包Maven上无法下载) ------------------------------------- ...

最新文章

  1. tensorflow gan 网络 示例
  2. Windows系统安装zabbix-agent客户端
  3. 【转】第00课导读:生活中的设计模式——启程之前,请不要错过我
  4. VSCode自定义代码片段2——.vue文件的模板
  5. iPhone:你知道这 13 年我是怎么过的吗?
  6. Angular移动工具集要让Web应用有原生的感觉
  7. phthon学习笔记(3)
  8. java 加锁_Java中的重重“锁”事
  9. 蓝桥杯c语言基础试题答案,2014年蓝桥杯c语言试题及答案
  10. 科学计算机怎么输入角度,怎么用科学计算器算角度
  11. 学习笔记 Tianmao 篇 FragmentTabHost (TabHost升级版)
  12. 如何导入以前的qq聊天记录
  13. aar64不支持Pycharm部分版本导致cannot open local terminal的解决方法
  14. 无线网络性能测试 软件,WiFi性能测试
  15. H5静态网页设计与制作_川西旅游网设计作品(HTML+CSS+jQuery)
  16. 你应该知道的6个GameFi机制
  17. Android Q 适配指南 让你少走一堆弯路
  18. 太懒了,所以用小爱开楼下的门禁
  19. USB学习笔记(5)STM32 USB库移植步骤
  20. PHP输出结构类型变量输出,1.PHP基本语法__输出语句、变量、数据类型

热门文章

  1. 线程启动start和run
  2. 深掘市场 开拓机遇 西部数据将亮相2014年北京安博会
  3. wordpress-4.7.2-zh_CN页面加载慢
  4. API聚合网关技术选型参考-网友实战-使用协程
  5. java整理软件--- Java OCR 图像智能字符识别技术,可识别中文,但是验证码不可以识别...已测识别中文效果很好...
  6. 程序员最害怕的5件事 你中招了吗?
  7. iOS开发那些事-平铺导航–基于分屏导航及案例实现
  8. python 杀死一个线程
  9. golang 执行外部命令 超时处理 exec.CommandContext
  10. linux putty xshell vi 小键盘无法使用的解决方法