首页 技术 正文
技术 2022年11月20日
0 收藏 347 点赞 3,151 浏览 3615 个字

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

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

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));
}}

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

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

相关推荐
python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:9,104
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,580
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,428
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,200
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:7,835
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:4,918