中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Mock工具wiremock-py

發布時間:2020-06-26 02:38:15 來源:網絡 閱讀:517 作者:數瀾 欄目:大數據

作者 | 咪咪

wiremock-py

wiremock-py 是基于 WireMock 實現的, 使用 Python 批量生成不同測試場景下不同HTTP API 的 mock 數據, 然后作為 mock server 快速全面地對 API 進行測試。

背景

在數瀾地產應用的前端測試中, 前端一般依賴于后端的數據, 前端通過后端在網關上發布的 HTTP API 獲取數據. 要對前端進行充分的測試, 理想的做法是, 等待后端部署完成, 并且在數據層直接輸入不同類型的數據源, 然后前端直接調用后端發布在網關上的 API 進行測試。

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

然而現實的情況是, 前端和后端的開發進度不完全一致, 如果前端先開發完成了, 必須要等后端對應的 API 開發完成后才能開始測試, 而且數據層的數據也不容易構造。

為了解決這個問題, 網關平臺做了簡單的 mock 功能, 每個 API 可以填寫一個 mock數據, 然后前端調用 API 時直接使用這個 mock數據:

Mock工具wiremock-py

這種方式下, 網關充當了mock server:

Mock工具wiremock-py

但由于大家都使用同一個網關, 一個 API 只能保存一份 mock 數據, 所以有以下一些缺點:

  • 不同的測試場景需要不同的 mock 數據來測試, 此時需要刪掉上個測試場景的 mock 數據, 再創建新場景的 mock 數據才能進行測試

  • 不能根據測試場景來按照一定的規則動態生成 API 對應的 mock 數據

  • 不能多人同時使用測試同一個 API時, 只能都使用同一份 mock 數據, 不能各用各的

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

Mock工具wiremock-py

測試人員需要做的是: 確定哪些 API 需要進行 mock 以及不同測試場景下對應的 mock 規則是什么。

依賴環境

Java 1.8.0_144

Node v8.6.0

Python 3.4.3

演示

快速開始

以貿數v1.1.0版本 測試環境為例演示使用 wiremock-py 對樓層客流分布和店鋪客流分布兩張圖分布在3種場景下的測試方法

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

準備

克隆代碼

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:創建目錄成功: demo

DEBUG:root:創建目錄成功: demo/js

DEBUG:root:創建目錄成功: demo/json

DEBUG:root:創建目錄成功: demo/python

DEBUG:root:創建目錄成功: demo/wiremock

DEBUG:root:創建文件成功: demo/mappings.json

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

填寫 mappings.json、json、python、js 數據

mappings.json 中填寫內容:

[

{

    "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"

        },

        "測試場景1": {

            "bodyFileName": {

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

            }

        },

        "測試場景2": {

            "bodyFileName": {

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

                "python_args": "測試場景2"

            }

        },

        "測試場景3": {

            "bodyFileName": {

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

            }

        }

    }

},

{

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

    "request": {

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

        "method": "POST"

    },

    "response": {

        "default": {

            "proxyBaseUrl": "target"

        },

        "測試場景1": {

            "bodyFileName": {

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

            }

        },

        "測試場景2": {

            "bodyFileName": {

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

            }

        },

        "測試場景3": {

            "bodyFileName": {

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

                "python_args": "測試場景3"

            }

        }

    }

}

]

js 文件夾中新建店鋪客流分布.js文件, 內容為:

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個店鋪"

      ]

    },

    {

      "id": "customer_count",

      "name": "人數",

      "value": [

        10,

        100,

        1000,

        3242

      ]

    }

  ]

},

"single": []
}

};

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

js 文件夾中新建樓層客流分布.js文件, 內容為:

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": "人數",

      "value": [

        100,

        1000,

        5000,

        567

      ]

    }

  ]

},

"single": []
}

};

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

json 文件夾中新建店鋪客流分布.json, 內容為:

{

"success": true,

"code": null,

"message": null,

"content": {
"meta": {},
"multi": {
向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

剑川县| 武定县| 富民县| 疏附县| 三河市| 哈巴河县| 梁平县| 通河县| 时尚| 秭归县| 玉田县| 武陟县| 浪卡子县| 东台市| 宣恩县| 吴旗县| 渭源县| 静安区| 孟州市| 肇庆市| 昭平县| 紫阳县| 赫章县| 枝江市| 遂昌县| 集安市| 南和县| 凤山市| 元谋县| 岳西县| 白朗县| 淮滨县| 耿马| 鄂州市| 融水| 瑞昌市| 新乐市| 成都市| 千阳县| 阿拉善右旗| 临颍县|