Nowadays, almost every company has its own mobile app which provides millions of customers with products and services for all kinds of requests. Just think of it: every day, developers upload thousands of new applications to Google Play and App Store. To engage and retain users, you should not only have brand new ideas, a great code and design, but also be sure of high system performance.
The quality, reliability and speed of your application must be the best in this highly competitive market. The most reliable way to identify opportunities and potentials of your product is performance testing. In this blog post, we will take a step-by-step look at how to write a load script for a mobile application and run a test by generating HTTP/HTTPS traffic on the app server using JMeter.
The first step to approach mobile app performance testing is to understand what type of operations should be performed and with which frequency, that is, to create load profile. The choice of procedures and their intensity is made by analyzing the statistics for the most loaded month, selecting the peak day of that month by the number of interactions, and choosing the peak hour of that day. Pick the most intensive operations from the list for this hour. They should constitute more than 80% of the total load.
The profile should also include the most resource-intensive operations and those that are important for your business. It is worth considering possible time limits for those interactions, too. In case you do not have suitable statistics, e.g., because your app is new, the profile is created on the basis of your market analysis and forecasts.
Do you want to load test your product?
Drop us a line to find out what our team can do for you.
Now it is time to decide whether you want to use a real smartphone or a mobile operating system emulator to write a script. The latter is much cheaper, because you do not need to buy a collection of different devices from multiple vendors. On the other hand, if your app is supposed to interact with a microphone or a GPS module, you probably will not be able to test it without appropriate hardware.
In this post, we are using the MEmu Android emulator. We have also tried it with a real mobile device based on Android 10, and there is no difference other than some visuals.
For further work, it will be necessary to connect the desktop and a real or virtual device to the same local network. In the case of the Android OS emulator, everything is simple, because it is installed on
your PC and, therefore, connected to the same network. In this case we can safely consider this step implemented.
For a real mobile device, you have to configure a connection with a desktop over a local network manually, which is very easy to do. All you need is to connect a mobile device and a PC to one router via Wi-Fi or, in the case of a computer, LAN.
As for the script, you will need to install Apache JMeter. This is a popular tool for load testing, but If you have not worked with this program yet, it is not a problem. First of all, you need to ensure that the Java Development Kit (JDK) is installed on your PC, otherwise the program will not start.
When JDK is installed, it is time to download the archive with the program from one of the mirrors listed on the official Apache website, and then unpack it on your desktop. Then you should run the file called jmeter.bat in the bin folder. After the start, a graphical user interface pops up. You will use it to work on your test plan.
Now you can start creating your script using JMeter:
1. Add the main element to your Test Plan. Right-click Test Plan —> Add —> Threads (Users) —> Thread Group. This thread group can consist of one or more scripts, each of which performs a specific task for your virtual users. All elements from Threads (Users) are needed to configure the load delivery before starting the test. Remember that each script needs a separate “spool” of threads, as the intensity of these scripts can be different.
2. Add Listener. Right-click Test Plan —> Add —> Listener —> View Results Tree. This adds an element to view your future queries and responses, which is very useful when debugging the script.
3. Add Recording Controller. Right-click on Thread Group —> Add —> Logic Controller —> Recording Controller to add an element inside your coil that allows to group the script on transaction writing automatically. This is quite convenient for a lot of actions.
4. Add Test Script Recorder. Right-click on Test Plan —> Add —> Non-Test Elements —> HTTP(S) Test Script Recorder to add an element to record the script. Pay attention to the connection port: make sure it matches the port you specify in your mobile device or emulator settings.
Do not forget to choose Test Plan > Thread Group > Recording Controller in the Target Controller field. This option indicates where the script will be recorded to.
Then you should click the Start button, and JMeter will create a certificate which you will need on the next step. Confirm the creation of the Root certificate in the pop-up window, or wait until it disappears, and stop the recording.
The created certificate will be valid for 7 days. If you need to renew it in the future, you can click the Start button again.
The next task is copying and installing the Apache JMeter certificate on a smartphone or emulator. You will find the certificate in the bin folder of the JMeter installation directory. The file you are looking for is called ApacheJMeterTemporaryRootCA.crt.
It is not a big deal to transfer it from your desktop to a real device, but copying a file to an emulator may look tricky. Take MEmu as an example. Click the icon of a folder on the right of the toolbar and open the shared folder screen. Each folder has a Windows icon, which opens a folder on your PC, and an Android icon, which opens an appropriate directory on the emulator. You can copy the certificate to any of these four folders on your PC, and then find it on the emulator by clicking on the relevant Android icon.
To install a copied certificate on a mobile device, it is sometimes not enough just to run it via the certificate installer. Even if the system reports that the certificate has been successfully installed, in fact, it is not. Therefore, you need to go to the settings and do the following:
1. Go to Settings —> Security —> Install from an SD card. The exact path may vary depending on the device and Android OS version.
2. Find your certificate in the storage.
3. Specify the name of the certificate.
4. Tap OK to confirm installation.
5. The system will ask you to enter a screen lock password, or create it, if you don’t have any. Agree, and enter the password or set up a new one.
It’s time to download and install the mobile application you want to test using JMeter. Since everyone knows how to do this on a real device, let’s take a look at the emulator.
For MEmu, there are two ways to install the app. First, you can click on the icon APK on the right side of the toolbar. It opens Windows File Explorer, where you can find and run your application package. Another option is to download it directly from Google Play, which also works in the emulator.
It is worth noting that if you want to download some client-server application and try to write a script, you will not be able to do it seamlessly. The reason is that, nowadays, in order to protect the application from incorrect data, hacking, data theft, etc., developers add many checks into the code and implement SSL certificates. So you will not be able to get a response from the server via proxy. Of course, it is possible to bypass it with the help of special utilities, but if you are a part of the team working on the project, you’d better ask developers to solve this problem.
The next step is proxy configuration. To analyze scripts, you need to intercept mobile traffic and transfer it over a certain LAN port to Apache JMeter. You have already configured the proxy server on your desktop, and now you will have to do the same on your emulator.
1. Open the list of wireless networks in the settings and choose the one you are connected to. Left-click and hold it until a new menu unfolds, then select Modify Network. Click the dropdown in advanced settings and switch proxy to manual.
2. Enter your PC IPv4 as proxy hostname and type in the port number, which must be the same as you have specified in the HTTP(S) Test Script Recorder setting in Apache JMeter setup.
3. In the IP Settings field, leave the DHCP value. Remember to save changes.
Entrust mobile app performance testing to professionals.
Book a free online consultation with our experts.
Now you can start recording the script. Click Start in JMeter and run the application in the emulator or on your smartphone. If everything is set up in the right way, recording controller will add a transaction in which multiple requests will be grouped. Each next action in the application will add a transaction with its own queries, until you finish the record by clicking the Stop button.
All Test Plan elements can be moved or commented, also you can hide or show the contents of each element, copy and paste, or delete them. It is also possible to copy a script to another scenario by opening two windows of the tool, which is useful when designing a large project. If you want to save a recorded script and continue your work later, click File —> Save Test Plan as.
When recording is on, the traffic is sent to Apache JMeter, but after the script is recorded, you will not have access to the Internet via Wi-Fi. To restore the connection, disable proxy server on your test smartphone.
If you are recording a lot of scripts using a real device, you can switch from Wi-Fi to cellular data and back. The proxy settings on the wireless network do not reset, so you can quickly start writing another script.
This stage is not different from the processing of a regular script. After parameterizing, correlating and adding test data, a debugging test (one iteration with one virtual user) is run to check for errors. You can see the results of the script debugging by selecting the View Results Tree element from the script tree. In order to get as close as possible to the real conditions, you may want to insert delays between actions.
To smooth the load, use Ultimate Thread Group or the Stepping Thread Group. You will find these in Test Plan —> Add —> Threads (Users). If an element you need is missing, you can add it using Options —> Plugins Manager.
It is also necessary to calculate the pacing of each operation, the number of virtual users used, and the number and duration of load stages. An important step is to add monitoring elements through Test Plan —> Add —> Listener, such as Transactions per Second, Active Threads Over Time, Hits per Second, Aggregate Report, etc.
These tools will help you collect data for further analysis. After all these actions you can start the test.
Hopefully, now you know how to configure mobile application traffic reading, record scripts and run tests using JMeter. Depending on the test objectives, you may need to conduct a series of launches. If you encounter any problems or obstacles on your way, don’t hesitate to contact us! We are engaged in all kinds of performance testing.