Jmeter實(shí)戰(zhàn)中遇到的問題

前言:以往在json串比對(duì)的時(shí)候档押,我們都是一對(duì)一的忽略順序比對(duì)方式令宿,本次遇到了一個(gè)奇怪比對(duì)方式(反正我是之前沒想到的),看來又得擼碼打包了筛婉。

? 別總以為測(cè)試人員就不需要擼碼癞松,沒聽說一句老話么,不會(huì)前端的測(cè)試不是好的架構(gòu)師(搞笑的)匆浙。好了厕妖,bb這么多言秸,就是希望沒事提高一下自身水平迎捺,還是來看看什么情況凳枝。先給大家簡(jiǎn)單講一講之前我們?cè)谧鼋涌谧詣?dòng)化測(cè)試的時(shí)候跋核,我們是進(jìn)行json串的比對(duì)叛买,像這樣:

//[OLD]
//用例預(yù)期結(jié)果:
[{"channel":"AA","value":12},{"channel":"BB","value":20}]
//接口返回的結(jié)果:
[{"channel":"BB","value":20},{"channel":"AA","value":12}]

這樣的比對(duì)很簡(jiǎn)單率挣,只需要以數(shù)組的形式比對(duì)就可以了(或者其他方法),以下是我從CSDN里面參考的代碼(需要自行導(dǎo)如Gson包)

    /**
     * 比較兩個(gè)json字符串是否等價(jià)
     * (本次用的是gson2.8.5的包捶箱,自行下載)
     */
    public boolean same(String a, String b) {
        if (a == null) {
            return b == null;
        }
        if (a.equals(b)) {
            return true;
        }
        JsonElement aElement = parser.parse(a);
        JsonElement bElement = parser.parse(b);
        if (gson.toJson(aElement).equals(gson.toJson(bElement))) {
            return true;
        }
        return same(aElement, bElement);
    }

    private boolean same(JsonElement a, JsonElement b) {
        if (a.isJsonObject() && b.isJsonObject()) {
            return same((JsonObject) a, (JsonObject) b);
        } else if (a.isJsonArray() && b.isJsonArray()) {
            return same((JsonArray) a, (JsonArray) b);
        } else if (a.isJsonPrimitive() && b.isJsonPrimitive()) {
            return same((JsonPrimitive) a, (JsonPrimitive) b);
        } else if (a.isJsonNull() && b.isJsonNull()) {
            return same((JsonNull) a, (JsonNull) b);
        } else {
            return Boolean.FALSE;
        }
    }

【可以自行打成包然后放入jmeter進(jìn)行比對(duì)json】

現(xiàn)在丁屎,由于開發(fā)那邊改了需求晨川,連我的比對(duì)方式也得改變[圖片上傳失敗...(image-b4a2b3-1556261984721)] 键思。Just Like This:

//[NEW]
//用例預(yù)期結(jié)果:
[{"channel":"AA","value":12},{"channel":"BB","value":20}]
//接口返回的結(jié)果:
[{"value":20,"channel":"BB"},{"channel":"AA","value":12},{"channel":"CC","value":100},{"channel":"DD","value":100},{"channel":"EE","value":100}]

要求這樣的比對(duì)為true看蚜,Emmmm.....

這不是數(shù)學(xué)上面的包含關(guān)系么供炎,我想想怎么辦?

我想想疾党,在小時(shí)候?qū)W數(shù)學(xué)的時(shí)候音诫,老師教得這么一個(gè)原理:當(dāng)A?B的時(shí)候,得出A∩B = A雪位。

在Java里面的Connection框架里面竭钝,有一個(gè)集合的方法求交集,那就是retainAll()

即(參考代碼https://blog.csdn.net/qq_25806863/article/details/70312046):

//Set集合
Set<String> set1 = new HashSet<>();
Set<String> set2 = new HashSet<>();
set1.add("a"); set1.add("b"); set1.add("c");
set2.add("c"); set2.add("d"); set2.add("e"); 
//交集 set1.retainAll(set2);
System.out.println("交集是 "+set1);

我也去嘗試了一下雹洗,的確是不行的香罐,為什么?因?yàn)檫@次不僅僅是考慮到兩個(gè)json串的順序时肿,還考慮到了串里面key庇茫、value的順序在里面了(認(rèn)真觀察[NEW]的那串json)螃成。此時(shí)旦签,我的大佬在旁邊給了一點(diǎn)提示查坪,要不要考慮使用List,Gson轉(zhuǎn)成對(duì)象試試宁炫?

于是有了以下的代碼(可提供參考意見進(jìn)行改進(jìn)):

public class Demo {
    public boolean sameJson(String jsonA, String jsonB) {
        // 通過Gson轉(zhuǎn)對(duì)象
        Gson gson = new Gson();
        // 通過List存儲(chǔ)對(duì)象
        List<Info> infoListA = gson.fromJson(jsonA, new TypeToken<List<Info>>() {
        }.getType());
        List<Info> infoListB = gson.fromJson(jsonB, new TypeToken<List<Info>>() {
        }.getType());
        // 計(jì)數(shù)
        int count = 0;
        for (Info infoa : infoListA) {
            for (Info infob : infoListB) {
                if (!infoa.equals(infob)) {
                    continue;
                }
                count++;
            }
        }
        if (count == infoListA.size()) {
            return true;
        } else {
            return false;
        }
    }

    /*
     * 造一個(gè)key value實(shí)體類
     */
    public class DemoInfo {
        private String channel;
        private int value;

        public String getChannel() {
            return channel;
        }

        public void setChannel(String channel) {
            this.channel = channel;
        }

        public int getValue() {
            return value;
        }

        public void setValue(int value) {
            this.value = value;
        }

        // 重寫了equals方法,以短的json
        public boolean equals(DemoInfo info) {
            if (info.getChannel() != null) {
                if (this.channel.equals(info.getChannel()) 
                        && this.value == info.getValue()) {
                    return true;
                }
            }
            return false;
        }
    }
}

寫到了這里偿曙,提出幾點(diǎn)疑問:

1、為什么我寫方法接的是String類型淋淀,而不是json類型遥昧?

2、DemoInfo這個(gè)對(duì)象每次都需要自己創(chuàng)建朵纷,會(huì)不會(huì)麻煩炭臭?

3、還有沒有其他的辦法袍辞?

那么如何打成包給jmeter用呢鞋仍?

參考傳送門:https://blog.csdn.net/qq_34845382/article/details/53885907

劃重點(diǎn):[注意點(diǎn)]

打包之前,一定要建立一個(gè)MANIFEST.MF文件在工程內(nèi)

Manifest-Version: 1.0                 ------------------------前面都要留一個(gè)空格
Class-Path: ./gson-2.8.5.jar          ------------------------第三方包放在一起搅吁,當(dāng)前文件夾
Main-Class: com.xxx.Main              ------------------------包名.主類

打包的過程我就不詳細(xì)講了威创,接下來我講講jmeter那邊應(yīng)該怎么用。


首先谎懦,肯定是將打好的包放在D:\apache-jmeter-3.3\lib\ext下面啦(別忘了放第三方的jar包)肚豺,然后?打開jmeter咯界拦。搞個(gè)demo先:

把準(zhǔn)備好的csv用例demo

csv用例demo

腳本運(yùn)行:


代碼調(diào)用
腳本運(yùn)行

下一期我講解答以上的問題吸申,希望各位大神提出寶貴的建議,優(yōu)化測(cè)試方法享甸。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末截碴,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子蛉威,更是在濱河造成了極大的恐慌日丹,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,277評(píng)論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件蚯嫌,死亡現(xiàn)場(chǎng)離奇詭異哲虾,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)择示,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,689評(píng)論 3 393
  • 文/潘曉璐 我一進(jìn)店門束凑,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人对妄,你說我怎么就攤上這事「抑欤” “怎么了剪菱?”我有些...
    開封第一講書人閱讀 163,624評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵摩瞎,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我孝常,道長(zhǎng)旗们,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,356評(píng)論 1 293
  • 正文 為了忘掉前任构灸,我火速辦了婚禮上渴,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘喜颁。我一直安慰自己稠氮,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,402評(píng)論 6 392
  • 文/花漫 我一把揭開白布半开。 她就那樣靜靜地躺著隔披,像睡著了一般。 火紅的嫁衣襯著肌膚如雪寂拆。 梳的紋絲不亂的頭發(fā)上奢米,一...
    開封第一講書人閱讀 51,292評(píng)論 1 301
  • 那天,我揣著相機(jī)與錄音纠永,去河邊找鬼鬓长。 笑死,一個(gè)胖子當(dāng)著我的面吹牛尝江,可吹牛的內(nèi)容都是我干的涉波。 我是一名探鬼主播,決...
    沈念sama閱讀 40,135評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼茂装,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼怠蹂!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起少态,我...
    開封第一講書人閱讀 38,992評(píng)論 0 275
  • 序言:老撾萬榮一對(duì)情侶失蹤城侧,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后彼妻,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體嫌佑,經(jīng)...
    沈念sama閱讀 45,429評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,636評(píng)論 3 334
  • 正文 我和宋清朗相戀三年侨歉,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了屋摇。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,785評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡幽邓,死狀恐怖炮温,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情牵舵,我是刑警寧澤柒啤,帶...
    沈念sama閱讀 35,492評(píng)論 5 345
  • 正文 年R本政府宣布倦挂,位于F島的核電站,受9級(jí)特大地震影響担巩,放射性物質(zhì)發(fā)生泄漏方援。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,092評(píng)論 3 328
  • 文/蒙蒙 一涛癌、第九天 我趴在偏房一處隱蔽的房頂上張望犯戏。 院中可真熱鬧,春花似錦拳话、人聲如沸先匪。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,723評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽胚鸯。三九已至,卻和暖如春笨鸡,著一層夾襖步出監(jiān)牢的瞬間姜钳,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,858評(píng)論 1 269
  • 我被黑心中介騙來泰國打工形耗, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留哥桥,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,891評(píng)論 2 370
  • 正文 我出身青樓激涤,卻偏偏與公主長(zhǎng)得像拟糕,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子倦踢,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,713評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容

  • JSON的特點(diǎn): 1送滞、JSON比XML的數(shù)據(jù)傳遞的有效性高;2辱挥、JSON完全獨(dú)立于編程語言犁嗅;3、JSON的本質(zhì)是具...
    程序員之路閱讀 3,500評(píng)論 0 3
  • 1.概述2.Gson的目標(biāo)3.Gson的性能和擴(kuò)展性4.Gson的使用者5.如何使用Gson 通過Maven來使用...
    人失格閱讀 14,231評(píng)論 2 18
  • 一晤碘、Fiddler抓包工具的配置和使用 在編寫網(wǎng)關(guān)自動(dòng)化腳本之前褂微,得先學(xué)會(huì)如何抓包,這里以Fiddler為例园爷。會(huì)抓...
    人生_0809閱讀 7,120評(píng)論 0 15
  • 公司最近需要測(cè)試后臺(tái)性能宠蚂,所以學(xué)習(xí)使用了Jmeter,在此做記錄童社,也分享給更多需要的人求厕。 這篇文章是 JMeter...
    顧顧314閱讀 4,271評(píng)論 0 10
  • “楊老師: 明天就是教師節(jié)了,祝您教師節(jié)快樂! 記得去年的教師節(jié)呀癣,我給您寫了一封信旅东,我說,您是我...
    老楊游記閱讀 555評(píng)論 2 7