写点什么

如何同时压测创建和删除接口

用户头像
FunTester
关注
发布于: 3 小时前

在最近的工作中,遇到了一批需要压测的接口,其中两个接口比较特殊:一个是创建资源接口,另外一个是删除该资源的接口。

简单功能描述

第一个接口功能是根据知识点 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.ThreadLimitTimesCountimport com.fun.frame.excute.Concurrentimport com.okayqa.composer.base.OkayBaseimport 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工具类完成的,参考:性能测试中图形化输出测试数据




FunTester 热文精选

发布于: 3 小时前阅读数: 2
用户头像

FunTester

关注

公众号:FunTester,650+原创,欢迎关注 2020.10.20 加入

Have Fun,Tester! 公众号FunTester,坚持原创文章的测试人。 FunTester测试框架作者,DCS_FunTester分布式性能测试框架作者。

评论

发布
暂无评论
如何同时压测创建和删除接口