关于软件测试:接口测试-Mock-实战二-结合-jq-完成批量化的手工-Mock

43次阅读

共计 6726 个字符,预计需要花费 17 分钟才能阅读完成。

​ 一、利用背景

因为本章的内容是应用 jq 工具配合实现,因而在开始局部会先花肯定的篇幅介绍 jq 机器应用,如果读者曾经相熟 jq,能够间接跳过这部分。

先来看利用场景,App 常常会有一些信息展现的列表页,比方商家的菜品、股票的公司、文章的列表展现等,例如上面这样:

​编辑

菜品不够吃的话~ 不是,是菜品数量较少不够测试的量,如果咱们想要测试几百个菜品时,会不会在刷的时候是否有性能影响, 展现是否失常,列表展现的边界值测试等;

而要测就得有数据展现,这个时候要是通过后端去找或者造这么多数据是有点麻烦的, 其实咱们这个测试的测试点就是要测试前端页面的展现和性能,只有有这部分数据就能够,无所谓数据是否实在从数据库得来。

这个时候能够就能够利用 mock 的伎俩,对这种大数据进行等价类的生成,使前端能够拿到这类数据即可,而 Charles 正是咱们实现手工 mock 测试的利器之一!

二、jq 简介

2.1 jq 的概述与用处

按常规,先看官网对 jq 的解释:

jq 官网地址:https://stedolan.github.io/jq/

​编辑

大略意思就是轻量灵便的 Json 解决命令行。

用处

说到这大略有些人有点感觉它能用来做什么了,为啥手工 mock 要应用 jq 了?没错!要用它来解决接口返回的 json 数据以达到 mock 的成果。

2.2 jq 的下载安装


Mac:Mac 还是判若两人的简略(香~),装了 Homebrew  的话一条命令 brew install jq 即可


其余零碎:jq 的官网很贴心,给出了各个系统的下载方式及其相干所需下载工具的链接,具体的就查看官网吧,链接如下



https://stedolan.github.io/jq…

​编辑

2.3 jq 的根本应用


根本过滤  .



最简略的过滤,. 这是一个过滤器,它承受输出,并将其不变地生成为输入。

简略的说就是原样输入来:

    $ echo ‘{“jq”: “jqTest”}’ | jq ‘.’
    {
      “jq”: “jqTest”
    }


对象过滤  .key、.key1.key2、.["key"]



能够通过.key 或.key1.key2 的形式来获取对应的 value,这样的形式是不是有点像 jsonpath?

    $ echo ‘{“jq”: {“jqTest”: 1} }’ | jq ‘.jq’
    {
      “jqTest”: 1
    }

    $ echo ‘{“jq”: {“jqTest”: 1} }’ | jq ‘.jq.jqTest’
    1

    $ echo ‘{“jq”: {“jqTest”: 1} }’ | jq ‘.[“jq”]’
    {
      “jqTest”: 1
    }


索引过滤  .key[index]、.key[startIndex: endIndex]



其实就是在对象过滤的根底上加个索引而已,学过编程的都懂的~ 左闭右开,当然是针对数组的操纵,这里就以一种对象过滤写法根底上举例子,

.key[index]

    $ echo ‘{“jq”: [“jqTest”,1] }’ | jq ‘.jq[0]’
    “jqTest”
 

.key[startIndex: endIndex]

    $ echo ‘{“jq”: [“jqTest”,1] }’ | jq ‘.jq[0:1]’
    [
      “jqTest”
    ]


对象构建  {} 、[]



能够利用 {}、[] 构建新的对象(数组)

    $ echo ‘{“jq”: [“jqTest”,1] }’ | jq ‘{newJq: .jq[1], }’
    {
      “newJq”: 1
    }

如果其中一个表达式有多个后果,那么输入也会产生多个后果

    $ echo ‘{“user”:”stedolan”,”titles”:[“JQ Primer”, “More JQ”]}’ |jq ‘{user, title: .titles[]}’
    {
      “user”: “stedolan”,
      “title”: “JQ Primer”
    }
    {
      “user”: “stedolan”,
      “title”: “More JQ”
    }

如果 key 是不存在的,value 将会赋值为 null

    $ echo ‘{“user”:”stedolan”,”titles”:[“JQ Primer”, “More JQ”]}’ |jq ‘{user111, title: .titles[]}’
    {
      “user111”: null,
      “title”: “JQ Primer”
    }
    {
      “user111”: null,
      “title”: “More JQ”
    }

如果再键的四周加括号就意味着它将作为表达式进行计算。

    $ echo ‘{“user”:”stedolan”,”titles”:[“JQ Primer”, “More JQ”]}’ |jq ‘{(.user): .titles[]}’
    {
      “stedolan”: “JQ Primer”
    }
    {
      “stedolan”: “More JQ”
    }


其余常见用法:

计算

        echo “10” | jq ‘(.+2)*5’
        echo null | jq ‘{a: 1} + {b: 2} + {c: 3} + {a: 42}’
        echo ‘[“xml”, “yaml”, “json”]’ | jq ‘. – [“xml”]’
        echo ‘{“a”:5}’ | jq‘.a+=10′
    

获取长度

        echo ‘[[1,2], “string”, {“a”:2}, null]’ | jq ‘.[] | length’
   


数组运算



这里要特地介绍一下数组的运算操作,也是上面实现目标的伎俩

jq 对于数组能够有并集 (’+’) 和差集 (’-’) 的操作:

并集(‘+’):有数组 a,b; a+ b 就会失去一个蕴含所有 a,b 数组元素的新数组:

        $ echo ‘{“a”: [1,2,3] ,”b”: [3,4,5]}’ | jq ‘.a+.b’
        [
          1,
          2,
          3,
          3,
          4,
          5
        ]
   

差集(‘-‘):有数组 a,b; a- b 就会失去一个只蕴含 a 中元素,不蕴含 b 中元素的新数组:

        $ echo ‘{“a”: [1,2,3] ,”b”: [3,4,5]}’ | jq ‘.a-.b’
        [
          1,
          2
        ]
    


更多用法


更多用法可参考官网:

https://stedolan.github.io/jq…

3、Mock 实现

3.1 实现目标

如下图中的科普举荐栏目中有 2 则科普文章,当初想要 mock 几十甚至上百篇文章或广告。

​编辑

3.2 数据筹备


抓取接口的响应 json 报文如下:

    {
        “code”: 1,
        “msg”: null,
        “data”: {
            “pageNumber”: 0,
            “pageSize”: 10,
            “totalElements”: 12,
            “totalPages”: 2,
            “pageList”: [{
                “id”: 18,
                “title”: “ 老年痴呆症有哪些危害?”,
                “type”: “patient”,
                “img”: “https://greenvalley.oss-cn-shanghai.aliyuncs.com/hospital/a295c2081459450ba6679db48d6a2471_700_360.png”,
                “content”: “<p>https://fx.wxbjq.net.cn/previ…</p>”
            }, {
                “id”: 17,
                “title”: “ 你理解老年痴呆是如何发病的嘛?”,
                “type”: “patient”,
                “img”: “https://greenvalley.oss-cn-shanghai.aliyuncs.com/hospital/953fc541af7b4576b233d2d6b364bddf_700_360.png”,
                “content”: “<p>https://fx.wxbjq.net.cn/previ…</p>”
            }]
      }
    }
 


咱们将数据存入 json 文件中,而后赋值给一个变量


    $&nbsp;mockData=$(cat /tmp/guanggao.json)
    $&nbsp;echo&nbsp;”$mockData”
    {
        “code”: 1,
        “msg”: null,
        “data”: {
            “pageNumber”: 0,
            “pageSize”: 10,
            “totalElements”: 12,
            “totalPages”: 2,
            “pageList”: [{
                “id”: 18,
                “title”: “ 老年痴呆症有哪些危害?”,
                “type”: “patient”,
                “img”: “https://greenvalley.oss-cn-shanghai.aliyuncs.com/hospital/a295c2081459450ba6679db48d6a2471_700_360.png”,
                “content”: “<p>https://fx.wxbjq.net.cn/previ…</p>”
            }, {
                “id”: 17,
                “title”: “ 你理解老年痴呆是如何发病的嘛?”,
                “type”: “patient”,
                “img”: “https://greenvalley.oss-cn-shanghai.aliyuncs.com/hospital/953fc541af7b4576b233d2d6b364bddf_700_360.png”,
                “content”: “<p>https://fx.wxbjq.net.cn/previ…</p>”
            }]
      }
    }
 


而后咱们利用 jq 对 pageList 中的列表进行 += 操作,实现一次翻倍增长,将后果传给变量 mockData。

这里用到的是 jq 对数组的并集 (‘+’) 运算,两个数组相加,最终失去一个蕴含两个数组所有元素的新数组。

    mockData=$(echo&nbsp;”$mockData” | jq ‘.data.pageList+=.data.pageList’)
    $&nbsp;echo&nbsp;”$mockData”
    {
      “code”: 1,
      “msg”: null,
      “data”: {
        “pageNumber”: 0,
        “pageSize”: 10,
        “totalElements”: 12,
        “totalPages”: 2,
        “pageList”: [
          {
            “id”: 18,
            “title”: “ 老年痴呆症有哪些危害?”,
            “type”: “patient”,
            “img”: “https://gv.oss-cn-shanghai.aliyuncs.com/hospital/a295c2081459450ba6679db48d6a2471_700_360.png”,
            “content”: “<p>https://fx.wxbjq.net.cn/previ…</p>”
          },
          {
            “id”: 17,
            “title”: “ 你理解老年痴呆是如何发病的嘛?”,
            “type”: “patient”,
            “img”: “https://gv.oss-cn-shanghai.aliyuncs.com/hospital/953fc541af7b4576b233d2d6b364bddf_700_360.png”,
            “content”: “<p>https://fx.wxbjq.net.cn/previ…</p>”
          },
          {
            “id”: 18,
            “title”: “ 老年痴呆症有哪些危害?”,
            “type”: “patient”,
            “img”: “https://gv.oss-cn-shanghai.aliyuncs.com/hospital/a295c2081459450ba6679db48d6a2471_700_360.png”,
            “content”: “<p>https://fx.wxbjq.net.cn/previ…</p>”
          },
          {
            “id”: 17,
            “title”: “ 你理解老年痴呆是如何发病的嘛?”,
            “type”: “patient”,
            “img”: “https://gv.oss-cn-shanghai.aliyuncs.com/hospital/953fc541af7b4576b233d2d6b364bddf_700_360.png”,
            “content”: “<p>https://fx.wxbjq.net.cn/previ…</p>”
          }
        ]
      }
    }
 

依照上述的办法,每次列表的元素个数都会翻倍,也就是操作 n 次就变成 2 的 n 次方倍,指数增长的速度就不必多说了~

这样依据本人的须要失去数据后将新数据存入 json 文件,最重要的数据筹备过程也就实现了:

    $&nbsp;echo&nbsp;”$mockData” > /tmp/MockTest.json
 

3.3 Charles 的 Mock 实现

说了这么多“废话”,总算是到了配角了,其实数据筹备好了,工具的应用还是很简略的,Charles 有一个叫做 Map Local 的性能,在你要 mock 的申请上右击就可找到:

​编辑

Map Local 能够对指定的接口返回应用本地文件进行替换,如这里替换为上文中废话半天生成的数据文件 MockTest.json:

​编辑

而后再次刷新页面,看看成果,页面的列表就如愿倍增了,也不必去数据库增加数据,保留一份 json 文件即测即用即可:

​编辑

正文完
 0