开发者控制台

设计并运行IAP的测试案例

设计并运行IAP的测试案例

亚马逊提供了App Tester工具,在您将应用提交给亚马逊应用商店之前对其进行单元测试。为有效地测试应用,可创建一组测试案例,全面覆盖用户在与应用交互时会遇到的各种情景。

应用与亚马逊应用商店的交互会隔离到API库,因此您的应用将不知道它正在与App Tester通信。因为App Tester给出的响应由您控制,所以您可以测试应用在任何响应条件下的行为。

本页介绍了一组应该可以涵盖应用的IAP实现涉及的大多数用户场景的测试案例,并讨论了如何使用App Tester来执行这些测试案例。有关App Tester的更多信息,请参阅以下页面:

测试案例摘要

在测试应用中的IAP实现时,规划您的测试案例以覆盖尽可能多的代码路径。下面的事务类型列表应很好地覆盖了预计中应用用户可能会遇到的各种场景:

  • 获取用户数据(成功/失败)
  • 获取产品数据(成功/失败)
  • 购买请求(成功/失败/已购买/SKU无效)
  • 购买更新请求(成功/失败)
  • 通知履行(成功/不可用)
  • 订阅检查(有效/过期)
  • 验证收据(RVS)

获取用户数据

亚马逊应用商店和App Tester工具都通过用户ID来跟踪交易。因为您的应用应该能够同时应对多个用户,所以应用中任何特定于用户的函数应在适当的时间点(如Android生命周期方法onResume())检查当前登录的用户ID。在检索用户数据时,您可能会收到SUCCESSFUL或FAILED响应。

测试“获取用户数据”的两种响应:

  1. 在App Tester中,转到User Account Settings(用户账户设置)选项卡,确定已设置用户ID。
  2. 设置GetUserData API首选项:
    • 要测试SUCCESSFUL响应,请将首选项设置为DEFAULTSUCCESSFUL
    • 要测试FAILED响应,请将首选项设置为FAILED。​
  3. 调用getUserData。​
  4. 使用onGetUserDataResponse处理响应。

获取产品数据

对“获取产品数据”执行测试时,App Tester将在DEFAULT模式下从JSON文件返回产品数据。检索产品数据时,您可能会收到SUCCESSFUL或FAILED响应。

测试“获取产品数据”:

  1. 验证您用于App Tester的JSON文件是否包含要测试的SKU和产品定义。
  2. 设置GetProductData API首选项:
    • 要测试SUCCESSFUL响应,请将首选项设置为DEFAULTSUCCESSFUL
    • 要测试FAILED响应,请将首选项设置为FAILED。​
  3. 调用getProductData。​
  4. 使用onGetProductDataResponse处理响应。

购买

为了简化实现和测试,Purchase API以相同方式处理所有三种类型的IAP商品:

  • 订阅: 用户进行一次性购买
  • 权利​: 用户进行一次性购买
  • 消费品​: 同一用户可以购买多次

测试Purchase API:

  1. 验证您用于App Tester的JSON文件是否包含要测试的SKU和产品定义。
  2. 设置Purchase API首选项。请务必测试全部四个可用条件:
    • 要测试SUCCESSFUL响应,请将首选项设置为DEFAULTSUCCESSFUL
    • 要测试FAILED响应,请将首选项设置为FAILED。​
    • 要测试ALREADY_PURCHASED请求,请将首选项设置为ALREADY_PURCHASED
    • 要测试INVALID_SKU,请将首选项设置为INVALID_SKU。​
  3. 调用purchase。​
  4. 使用onPurchaseResponse处理响应。
    成功购买的内容将显示在App Tester的Manage Transactions(管理交易)选项卡上。

或者,您可以通过完成典型购买工作流程来测试“已购买”条件:

  1. 验证您用于App Tester的JSON文件是否包含要测试的SKU和产品定义。
  2. 将Purchase API首选项设置为DEFAULT
  3. 成功购买订阅或权利SKU。(可以多次购买消费品。)
  4. 使用相同的SKU再次调用purchase
  5. 使用onPurchaseResponse处理响应。
    成功购买的内容将显示在App Tester的Manage Transactions选项卡上。

购买更新请求

为确保用户能够访问正确内容,请在您的应用开始与该用户交互时调用购买更新请求API(在Android生命周期的onResume()方法中)。成功的响应可以包含来自以前交易的零个或多个收据,具体取决于App Tester中管理交易选项卡的内容。

可以使用Receipt Verification Service (RVS)来验证收据中的令牌。

测试购买更新请求:

  1. 验证您用于App Tester的JSON文件是否包含要测试的SKU和产品定义。
  2. 成功购买您配置的SKU。

  3. 设置GetPurcaseUpdates API首选项:
    • 要测试SUCCESSFUL响应,请将首选项设置为DEFAULTSUCCESSFUL
    • 要测试FAILED响应,请将首选项设置为FAILED。​
  4. 调用getPurchaseUpdates
  5. 使用onPurchaseUpdatesResponse处理响应。

如果您想要生成SUCCESSFUL但响应为空,请使用以下工作流程:

  1. 验证您用于App Tester的JSON文件是否包含要测试的SKU和产品定义。
  2. 成功购买您配置的SKU。
  3. 将getPurchaseUpdates API首选项设置为DEFAULT
  4. Manage Transactions选项卡上,删除所有交易。
  5. 调用getPurchaseUpdates
  6. 使用onPurchaseUpdatesResponse处理响应。

通知履行

调用通知履行API来验证履行并测试IAP中的可用收据状态。您可以使用以下工作流程来测试消费品或权利商品的履行。

测试通知履行:

  1. 对消费品商品调用purchase
  2. 请注意已购买商品的收据。
  3. 调用getPurchaseUpdate
  4. 请注意返回的消费品收据。
  5. 在App Tester中的Manage Transactions选项卡上,验证消费品是否设置为已交付。
  6. 调用notifyFullfilment
    • 要测试“已履行”条件,请将notifyFulfillment设置为SUCCESSFUL。
    • 要测试“不可用”条件,请将notifyFulfillment设置为UNAVAILABLE。
  7. 在App Tester中的Manage Transactions选项卡上,验证购买:
    • 如果您要测试“已履行”条件,则消费品应列为Fulfilled。
    • 如果您要测试“不可用”条件,则消费品应列为Unavailable。

订阅检查

您可以使用App Tester来验证有效和过期的订阅。如果您从Manage Transactions选项卡取消有效的订阅交易,则App Tester会将该交易视为过期订阅。

测试有效的订阅:

  1. 成功购买订阅SKU。
  2. 转到Manage Transactions选项卡,验证此交易是否在该处列出。
  3. 调用getPurchaseUpdates
  4. 使用onPurchaseUpdatesResponse处理响应。
  5. 从返回的收据中,验证您所购买的SKU的最新收据(按开始日期)。
  6. 验证结束日期的值是否为null。

测试过期的订阅:

  1. 成功购买订阅SKU。
  2. 转到Manage Transactions选项卡,验证此交易是否在该处列出。
  3. Manage Transactions选项卡上,取消此交易。

  4. 调用getPurchaseUpdates
  5. 使用onPurchaseUpdatesResponse处理响应。
  6. 从返回的收据中,验证您所购买的SKU的最新收据(按开始日期)。
  7. 确认结束日期的值不是null。

验证收据

亚马逊提供了Receipt Verification Service (RVS),可用于从您的后端服务器验证购买。请参阅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 Get Product Data API,DEFAULT或SUCCESSFUL 只要请求是针对JSON文件中的有效SKU,就会返回成功响应
GetProductDataStatus。FAILED getProductData Get Product Data API,FAILED 在设置了此属性时,App Tester会强制任何产品数据请求返回FAILED
GetUserDataStatus。SUCCESS getUserData 获取用户数据API,DEFAULT或SUCCESSFUL 在“API Response Settings”选项卡中设置了此属性时,App Tester将始终返回App Tester中存储的用户ID
GetUserIdRequestStatus。FAILED getUserData 获取用户数据API,FAILED 在“API Response Settings”选项卡中设置了此属性时,App Tester会强制作出失败响应
PurchaseUpdatesResponseStatus.SUCCESS getPurchaseUpdates Purchase Updates API,SUCCESSFUL 在“API Response Settings”选项卡中设置了此属性时,App Tester将始终返回交易日志中的内容
PurchaseUpdatesResponseStatus.FAILED getPurchaseUpdates Purchase Updates API,FAILED 在“API Response Settings”选项卡中设置了此属性时,App Tester会强制作出失败响应