「原创声明:保留所有权利,禁止转载」
相信一万行代码的理论!
上期将了定时和定量两种压测模式的虚拟类,本期分享一下基于单个HTTP
请求对象HTTPrequestbase
的两个压测模式的具体实现类。比较关键的就是GCThread
的启动和结束,还有就是doing()
方法的实现,就是把HTTPrequestbase
对象发送请求然后解析响应,这里并没有去管响应结果的校验和断言,原因就是比较复杂,需要具体情况具体处理,难以通过一个通用的方法校验,还有一个原因就是很多时候没必要,可以通过监控服务端日志和其他统计方式统计相关业务数据来达到判断所有请求是否有报错和不成功的请求。其中应该着重注意就是对象拷贝,不管是多线程类对象
还是HTTPrequestbase
对象,如果不实现clone()
方法,可能会有 BUG。
性能测试系列视频如下:
- 性能框架多线程基类和执行类 -- 视频讲解
接口测试视频基础部分已经录完了,后台回复 “接口视频” 可观看完整接口测试视频。
基于 HTTP 请求的多线程实现类
gitee 地址:https://gitee.com/fanapi/tester
定量模式
package com.fun.frame.thead;
import com.fun.base.constaint.ThreadLimitTimesCount;
import com.fun.base.interfaces.MarkThread;
import com.fun.frame.httpclient.FanLibrary;
import com.fun.frame.httpclient.FunRequest;
import com.fun.frame.httpclient.GCThread;
import org.apache.http.client.methods.HttpRequestBase;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
* http请求多线程类
*/
public class RequestThreadTimes extends ThreadLimitTimesCount {
static Logger logger = LoggerFactory.getLogger(RequestThreadTimes.class);
/**
* 请求
*/
public HttpRequestBase request;
/**
* 单请求多线程多次任务构造方法
*
* @param request 被执行的请求
* @param times 每个线程运行的次数
*/
public RequestThreadTimes(HttpRequestBase request, int times) {
super(null, times, null);
this.request = request;
}
/**
* 应对对每个请求进行标记的情况
*
* @param request
* @param times
* @param mark
*/
public RequestThreadTimes(HttpRequestBase request, int times, MarkThread mark) {
super(null, times, mark);
this.request = request;
}
protected RequestThreadTimes() {
super();
}
@Override
public void before() {
super.before();
GCThread.starts();
}
/**
* @throws Exception
*/
@Override
protected void doing() throws Exception {
FanLibrary.excuteSimlple(request);
}
@Override
public RequestThreadTimes clone() {
RequestThreadTimes threadTimes = new RequestThreadTimes();
threadTimes.times = this.times;
threadTimes.request = FunRequest.cloneRequest(request);
threadTimes.mark = mark == null ? null : mark.clone();
return threadTimes;
}
}
定时模式
package com.fun.frame.thead;
import com.fun.base.constaint.ThreadLimitTimeCount;
import com.fun.base.interfaces.MarkThread;
import com.fun.frame.httpclient.FanLibrary;
import com.fun.frame.httpclient.FunRequest;
import com.fun.frame.httpclient.GCThread;
import org.apache.http.client.methods.HttpRequestBase;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
* http请求多线程类
*/
public class RequestThreadTime extends ThreadLimitTimeCount {
static Logger logger = LoggerFactory.getLogger(RequestThreadTime.class);
/**
* 请求
*/
public HttpRequestBase request;
/**
* 单请求多线程多次任务构造方法
*
* @param request 被执行的请求
* @param time 每个线程运行的次数
*/
public RequestThreadTime(HttpRequestBase request, int time) {
super(null,time,null);
this.request = request;
}
/**
* @param request 被执行的请求
* @param time 执行时间
* @param mark 标记类对象
*/
public RequestThreadTime(HttpRequestBase request, int time, MarkThread mark) {
super(null,time, mark);
this.request = request;
}
protected RequestThreadTime() {
super();
}
@Override
public void before() {
super.before();
GCThread.starts();
}
@Override
protected void doing() throws Exception {
FanLibrary.excuteSimlple(request);
}
@Override
public RequestThreadTime clone() {
RequestThreadTime threadTime = new RequestThreadTime();
threadTime.time = this.time;
threadTime.request = FunRequest.cloneRequest(request);
threadTime.mark = mark == null ? null : mark.clone();
return threadTime;
}
}
- 郑重声明:“FunTester” 首发,欢迎关注交流,禁止第三方转载。
技术类文章精选
- Linux 性能监控软件 netdata 中文汉化版
- 图解 HTTP 脑图
- 性能测试中图形化输出测试数据
- JMeter 吞吐量误差分析
- 多项目登录互踢测试用例
- 从 Java 到 Groovy 的八级进化论
- JMeter 如何模拟不同的网络速度
- 手机号验证码登录性能测试
无代码文章精选
TesterHome 为用户提供「保留所有权利,禁止转载」的选项。
除非获得原作者的单独授权,任何第三方不得转载标注了「原创声明:保留所有权利,禁止转载」的内容,否则均视为侵权。
具体请参见TesterHome 知识产权保护协议。
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
暂无回复。