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

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

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. C和C++书籍推荐

    http://bestcbooks.com/recommend/most-influential-book/ http://www.ruanyifeng.com/blog/2011/09/c_prog ...

  2. CSS学习之浮动

    首先要知道,div是块级元素,在页面中独占一行,自上而下排列,也就是传说中的流.如下图: 可以看出,即使div1的宽度很小,页面中一行可以容下div1和div2,div2也不会排在div1后边,因为d ...

  3. Web Uploader在低版本IE下无法显示Flash的一种情况

    用户反馈在IE 8下无法正常显示Web Uploader控件,并已安装了Flash插件.调试发现在内部抛出了Runtime Error的错误,关键代码如下: Runtime.create = func ...

  4. Unity3D笔记 英保通一

    一.材质和着色器 1.材质和着色器紧密的联系,其中材质相当于是一个框架,而着色器就是框架中中的内容.在材质框架中可以选择不同的Shader并调节不同的 属性 Material和Physic Mater ...

  5. Swift - 判断应用是否是第一次启动(或当前版本是否第一次启动)

    1 实现原理 (1)我们会发现许多 App 在一次启动时会显示一个新手引导页(下次启动就不会再显示)   (2)其判断原理就是在 AppDelegate 里的 didFinishLaunchingWi ...

  6. Web前端编码规范[转]

    先插入一条广告,博主新开了一家淘宝店,经营自己纯手工做的发饰,新店开业,只为信誉!需要的亲们可以光顾一下!谢谢大家的支持!店名: 小鱼尼莫手工饰品店经营: 发饰.头花.发夹.耳环等(手工制作)网店: ...

  7. python----题库(一)

    1.执行 Python 脚本的两种方式 答:1.>>python ../pyhton.py 2. >>python.py #必须在首行有 #!/usr/bin/env pyth ...

  8. Exception in thread "main" java.lang.StackOverflowError

    总结:1.创建对象时,在父类构造方法new子类对象,这样会造成循环调用构造方法

  9. ubuntu下安装opencv3.1.0

    ubuntu14.04安装opencv3.1 1.下载opencv3.1源码http://opencv.org/releases.html 2.安装opencv3 2.1安装opencv3的依赖 1 ...

  10. Python的Scikit-learn如何选择合适的机器学习算法?

    参考网址:http://scikit-learn.org/stable/tutorial/machine_learning_map/index.html