在性能测试过程中,验证 HTTP code 和响应业务 code 码是比较基础的,但是在一些业务中,这些参数并不能保证接口正常响应了,很可能返回了错误信息,所以这个时候对接口进行业务验证就尤其重要。下面分享一个对某个资源进行业务验证的 Demo。
改接口请求资源详情,其中有一个字段是表示该用户对于该资源的操作状态,踩赞类型:1-赞,2-踩,3-取消赞,4-取消踩。
改压测一个接口,但是需要两个接口的数据提供数据,一个是登录,一个是操作改资源的接口。
具体的项目结构之前讲过,主要解决了请求方式,身份验证的问题,这里不再细说登录以及如何将身份令牌传递给。下面分享一下点赞和资源详情的方法代码,两者分属两个模块未在一个类里面,我这里单独挑出来:
/**
* 点赞和踩
*
* @param resId 资源id
* @param operation 操作类型(踩赞类型:1-赞,2-踩,3-取消赞,4-取消踩)
* @return
*/
public JSONObject likeOrNot(int resId, int operation) {
String url = FlowApi.LIKE_OR_NOT;
JSONObject params = getParams();
params.put("isCoursePackage", 0);//标识是否课程包 0-否 1-是
params.put("operation", operation);
params.put("resId", resId);
params.put("resType", 5);//1-课件;2-题集;3-教学资料;4-课程包;5:题目
JSONObject response = getPostResponse(url, params);
output(response);
return response;
}
/**
* 课程包详情
*
* @param resid 资源ID 1030167
* @return
*/
public JSONObject courseDetail(int resid) {
String url = LauncherApi.COURSE_DETAIL;
JSONObject params = getParams();
params.put("id", resid);
JSONObject response = getPostResponse(url, params);
// output(response);
return response;
}
下面是压测脚本,是用 Groovy 写的,方便在服务器上调试,但是跟 Java 有些不同,如果用编译器的童鞋请注意编译器异常,有些找不着引用对象的时候需要手动,或者忽略这些异常:
public static void main(String[] args) {
def argsUtil = new ArgsUtil(args)
def thread = argsUtil.getIntOrdefault(0, 2)
def times = argsUtil.getIntOrdefault(1, 2)
def threads = []
thread.times {
threads << new ThreadLimitTimesCount<Integer>(it, times) {
def resid = 1030167
def operation = getRandomInt(4)
def drive
@Override
public void before() {
super.before()
def base = new OkayBase(it)
def flow = new Flow(base)
flow.likeOrNot(this.resid, this.operation)
this.drive = new Launcher(base)
sleep(1000)
}
@Override
protected void doing() throws Exception {
def response = this.drive.courseDetail(this.resid)
int anInt = response.getJSONObject("data").getInt("like_state");
if (anInt != 3) fail();
}
@Override
protected void after() {
}
}
}
new Concurrent(threads).start()
allOver();
}
在doing()
方法中 response 的响应处理可能会抛出异常,fail()
是一个封装的抛出通用运行异常的方法,用来标记响应失败,在框架中会捕捉doing()
方法的异常,并记录统计线程运行过程的数据。有兴趣参考性能测试框架第二版。