如何在其他karate项目中重用util java类?

问题描述 投票:1回答:1

我在使用karate框架测试我的休息服务,效果很好,但是我有一个服务需要从kafka主题中获取消息,然后在mongo上持久化,最后通知kafka。我在我的karate项目上做了一个java producer,它被js调用,被feature使用。

特点。

    * def kafkaProducer = read('../js/KafkaProducer.js')

JS:

function(kafkaConfiguration){
var Producer = Java.type('x.y.core.producer.Producer');
var producer = new Producer(kafkaConfiguration);
return producer;
}

Java:

public class Producer {

private static final Logger LOGGER = LoggerFactory.getLogger(Producer.class);

private static final String KEY = "C636E8E238FD7AF97E2E500F8C6F0F4C";
private KafkaConfiguration kafkaConfiguration;
private ObjectMapper mapper;
private AESEncrypter aesEncrypter;


public Producer(KafkaConfiguration kafkaConfiguration) {
    kafkaConfiguration.getProperties().put(ProducerConfig.KEY_SERIALIZER_CLASS_CONFIG, "org.apache.kafka.common.serialization.StringSerializer");
    kafkaConfiguration.getProperties().put(ProducerConfig.VALUE_SERIALIZER_CLASS_CONFIG, "org.apache.kafka.common.serialization.ByteArraySerializer");
    this.kafkaConfiguration = kafkaConfiguration;
    this.mapper = new ObjectMapper();
    this.aesEncrypter = new AESEncrypter(KEY);
}


public String produceMessage(String payload) {

  // Just notify kafka with payload and return id of payload
}

其他类

public class KafkaConfiguration {

private static final Logger LOGGER = LoggerFactory.getLogger(KafkaConfiguration.class);

private Properties properties;

public KafkaConfiguration(String host) {

    try {
        properties = new Properties();
        properties.put(BOOTSTRAP_SERVERS_CONFIG, host);
        properties.put(ConsumerConfig.GROUP_ID_CONFIG, "karate-integration-test");
        properties.put(ConsumerConfig.CLIENT_ID_CONFIG, "offset123");
        properties.put(ConsumerConfig.ENABLE_AUTO_COMMIT_CONFIG, true);
        properties.put(ConsumerConfig.AUTO_OFFSET_RESET_CONFIG, "earliest");
    } catch (Exception e) {
        LOGGER.error("Fail creating the consumer...", e);
        throw e;
    }
}

public Properties getProperties() {
    return properties;
}

public void setProperties(Properties properties) {
    this.properties = properties;
}
}

我想用生产者代码与anotation,就像cucumber一样。

@Then("^Notify kafka with payload (-?\\d+)$")
    public void validateResult(String payload) throws Throwable {
        new Producer(kafkaConfiguration).produceMessage(payload);
    }

然后在功能上使用

Then Notify kafka with payload "{example:value}"

我想这样做,因为我想在基础项目上重用这些代码,以便在其他项目中包含。

java automated-tests karate cucumber-java
1个回答
0
投票

答案很简单,使用正常的Java Maven概念。把常用的Java代码移到 "主 "包中(src/main/java). 现在你需要做的就是构建一个JAR,并将其作为依赖关系添加到任何Karate项目中。

最后一块拼图是:使用 classpath: 前缀来引用JAR中的任何特性或JS文件。空手道将能够接收到它们。

编辑:抱歉,Karate不支持Cucumber或步骤定义。它有一个更简单的方法。请阅读这个来了解细节。https:/github.comintuitkarateissues398。

© www.soinside.com 2019 - 2024. All rights reserved.