Forum Discussion
Hi,
I have exactly the same issue as you sjakovac. I have also created a ticket at smartbear for this issue. Unfortunately they require my project in order to investigate the issue but since I have lot of firewalls and certificates involved they will not be able to run exactly my project.
I suggest smartbear should do an own test on this and if they can get it to work they can create a webpage where they describe this. I mean, there are lot of people having the same issue.
However, in order to get around this issue I have been investigating some groovy scripting and I found this link which I have modified a bit and now I have a solution which works for me.
Here is the complete code. Hope it will help other people as well.
Btw, thanks to the guy sharing the original code with us.
import org.apache.kafka.clients.consumer.ConsumerRecord;
import org.apache.kafka.clients.consumer.ConsumerRecords;
import org.apache.kafka.clients.consumer.KafkaConsumer;
import java.util.Arrays;
import java.util.Properties;
log.info("*************************************************************************")
log.info(" TOPIC NAME ")
log.info("*************************************************************************")
//SAVE RECEIVED DATA
def tsuite1 = testRunner.testCase.testSuite.project.getTestSuiteByName("TEST SUITE NAME");
def tcase1= tsuite1.getTestCaseByName("TEST CASE NAME");
db = tcase1.testSteps['Data Source'].dataSource.gridModel
int row = testRunner.testCase.testSteps['Data Source'].currentRow
def guid = "ABC12345DEF"
//KAFKA SETTINGS
String topic = "MY-TOPIC-NAME"
Properties properties = new Properties();
properties.put("group.id", "test");
properties.put("value.deserializer", "org.apache.kafka.common.serialization.StringDeserializer");
properties.put("key.deserializer", "org.apache.kafka.common.serialization.StringDeserializer");
properties.put("security.protocol","SSL");
properties.put("ssl.keystore.password", "XXX");
properties.put("bootstrap.servers", "XXX:6667");
properties.put("ssl.key.password", "XXX");
properties.put("ssl.truststore.password", "XXX");
properties.put("ssl.truststore.location", "C:\\MyCertificates\\certificate.jks");
properties.put("ssl.keystore.location", "C:\\MyCertificates\\certificate.jks");
//properties.put("session.timeout.ms", "10000");
properties.put("max.poll.records", "5");
KafkaConsumer<String, String> consumer = new KafkaConsumer<>(properties);
consumer.subscribe(Arrays.asList(topic));
long t = System.currentTimeMillis();
long end = t + 9000;
while (System.currentTimeMillis()<end){
log.info("START READING")
ConsumerRecords<String, String> records = consumer.poll(200);
for (ConsumerRecord<String, String> record : records){
log.info("key = " + record.key())
log.info("value = " + record.value());
if(record.value().contains(guid)){
log.info("found data")
db.setValueAt(topic, row, 1);
db.setValueAt(guid, row, 2);
}
}
log.info("STOP READING")
}
consumer.close();
- nmrao4 years agoChampion Level 3Thanks for sharing the script amirse.
So, in order to test kafka use case, are you just using this script alone?
I mean are you able to test the kafka messaging without using kafka step provided by ReadyAPI?- amirse4 years agoContributor
Hi,
I have a REST call which actually starts a flow in our system which results in publishing to kafka.
So in my case I am only interested in consumer not publisher.
And this code together with the REST test case is enough for me.
- sjakovac4 years agoOccasional Contributor
Yes, I'll write assertions programmatically. It's a lot of hassle to set up the connection with all properties and retrieving ones from the active environment but it can be done.
If you want to set up assertions through GUI you can store Kafka results from this script test step into property storage(on test case or separate test step) and then create another Assertion test step
- sjakovac4 years agoOccasional Contributor
Thanks, I'll try this. At first glance, it seems like this is a replacement for the whole KafkaConnection test step.
My current setup is KafkaConnection API test step followed by Groovy Script test step.
The solution from your answer is implementing KafkaConnection test step as a Groovy script. That's fine, but then I can't easily run (smart)assertions on that Groovy test step. I'd have to write them manually or transfer data into a separate test step and create a new Assertion test step.
All in all, it can be modified to work but it's a lot more complicated than it should have been (looking at you SmartBear devs 😡).
Anyway, thank you amirse
- amirse4 years agoContributor
Hi,
You are 100% correct. This adds unnecessary work but before smartbear gives us a solution on the issue this is what we probably need to do.
At least I cannot come up with some other solution.
I have other projects where I have done assertions in groovy so I will do as in those projects.
Related Content
Recent Discussions
- 7 days ago