如何将 util java class 重用到其他空手道项目中?
How to reuse util java class into other karate project?
我正在使用空手道框架来测试我的休息服务并且它工作得很好,但是我有服务使用来自 kafka 主题的消息然后坚持 mongo 最终通知 kafka。
我在我的空手道项目中制作了一个 java 制作人,它由 js 调用以供功能使用。
然后我有消费者查看消息
特征:
* 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
}
其他class
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;
}
}
我想像黄瓜一样使用带有注释的生产者代码:
@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 / Maven 概念。将公共 Java 代码移动到 "main" 包 (src/main/java
)。现在您需要做的就是构建一个 JAR 并将其作为依赖项添加到任何空手道项目中。
最后一块拼图是这样的:使用 classpath:
前缀来引用 JAR 中的任何功能或 JS 文件。空手道将能够接他们。
编辑:对不起,空手道不支持 Cucumber 或步骤定义。它有一个更简单的方法。详情请阅读:https://github.com/intuit/karate/issues/398
我正在使用空手道框架来测试我的休息服务并且它工作得很好,但是我有服务使用来自 kafka 主题的消息然后坚持 mongo 最终通知 kafka。 我在我的空手道项目中制作了一个 java 制作人,它由 js 调用以供功能使用。 然后我有消费者查看消息
特征:
* 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
}
其他class
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;
}
}
我想像黄瓜一样使用带有注释的生产者代码:
@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 / Maven 概念。将公共 Java 代码移动到 "main" 包 (src/main/java
)。现在您需要做的就是构建一个 JAR 并将其作为依赖项添加到任何空手道项目中。
最后一块拼图是这样的:使用 classpath:
前缀来引用 JAR 中的任何功能或 JS 文件。空手道将能够接他们。
编辑:对不起,空手道不支持 Cucumber 或步骤定义。它有一个更简单的方法。详情请阅读:https://github.com/intuit/karate/issues/398