Jmeter实战中遇到的问题

前言:以往在json串比对的时候,我们都是一对一的忽略顺序比对方式,本次遇到了一个奇怪比对方式(反正我是之前没想到的),看来又得撸码打包了。

​ 别总以为测试人员就不需要撸码,没听说一句老话么,不会前端的测试不是好的架构师(搞笑的)。好了,bb这么多,就是希望没事提高一下自身水平,还是来看看什么情况。先给大家简单讲一讲之前我们在做接口自动化测试的时候,我们是进行json串的比对,像这样:

//[OLD]
//用例预期结果:
[{"channel":"AA","value":12},{"channel":"BB","value":20}]
//接口返回的结果:
[{"channel":"BB","value":20},{"channel":"AA","value":12}]

这样的比对很简单,只需要以数组的形式比对就可以了(或者其他方法),以下是我从CSDN里面参考的代码(需要自行导如Gson包)

    /**
     * 比较两个json字符串是否等价
     * (本次用的是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进行比对json】

现在,由于开发那边改了需求,连我的比对方式也得改变[图片上传失败...(image-b4a2b3-1556261984721)] 。Just Like This:

//[NEW]
//用例预期结果:
[{"channel":"AA","value":12},{"channel":"BB","value":20}]
//接口返回的结果:
[{"value":20,"channel":"BB"},{"channel":"AA","value":12},{"channel":"CC","value":100},{"channel":"DD","value":100},{"channel":"EE","value":100}]

要求这样的比对为true,Emmmm.....

这不是数学上面的包含关系么,我想想怎么办?

我想想,在小时候学数学的时候,老师教得这么一个原理:当A⊂B的时候,得出A∩B = A。

在Java里面的Connection框架里面,有一个集合的方法求交集,那就是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);

我也去尝试了一下,的确是不行的,为什么?因为这次不仅仅是考虑到两个json串的顺序,还考虑到了串里面key、value的顺序在里面了(认真观察[NEW]的那串json)。此时,我的大佬在旁边给了一点提示,要不要考虑使用List,Gson转成对象试试?

于是有了以下的代码(可提供参考意见进行改进):

public class Demo {
    public boolean sameJson(String jsonA, String jsonB) {
        // 通过Gson转对象
        Gson gson = new Gson();
        // 通过List存储对象
        List<Info> infoListA = gson.fromJson(jsonA, new TypeToken<List<Info>>() {
        }.getType());
        List<Info> infoListB = gson.fromJson(jsonB, new TypeToken<List<Info>>() {
        }.getType());
        // 计数
        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;
        }
    }

    /*
     * 造一个key value实体类
     */
    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;
        }
    }
}

写到了这里,提出几点疑问:

1、为什么我写方法接的是String类型,而不是json类型?

2、DemoInfo这个对象每次都需要自己创建,会不会麻烦?

3、还有没有其他的办法?

那么如何打成包给jmeter用呢?

参考传送门:https://blog.csdn.net/qq_34845382/article/details/53885907

划重点:[注意点]

打包之前,一定要建立一个MANIFEST.MF文件在工程内

Manifest-Version: 1.0                 ------------------------前面都要留一个空格
Class-Path: ./gson-2.8.5.jar          ------------------------第三方包放在一起,当前文件夹
Main-Class: com.xxx.Main              ------------------------包名.主类

打包的过程我就不详细讲了,接下来我讲讲jmeter那边应该怎么用。


首先,肯定是将打好的包放在D:\apache-jmeter-3.3\lib\ext下面啦(别忘了放第三方的jar包),然后?打开jmeter咯。搞个demo先:

把准备好的csv用例demo

csv用例demo

脚本运行:


代码调用
脚本运行

下一期我讲解答以上的问题,希望各位大神提出宝贵的建议,优化测试方法。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,189评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,577评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,857评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,703评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,705评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,620评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,995评论 3 396
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,656评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,898评论 1 298
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,639评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,720评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,395评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,982评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,953评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,195评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,907评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,472评论 2 342

推荐阅读更多精彩内容

  • JSON的特点: 1、JSON比XML的数据传递的有效性高;2、JSON完全独立于编程语言;3、JSON的本质是具...
    程序员之路阅读 3,476评论 0 3
  • 1.概述2.Gson的目标3.Gson的性能和扩展性4.Gson的使用者5.如何使用Gson 通过Maven来使用...
    人失格阅读 14,196评论 2 18
  • 一、Fiddler抓包工具的配置和使用 在编写网关自动化脚本之前,得先学会如何抓包,这里以Fiddler为例。会抓...
    人生_0809阅读 7,087评论 0 15
  • 公司最近需要测试后台性能,所以学习使用了Jmeter,在此做记录,也分享给更多需要的人。 这篇文章是 JMeter...
    顾顾314阅读 4,246评论 0 10
  • “杨老师: 明天就是教师节了,祝您教师节快乐! 记得去年的教师节,我给您写了一封信,我说,您是我...
    老杨游记阅读 541评论 2 7