1. 程式人生 > 其它 >介面壓測_如何同時壓測建立和刪除介面

介面壓測_如何同時壓測建立和刪除介面

技術標籤:介面壓測

在最近的工作中,遇到了一批需要壓測的介面,其中兩個介面比較特殊:一個是建立資源介面,另外一個是刪除該資源的介面。

簡單功能描述

第一個介面功能是根據知識點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對應的資源。

引數如下:

JSONObjectparams=getParams()
params.put("activity_id",activity_id)

返回資訊如下:

~☢~~☢~~☢~~☢~~☢~~☢~~☢~~☢~~☢~~☢~JSON~☢~~☢~~☢~~☢~~☢~~☢~~☢~~☢~~☢~~☢~
>{
>①."data":{
>②...
>①.},
>①."meta":{
>②..."emsg":"",
>②..."ecode":0
>①.}
>}
~☢~~☢~~☢~~☢~~☢~~☢~~☢~~☢~~☢~~☢~JSON~☢~~☢~~☢~~☢~~☢~~☢~~☢~~☢~~☢~~☢~
  • 這裡有一個特殊的地方,對於同樣一個minicourse_id,同樣的建立資料,只能得到同一個ID,刪除操作落到資料庫裡面,其實是一個update。為了保證多個執行緒之間不發生錯亂干擾測試結果,依然採取了,執行緒繫結使用者繫結測試資料的方案。

方法封裝

首先封裝建立刪除兩個方法,暴露相關引數,這裡我用到了預設引數值的方法,省得呼叫時候得一個個修改了。

/**
*建立備課
*@paramkid
*@paramclass_id
*@paramcourse_type
*@paramsubject_id
*@paramminicourse_id
*@paramactivity_name
*@return
*/
publicJSONObjectcreatePre(intkid=68,intclass_id=50167,intcourse_type=4,intsubject_id=6,intminicourse_id=2109354,Stringactivity_name="FunTester"){
Stringurl=MirroApi.CREATE_PRE
JSONObjectparams=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)
JSONObjectresponse=getPostResponse(url,params)
output(response)
}

/**
*刪除備課
*@paramactivity_id
*@return
*/
publicJSONObjectdelPre(intactivity_id=343){
Stringurl=MirroApi.DEL_PRE
JSONObjectparams=getParams()
params.put("activity_id",activity_id)
JSONObjectresponse=getPostResponse(url,params)
output(response)
}

壓測指令碼

packagecom.okayqa.composer

importcom.fun.base.constaint.ThreadLimitTimesCount
importcom.fun.frame.excute.Concurrent
importcom.okayqa.composer.base.OkayBase
importcom.okayqa.composer.function.Mirro

classCOMTextendsOkayBase{

publicstaticvoidmain(String[]args){

defres=[]

200.times{

defbase1=getBase(it)
defmirro1=newMirro(base1)
res<newTT(mirro1,50)
}
newConcurrent(res,"建立備課刪除備課").start()

allOver()
}

staticclassTTextendsThreadLimitTimesCount{

Mirrom

intaid=0

publicTT(Mirromirro,inttimes){
super()
this.m=mirro
this.times=times
}

@Override
protectedvoiddoing()throwsException{
defpre=m.createPre()
if(aid==0){
aid=pre.getJSONObject("data").getIntValue("activity_id")
}
m.delPre(aid)
}
}
}

可以參考其他壓測指令碼的實現:

  • 手機號驗證碼登入效能測試
  • 繫結手機號效能測試
  • 如何效能測試中進行業務驗證
  • 效能測試中記錄每一個耗時請求
  • 如何對單行多次update介面進行壓測
  • 如何對多行單次update介面進行壓測

壓測結果展示

上面三圖是用Java工具類完成的,參考:效能測試中圖形化輸出測試資料


公眾號FunTester首發,原創分享愛好者,騰訊雲和掘金社群首頁推薦,知乎七級原創作者,歡迎關注、交流,禁止第三方擅自轉載。

FunTester熱文精選

  • 寫給所有人的程式設計思維
  • 2020年Tester自我提升
  • 未來的神器fiddler Everywhere
  • 測試開發工程師工作技巧
  • Selenium4 IDE,它終於來了
  • 如何成為全棧自動化工程師
  • 什麼阻礙手動測試發揮價值
  • 壓測中測量非同步寫入介面的延遲
  • “雙花”BUG的測試分享