Starting a Project: Data Simulation

Table of Contents

Sometimes, there is a need to generate data to test your code. While “testing in production” is a sweet spot to be, there are times when you need to “force” (stub) data that reflects certain business phenomena in production.

This does not mean “chaos engineering” but rather a finite set that can be ingested into a suite of integration tests to increase confidence in code change.

For example, creating a number of threads to generate load can be done trivially with Apache Bench (ab), I’m looking for a scenario builder with lots of traffic data. I’m referring to the “needle in the haystack” scenario builder.

I started with some ideas on how to create multiple “stubs” in a thread pool so that I can force concurrent payloads to hit a service to test. Using the Spring Framework and Spring Boot, this task became super simple. I ended up with the following:

{% highlight java linenos %} @Async(“myThreadPoolTaskExecutor”) public Object createPayload() { // return payload pojo } {% endhighlight %}

and the following TaskExecutor bean:

{% highlight java linenos %} @Bean(name = “myThreadPoolTaskExecutor”) public TaskExecutor threadPoolTaskExecutor() { ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor(); executor.setCorePoolSize(4); executor.setMaxPoolSize(4); executor.setThreadNamePrefix(“executor”); executor.initialize(); return executor; } {% endhighlight %}

Of course, this is only a start with the following potential test:

  • “Transaction boundaries” defined in my code.
  • Verify the “concurrency” setup.
  • Create a set of scenarios (the needle in the haystack)

I’ll update more on this journey as I add more to the data generator project I have been creating.