如何同时压测创建和删除接口
时间:2022-07-25
本文章向大家介绍如何同时压测创建和删除接口,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
在最近的工作中,遇到了一批需要压测的接口,其中两个接口比较特殊:一个是创建资源接口,另外一个是删除该资源的接口。
简单功能描述
第一个接口功能是根据知识点ID、类型、学科ID、素材ID等创建一个资源。
接口参数如下:
params.put("kid", kid)
params.put("class_id", class_id)
params.put("class_type", 3)//0 -行政班 3-教学班
params.put("course_type", course_type)
params.put("subject_id", subject_id)
params.put("minicourse_id", minicourse_id)
params.put("activity_name", activity_name)
params.put("page_index", 1)
params.put("page_size", 10)
请求成功响应:
~☢~~☢~~☢~~☢~~☢~~☢~~☢~~☢~~☢~~☢~ JSON ~☢~~☢~~☢~~☢~~☢~~☢~~☢~~☢~~☢~~☢~
> {
> ① . "data":{
> ② . . . "activity_id":674
> ① . },
> ① . "meta":{
> ② . . . "emsg":"",
> ② . . . "ecode":0
> ① . }
> }
~☢~~☢~~☢~~☢~~☢~~☢~~☢~~☢~~☢~~☢~ JSON ~☢~~☢~~☢~~☢~~☢~~☢~~☢~~☢~~☢~~☢~
第二个接口就是根据第一个接口返回的ID
,删除该ID
对应的资源。
参数如下:
JSONObject params = getParams()
params.put("activity_id", activity_id)
返回信息如下:
~☢~~☢~~☢~~☢~~☢~~☢~~☢~~☢~~☢~~☢~ JSON ~☢~~☢~~☢~~☢~~☢~~☢~~☢~~☢~~☢~~☢~
> {
> ① . "data":{
> ② . . .
> ① . },
> ① . "meta":{
> ② . . . "emsg":"",
> ② . . . "ecode":0
> ① . }
> }
~☢~~☢~~☢~~☢~~☢~~☢~~☢~~☢~~☢~~☢~ JSON ~☢~~☢~~☢~~☢~~☢~~☢~~☢~~☢~~☢~~☢~
- 这里有一个特殊的地方,对于同样一个
minicourse_id
,同样的创建数据,只能得到同一个ID
,删除操作落到数据库里面,其实是一个update
。为了保证多个线程之间不发生错乱干扰测试结果,依然采取了,线程绑定用户绑定测试数据的方案。
方法封装
首先封装创建和删除两个方法,暴露相关参数,这里我用到了默认参数值的方法,省得调用时候得一个个修改了。
/**
* 创建备课
* @param kid
* @param class_id
* @param course_type
* @param subject_id
* @param minicourse_id
* @param activity_name
* @return
*/
public JSONObject createPre(int kid = 68, int class_id = 50167, int course_type = 4, int subject_id = 6, int minicourse_id = 2109354, String activity_name = "FunTester") {
String url = MirroApi.CREATE_PRE
JSONObject params = getParams()
params.put("kid", kid)
params.put("class_id", class_id)
params.put("class_type", 3)//0 -行政班 3-教学班
params.put("course_type", course_type)
params.put("subject_id", subject_id)
params.put("minicourse_id", minicourse_id)
params.put("activity_name", activity_name)
params.put("page_index", 1)
params.put("page_size", 10)
JSONObject response = getPostResponse(url, params)
output(response)
}
/**
* 删除备课
* @param activity_id
* @return
*/
public JSONObject delPre(int activity_id = 343) {
String url = MirroApi.DEL_PRE
JSONObject params = getParams()
params.put("activity_id", activity_id)
JSONObject response = getPostResponse(url, params)
output(response)
}
压测脚本
package com.okayqa.composer
import com.fun.base.constaint.ThreadLimitTimesCount
import com.fun.frame.excute.Concurrent
import com.okayqa.composer.base.OkayBase
import com.okayqa.composer.function.Mirro
class COMT extends OkayBase {
public static void main(String[] args) {
def res = []
200.times {
def base1 = getBase(it)
def mirro1 = new Mirro(base1)
res << new TT(mirro1,50)
}
new Concurrent(res,"创建备课删除备课").start()
allOver()
}
static class TT extends ThreadLimitTimesCount{
Mirro m
int aid = 0
public TT(Mirro mirro,int times) {
super()
this.m = mirro
this.times = times
}
@Override
protected void doing() throws Exception {
def pre = m.createPre()
if (aid == 0) {
aid = pre.getJSONObject("data").getIntValue("activity_id")
}
m.delPre(aid)
}
}
}
可以参考其他压测脚本的实现:
压测结果展示
上面三图是用Java
工具类完成的,参考:性能测试中图形化输出测试数据
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Sqoop导入数据时异常java.net.ConnectException: Connection refused
- Flume——高可用的、高可靠的、分布式日志收集系统
- Hadoop技术(三)数据仓库工具Hive
- Hadoop技术(一)分布式文件系统HDFS
- Docker技术( 容器虚拟化技术 )
- 分布式事务处理技术之LCN
- Swagger技术(接口文档实时动态生成工具)
- 大数据学习之Linux基础
- Spring全家桶之SpringData——Spring Data JPA
- 异常 object references an unsaved transient instance - 的解决
- Spring的底层源码分析
- Mybatis的源码分析
- Tomcat的源码分析
- Servlet的源码分析
- 设计模式之行为型模式