我怎样才能测试亚马逊 api?
How can I test the amazon api?
我有以下代码。
如何测试函数 create_items_by_parent_asin
?
def get_amazon():
return AmazonAPI(settings.AMAZON_ACCESS_KEY, settings.AMAZON_SECRET_KEY, settings.AMAZON_ASSOC_TAG)
def get_item_by_asin(asin: str, response_group='Large'):
amazon = get_amazon()
product = amazon.lookup(ItemId=asin, ResponseGroup=response_group)
return product
def create_items_by_parent_asin(self, asin: str):
amazon_item = get_item_by_asin(asin, response_group='Large')
....
您不测试 API,您使用不同的 AmazonAPI 实现来模拟与 amazon 的交互。
在 python 中,这可以使用 unittest.mock 完成:https://docs.python.org/3/library/unittest.mock.html
自从我在 python 中完成此操作已经很长时间了,但是 iirc 你可以在你的测试类中做这样的事情(未经测试,我改编了文档中的示例):
testproduct = ... # static product you will use in your tests
with patch('AmazonAPI') as mock:
instance = mock.return_value
instance.lookup.return_value = testproduct
product = x.create_items_by_parent_asin("...") # this should now be your testproduct
如果 product 是创建一个实例的重要事物,您也可以通过以下方式模拟它:
testproduct = Mock()
testproduct.<method you want to mock>.return_value = ...
我有以下代码。
如何测试函数 create_items_by_parent_asin
?
def get_amazon():
return AmazonAPI(settings.AMAZON_ACCESS_KEY, settings.AMAZON_SECRET_KEY, settings.AMAZON_ASSOC_TAG)
def get_item_by_asin(asin: str, response_group='Large'):
amazon = get_amazon()
product = amazon.lookup(ItemId=asin, ResponseGroup=response_group)
return product
def create_items_by_parent_asin(self, asin: str):
amazon_item = get_item_by_asin(asin, response_group='Large')
....
您不测试 API,您使用不同的 AmazonAPI 实现来模拟与 amazon 的交互。
在 python 中,这可以使用 unittest.mock 完成:https://docs.python.org/3/library/unittest.mock.html
自从我在 python 中完成此操作已经很长时间了,但是 iirc 你可以在你的测试类中做这样的事情(未经测试,我改编了文档中的示例):
testproduct = ... # static product you will use in your tests
with patch('AmazonAPI') as mock:
instance = mock.return_value
instance.lookup.return_value = testproduct
product = x.create_items_by_parent_asin("...") # this should now be your testproduct
如果 product 是创建一个实例的重要事物,您也可以通过以下方式模拟它:
testproduct = Mock()
testproduct.<method you want to mock>.return_value = ...