java - Alexa BDD 测试

标签 java testing oauth-2.0 bdd alexa

我正在尝试对我的 Alexa 技能实现 BDD 测试。我正在使用 Java SDK 来实现它。

基本上,我想在我的测试套件中以编程方式触发任意 intent 并断言响应,但我找不到任何 Material 来实现它。

所有我能找到的是 com.amazon.ask.model.services.skillMessaging.SkillMessagingServiceClient.sendSkillMessage,其 Javadoc 说:

Send a message request to a skill for a specified user.

这正是我所需要的,但是,为了创建一个 com.amazon.ask.model.services.skillMessaging.SkillMessagingServiceClient,我必须执行以下操作:

SkillMessagingServiceClient client = new SkillMessagingServiceClient(
                DefaultApiConfiguration.builder()
                        .withApiClient(ApacheHttpApiClient.standard())
                        .withSerializer(new JacksonSerializer())
                        .withAuthorizationValue("<authorization_token").build(),
                DefaultAuthenticationConfiguration.builder()
                        .withClientId("<client_id>")
                        .withClientSecret("<client_secret>")
                        .build()
        );

为了得到client_idclient_secret:

  1. 我已经访问了 Login with Amazon Console
  2. 我已经创建了一个安全配置文件
  3. 我已经在我的技能上启用了帐户链接
    1. 授权 URI:https://www.amazon.com/ap/oa
    2. 访问 token URI:https://api.amazon.com/auth/o2/token
    3. 从第 2 点开始的客户端 ID 和客户端密码
    4. 范围:alexa:skill_messagingprofile:user_id
    5. 身份验证模式:基本
  4. 我已将所有 Alexa 重定向 URL 复制到我的安全配置文件中允许的返回 Web URI 中

因此,现在我的技能可以从 Alexa 应用程序绑定(bind)到我的亚马逊账户,但是:

  1. 总而言之,我只是想进行测试,而不是绑定(bind)我的帐户。我的生产技能不需要这个功能
  2. 绑定(bind)无效:从 Alexa 应用程序确认后,我收到错误
  3. 但我不知道如何收集身份验证 token ,除非我从 Cloudwatch 日志中捕获它并使用它...直到它过期

在第 2 点,我可以看到失败的原因:oauthError (https://skills-store.amazon.it/external/link-result?success=false&errorKey= oauth-error&languageCode=it_IT&skillId=amzn1.ask.skill……&skillStage=development)。该网页包含指向 RFC6749 的链接。

我目前被卡住了,我无法完全测试我的技能,也是因为无法测试 Alexa Player,尤其是意大利语,除非你直接使用物理设备进行测试。

感谢您的帮助。

最佳答案

您似乎对帐户链接和技能证书感到困惑。帐户链接用于代表用户对外部服务进行 api 调用,例如我希望我的技能能够访问用户的谷歌个人资料。

因此,对于您的用例,用于对技能相关的 Alexa 服务进行 API 调用的技能凭证似乎已经足够好了。由于您已经获得了 clientId、客户端密码,我建议您探索 Ask-Smapi-Sdk .您可以按照自述文件通过 ask-cli 检索 refreshToken,并构建 smapi 客户端。 使用 SmapiClient,您可以使用 Smapi 模拟 api 来触发您的 intent ,特别是函数 simulateSkillV1在您的 smapi 客户端中定义。

希望这就是您所需要的。 ✧(•̀ω•́ )

谢谢,

关于java - Alexa BDD 测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59363145/

相关文章:

java - 具有多个参数的 setter

java - 在我的项目中添加幻灯片菜单和 sherlock 操作栏

android - REST api项目的用户认证方法

xamarin - 最近的媒体 instagram GET 请求返回状态 200 但为空数据

Django URL 模式 : How to check if all url-names are distinct?

Spring Boot OAuth2 提供者数据库表解释

Java泛型——桥接方法

java - "if"是否总是等待方法完成?

perl - 如何覆盖 $dbh 上的提交以进行测试?

reactjs - 如何使用 Enzyme 测试 react-router 链接?