2017-09-03 142 views
-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:

結果:

Test_1

輸出文件:

從主要功能:main.txt

從測試功能:tested.txt

Testing_2:

結果:

Test_2

輸出文件:

從主要功能:main2.txt

從測試功能:testing2.txt

Testing_3:

結果:

Test_3

輸出文件:

從主要功能:main3.txt

從測試功能:testing3.txt


現在,我不知道爲什麼對於相同的代碼,相同的url和相同的輸出(請參閱文本文件),我只在第三次執行時出錯。

+0

您正在調用外部API;天氣預報隨時間而變化。 –

+0

但我沒有對腳本進行任何硬編碼。我爲這兩個文件中的每個運行調用一個外部API。 –

+3

單元測試不應該依賴外部代碼,特別是不受您控制的外部服務隨着時間的推移產生新數據。無論如何,測試他們的API並不是你的工作。 –

回答

0

所以,問題是附加有每一個響應消息ID:

message ID with the JSON string

我跳過的非常線和問題得到有效解決掃描。

相關問題