-1
所以我有一個模塊從Open Weather Map檢索JSON。用戶必須輸入的位置和API密鑰來接收針對所對應的位置的輸出:比較JSON字符串使用相同的代碼給出不同的結果
(主模塊)
def weather_response(location, API_key):
location=format(location) #Formats the location name if proper form
url='http://api.openweathermap.org/data/2.5/forecast?q='+location+'&APPID='+API_key
json=urllib.request.urlopen(url)
json=json.read()
json=json.decode()
urllib.request.urlretrieve(url,"main3.txt")
return json
我也有一個相同的測試文件:
(測試器模塊)
def test_weather_response(self):
global json_de
global json_ny
self.assertEqual(weather_response("Delhi","<APPID>"),json_de)
self.assertNotEqual(weather_response("Mumbai","<APPID>"),json_de)
self.assertEqual(weather_response("delhi","<APPID>"),json_de)
self.assertEqual(weather_response(" dElHi ","<APPID>"),json_de)
self.assertNotEqual(weather_response("Pizza","<APPID>"),json_de)
,其中json_de和json_ny一個再次聲明如下:
(測試器模塊,)
url='http://api.openweathermap.org/data/2.5/forecast?q=Delhi&APPID=<APPID>'
json_de=urllib.request.urlopen(url)
json_de=json_de.read()
json_de=json_de.decode()
url2='http://api.openweathermap.org/data/2.5/forecast?q=NewYork&APPID=<APPID>'
json_ny=urllib.request.urlopen(url2)
json_ny=json_ny.read()
json_ny=json_ny.decode()
urllib.request.urlretrieve(url,"tested3.txt")
正如你所看到的,我已經保存在每個文件的響應,這樣,當測試失敗,我可以跟蹤誤差。
Testing_1:
結果:
輸出文件:
從主要功能:main.txt
從測試功能:tested.txt
Testing_2:
結果:
輸出文件:
從主要功能:main2.txt
從測試功能:testing2.txt
Testing_3:
結果:
輸出文件:
從主要功能:main3.txt
從測試功能:testing3.txt
現在,我不知道爲什麼對於相同的代碼,相同的url和相同的輸出(請參閱文本文件),我只在第三次執行時出錯。
您正在調用外部API;天氣預報隨時間而變化。 –
但我沒有對腳本進行任何硬編碼。我爲這兩個文件中的每個運行調用一個外部API。 –
單元測試不應該依賴外部代碼,特別是不受您控制的外部服務隨着時間的推移產生新數據。無論如何,測試他們的API並不是你的工作。 –