设计并运行IAP的测试案例
亚马逊提供了App Tester工具,在您将应用提交给亚马逊应用商店之前对其进行单元测试。为有效地测试应用,可创建一组测试案例,全面覆盖用户在与应用交互时会遇到的各种情景。
应用与亚马逊应用商店的交互会隔离到API库,因此您的应用将不知道它是否与App Tester通信。因为App Tester给出的响应由您控制,所以您可以测试应用在任何响应条件下的行为。
本页介绍了一组应该可以涵盖应用的IAP实现涉及的大多数用户场景的测试案例,并讨论了如何使用App Tester来执行这些测试案例。有关App Tester的更多信息,请参阅以下页面:
测试案例摘要
在测试应用中的IAP实现时,规划您的测试案例以覆盖尽可能多的代码路径。下面的事务类型列表应很好地覆盖了预计中应用用户可能会遇到的各种场景:
- 获取用户数据(成功/失败)
- 获取产品数据(成功/失败)
- 购买请求(成功/失败/已购买/SKU无效)
- 购买更新请求(成功/失败)
- 通知履行(成功/不可用)
- 订阅检查(有效/过期)
- 验证收据 (RVS)
获取用户数据
亚马逊应用商店和App Tester工具都通过用户ID来跟踪交易。因为您的应用应该能够同时应对多个用户,所以应用中任何特定于用户的函数应在适当的时间点(如Android生命周期方法onResume()
)检查当前登录的用户ID。在检索用户数据时,您可能会收到SUCCESSFUL或FAILED响应。
测试“获取用户数据”的两种响应:
- 在App Tester中,转到User Account Settings(用户账户设置)选项卡,确定已设置用户ID。
- 设置GetUserData API首选项:
- 要测试SUCCESSFUL响应,请将首选项设置为DEFAULT或SUCCESSFUL。
- 要测试FAILED响应,请将首选项设置为FAILED。
- 调用
getUserData
。 - 使用
onGetUserDataResponse
处理响应。
获取产品数据
对“获取产品数据”执行测试时,App Tester将在DEFAULT模式下从JSON文件返回产品数据。检索产品数据时,您可能会收到SUCCESSFUL或FAILED响应。
测试“获取产品数据”:
- 验证您用于App Tester的JSON文件是否包含要测试的SKU和产品定义。
- 设置GetProductData API首选项:
- 要测试SUCCESSFUL响应,请将首选项设置为DEFAULT或SUCCESSFUL。
- 要测试FAILED响应,请将首选项设置为FAILED。
- 调用
getProductData
。 - 使用
onGetProductDataResponse
处理响应。
购买
为了简化实现和测试,Purchase API以相同方式处理所有三种类型的IAP商品:
- 订阅: 用户进行一次性购买
- 权利: 用户进行一次性购买
- 消费品: 同一用户可以购买多次
测试Purchase API:
- 验证您用于App Tester的JSON文件是否包含要测试的SKU和产品定义。
- 设置Purchase API首选项。请务必测试全部四个可用条件:
- 要测试SUCCESSFUL响应,请将首选项设置为DEFAULT或SUCCESSFUL。
- 要测试FAILED响应,请将首选项设置为FAILED。
- 要测试ALREADY_PURCHASED请求,请将首选项设置为ALREADY_PURCHASED。
- 要测试INVALID_SKU,请将首选项设置为INVALID_SKU。
- 调用
purchase
。 - 使用
onPurchaseResponse
处理响应。
成功购买的内容将显示在App Tester的Manage Transactions(管理交易)选项卡上。
或者,您可以通过完成典型购买工作流程来测试“已购买”条件:
- 验证您用于App Tester的JSON文件是否包含要测试的SKU和产品定义。
- 将Purchase API首选项设置为DEFAULT。
- 成功购买订阅或权利SKU。(可以多次购买消费品。)
- 使用相同的SKU再次调用
purchase
。 - 使用
onPurchaseResponse
处理响应。
成功购买的内容将显示在App Tester的Manage Transactions选项卡上。
购买更新请求
为确保用户能够访问正确内容,请在您的应用开始与该用户交互时调用PurchaseUpdateRequests API(在Android生命周期的onResume()
方法中)。成功的响应可以包含来自以前交易的零个或多个收据,具体取决于App Tester中管理交易选项卡的内容。
可以使用收据验证服务 (RVS) 来验证收据中的令牌。
测试购买更新请求:
- 验证您用于App Tester的JSON文件是否包含要测试的SKU和产品定义。
-
成功购买您配置的SKU。
- 设置GetPurcaseUpdates API首选项:
- 要测试SUCCESSFUL响应,请将首选项设置为DEFAULT或SUCCESSFUL。
- 要测试FAILED响应,请将首选项设置为FAILED。
- 调用
getPurchaseUpdates
。 - 使用
onPurchaseUpdatesResponse
处理响应。
如果您想要生成SUCCESSFUL但响应为空,请使用以下工作流程:
- 验证您用于App Tester的JSON文件是否包含要测试的SKU和产品定义。
- 成功购买您配置的SKU。
- 将getPurchaseUpdates API首选项设置为DEFAULT。
- 在Manage Transactions选项卡上,删除所有交易。
- 调用
getPurchaseUpdates
。 - 使用
onPurchaseUpdatesResponse
处理响应。
通知履行
调用通知履行API来验证履行并测试IAP中的可用收据状态。您可以使用以下工作流程来测试消费品或权利商品的履行。
测试通知履行:
- 对消费品商品调用
purchase
。 - 请注意已购买商品的收据。
- 调用
getPurchaseUpdate
。 - 请注意返回的消费品收据。
- 在App Tester中的Manage Transactions选项卡上,验证消费品是否设置为已交付。
- 调用
notifyFullfilment
:- 要测试“已履行”条件,请将
notifyFulfillment
设置为SUCCESSFUL。 - 要测试“不可用”条件,请将
notifyFulfillment
设置为UNAVAILABLE。
- 要测试“已履行”条件,请将
- 在App Tester中的Manage Transactions选项卡上,验证购买:
- 如果您要测试“已履行”条件,则消费品应列为Fulfilled。
- 如果您要测试“不可用”条件,则消费品应列为Unavailable。
订阅检查
您可以使用App Tester来验证有效和过期的订阅。如果您从Manage Transactions选项卡取消有效的订阅交易,则App Tester会将该交易视为过期订阅。
测试有效的订阅:
- 成功购买订阅SKU。
- 转到Manage Transactions选项卡,验证此交易是否在该处列出。
- 调用
getPurchaseUpdates
。 - 使用
onPurchaseUpdatesResponse
处理响应。 - 从返回的收据中,验证您所购买的SKU的最新收据(按开始日期)。
- 验证结束日期的值是否为null。
测试过期的订阅:
- 成功购买订阅SKU。
- 转到Manage Transactions选项卡,验证此交易是否在该处列出。
-
在Manage Transactions选项卡上,取消此交易。
- 调用
getPurchaseUpdates
。 - 使用
onPurchaseUpdatesResponse
处理响应。 - 从返回的收据中,验证您所购买的SKU的最新收据(按开始日期)。
- 确认结束日期的值不是null。
验证收据
亚马逊提供了收据验证服务 (RVS),可用于从您的后端服务器验证购买。要了解有关此服务的更多信息,请参阅收据验证服务概述。
IAP响应表
下表列出IAP API响应以及与之对应的App Tester属性和其他测试条件:
IAP API响应 | 异步调用 | AppTester属性集 | 是否使用JSON? | 注释 |
---|---|---|---|---|
PurchaseRequestStatus.SUCCESSFUL | purchase | Purchase API,DEFAULT或SUCCESSFUL | 是 | 只要购买针对JSON文件中的有效SKU,就会返回成功响应 |
PurchaseRequestStatus.FAILED | purchase | Purchase API,FAILED | 是(以显示商品信息) | 在首选项页面中将此属性设置为FAILED,或关闭购买确认对话框时,App Tester会强制作出失败响应 |
PurchaseRequestStatus.INVALID_SKU | purchase | Purchase API,INVALID_SKU | 否 | 在首选项页面中设置此属性,App Tester会强制任何购买请求返回INVALID_SKU |
PurchaseRequestStatus.ALREADY_PURCHASED | purchase | Purchase API,ALREADY_PURCHASED | 是 | 在“API Response Settings”(API响应设置)选项卡中将此属性设置为ALREADY_PURCHASED或以前已购买SKU时,App Tester会强制任何购买请求返回ALREADY_PURCHASED |
GetProductDataStatus。SUCCESSFUL | getProductData | GetProductData API,DEFAULT或SUCCESSFUL | 是 | 只要请求是针对JSON文件中的有效SKU,就会返回成功响应 |
GetProductDataStatus。FAILED | getProductData | GetProductData API,FAILED | 否 | 在设置了此属性时,App Tester会强制任何产品数据请求返回FAILED |
GetUserDataStatus。SUCCESS | getUserData | GetUserData API,DEFAULT或SUCCESSFUL | 否 | 在API响应设置选项卡中设置了此属性时,App Tester将始终返回App Tester中存储的用户ID |
GetUserIdRequestStatus。FAILED | getUserData | GetUserData API,FAILED | 否 | 在API Response Settings选项卡中设置了此属性时,App Tester会强制作出失败响应 |
PurchaseUpdatesResponseStatus.SUCCESS | getPurchaseUpdates | PurchaseUpdates API,SUCCESSFUL | 否 | 在API Response Settings选项卡中设置了此属性时,App Tester将始终返回交易日志中的内容 |
PurchaseUpdatesResponseStatus.FAILED | getPurchaseUpdates | PurchaseUpdates API,FAILED | 否 | 在API Response Settings选项卡中设置了此属性时,App Tester会强制作出失败响应 |
Last updated: 2024年5月22日