java實(shí)現(xiàn)在性能測試中進(jìn)行業(yè)務(wù)驗(yàn)證實(shí)例
引言
在性能測試過程中,驗(yàn)證HTTP code和響應(yīng)業(yè)務(wù)code碼是比較基礎(chǔ)的,但是在一些業(yè)務(wù)中,這些參數(shù)并不能保證接口正常響應(yīng)了,很可能返回了錯(cuò)誤信息,所以這個(gè)時(shí)候?qū)涌谶M(jìn)行業(yè)務(wù)驗(yàn)證就尤其重要。下面分享一個(gè)對(duì)某個(gè)資源進(jìn)行業(yè)務(wù)驗(yàn)證的Demo。
改接口請求資源詳情,其中有一個(gè)字段是表示該用戶對(duì)于該資源的操作狀態(tài),踩贊類型:1-贊,2-踩,3-取消贊,4-取消踩。
改壓測一個(gè)接口,但是需要兩個(gè)接口的數(shù)據(jù)提供數(shù)據(jù),一個(gè)是登錄,一個(gè)是操作改資源的接口。
點(diǎn)贊和資源詳情的方法
具體的項(xiàng)目結(jié)構(gòu)之前講過,主要解決了請求方式,身份驗(yàn)證的問題,這里不再細(xì)說登錄以及如何將身份令牌傳遞給。下面分享一下點(diǎn)贊和資源詳情的方法代碼,兩者分屬兩個(gè)模塊未在一個(gè)類里面,我這里單獨(dú)挑出來:
/** * 點(diǎn)贊和踩 * * @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);//標(biāo)識(shí)是否課程包 0-否 1-是 params.put("operation", operation); params.put("resId", resId); params.put("resType", 5);//1-課件;2-題集;3-教學(xué)資料;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寫的,方便在服務(wù)器上調(diào)試,但是跟Java有些不同,如果用編譯器的童鞋請注意編譯器異常,有些找不著引用對(duì)象的時(shí)候需要手動(dòng),或者忽略這些異常:
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的響應(yīng)處理可能會(huì)拋出異常,fail()
是一個(gè)封裝的拋出通用運(yùn)行異常的方法,用來標(biāo)記響應(yīng)失敗,在框架中會(huì)捕捉doing()
方法的異常,并記錄統(tǒng)計(jì)線程運(yùn)行過程的數(shù)據(jù)。有興趣參考性能測試框架第二版。
以上就是java實(shí)現(xiàn)在性能測試中進(jìn)行業(yè)務(wù)驗(yàn)證實(shí)例的詳細(xì)內(nèi)容,更多關(guān)于java性能測試業(yè)務(wù)驗(yàn)證的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Spring?MVC實(shí)現(xiàn)GET請求接收Date類型參數(shù)
這篇文章主要介紹了Spring?MVC實(shí)現(xiàn)GET請求接收Date類型參數(shù),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-07-07微信小程序 navigator 跳轉(zhuǎn)url傳遞參數(shù)
這篇文章主要介紹了 微信小程序 navigator 跳轉(zhuǎn)url傳遞參數(shù)的相關(guān)資料,需要的朋友可以參考下2017-03-03Spring?Boot統(tǒng)一接口返回及全局異常處理
這篇文章主要介紹了Spring?Boot統(tǒng)一接口返回及全局異常處理,文章圍繞主題展開相關(guān)資料,具有一定的參考價(jià)值需要的小伙伴可以參考一下2022-04-04Spring中Websocket身份驗(yàn)證和授權(quán)的實(shí)現(xiàn)
在Web應(yīng)用開發(fā)中,安全一直是非常重要的一個(gè)方面,本文主要介紹了Spring中Websocket身份驗(yàn)證和授權(quán)的實(shí)現(xiàn),具有一定的參考價(jià)值,感興趣的可以了解一下2023-08-08java實(shí)現(xiàn)砸金蛋抽獎(jiǎng)功能
這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)砸金蛋抽獎(jiǎng)功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-11-11SpringBoot獲取配置文件的簡單實(shí)現(xiàn)方法
這篇文章主要給大家介紹了關(guān)于SpringBoot如何獲取配置文件的簡單實(shí)現(xiàn)方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用Spring Boot具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧2020-05-05