Mock工具wiremock-py

作者 | 咪咪

創(chuàng)新互聯(lián)-專業(yè)網(wǎng)站定制、快速模板網(wǎng)站建設(shè)、高性價(jià)比酉陽土家族苗族網(wǎng)站開發(fā)、企業(yè)建站全套包干低至880元,成熟完善的模板庫,直接使用。一站式酉陽土家族苗族網(wǎng)站制作公司更省心,省錢,快速模板網(wǎng)站建設(shè)找我們,業(yè)務(wù)覆蓋酉陽土家族苗族地區(qū)。費(fèi)用合理售后完善,十多年實(shí)體公司更值得信賴。

wiremock-py

wiremock-py 是基于 WireMock 實(shí)現(xiàn)的, 使用 Python 批量生成不同測(cè)試場(chǎng)景下不同HTTP API 的 mock 數(shù)據(jù), 然后作為 mock server 快速全面地對(duì) API 進(jìn)行測(cè)試。

背景

在數(shù)瀾地產(chǎn)應(yīng)用的前端測(cè)試中, 前端一般依賴于后端的數(shù)據(jù), 前端通過后端在網(wǎng)關(guān)上發(fā)布的 HTTP API 獲取數(shù)據(jù). 要對(duì)前端進(jìn)行充分的測(cè)試, 理想的做法是, 等待后端部署完成, 并且在數(shù)據(jù)層直接輸入不同類型的數(shù)據(jù)源, 然后前端直接調(diào)用后端發(fā)布在網(wǎng)關(guān)上的 API 進(jìn)行測(cè)試。

Mock工具wiremock-pycdn.xitu.io/2019/7/18/16c03b5cfad2a16e?w=339&h=376&f=png&s=33802">

然而現(xiàn)實(shí)的情況是, 前端和后端的開發(fā)進(jìn)度不完全一致, 如果前端先開發(fā)完成了, 必須要等后端對(duì)應(yīng)的 API 開發(fā)完成后才能開始測(cè)試, 而且數(shù)據(jù)層的數(shù)據(jù)也不容易構(gòu)造。

為了解決這個(gè)問題, 網(wǎng)關(guān)平臺(tái)做了簡(jiǎn)單的 mock 功能, 每個(gè) API 可以填寫一個(gè) mock數(shù)據(jù), 然后前端調(diào)用 API 時(shí)直接使用這個(gè) mock數(shù)據(jù):

Mock工具wiremock-py

這種方式下, 網(wǎng)關(guān)充當(dāng)了mock server:

Mock工具wiremock-py

但由于大家都使用同一個(gè)網(wǎng)關(guān), 一個(gè) API 只能保存一份 mock 數(shù)據(jù), 所以有以下一些缺點(diǎn):

  • 不同的測(cè)試場(chǎng)景需要不同的 mock 數(shù)據(jù)來測(cè)試, 此時(shí)需要?jiǎng)h掉上個(gè)測(cè)試場(chǎng)景的 mock 數(shù)據(jù), 再創(chuàng)建新場(chǎng)景的 mock 數(shù)據(jù)才能進(jìn)行測(cè)試

  • 不能根據(jù)測(cè)試場(chǎng)景來按照一定的規(guī)則動(dòng)態(tài)生成 API 對(duì)應(yīng)的 mock 數(shù)據(jù)

  • 不能多人同時(shí)使用測(cè)試同一個(gè) API時(shí), 只能都使用同一份 mock 數(shù)據(jù), 不能各用各的

wiremock-py 可以解決上述這些問題: wiremock-py 通過傳入不同的測(cè)試場(chǎng)景參數(shù)來生成不同的 mock 數(shù)據(jù), 同時(shí)不同測(cè)試場(chǎng)景下使用的 mock 數(shù)據(jù)可以保存起來; 生成 mock 數(shù)據(jù)時(shí), wiremock-py 支持使用Python和js代碼來動(dòng)態(tài)生成 mock 數(shù)據(jù)(也支持直接使用 json 數(shù)據(jù), 如果 mock 數(shù)據(jù)中的數(shù)據(jù)量很大, 人工手寫 mock 時(shí)的數(shù)據(jù)量會(huì)很大, 使用代碼生成則比較容易); 不同的測(cè)試人員使用各自自己的 mock server, 不會(huì)影響到其他測(cè)試人員的測(cè)試。

Mock工具wiremock-py

測(cè)試人員需要做的是: 確定哪些 API 需要進(jìn)行 mock 以及不同測(cè)試場(chǎng)景下對(duì)應(yīng)的 mock 規(guī)則是什么。

依賴環(huán)境

Java 1.8.0_144

Node v8.6.0

Python 3.4.3

演示

快速開始

以貿(mào)數(shù)v1.1.0版本 測(cè)試環(huán)境為例演示使用 wiremock-py 對(duì)樓層客流分布和店鋪客流分布兩張圖分布在3種場(chǎng)景下的測(cè)試方法

先確定本地瀏覽器能過正常訪問 http://mall-data.com:9012

準(zhǔn)備

克隆代碼

git clone http://git.dtwave-inc.com:30000/baomi.wbm/wiremock-py.git

安裝依賴

cd wiremock-py

pip install -r requirements.txt

npm install mockjs

生成目錄

python mock.py -g "demo"

? wiremock-py git:(master)? python mock.py -g "demo"

DEBUG:root:mockdir=, scene=, target=, proxy_port=5506, generate=demo, wiremock=False, rewrite=False

DEBUG:root:正在生成目錄 /Users/wangbaomi/autotest/wiremock-py/demo

DEBUG:root:創(chuàng)建目錄成功: demo

DEBUG:root:創(chuàng)建目錄成功: demo/js

DEBUG:root:創(chuàng)建目錄成功: demo/json

DEBUG:root:創(chuàng)建目錄成功: demo/python

DEBUG:root:創(chuàng)建目錄成功: demo/wiremock

DEBUG:root:創(chuàng)建文件成功: demo/mappings.json

DEBUG:root:生成目錄完成: /Users/wangbaomi/autotest/wiremock-py/demo

填寫 mappings.json、json、python、js 數(shù)據(jù)

mappings.json 中填寫內(nèi)容:

[

{

    "response": {

        "default": {

            "proxyBaseUrl": "target"

}

    },

    "mapping_name": "request url not start with /api",

    "request": {

        "method": "ANY",

        "urlPattern": "/(?!api).*"

    }

},

{

    "mapping_name": "樓層客流分布",

    "request": {

        "urlPattern": "/api/v1/mall_data/customer_flow/every_floor\\?(.*)",

        "method": "POST"

    },

    "response": {

        "default": {

            "proxyBaseUrl": "target"

        },

        "測(cè)試場(chǎng)景1": {

            "bodyFileName": {

                "json": "樓層客流分布.json"

            }

        },

        "測(cè)試場(chǎng)景2": {

            "bodyFileName": {

                "python": "樓層客流分布.py",

                "python_args": "測(cè)試場(chǎng)景2"

            }

        },

        "測(cè)試場(chǎng)景3": {

            "bodyFileName": {

                "js": "樓層客流分布.js"

            }

        }

    }

},

{

    "mapping_name": "店鋪客流分布",

    "request": {

        "urlPattern": "/api/v1/mall_data/customer_flow/every_shop\\?(.*)",

        "method": "POST"

    },

    "response": {

        "default": {

            "proxyBaseUrl": "target"

        },

        "測(cè)試場(chǎng)景1": {

            "bodyFileName": {

                "js": "店鋪客流分布.js"

            }

        },

        "測(cè)試場(chǎng)景2": {

            "bodyFileName": {

                "json": "店鋪客流分布.json"

            }

        },

        "測(cè)試場(chǎng)景3": {

            "bodyFileName": {

                "python": "店鋪客流分布.py",

                "python_args": "測(cè)試場(chǎng)景3"

            }

        }

    }

}

]

js 文件夾中新建店鋪客流分布.js文件, 內(nèi)容為:

var r = {
"success": true,
"code": null,
"message": null,
"content": {
"meta": {},

"multi": {

  "group": [

    {

      "id": "rank",

      "name": "排名",

      "value": [

        1,

        2,

        3,

        4

      ]

    }

  ],

  "result": [

    {

      "id": "the_shop",

      "name": "店鋪",

      "value": [

        "店鋪1",

        "店鋪2",

        "店鋪3",

        "第4個(gè)店鋪"

      ]

    },

    {

      "id": "customer_count",

      "name": "人數(shù)",

      "value": [

        10,

        100,

        1000,

        3242

      ]

    }

  ]

},

"single": []
}

};

console.log(JSON.stringify(r));

js 文件夾中新建樓層客流分布.js文件, 內(nèi)容為:

var r = {

"success": true,

"code": null,

"message": null,

"content": {"meta": {},

"multi": {

  "group": [

    {

      "id": "the_floor",

      "name": "樓層",

      "value": [

        "-1樓",

        "1樓",

        "2樓",

        "3樓",

      ]

    }

  ],

  "result": [

    {

      "id": "customer_count",

      "name": "人數(shù)",

      "value": [

        100,

        1000,

        5000,

        567

      ]

    }

  ]

},

"single": []
}

};

console.log(JSON.stringify(r));

json 文件夾中新建店鋪客流分布.json, 內(nèi)容為:

{

"success": true,

"code": null,

"message": null,

"content": {
"meta": {},
"multi": {

新聞標(biāo)題:Mock工具wiremock-py
標(biāo)題鏈接:http://muchs.cn/article42/ipicec.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供用戶體驗(yàn)、品牌網(wǎng)站設(shè)計(jì)手機(jī)網(wǎng)站建設(shè)、網(wǎng)站制作、網(wǎng)站建設(shè)、服務(wù)器托管

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

微信小程序開發(fā)