IAPのテストケースを設計・実行する

为 IAP 设计并执行测试案例

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

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

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

测试案例摘要

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

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

获取用户数据

Amazon Appstore 和 App Tester 工具都通过用户 ID 来跟踪事务。因为您的应用应该能够同时处理多个用户,所以应用中任何特定于用户的函数应在适当的点检查当前登录的用户 ID,如 Android 生命周期方法 onResume。在检索用户数据时,您可能会收到 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 处理响应。

购买

为了简化实施和测试,购买 API 以相同方式处理所有三种类型的 IAP 项目:

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

测试购买 API:

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

购买更新请求

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

您可以使用 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 购买 API,DEFAULT 或 SUCCESSFUL 只要购买是针对 JSON 文件中的有效 SKU,就会返回成功响应
PurchaseRequestStatus。FAILED purchase 购买 API,FAILED 是(以显示项目信息) 在首选项页面中将此属性设置为 FAILED 时,或关闭了购买确认对话框时,App Tester 会强制作出失败响应
PurchaseRequestStatus。INVALID_SKU purchase 购买 API,INVALID_SKU 在首选项页面中设置了此属性时,App Tester 会强制任何购买请求返回 INVALID_SKU
PurchaseRequestStatus。ALREADY_PURCHASED purchase 购买 API,ALREADY_PURCHASED 在“API Response Settings”(API 响应设置)选项卡中将此属性设置为 ALREADY_PURCHASED 时或以前已购买 SKU 时,App Tester 会强制任何购买请求返回 ALREADY_PURCHASED
GetProductDataStatus。SUCCESSFUL getProductData 获取产品数据 API,DEFAULT 或 SUCCESSFUL 只要请求是针对 JSON 文件中的有效 SKU,就会返回成功响应
GetProductDataStatus。FAILED getProductData 获取产品数据 API,FAILED 在设置了此属性时,App Tester 会强制任何产品数据请求返回 FAILED
GetUserDataStatus。SUCCESS getUserData 获取用户数据 API,DEFAULT 或 SUCCESSFUL 在“API Response Settings”(API 响应设置)选项卡中设置了此属性时,App Tester 将始终返回 App Tester 中存储的用户 ID
GetUserIdRequestStatus。FAILED getUserData 获取用户数据 API,FAILED 在“API Response Settings”(API 响应设置)选项卡中设置了此属性时,App Tester 会强制作出失败响应
PurchaseUpdatesResponseStatus。SUCCESS getPurchaseUpdates 购买更新 API,SUCCESSFUL 在“API Response Settings”(API 响应设置)选项卡中设置了此属性时,App Tester 将始终返回交易日志中的内容
PurchaseUpdatesResponseStatus。FAILED getPurchaseUpdates 购买更新 API,FAILED 在“API Response Settings”(API 响应设置)选项卡中设置了此属性时,App Tester 会强制作出失败响应