『居善地』接口測試 — 21.Mock功能介紹(二)

6驱显、Moco框架的使用

當(dāng)需要調(diào)用接口來編寫測試用例的時(shí)候腕够,此時(shí)該接口并沒有被實(shí)現(xiàn)衡瓶,這個(gè)時(shí)候我們就可以用Mock框架來模擬一個(gè)接口出來韧献。

使用Mock模擬接口以下功能:

  • 攔截服務(wù):http末患,https

  • 請求方式:GET锤窑,POST璧针。

  • 模擬請求地址:URL。

  • 模擬參數(shù):包括headercookie的數(shù)據(jù)渊啰。

  • 模擬響應(yīng)結(jié)果探橱。

  • 支持重定向。

(1)Moco框架第一個(gè)練習(xí)

編寫一個(gè)Json文件绘证,接口所有的信息都配置在該json文件中隧膏。

[
  {
    "description": "第一個(gè)Moco框架例子。",  # 描述:增加接口的可讀性
    "request": {
      "uri": "/api/moco/demo",
    },
    "response": {
      "text": "hello Moco 嚷那!"
    }
  }
]    

把Moco框架的jar包和上面編輯好的Json文件放在同一個(gè)文件夾中胞枕。

在cmd命令行或者PyCharm的命令行終端執(zhí)行啟動命令。

  • 進(jìn)入json文件的所在目錄魏宽。
  • 執(zhí)行命令:java -jar ./moco-runner-0.12.0-standalone.jar http -p 12306 -c test.json

Moco服務(wù)啟動后腐泻,我們可以使用Requests庫請求接口,也可以用瀏覽器接口队询。

# 1.導(dǎo)入requests庫
import requests

# 2.明確請求地址
url = "http://127.0.0.1:12306/api/moco/demo"

# 3.發(fā)送請求
response = requests.get(url=url)
print(response.text)

瀏覽器訪問接口:

(2)Get方法的Mock實(shí)現(xiàn)

我們主要是看Json文件怎么寫派桩,其他步驟和上面練習(xí)一樣。

1)蚌斩、沒有參數(shù)的get請求

[
  {
    "description": "模擬一個(gè)沒有參數(shù)的get請求窄坦。",
    "request": {
      "uri": "/api/moco/get/demo",
      "method": "get"  # 這里添加了要給method屬性
    },
    "response": {
      "text": "hello get request !"
    }
  }
]

2)、有參數(shù)的get請求

[
  {
    "description": "模擬一個(gè)沒有參數(shù)的get請求凳寺。",
    "request": {
      "uri": "/api/moco/get/demo",
      "method": "get"
    },
    "response": {
      "text": "hello get request !"
    }
  },
  {
    "description": "模擬一個(gè)帶參數(shù)的get請求鸭津。",
    "request": {
      "uri": "/api/moco/get/param/demo",
      "method": "get",
      "queries": {      # get請求參數(shù)的選項(xiàng),queries固定屬性肠缨。
        "name": "xiaoming",
        "age": "18"
      }
    },
    "response": {
      "text": "hello xiaoming !"
    }
  }
]

說明:請求地址為:http://127.0.0.1:12306/api/moco/get/param/demo?name=xiaoming&age=18

(3)Post方法的Mock實(shí)現(xiàn)

1)逆趋、沒有參數(shù)的post請求

[
  {
    "description": "模擬一個(gè)不帶數(shù)據(jù)的post請求。",
    "request": {
      "uri": "/api/moco/post/demo",
      "method": "post"    
    },
    "response": {
      "text": "hello post request !"
    }
  }
]

提示:POST請求就不能用瀏覽器進(jìn)行查看了晒奕。只能用Request庫或者JMeter闻书,Postman等進(jìn)行查看名斟。(能進(jìn)行接口調(diào)用的工具都可以)

# 1.導(dǎo)入requests庫
import requests

# 2.明確請求地址
url = "http://127.0.0.1:12306/api/moco/post/demo"

# 3.發(fā)送請求
response = requests.post(url=url)
print(response.text)

2)、有參數(shù)的post請求

[
  {
    "description": "模擬一個(gè)帶數(shù)據(jù)post請求魄眉。",
    "request": {
      "uri": "/api/moco/post/param/demo",
      "method": "post",
      "forms": {      # post請求帶參數(shù)砰盐,參數(shù)要添加到forms屬性中。
        "name": "xiaoming",
        "age": "18"
      }
    },
    "response": {
      "text": "hello post xiaoming !"
    }
  }
]

調(diào)用接口查看結(jié)果坑律。

# 1.導(dǎo)入requests庫
import requests

# 2.明確請求地址
url = "http://127.0.0.1:12306/api/moco/post/param/demo"

data = {
    "name": "xiaoming",
    "age": "18"
}

# 3.發(fā)送請求
response = requests.post(url=url, data=data)
print(response.text)

(4)請求中加入Cookies

使用的是request中的cookies屬性岩梳。

1)、get請求

[
  {
    "description": "模擬一個(gè)帶cookie的get請求晃择。",
    "request": {
      "uri": "/api/moco/get/cookies/demo",
      "method": "get",
      "cookies": {          # 這里添加cookies參數(shù)
        "login": "true"
      }
    },
    "response": {
      "text": "hello get cookies !"
    }
  }
]

調(diào)用接口查看結(jié)果冀值。

# 1.導(dǎo)入requests庫
import requests

# 2.明確請求地址
url = "http://127.0.0.1:12306/api/moco/get/cookies/demo"

cookies = {
    "login": "true"
}

# 3.發(fā)送請求
response = requests.get(url=url, cookies=cookies)
print(response.text)

2)、post請求

[
  {
    "description": "模擬一個(gè)帶cookie的post請求宫屠。",
    "request": {
      "uri": "/api/moco/post/cookies/demo",
      "method": "post",
      "cookies": {
        "login": "true"
      },
      "json": {     # post請求的參數(shù)也可以用json格式的數(shù)據(jù)進(jìn)行傳輸
        "name": "xiaoming",
        "age": "18"
      }
    },
    "response": {
      "status": 201,
      "json": {
        "text": "hello post cookies !"
      }
    }
  }
]

調(diào)用接口查看結(jié)果列疗。

# 1.導(dǎo)入requests庫
import requests

# 2.明確請求地址
url = "http://127.0.0.1:12306/api/moco/post/cookies/demo"

cookies = {
    "login": "true"
}

json = {
    "name": "xiaoming",
    "age": "18"
}

# 3.發(fā)送請求
response = requests.post(url=url, json=json ,cookies=cookies)
print(response.text)

(5)請求中加入Header

使用的是request中的headers屬性。

Header是添加請求頭信息浪蹂,關(guān)于請求頭信息get請求和post請求都是一樣的抵栈。

[
  {
    "description": "模擬一個(gè)帶Header的post請求。",
    "request": {
      "uri": "/api/moco/post/headers/demo",
      "method": "post",
      "headers": {      # 添加請求頭信息
        "content-type": "application/json"
      },
      "json": {
        "name": "xiaoming",
        "age": "18"
      }
    },
    "response": {
      "status": 201,
      "json": {
        "text": "hello get Headers !"
      }
    }
  }
]

調(diào)用接口查看結(jié)果坤次。

# 1.導(dǎo)入requests庫
import requests

# 2.明確請求地址
url = "http://127.0.0.1:12306/api/moco/post/headers/demo"

headers = {
    "content-type": "application/json"
}

json = {
    "name": "xiaoming",
    "age": "18"
}

# 3.發(fā)送請求
response = requests.post(url=url, json=json, headers=headers)
print(response.text)

(6)Moco模擬重定向

重定向使用的是和request同級的redirectTo屬性古劲。

[
  {
    "description": "重定向到百度",
    "request": {
      "uri": "/api/moco/redirect/demo",
      "method": "get"
    },
    "redirectTo": "http://www.baidu.com"
  },
  {
    "description": "重定向到自己的接口",
    "request": {
      "uri": "/api/moco/redirect/new/demo",
      "method": "get"
    },
    "redirectTo": "http://www.baidu.com",
    "response": {
      "text": "hello redirectTo !"
    }
  }
]

使用瀏覽器進(jìn)行測試就可以。

還有更多的使用方式請查看文檔:https://github.com/dreamhead/moco/blob/master/moco-doc/apis.md

(7)綜合練習(xí)

[
  {
    "description": "department by dep_id",
    "request": {
      "uri": "/api/departments/",
      "method": "get",
      "queries": {
        "$dep_id_list": "T001"
      }
    },
    "response": {
      "json": {
        "count": 1,
        "next": null,
        "previous": null,
        "results": [
          {
            "dep_id": "T001",
            "dep_name": "php學(xué)院",
            "master_name": "老李",
            "slogan": "啦啦啦啦"
          }
        ]
      }
    }
  },
  {
    "description": "update department by dep_id",
    "request": {
      "uri": "/api/departments/T03/",
      "method": "put",
      "json": {
        "data": [
          {
            "dep_id": "T03",
            "dep_name": "C++",
            "master_name": "C++-Master",
            "slogan": "Here is Slogan"
          }
        ]
      }
    },
    "response": {
      "status": 201,
      "json": {
        "dep_id": "T03",
        "dep_name": "C++",
        "master_name": "C++-Master",
        "slogan": "Here is Slogan"
      }
    }
  }
]

(8)總結(jié):

Json文件的配置屬性說明:

像我們上面練習(xí)過的Json文件配置浙踢,所有的數(shù)據(jù)值是固定的绢慢,

如:descriptionrequest洛波、response胰舆、redirectTo等這些都是固定的,不能修改蹬挤,修改可能連Moco服務(wù)都啟動不來缚窿。

還有request的屬性值,如:uri焰扳、method倦零、cookiesheaders吨悍,也是必須這樣寫的扫茅。

還有GET請求傳遞參數(shù)用queries屬性,POST請求傳遞參數(shù)用formsjson屬性都可以育瓜。(PUT,DELETE請求同Post請求葫隙。)

Moco框架原理:

就是把所有接口的數(shù)據(jù),包括發(fā)送請求的所有數(shù)據(jù)和返回結(jié)果的所有數(shù)據(jù)躏仇,以Json數(shù)據(jù)格式進(jìn)行編寫恋脚。

把這些數(shù)據(jù)放入Moco框架提供的HTTP或者HTTPS的服務(wù)上腺办,就實(shí)現(xiàn)了接口數(shù)據(jù)的模擬。

在使用的時(shí)候糟描,我們只要按照json文件中接口配置的信息進(jìn)行請求即可怀喉,如果調(diào)用接口傳遞的數(shù)據(jù)和Json文件中接口編寫要接收的數(shù)據(jù)不一致,則無法請求成功船响。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末躬拢,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子灿意,更是在濱河造成了極大的恐慌估灿,老刑警劉巖崇呵,帶你破解...
    沈念sama閱讀 211,817評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件缤剧,死亡現(xiàn)場離奇詭異,居然都是意外死亡域慷,警方通過查閱死者的電腦和手機(jī)荒辕,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,329評論 3 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來犹褒,“玉大人抵窒,你說我怎么就攤上這事〉铮” “怎么了李皇?”我有些...
    開封第一講書人閱讀 157,354評論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長宙枷。 經(jīng)常有香客問我掉房,道長,這世上最難降的妖魔是什么慰丛? 我笑而不...
    開封第一講書人閱讀 56,498評論 1 284
  • 正文 為了忘掉前任卓囚,我火速辦了婚禮,結(jié)果婚禮上诅病,老公的妹妹穿的比我還像新娘哪亿。我一直安慰自己,他們只是感情好贤笆,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,600評論 6 386
  • 文/花漫 我一把揭開白布蝇棉。 她就那樣靜靜地躺著,像睡著了一般芥永。 火紅的嫁衣襯著肌膚如雪篡殷。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,829評論 1 290
  • 那天恤左,我揣著相機(jī)與錄音贴唇,去河邊找鬼搀绣。 笑死,一個(gè)胖子當(dāng)著我的面吹牛戳气,可吹牛的內(nèi)容都是我干的链患。 我是一名探鬼主播,決...
    沈念sama閱讀 38,979評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼瓶您,長吁一口氣:“原來是場噩夢啊……” “哼麻捻!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起呀袱,我...
    開封第一講書人閱讀 37,722評論 0 266
  • 序言:老撾萬榮一對情侶失蹤贸毕,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后夜赵,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體明棍,經(jīng)...
    沈念sama閱讀 44,189評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,519評論 2 327
  • 正文 我和宋清朗相戀三年寇僧,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了摊腋。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,654評論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡嘁傀,死狀恐怖兴蒸,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情细办,我是刑警寧澤橙凳,帶...
    沈念sama閱讀 34,329評論 4 330
  • 正文 年R本政府宣布,位于F島的核電站笑撞,受9級特大地震影響岛啸,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜娃殖,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,940評論 3 313
  • 文/蒙蒙 一值戳、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧炉爆,春花似錦堕虹、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,762評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至郁稍,卻和暖如春赦政,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,993評論 1 266
  • 我被黑心中介騙來泰國打工恢着, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留桐愉,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,382評論 2 360
  • 正文 我出身青樓掰派,卻偏偏與公主長得像从诲,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子靡羡,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,543評論 2 349

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