Performance Testing in R using Apache JMeter Couple weeks ago, I stumbled upon an open source project from T-Mobile called
loadtest. You can check the repository at GitHub. This blog post will discuss about how to get started performance testing in R using Apache JMeter by leveraging the
Before we dive into further, you may ask why the package
loadtest, instead of using Apache JMeter directly to test the performance.
Why loadtest package?
T-Mobile is one of the largest cellular network in USA.
loadtest package has been released by T-Mobile Tech team. The primary objective of the team is to load test the APIs without leaving the R environment.
Just by installing the
loadtest – a R package and by writing just a line of code, you can simulate the workload.
To demonstrate the R package capability, team has released a demo website http://teststuff.biz/ which has the API version of MIT DeepMoji project.
DeepMoji converts a string into emojis. You can check this link https://deepmoji.mit.edu/ for more details.
loadtest R package leverages Apache JMeter under the hood.
Now, lets dive into how to setup the R environment for load testing by installing R in Windows 10 and by leveraging R extension in Visual Studio Code.
If you prefer to watch it in a video format, please check it below. Don’t forget to hit the Subscribe button :)
What is R language?
R is a programming language and free software environment for statistical computing and graphics supported by the R Foundation for Statistical Computing. The R language is widely used among statisticians and data miners for developing statistical software and data analysis. Polls, data mining surveys, and studies of scholarly literature databases show substantial increases in popularity; as of October 2019, R ranks 15th in the TIOBE index, a measure of popularity of programming languages.
- Download R 3.6.1 for Windows and validate the checksum
- You can find the detailed installation instructions here
- Download R Tools for Windows
- Download Visual Studio Code
- Download Pandoc for Windows
- Pandoc convert files from one markup format into another
- Download Apache JMeter (latest version would be preferable), this demo uses JMeter 5.2
After successful installation of R, you could find RGui.exe in your system. RGui runs as a standard Windows GUI executable and provides an R console in its own window.
Launch RGui where you can see the R Console as shown below.
print("Hello World") in the console and hit enter to see the response.
Now, let’s configure JMeter to run a simple load test in R. Either you can setup the Environment Variable for JMeter or you can setup during the runtime.
Copy the below R snippet and save it as
LoadTestDemo.r in your favorite folder.
# Set Environment Variable Sys.setenv("LOADTEST_JMETER_PATH"="C:\\apache-jmeter-5.2\\bin\\jmeter.bat") # Install packages install.packages("remotes") install.packages("devtools") install.packages("tidyr") install.packages("rmarkdown") remotes::install_github("tmobile/loadtest") # Load loadtest library library(loadtest) # Run loadtest results <- loadtest(url = "https://example.com", method = "GET", threads = 1, loops = 10) # Print Results print(results) # Plot Results plot_requests_per_second(results) # Generate HTML Report loadtest_report(results,"C:\\apache-jmeter-5.2\\bin\\LoadTestReport.html")
Above code will simulate 1 thread and loops 10 times to hit https://example.com, print the results, plot the graph and generates the HTML report.
In RGui, go to File > Open Script and open the LoadTestDemo.r file. R script will open in the R Editor.
Ctrl + A to select all the lines and then Press
Ctrl + R shortcut key to run the script.
When you run, it will prompt you to select the CRAN mirrors as shown below.
Either select the nearest mirror or select 0-Cloud [https] as shown above and hit OK.
After hitting OK, R will download the packages sequentially and executes the load test, print the results, plots the graph, and generates the HTML output.
This is the graph R plotted for the
Output has been created at
How it works?
If you observe the log in R console, after downloading the packages,
loadtest package will generate a temporary JMeter script.
It will convert your one line of code into a JMeter script and executes it typically.
> results <- loadtest(url = "https://example.com", method = "GET", threads = 1, loops = 10) Creating summariser <summary> Created the tree successfully using C:\Users\Public\Documents\Wondershare\CreatorTemp\Rtmp0A1SAM\file6f5472ca5612.jmx Starting standalone test @ Sun Nov 10 14:22:36 EST 2019 (1573413756427) Waiting for possible Shutdown/StopTestNow/HeapDump/ThreadDump message on port 4445 summary = 10 in 00:00:01 = 7.7/s Avg: 88 Min: 29 Max: 572 Err: 0 (0.00%) Tidying up ... @ Sun Nov 10 14:22:40 EST 2019 (1573413760446) ... end of run
After successful run, the JMX file will gets deleted automatically.
Please check my GitHub repository for the sample code and the HTML output.
Using VS Code
I am fond of VS Code and uses daily even for note-taking. VS Code is a very powerful editor and IDE; its very famous among the developers. VS Code Marketplace has a extension for R.
After successful installation of R extension, you need to set the
r.rterm.windows to your
R.exe Path like
"C:\\Program Files\\R\\R-3.3.4\\bin\\x64\\R.exe" in the
Open the LoadTestDemo.r in VS Code and hit
Ctrl + Shift + P and attach the R console as shown below. This will create a new R terminal in VS Code.
After attaching it, you can run the R script using the shortcut
Ctrl + Shift + P again and select the
Run Source option.
It will prompt you to select the mirror for CRAN package. After selecting a location, it will execute the script sequentially and generates an output.
Developers who are extensively working on R environment wants to load test their APIs can perform without leaving the IDE.
loadtest package supports advance operations and developer can customize the graphs.
plot_elapsed_times(results) plot_elapsed_times_histogram(results) plot_requests_by_thread(results) plot_requests_per_second(results)
When it comes to CI/CD pipeline, you can seamlessly integrate the R script to run the tests quicker.
loadtest enables developers/testers who are working extensively on R. Under the hood, it uses Apache JMeter to create a script and execution. By default, the results has T-Mobile branded colors.
If you are working on R, definitely you could try this package and suggest the team for the new features and improvements in the GitHub issues.
Logos represented in the header image, registered to the respective owners.