In the past, when working on high volume imports in Neo4j, we had to create custom procedures and test their performance using CSV input data.
We tried to achieve this using Gatling with the Bolt extension, but for some reason, it was not playing well with CSV input files. As JMeter is also a very popular tool, we created our load tests with it and it worked very well. But these tests were a bit cumbersome to write because (unlike JDBC, JMS, ...), there is no native bolt protocol support in Jmeter. We had to do a lot of manual scripting.
What it does
adds native bolt protocol support to JMeter, to make it easier to build test plans
provides load test plan examples to help people get started
How we built it
We forked JMeter on GitHub and created the components for bolt.
We built example load tests scripts to validate it was working fine.
Challenges we ran into
The JMeter codebase is a pure java GUI, quite different from the usual projects we work on. We were not sure where to start. Hopefully, the JMeter team gave us some guidance, many thanks to them!
Accomplishments that we're proud of
- People can now write a bolt load test in less than 5 minutes.
- We found performance issues in a colleague's procedure, he owes us a beer! :-)
What we learned
When writing some load testing components, you have to be very careful on how to handle data, or everything will crash very quickly!
What's next for Neo4j Jmeter load tests
We are in touch with the JMeter team to include the bolt support in the main JMeter codebase.
*Update 04/10: This has been merged and will be available out of the box with JMeter 5.2 *
We'd also love to have feedback and contributions from the community to add even more advanced features to the bolt component, and test plans!