6驱显、Moco框架的使用
當(dāng)需要調(diào)用接口來編寫測試用例的時(shí)候腕够,此時(shí)該接口并沒有被實(shí)現(xiàn)衡瓶,這個(gè)時(shí)候我們就可以用Mock框架來模擬一個(gè)接口出來韧献。
使用Mock模擬接口以下功能:
攔截服務(wù):
http
末患,https
。請求方式:GET锤窑,POST璧针。
模擬請求地址:URL。
模擬參數(shù):包括
header
和cookie
的數(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ù)值是固定的绢慢,
如:description
、request
洛波、response
胰舆、redirectTo
等這些都是固定的,不能修改蹬挤,修改可能連Moco服務(wù)都啟動不來缚窿。
還有request
的屬性值,如:uri
焰扳、method
倦零、cookies
、headers
吨悍,也是必須這樣寫的扫茅。
還有GET請求傳遞參數(shù)用queries
屬性,POST請求傳遞參數(shù)用forms
和json
屬性都可以育瓜。(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ù)不一致,則無法請求成功船响。