mock測試 建立服務 fiddler 單元測試

2022-09-12 05:39:11 字數 3655 閱讀 2132

mock測試就是在測試過程中,對於某些不容易構造或者不容易獲取的物件,用乙個虛擬的物件來建立以便測試的測試方法。

一、建立服務的方式——flask、django

import

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)

flask是python的乙個輕量級web框架,比較簡單。

django稍微比較複雜,可以參考:這個已經做成了乙個小專案的形式

遇到的問題:

1、post請求,結果獲取引數的時候,卻是如下方式

request.values.get("key")
2、post請求,因為content-type的問題,通過如下方式解決

request.get_json(force=true)
3、get請求,按道理引數是?後面拼接欄位名=字段值,但是遇到的是直接放在/後面,解決示例如下

@server.route('

/seonrestservice/email-api/v2.0/

', methods=['

get'

])def

seon_email_api(email):

""""""print("

seon_email_api服務,email是:

", email)

4、容器中安裝vim

先執行:apt-get update

再執行:apt-get install vim

5、獲取請求頭,請求url,請求方法等資訊都有對應的方法

6、介面返回的型別

二、建立服務的方式—— tornado

tornado也是python自帶的乙個輕量級web框架,是乙個群友提供的乙個mock示例時,了解到的這個框架,可以參考:

import

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將會對這個請求進行解壓操作##

三、fiddler的mock實際上是劫持的方式給的自定義響應,如下圖,在autoresponder選項卡下新增規則即可

四、unittest中的mock

from unittest.mock import

patch

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