python flask框架進行參數(shù)校驗和單元測試

以如下python接口為例:

@statefulsets_api.route('/stateful-sets', methods=['GET'])
@statefulsets_api.route('/namespaces/<namespace>/stateful-sets', methods=['GET'])
def get_deployments(namespace=None):
    # If a namespace was specified, list deployments for that namespace only
    # Otherwise, list deployments for all namespaces
    if namespace:
        statefulsets_list = v1.list_namespaced_stateful_set(namespace, watch=False)
    else:
        statefulsets_list = v1.list_stateful_set_for_all_namespaces(watch=False)
    return jsonify([statefulset.to_dict() for statefulset in statefulsets_list.items])

我們給這個接口添加一個namespace的校驗邏輯瞭郑,驗證namespace只包含 大小寫字母为狸、數(shù)字祠丝、下劃線何吝、中劃線剖效。

首先偷俭,我們需要定義一個函數(shù)來檢查kubernetes的namespace是否符合要求

import re


def is_valid_namespace(namespace):
    return bool(re.match(r'^[a-zA-Z0-9_-]+$', namespace))

接下來她我,我們需要修改get_deployments函數(shù)枚赡,以便在收到帶有無效namespace的請求時返回適當?shù)腻e誤消息:

from flask import jsonify, abort

@deployments_api.route('/deployments', methods=['GET'])
@deployments_api.route('/namespaces/<namespace>/deployments', methods=['GET'])
def get_deployments(namespace=None):
    if namespace and not is_valid_namespace(namespace):
        abort(400, description="Invalid namespace. It should only contain letters, numbers, underscores, and hyphens.")

    # If a namespace was specified, list deployments for that namespace only
    # Otherwise, list deployments for all namespaces
    if namespace:
        deployments_list = v1.list_namespaced_deployment(namespace, watch=False)
    else:
        deployments_list = v1.list_deployment_for_all_namespaces(watch=False)
    return jsonify([deployment.to_dict() for deployment in deployments_list.items])

現(xiàn)在勾徽,我們可以編寫針對這個接口的測試用例滑凉,確保當請求無效的namespace時,接口返回400錯誤。

假設當前項目的路徑設計如下

├── api
│   ├── kafka_api
│   ├── kubernetes_api
│   │   ├── __init__.py
│   ├── __init__.py
├── app.py
├── module

我們接下來在項目中

  • api/kubernetes文件夾中畅姊,創(chuàng)建一個名為tests的子文件夾闪幽。
  • api/kubernetes/tests文件夾中,創(chuàng)建一個名為test_kubernetes_deployments.py的文件涡匀。在這個文件中盯腌,您可以編寫針對api/kubernetes中的功能的測試用例。

接下來項目結(jié)構(gòu)應該變化成如下所示:

├── api
│   ├── kafka_api
│   ├── kubernetes_api
│   │   ├── __init__.py
│   │   ├── tests
│   │   │   ├── __init__.py
│   │   │   ├── test_kubernetes_deployments.py
│   ├── __init__.py
├── app.py
├── module

為了讓pytest能夠自動發(fā)現(xiàn)并運行這些測試用例陨瘩,您需要在每個包含測試用例的文件夾中添加一個__init__.py文件(如果尚未存在)腕够。在這種情況下,您需要確保api/kubernetesapi/kubernetes/tests文件夾中都有__init__.py文件舌劳。

書寫測試用例帚湘,并運行。注:也可使用pytest命令行運行

import pytest
from app import app


@pytest.fixture
def client():
    with app.test_client() as client:
        yield client


def test_get_deployments_invalid_namespace(client):
    # Test with an invalid namespace parameter
    response = client.get('/api/kubernetes/instances/default/namespaces/invalid@namespace/deployments')
    assert response.status_code == 400
    decode = response.data.decode('utf-8')
    assert "Invalid namespace. It should only contain letters, numbers, underscores, and hyphens." in decode

如果運行時出現(xiàn)了TypeError: __init__() got an unexpected keyword argument 'as_tuple'錯誤甚淡,請升級您的flask版本到最新版本

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末大诸,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子贯卦,更是在濱河造成了極大的恐慌资柔,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,941評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件撵割,死亡現(xiàn)場離奇詭異贿堰,居然都是意外死亡,警方通過查閱死者的電腦和手機啡彬,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,397評論 3 395
  • 文/潘曉璐 我一進店門羹与,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人庶灿,你說我怎么就攤上這事纵搁。” “怎么了往踢?”我有些...
    開封第一講書人閱讀 165,345評論 0 356
  • 文/不壞的土叔 我叫張陵腾誉,是天一觀的道長。 經(jīng)常有香客問我菲语,道長妄辩,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,851評論 1 295
  • 正文 為了忘掉前任山上,我火速辦了婚禮眼耀,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘佩憾。我一直安慰自己哮伟,他們只是感情好干花,可當我...
    茶點故事閱讀 67,868評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著楞黄,像睡著了一般池凄。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上鬼廓,一...
    開封第一講書人閱讀 51,688評論 1 305
  • 那天肿仑,我揣著相機與錄音,去河邊找鬼碎税。 笑死尤慰,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的雷蹂。 我是一名探鬼主播伟端,決...
    沈念sama閱讀 40,414評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼匪煌!你這毒婦竟也來了责蝠?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,319評論 0 276
  • 序言:老撾萬榮一對情侶失蹤萎庭,失蹤者是張志新(化名)和其女友劉穎霜医,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體擎椰,經(jīng)...
    沈念sama閱讀 45,775評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡支子,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,945評論 3 336
  • 正文 我和宋清朗相戀三年创肥,在試婚紗的時候發(fā)現(xiàn)自己被綠了达舒。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,096評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡叹侄,死狀恐怖巩搏,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情趾代,我是刑警寧澤贯底,帶...
    沈念sama閱讀 35,789評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站撒强,受9級特大地震影響禽捆,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜飘哨,卻給世界環(huán)境...
    茶點故事閱讀 41,437評論 3 331
  • 文/蒙蒙 一胚想、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧芽隆,春花似錦浊服、人聲如沸统屈。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,993評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽愁憔。三九已至,卻和暖如春孽拷,著一層夾襖步出監(jiān)牢的瞬間吨掌,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,107評論 1 271
  • 我被黑心中介騙來泰國打工脓恕, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留思犁,地道東北人。 一個月前我還...
    沈念sama閱讀 48,308評論 3 372
  • 正文 我出身青樓进肯,卻偏偏與公主長得像激蹲,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子江掩,可洞房花燭夜當晚...
    茶點故事閱讀 45,037評論 2 355

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