Java接口多线程并发测试 (一)
本文为作者原创,禁止转载,违者必究法律责任!!!
本文为作者原创,禁止转载,违者必究法律责任!!!
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接口多线程并发测试 (一)的更多相关文章
- Java接口多线程并发测试 (二)
原文地址http://www.cnblogs.com/yezhenhan/archive/2012/01/09/2317636.html 这是一篇很不错的文章,感谢原博主的分享! JAVA多线程实现和 ...
- Selenium & Webdriver 远程测试和多线程并发测试
Selenium & Webdriver 远程测试和多线程并发测试 Selenium Webdriver自动化测试,初学者可以使用selenium ide录制脚本,然后生成java程序导入ec ...
- Java核心-多线程-并发控制器-Semaphore信号量
Semaphore是非常有用的一个多线程并发控制组件(Java还有CountDownLatch.CyclicBarrier.Exchanger多线程组件),它相当于是一个并发控制器,是用于管理信号量的 ...
- Java核心-多线程-并发控制器-CountDownLatch倒数闩
1.基本概念 CountDownLatch,中文名倒数闩,jdk并发工具包中一个并发控制器,它抽象了一个常见的多线程并发场景,开发人员使用它可以写出同时兼顾线程安全性与高效率的代码. 2.抽象模型 相 ...
- Python + gevent模块对单个接口进行并发测试 1
本文知识点 利用gevent模块进行并发测试 代码如下 from gevent import monkey monkey.patch_all() import requests import geve ...
- Java中多线程并发体系知识点汇总
一.多线程 1.操作系统有两个容易混淆的概念,进程和线程. 进程:一个计算机程序的运行实例,包含了需要执行的指令:有自己的独立地址空间,包含程序内容和数据:不同进程的地址空间是互相隔离的:进程拥有各种 ...
- [Java复习] 多线程&并发 知识点补充
0. wait/notify/notifyAll的理解? wait:让持有该对象锁的线程等待: notify: 唤醒任何一个持有该对象锁的线程: notifyAll: 唤醒所有持有该对象锁的线程: 它 ...
- 利用Testng注释实现多线程并发测试
Testng 是一款非常优秀的测试框架,真正从测试角度出发,为测试所想.在测试过程中我们经常会遇到对某一个场景做并发请求,主要想了解该程序在并发时是否会有异常或者没考虑到的其他情况,这时往往不是要做性 ...
- Java核心-多线程-并发控制器-CyclicBarrier同步屏障
1.基本概念 中文译本同步屏障,同样来自jdk并发工具包中一个并发控制器,它的使用和CountDownLatch有点相似,能够完成某些相同并发场景,但是它们却不相同. 2.抽象模型 主要用来实现多个线 ...
随机推荐
- 傲游浏览器---自定义 UserAgent 字符串
遨游浏览器:http://www.maxthon.cn/ 自定义 UserAgent : http://www.fynas.com/ua 手机UserAgent大全 设备 系统 浏览器 User-A ...
- 跟我一起写Makefile:使用函数
跟我一起写Makefile:使用函数 两个排版不一样 书籍下载 书籍下载
- c实现的list
// clist.cpp : 定义控制台应用程序的入口点.// #include "stdafx.h"#include <stdio.h>#include <ma ...
- explain 和 desc 详解
MySQL性能分析 1.使用explain语句去查看分析结果 如explain select * from test1 where id=1;会出现:id selecttype table ty ...
- 配置Groovy开发环境(Windows)
1.配置java环境 跳过具体配置 C:\Users\Administrator>java -version java version "1.8.0_45" Java(TM) ...
- -bash: locate: command not found
部分版本的linux系统使用locate快速查找某文件路径会报以下错误: -bash: locate: command not found 其原因是没有安装mlocate这个包 安装:yum -y ...
- 【CF891C】Envy 离线+最小生成树
[CF891C]Envy 题意:给你一个图,边有边权,每次询问给你一堆边,问你是否存在一个原图的最小生成树包含给出的所有边.n,m,q<=100000 题解:思路很好的题. 首先有一个非常重要的 ...
- Css控制网页变灰
兼容IE chrome Firefox..... html{ filter:grayscale(%); -moz-filter:grayscale(%); -o-filter:grayscale(%) ...
- Mavlink - 无人机通讯协议
http://qgroundcontrol.org/mavlink/start mavlink协议介绍https://pixhawk.ethz.ch/mavlink/ 消息简介 MAVLink简介 M ...
- python基础-动态加载lazy_import(利用__import__)
看了一天动态加载,普遍有这么几种方法,总结一下,由简入深,本文仅对查到的栗子们做个引用……省去你们大把查资料的时间= = 主要思想:把模块(文件)名.类名.方法名当成了变量 然后利用__import_ ...