如果該對象不斷變化,如何模擬返回的日期時間對象?py.test:嘲諷不斷變化的日期時間對象
例如,我有一些代碼查詢API,獲取一些時間序列數據並將其作爲一系列日期時間對象返回。
因此,從查詢API返回的數據看起來類似:
{
'from_date': 1497881400000.0,
'group_by': [],
'message': '',
'query': 'avg:system.load.norm.5{role:lb}',
'res_type': 'time_series',
'resp_version': 1,
'series': [{'aggr': 'avg',
'attributes': {},
'display_name': 'system.load.norm.5',
'end': 1497709799000,
'expression': 'avg:system.load.norm.5{role:lb}',
'interval': 1,
'length': 60,
'metric':
'avg:system.load.norm.5{role:lb}',
'pointlist': [[1497881400000.0,
0.06923198629355053],
[.. 60 more points]],
'query_index': 0,
'scope': 'role:lb',
'start': 1497709742000,
'unit': [None, None]}],
'status': 'ok',
'to_date': 1497709800000
}
和我的代碼做到這一點:
from typing import NamedTuple
class SampleMetric(NamedTuple):
query: str
time: datetime.datetime
value: int
pointlist = api_query['series'][0]['pointlist']
return [SampleMetric(query=metric,
time=datetime.datetime.fromtimestamp(
point[0]/1000),
value=point[1]) for point in pointlist]
這在上述API數據的情況下會是這個樣子:
[SampleMetric(query='avg:system.load.norm.5{role:lb}', time=datetime.datetime(2017, 10, 20, 11, 2), value=231.8605833053589),
SampleMetric(query='avg:system.load.norm.5{role:lb}', time=datetime.datetime(2017, 10, 20, 11, 3), value=243.17432022094727),...]
因此,我可以很容易地創建一個模擬api對象,返回一個字典作爲我們的e xample在上面做了,但我真的很努力地模擬返回的日期時間對象。
即 time=datetime.datetime(2017, 10, 20, 11, 2)
誰能給我如何做到這一點,請任何想法?目前我已經解決了這個問題,只有一個時間點指向我的返回數據並對時間值進行了硬編碼,但我認爲這不是真正的世界測試,因爲它應該返回60個結果。
請忽略在這個例子中使用的實際值,我知道他們是錯誤的,但這只是爲了說明的目的,因爲我努力解釋我的意思。
如果您可以給出您想要測試的一些簡單代碼的具體示例,並描述測試難寫的原因,那麼您會得到更有幫助的答案。我猜想你的意思,但我不確定。 –