有兩種方法可以用在這裏:
- 使用假冒twilio客戶端和使用單元測試代碼
- 使用使用測試賬戶的真實客戶端
對於單元測試,方法1通常是一個更好的主意,因此,例如,您可以運行測試並且測試執行得更快。你也需要測試你的代碼,但是方法2你也將測試twilio本身。
這帶來了另一個問題:我們如何確保您的假客戶端足夠接近真實客戶端以使您的測試有用? 在最好的情況下,twilio會釋放並維護這樣的測試客戶端,但它看起來並不像他們擁有它。
你可以做的是結合這些方法:假冒客戶端(方法1),並進行一些測試,以驗證假客戶端的行爲與真實客戶端的行爲相同。
但是,您可以從方法1開始 - 您需要構建測試客戶端(通常是非常簡單的東西),並確保它的功能足夠接近真實客戶端(也許切換到真實客戶端並確保你的測試仍然有效)。
這裏的危險是,如果twilio端有一些API崩潰,你的測試仍然會通過,但真正的應用程序將被破壞。另一方面,即使測試失敗,真正的應用程序仍然會被破壞,所以在這種情況下你不能真正保護你的應用程序。
下面是我們如何可以做一個測試客戶端代碼:
class TwilioTestClient:
def __init__(self, sid, token):
self.sid = sid
self.token = token
self.messages = TwillioTestClientMessages()
class TwillioTestClientMessages:
self.created = []
def create(self, to, from_, body):
self.created.append({
'to': to,
'from_': from_,
'body': body
})
並在測試,那麼你可以做這樣的事情:
import twilio
# Replace real client with our test client
twilio.Client = TwilioTestClient
// invoke your code
send_sms(phone, content)
assert TwillioTestClientMessages.created == [{
'to': phone,
'from_': settings.DEFAULT_NUMBER,
'body': content
})
這是一種簡化的方法,還您可以使用mock library來製作測試客戶端。
或者您可以修補真正的twilio客戶端來阻止實際的HTTP請求並記錄參數/模擬響應。 您將需要尋找到twilio客戶端源代碼,找到方法(或方法)嘲笑,這裏是類似的方法我已經嘲弄requests
庫的Session.request
方法用於 模擬Facebook的圖形響應:
mock_facebook_data = {
'id': 'test_id',
'first_name': 'First Name',
'last_name': 'Last Name'
}
def get_facebook_data(self, method, url, **kwargs):
# Make sure we are mocking the expected request.
assert method == 'get'
assert url == (
'https://graph.facebook.com/me?fields=first_name,id,'
'last_name&access_token={}'.format(facebook_access_token)
)
class ResponseMock:
def __init__(self, data):
self.data = data
self.status_code = 200
def json(self):
return self.data
return ResponseMock(mock_facebook_data)
monkeypatch.setattr('requests.sessions.Session.request', get_facebook_data)
現在,當應用程序試圖從Facebook API中獲取數據時,它將會獲得靜態數據,並且數據將被包裝到ResponseMock
對象中,我們將從實際請求中獲得最少的表示。
另請查看這篇文章:Unit Testing Your Twilio App Using Python’s Flask and Nose。據我所知,他們使用真正的客戶端進行單元測試,但他們也提到了集成的另一面 - 如何測試從twilio端調用的代碼。 在這種情況下,您還需要模擬Twilio服務器,本文中有一個此類模擬的示例。
你可以從twilio註冊一個免費的api-key,你可以創建一個twillio賬戶並且玩耍。 https://support.twilio.com/hc/en-us/articles/223136107-How-does-Twilio-s-Free-Trial-work-。如果你的目的是測試各種twilio場景的代碼,你應該爲你的單元/端到端測試使用一個Mocking庫 –