在“请求”级别轻松模拟对UberSmith的调用。
pytest-ubersmith的Python项目详细描述
对python ubersmith库的模拟调用
用法
pytest ubersmith使模拟api调用变得非常容易:
importubersmith.clientdeftest_add_client(ubermock):client_id=1234ubermock.client.add=client_idassertubersmith.client.add(login='test',password='abc')==1234# Easy checking of callsassertubermock.client.add.calledassertubermock.client.add.call_count==1ubermock.client.add.assert_called_once_with(login='test')ubermock.client.add.assert_called_once_with_exactly(login='test',password='abc')
要让python ubersmith提出响应者,请返回 ubermock.ResponseError:
importubersmith.clientimportubersmith.exceptionsdeftest_unknown_client(ubermock):ubermock.client.get=ubermock.ResponseError('Invalid client!',1)withpytest.raises(ubersmith.exceptions.ResponseError):ubersmith.client.get(client_id=1234)
如果需要完全控制响应,可以返回整个 Ubersmith JSON响应:
importpytestimportubersmith.clientimportubersmith.exceptionsdeftest_unknown_client_raw(ubermock):ubermock.client.get.raw_response={'status':False,'data':'','error_message':'Invalid client','error_code':1,}withpytest.raises(ubersmith.exceptions.ResponseError):ubersmith.client.get(client_id=1234)
您甚至可以传递动态响应的调用:
importpytestimportubersmith.clientimportubersmith.exceptionsdeftest_dynamic_client(ubermock):defget_client(method,params,request,context):ifparams['client_id']=='1':return{'client_id':1}else:raiseubermock.ResponseError('Invalid client!',1)ubermock.client.get=get_clientassertubersmith.client.get(client_id=1)=={'client_id':1}withpytest.raises(ubersmith.exceptions.ResponseError):ubersmith.client.get(client_id=2)