我们想确认作业是否确实在Pytest中按预期在循环操作期间等待。我们在3次循环中将休眠时间设置为30秒--我们预期并证明在Pytest中总等待时间为90秒,如下所示。
-- Loop.py
class Loop
def LoopJob(self, job_id, date, subject, fromDate, toDate):
for error_count in range(3):
try:
request_url = 'http://' + self.hostname + '/samplejob'
headers = {'content-type': 'application/json'}
response = requests.post(request_url, data=json.dumps(payload), timeout=self.timeout, headers=headers)
if response is None:
time.sleep(30)
else:
break
if response is None or response.status_code != 202:
error_message = "error message on parent method"
raise CommunicationError(error_message)
return response
我认为我们可以像下面这样使用“request_history”来证明循环时间,但是不知道如何在pytest中Assert等待时间。
-- Pytest.py
def test_looptimes(monkeypatch, requests_mock):
monkeypatch.setenv('ENV_ID', 'Local')
headers = {'content-type': 'application/json'}
mock_response = [
{'json': {'status': None}, 'status_code': None},
{'json': {'status': None}, 'status_code': None},
{'json': {'status': None}, 'status_code': None},
{'json': {'status': None}, 'status_code': None}
]
requests_mock.post("http://localhost:8080/samplejob", headers=headers, json=mock_response)
...
history = requests_mock.request_history
assert len(history) == 3
assert history[0].url == 'http://localhost:8080/samplejob'
assert history[1].url == 'http://localhost:8080/samplejob'
assert history[2].url == 'http://localhost:8080/samplejob'
如果你有什么好的想法或例子,请告诉我们。提前谢谢。
1条答案
按热度按时间cqoc49vn1#
您可以像模拟任何其他方法一样模拟sleep方法,然后Assert对它的调用。
举一个简单的例子,如果我的模块
sleeping_beauty.py
看起来像这样:测试将是(使用pytest-mock):
模拟睡眠方法的另一个好处是,您的测试速度会快得多--完成测试所需的时间不会是90秒,而是不到一秒。