mock測試就是在測試過程中,對於某些不容易構造或者不容易獲取的物件,用乙個虛擬的物件來建立以便測試的測試方法。
一、建立服務的方式——flask、django
importflask是python的乙個輕量級web框架,比較簡單。flask
from flask import
request
#建立介面後台服務
server = flask.flask(__name__
)@server.route('/
', methods=['
get', '
post'])
defdemo():
#獲取get請求引數
arg = request.args.get("
key"
)
#post 獲取表單請求資料
form = request.form.get("
key", type=str, default=none)
#獲取所有請求引數,不能獲取json
values = request.values.get("
key"
)
#獲取請求json
json =request.get_json()
print("
arg"
, arg)
print("
form
", form)
print("
values
", values)
print("
json
", json)
return
"你想返回的內容
"server.run(host="
127.0.0.1
", port=9000, debug=true)
django稍微比較複雜,可以參考:這個已經做成了乙個小專案的形式
遇到的問題:
1、post請求,結果獲取引數的時候,卻是如下方式
request.values.get("key")2、post請求,因為content-type的問題,通過如下方式解決
request.get_json(force=true)3、get請求,按道理引數是?後面拼接欄位名=字段值,但是遇到的是直接放在/後面,解決示例如下
@server.route('4、容器中安裝vim/seonrestservice/email-api/v2.0/
', methods=['
get'
])def
seon_email_api(email):
""""""print("
seon_email_api服務,email是:
", email)
先執行:apt-get update
再執行:apt-get install vim
5、獲取請求頭,請求url,請求方法等資訊都有對應的方法
6、介面返回的型別
二、建立服務的方式—— tornado
tornado也是python自帶的乙個輕量級web框架,是乙個群友提供的乙個mock示例時,了解到的這個框架,可以參考:
import三、fiddler的mock實際上是劫持的方式給的自定義響應,如下圖,在autoresponder選項卡下新增規則即可tornado.ioloop
import
tornado.web
class
mainhandler(tornado.web.requesthandler):
'''http服務端
'''def
get(self):
'''get請求
'''a = self.get_argument('a'
) self.write()
defpost(self):
'''post請求
'''h =self.request.headers
u =self.request.uri
b =self.request.body
print("h"
, h)
print("u"
, u)
print("b"
, b)
#下面2行**是設定返回的資訊,目前沒有想到使用場景##
self.set_status(200, '失敗')
self.write(
"返回的內容")
if__name__ == '
__main__':
/', mainhandler)])
#預設host: 127.0.0.1
127.0.0.2
", port=8866)
tornado.ioloop.ioloop.instance().start()
#和上面啟動方式不同的地方就多了引數:decompress_request=true
#在有這個配置項的時候,如果post請求的報文頭部有說明編碼方式是 gzip時,tornado將會對這個請求進行解壓操作##
四、unittest中的mock
from unittest.mock importpatch
from unittest import
mock
import
unittest
class
c:
defa(self):
return 666
defb(self):
return 666
class
test***(unittest.testcase):
"""單元測試的2種mock方式
mock不能憑空建立屬性a,只能應用於物件邏輯還沒完成但是需要這個物件的返回資訊
感覺意義不是很大
"""@patch.object(c, 'b
')@patch.object(c, 'a
')deftest_***1(self, a, b):
#注意測試方法中的引數和裝飾器的引數對應關係
a.return_value = 20b.return_value = 30c =c()
print("
test_***1
", c.a(), c.b())
deftest_***2(self):
c =c()
c.a = mock.mock(return_value=20)
print("
test_***2
", c.a())
if__name__ == '
__main__':
unittest.main()
Mock測試技術
在軟體測試過程中,對於一些不容易構造 獲取的物件,用乙個虛擬的物件來替代它,以達到相同的效果,這個虛擬的物件就是mock。在前後端分離專案中,當後端工程師還沒有完成介面開發的時候,前端開發工程師利用mock技術,自己用mock技術先呼叫乙個虛擬的介面,模擬介面返回的資料,來完成前端頁面的開發。其實,...
Mock服務選型
維護團隊 大搜車無線架構團隊 star 7300 使用者 大搜車,七牛,美團,360,閱文集團等 部署難度 低 環境要求 紛享機器額外配置 規則 restful id list method get resetful請求 restful 222 list method get proxy metho...
MOCK 測試編寫
比較菜,cartographer編譯一定要加上mock,所以自己加的一些介面也要寫mock測試函式。1 比如我在pose graph inte ce加了介面如下 virtual bool istrajectoryexist int trajectory id const 0 則我要在mock pos...