我正在尝试为kafka消息传递设置集成测试,并从使用Embedded-Kafka转向使用TestContainers。给定docker-compose的以下配置和所有集成测试的基类:
Kafka-compose.yaml:
version: '3.3'
services:
zookeeper:
image: "wurstmeister/zookeeper"
kafka:
image: "wurstmeister/kafka:2.12-2.2.2"
ports:
- "9092:9092"
depends_on:
- "zookeeper"
environment:
KAFKA_ZOOKEEPER_CONNECT: "zookeeper:2181"
KAFKA_ADVERTISED_HOST_NAME: "${KAFKA_HOST:-localhost}"
KAFKA_ADVERTISED_PORT: "9092"
KAFKA_CREATE_TOPICS: "recoverer-test:1:1,some-topic"
KAFKA_AUTO_CREATE_TOPICS_ENABLE: "false"
@SpringBootTest
@Slf4j
public class IntegrationTest {
private static final DockerComposeContainer kafkaContainer = initializeKafkaContainer();
protected static DockerComposeContainer initializeKafkaContainer() {
log.info(
"Initializing kafka container. Should be called only once. Current value of the kafkaContainer: {}",
kafkaContainer);
try {
var kafkaContainer =
new DockerComposeContainer(new File("src/test/resources/kafka-compose.yml"))
.withExposedService("kafka_1", 9092);
kafkaContainer.start();
var bootstrapServers =
format(
"PLAINTEXT://%s:%s",
kafkaContainer.getServiceHost("kafka_1", 9092),
kafkaContainer.getServicePort("kafka_1", 9092));
System.setProperty("spring.embedded.kafka.brokers", bootstrapServers);
return kafkaContainer;
} catch (Throwable t) {
log.error("Can't initialize the Kafka test container.", t);
throw t;
}
}
@DirtiesContext(classMode = ClassMode.BEFORE_CLASS)
class PerformSomethingInboundAdapterTest extends IntegrationTest {
private static final String GROUP_ID = "test-group-id";
private static final TopicPartition PARTITION = new TopicPartition(SOME_TOPIC, 0);
private static final Instant RECEIVED_AT = now();
private static final CustomerNumber CUSTOMER_NUMBER = CustomerNumber.of(600830);
@Autowired private KafkaListenerEndpointRegistry kafkaListenerRegistry;
@Autowired private ConsumerFactory<String, String> consumerFactory;
@Autowired private KafkaTemplate<Object, Object> kafkaTemplate;
@MockBean private ActivateSomethingActivities activateCampaignActivities;
private Consumer<String, String> consumer;
private long initiallyCommittedOffset;
@BeforeEach
void startKafkaListener() {
kafkaListenerRegistry.getListenerContainers().forEach(Lifecycle::start);
}
@AfterEach
void stopKafkaListener() {
kafkaListenerRegistry.getListenerContainers().forEach(Lifecycle::stop);
}
@Test
void shouldPerformSomething() {
...
}
我遇到的问题很少:
@kafkalistener
在所有可能的用@springboottest注释的测试中都是活动的,而不仅仅是在Kafka特定的测试中。这意味着发送到Kafka主题的消息可以被任意测试使用。首先,对于spring-Kafka的人来说,有一个问题:是否可以将spring-Kafka测试与测试容器一起使用?是否有可能为每个测试停止所有@kafkalistener
并为特定的@springboottest
测试显式启用它们 wurstmeister/kafka
图像的docker-compose模块。后一种方法的问题是,当我使用命令行maven运行测试时,我会得到错误消息,告诉kafka已经在9092端口上运行。maven似乎在MVN测试
期间启动了很少的JVM,因此静态字段kafkacontainer
被初始化了很少次。为什么会发生?@dirtiescontext
在测试完成时关闭侦听器。2号没主意。
相关pom.xml 我的测试类: 我只是在试着测试数据库。 类级别上的@SQL注释不能像我的情况那样与Testcontainers初始化一起工作吗? 这里需要什么使我的两个初始脚本都运行? 我尝试使用.WithInitScript,它运行了。但是,我有很多数据要初始化,而且文件太大(而且会增长),所以我将DDL(模式)和Inserts(数据)分开。现在,我的问题是如何使用“WithInitScri
我正在使用cypress来测试我的后端节点api。 我想在之前的函数中将我的数据库重置为干净状态。这包括使用axios(因此接受promise)发送帖子,放置 我熟悉cypress的commands文件(已经将其用于我的登录功能),但我似乎无法使其适用于我的“reset db”行为。 因此,我简化了这个问题,直到在“it”功能中发布我的用户,但它仍然不起作用 柏树试验: 柏树命令: 我在cypre
问题内容: 是的,当我尝试在看起来像这样的变量上使用bindvalues时,我遇到了一个问题: 现在看起来像这样: 但这不起作用,还尝试了以下方法: 并得到了一些语法错误.. 正确的解决方案是什么?我还以为在bindValue(:firstname,$ firstname%)中添加%,但是我也需要在其他地方使用:firstname,也不应使用%。 帮忙谢谢 问题答案: 好的,添加到绑定值: 接着
在开始使用前我们首先了解一个ToB企业在百度进行竞价推广引流到官网获客的基本流程: 为了能够获取百度搜索推广投放产生的消费、展现、点击、结合官网接入可获取广告线索产出,以支持对广告投放端到端的投放ROI评估,我们需要进行以下应用准备: 1. 在百度营销客户端对投放的目标页面URL规范UTM参数设置 在术语解释中我们也有提及UTM 参数是业界用来统一跟踪流量来源的设置,最常见的UTM参数定义如下:
设计岗校招最耗费精力的就是各种测试题了,大家需要具备扎实的设计基础和良好的设计思维,这是通过测试题的基础。如果时间允许的话针对各个大厂的测试题风格和方案产出要求,需要有针对性地进行练习和准备,熟悉各种设计方向设计工具使用。 在准备测试题的过程中,需要注意以下几点: 多看各公司的测试题可以更好地了解各个公司的测试题风格和方案产出要求,同时也可以帮助你熟悉各种设计工具和软件的使用。 注重细节:测试题的