本文为作者原创,禁止转载,违者必究法律责任!!!

本文为作者原创,禁止转载,违者必究法律责任!!!

Java接口多线程并发测试

一,首先写一个接口post 请求代码:

import org.apache.http.HttpEntity;
import org.apache.http.HttpStatus;
import org.apache.http.StatusLine;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.util.EntityUtils; public class postRequest { public static void postRequestTest(String para1, String para2, String para3 ) throws Exception {
long begaintime = System.currentTimeMillis();//开始系统时间
CloseableHttpClient httpclient = HttpClients.createDefault(); String url = "https://www.baidu.com";
HttpPost httpPost = new HttpPost(url);// 创建httpPost
httpPost.setHeader("Authorization", "Bearer qwertyu12345678zxcvbnm");
httpPost.setHeader("Content-Type", "application/json");
httpPost.setHeader("time", "11234567890");
httpPost.setHeader("X-Accept-Locale", "zh_CN"); //添加 body 参数
String orderToken = postRequest1(para1); //从上一个接口的返回数据里面获取参数
String body = String.format("{\"Name\":\"%s\",\"age\":\"%s\",\"address\":\"%s\"}", para2, para3,orderToken); httpPost.setEntity(new StringEntity(body)); //设置 params 参数-------------设置了body就不能再设置params
//String params = "";
//String charSet = "UTF-8";
//StringEntity entity = new StringEntity(params, charSet);
//httpPost.setEntity(entity); CloseableHttpResponse response = null;
try {
response = httpclient.execute(httpPost);
StatusLine status = response.getStatusLine();
int state = status.getStatusCode();
if (state == HttpStatus.SC_OK) {
HttpEntity responseEntity = response.getEntity();
String jsonString = EntityUtils.toString(responseEntity);
System.out.println("TakegoOrder 接口请求成功");
//return jsonString;
System.out.println(jsonString);
if(jsonString.contains("\"success\":true")&&jsonString.contains("\"time\":\"2018")){
System.out.println("成功查询!!!!");
}else {
System.err.println("查询失败!!----"+body);
} }
else{
System.err.println("请求返回:"+state+"("+url+")");
}
}
finally {
if (response != null) {
try {
response.close();
} catch (IOException e) {
e.printStackTrace();
}
}
try {
httpclient.close();
} catch (IOException e) {
e.printStackTrace();
}
long endTime = System.currentTimeMillis(); //结束时间
System.out.println(" 接口请求耗时 : "+(endTime-begaintime));
}
//return null;
}

二,再写一个 MyThread 类 继承Runnable 接口

import java.util.concurrent.CountDownLatch;

public class MyThread implements Runnable {

    private String para1;
private String para2;
private String para3;
private CountDownLatch countDownLatch; //多线程结束后,执行后面的代码(计算时间、数量) public MyThread(String para1, String para2, String para3, CountDownLatch countDownLatch) {
this.para1 = para1;
this.para2 = para2;
this.para3 = para3;
this.countDownLatch = countDownLatch;
} public void run() { try{
postRequest.postRequestTest(para1, para2, para3);
}catch(Exception e){
e.printStackTrace();
}finally {
countDownLatch.countDown();
}
} }

三,写一个test 类的main方法来执行多线程并发

public class Test {

    public static void main(String[] args) throws InterruptedException {

        long begaintime = System.currentTimeMillis();//开始系统时间

        //线程池
ExecutorService pool = Executors.newCachedThreadPool();
//设置集合点为93
final int count = 50;
CountDownLatch countDownLatch = new CountDownLatch(count);//与countDownLatch.await();实现运行完所有线程之后才执行后面的操作
//final CyclicBarrier barrier = new CyclicBarrier(count); //与barrier.await() 实现并发;
//创建100个线程
for(int i = 0; i < count; i++){ MyThread target = new MyThread("para1", "para2", "para3", countDownLatch);
//barrier.await();
pool.execute(target);
} pool.shutdown();
try {
countDownLatch.await(); //这一步是为了将全部线程任务执行完以后,开始执行后面的任务(计算时间,数量)
} catch (InterruptedException e) {
e.printStackTrace();
}
long endTime = System.currentTimeMillis(); //结束时间
System.out.println(count + " 个 接口请求总耗时 : "+(endTime-begaintime)+"-----平均耗时为"+ ((endTime-begaintime)/count));
} }

本文为作者原创,禁止转载,违者必究法律责任!!!

本文为作者原创,禁止转载,违者必究法律责任!!!

Java接口多线程并发测试 (一)的更多相关文章

  1. Java接口多线程并发测试 (二)

    原文地址http://www.cnblogs.com/yezhenhan/archive/2012/01/09/2317636.html 这是一篇很不错的文章,感谢原博主的分享! JAVA多线程实现和 ...

  2. Selenium & Webdriver 远程测试和多线程并发测试

    Selenium & Webdriver 远程测试和多线程并发测试 Selenium Webdriver自动化测试,初学者可以使用selenium ide录制脚本,然后生成java程序导入ec ...

  3. Java核心-多线程-并发控制器-Semaphore信号量

    Semaphore是非常有用的一个多线程并发控制组件(Java还有CountDownLatch.CyclicBarrier.Exchanger多线程组件),它相当于是一个并发控制器,是用于管理信号量的 ...

  4. Java核心-多线程-并发控制器-CountDownLatch倒数闩

    1.基本概念 CountDownLatch,中文名倒数闩,jdk并发工具包中一个并发控制器,它抽象了一个常见的多线程并发场景,开发人员使用它可以写出同时兼顾线程安全性与高效率的代码. 2.抽象模型 相 ...

  5. Python + gevent模块对单个接口进行并发测试 1

    本文知识点 利用gevent模块进行并发测试 代码如下 from gevent import monkey monkey.patch_all() import requests import geve ...

  6. Java中多线程并发体系知识点汇总

    一.多线程 1.操作系统有两个容易混淆的概念,进程和线程. 进程:一个计算机程序的运行实例,包含了需要执行的指令:有自己的独立地址空间,包含程序内容和数据:不同进程的地址空间是互相隔离的:进程拥有各种 ...

  7. [Java复习] 多线程&并发 知识点补充

    0. wait/notify/notifyAll的理解? wait:让持有该对象锁的线程等待: notify: 唤醒任何一个持有该对象锁的线程: notifyAll: 唤醒所有持有该对象锁的线程: 它 ...

  8. 利用Testng注释实现多线程并发测试

    Testng 是一款非常优秀的测试框架,真正从测试角度出发,为测试所想.在测试过程中我们经常会遇到对某一个场景做并发请求,主要想了解该程序在并发时是否会有异常或者没考虑到的其他情况,这时往往不是要做性 ...

  9. Java核心-多线程-并发控制器-CyclicBarrier同步屏障

    1.基本概念 中文译本同步屏障,同样来自jdk并发工具包中一个并发控制器,它的使用和CountDownLatch有点相似,能够完成某些相同并发场景,但是它们却不相同. 2.抽象模型 主要用来实现多个线 ...

随机推荐

  1. 重建索引:ALTER INDEX..REBUILD ONLINE vs ALTER INDEX..REBUILD

    什么时候需要重建索引 1. 删除的空间没有重用,导致 索引出现碎片 2. 删除大量的表数据后,空间没有重用,导致 索引"虚高" 3.索引的 clustering_facto 和表不 ...

  2. Implicit conversion from enumeration type 'enum CGImageAlphaInfo' to different enumeration type 'CGBitmapinfo' (aka) 'enum CGBitmapInfo')

    The constants for specifying the alpha channel information are declared with the CGImageAlphaInfo ty ...

  3. IIS7配置伪静态把后缀名映射为html方案

    1.在IIS新建站点.[创建的时候不用去选择版本和模式,默认即可] 2.选中站点,切换到功能试图,找到“处理程序映射",双击之后,在打开窗口右侧的操作栏目下做如下设置: 1)右边" ...

  4. mysql max(),min()的优化

    Select tables optimized away(选择表优化)

  5. MySql数据库查询表信息/列信息(列ID/列名/数据类型/长度/精度/是否可以为null/默认值/是否自增/是否是主键/列描述)

    查询表信息(表名/表描述): SELECT table_name name,TABLE_COMMENT value FROM INFORMATION_SCHEMA.TABLES WHERE table ...

  6. Docker实现跨主机互联

    首先修改一台docker的默认网络段 修改配置文件/usr/lib/systemd/system/docker.service 设置生效(重载配置文件并且重启) systemctl daemon-re ...

  7. Python3.6.3中,functools似乎不能用

    用pip install安装时报编码错误: return s.decode(sys.__stdout__.encoding) UnicodeDecodeError: 'utf-8' codec can ...

  8. RHEL6 Systemtap 安装笔记

    以 RHEL6u3 为例 1  Systemtap 安装 yum install systemtap 跟systemtap有关的有6,7个,全装上,别偷懒 就用yum安装,别傻傻的去下rpm包,吃力不 ...

  9. 洛谷P1967 货车运输 [noip2013] 图论

    正解:kruskal+LCA 解题报告: 哇真实心痛了...明明都没多少时间了我居然耗了一个上午+一个中午在上面?哭死辽我QAQ果然菜是原罪QAQ 然后这题,我先港下60pts做法趴?话说其实我觉得我 ...

  10. Library Publication 时遇到 "more than one library with package name" 错误的解决方法

    Library Publication 是 Gradle 在0.9.0 时增加的一个新特性,它的作用是让Lib也能发布不同的版本 在这之前,Lib只能发布release版本,你的项目中依赖的所有Lib ...