当前位置: 首页 > 知识库问答 >
问题:

亚马逊驱动集成测试

皇甫通
2023-03-14

我目前正在开发一系列需要与Kinesis集成的web服务——实现已经完成,然而,我们有一系列的集成测试(我们的web服务都使用Spring Boot,所以我们在测试类上使用@WebIntegrationTest注释来启动服务器的本地实例,然后使用testrestemplate调用我们的资源),这些测试目前正在尝试连接到真正的Kinesis,但失败了。

虽然在普通的单元测试中,模拟对Kinesis库中的方法的调用不是问题,但在集成测试中,我们无法真正做到这一点,因为整个应用程序堆栈都与Spring连接在一起。对于其他一些事情(比如OAuth2和对其他web服务的调用),我们已经能够使用WireMock模拟实际的endpoint——我真正想做的是以这种方式使用WireMock模拟对AmazonKinesisClient的调用,但我找不到任何关于如何做的建议。

或者,我看到一些AWS组件有第三方编写的测试库,允许您运行它的本地版本(例如:DynamoDbLocal),但找不到这样的运动解决方案。

有人能给我一些关于如何使用Kinesis运行集成测试的建议吗?

共有3个答案

尉迟越
2023-03-14

只是对现有答案的一个小小的补充。顺便说一句,他们很棒,你真的应该在测试阶段的测试前使用像本地堆栈这样的工具来启动虚假的AWS服务。

如果您在测试中使用JUnit 5,那么使用JUnit 5扩展for AWS,您的生活可能会更简单,一些JUnit 5扩展可能对测试AWS相关代码有用。这些扩展可用于为localstack等工具提供的AWS服务模拟注入客户端。AWS和Java SDK版本2。x和v1。x支持:

@ExtendWith(DynamoDB.class)
class AmazonDynamoDBInjectionTest {
    @AWSClient(
        endpoint = Endpoint.class
    )
    private AmazonDynamoDB client;

    @Test
    void test() throws Exception {
        Assertions.assertNotNull(client);

        Assertions.assertEquals(
            Collections.singletonList("table"),
            client.listTables().getTableNames().stream().sorted().collect(Collectors.toList())
        );
    }
}

在这里,客户端将被注入到测试类中,并根据endpoint配置类进行配置。

林德辉
2023-03-14

我遇到了同样的问题,到目前为止,我发现的唯一一个模拟实现是nodejs一个:https://github.com/mhart/kinesalite它起到了作用——我设法运行我的JavaKinesis客户端,只是必须设置endpoint关于kinesis.properties:

kinesisEndpoint=http://localhost:4567

缺点是,在构建时测试中使用它并不是微不足道的——需要在测试前找到一种方法来启动模拟运动(使用maven插件或其他东西),还没有得到它...

姚智
2023-03-14

现在给出解决方案可能已经太晚了,但我将补充我的团队在本地复制AWS资源方面所做的工作,因为我们使用了大量的驱动、DynamoDb、S3和Cloud dWatch。

我们已经围绕Localstack创建了包装器-

典型的docker组合。yml我们的文件如下所示:

version: '2'
services:
  localstack:
    image: "localstack/localstack"
    environment:
      - SERVICES=kinesis,dynamodb,cloudwatch
    ports:
      - "4568"
      - "4569"
      - "4582"

然后在集成测试的设置阶段,我们的包装器启动docker compose up,并针对本地基础设施运行测试。随后在拆卸过程中,包装会杀死容器。

 类似资料:
  • 希望在应用程序中集成amazon pay(基于美国)。已经有了贝宝和刷卡选项。当提到亚马逊支付沙箱时,它说要先在亚马逊支付注册。注册过程将通过其他步骤进入亚马逊卖家中心帐户,在这些步骤中会询问与业务相关的问题。 从开发的角度来看,我们如何将amazon pay集成到我们的应用程序中?是否有可用的示例api/代码及其程序?欢迎任何指导。

  • 实施亚马逊支付小部件没有地址引用文档https://developer.amazon.com/docs/eu/amazon-pay-onetime/no-address-widget.html 用seller central的注册应用程序值替换了clientid和sellerid,但得到的错误是“您无法使用与您的卖家帐户关联的用户名和密码。请使用其他买家帐户。” 这是使用的代码

  • 亚马逊云 图 1.20.2.1 - AWS AWS,即 Amazon Web Services,是亚马逊(Amazon)公司的 IaaS 和 PaaS 平台服务。AWS 提供了一整套基础设施和应用程序服务,使用户几乎能够在云中运行一切应用程序:从企业应用程序和大数据项目,到社交游戏和移动应用程序。AWS 面向用户提供包括弹性计算、存储、数据库、应用程序在内的一整套云计算服务,能够帮助企业降低 IT

  • 我想问alexa各种各样的问题,最后我想让它问“你还有什么想知道的吗?”当我说“是”(yes是工作建议)时,它应该根据我的意图来建议我。就像我在

  • 我刚刚开始使用AWS EC2。我明白EC2就像一台远程计算机,在那里我可以做几乎所有我想做的事情。然后我发现了ECS的事。我知道它使用Docker,但我对这两者之间的关系感到困惑。 ECS只是EC2中的Docker安装吗?如果我已经有一个EC2并且我启动了一个ECS,这是否意味着我有两个实例?

  • 因此,我试图将登录和支付与Amazon小部件集成,但遇到了一些问题。 所以,我把我的卖家帐户都设置在 https://sellercentral.amazon.de/gp/ 我有权访问我的API凭据,我需要获得一个LWA客户端。所以,我已经在 https://sellercentral.amazon.com/gp/homepage.htm 以创建应用程序。我已经设置了应用程序,在web设置上我已经