介面壓測_如何同時壓測建立和刪除介面
阿新 • • 發佈:2021-01-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
對應的資源。
引數如下:
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的測試分享