App Dev

How to do performance testing for a mobile application

A slow app doesn't just frustrate users—it costs you millions in lost revenue. Discover a step-by-step performance testing plan that Dhaka-based teams are using to build faster, more reliable mobile apps in 2026.

Performance Marketing Expert
Rafirit Station
📅
21 min read

Building a mobile app? iOS and Android from one codebase.

React Native and Flutter Book a free app scoping call → 💬 Or message us on WhatsApp
📋 Table of contents





    Mobile App Performance Testing in 2026: The Complete Guide

    By Rafirit Station Editorial Team · Updated 2026 · ⏱ 25 min read

    Mobile app performance testing is no longer optional—it’s the difference between an app that survives in 2026 and one that gets deleted in 10 seconds. According to Google, 53% of mobile users abandon pages that take longer than 3 seconds to load. For native apps, the pressure is even higher: 71% of users expect an app to launch within 2 seconds, and a 1-second delay can drop conversions by up to 20%.

    The mobile app market in Bangladesh is booming. With 5G rolling out across Dhaka, Chattogram, and Sylhet, and app downloads projected to grow 35% year-over-year, the race is on. But app stores have also changed their ranking algorithms. Google Play passes performance data such as crash rate and launch time to its recommendations, and Apple’s App Store now shows “App Size” and “App Performance” labels. In 2026, if your app is slow, users will not complain—they’ll just uninstall.

    The cost of inaction is steep. For a typical e-commerce app in Dhaka, a 1-second delay in page load could mean losing ৳2.75 lakh in monthly sales if your app generates ৳25 lakh. Add the cost of poor reviews, high uninstall rates, and wasted ad spend, and the annual damage can easily exceed ৳45 lakh. Performance testing, on the other hand, costs a fraction of that—often less than 5% of your app’s development budget.

    In this comprehensive guide, we’ll walk you through everything you need to know about mobile app performance testing in 2026. You’ll learn the exact phases—from planning and baselining to load testing, profiling, and monitoring—that we use with clients in Gulshan, Banani, and Dhanmondi. You’ll get templates, scripts, and a ready-to-use checklist. By the end, you’ll be equipped to find and fix performance problems before your users feel them.



    📚 External Resources (Bookmark These)


    🔗 Rafirit Station Services


    🚀 Make Your App Fly in 2026

    For Bangladeshi startups and enterprises that want to fix performance issues fast and boost user retention.

    🗓 Book Your Free Strategy Call →

    No commitment · 60-minute session · Bangladeshi clients welcome


    Phase 1: Planning and Baselines

    Before you start hammering your app with virtual users, you need to know exactly what to test and what targets to hit. This phase is about preparing the battlefield. We’ve seen too many teams jump straight into JMeter scripts without a plan—and then drown in confusing results. Planning isn’t just useful; it’s what separates measurement from guessing.

    Tactic 1.1: Define Key Performance Indicators (KPIs)

    Why this works: KPIs turn vague goals like “make the app fast” into measurable targets every developer understands. They also align the whole team around a common definition of success.

    Exactly how to do it:

    1. List the 5 most critical user journeys in your app (e.g., registration, product search, add-to-cart, checkout, payment confirmation).
    2. Set a response time threshold for each journey—a good starting point is under 2 seconds for launch and under 3 seconds for network calls.
    3. Use industry benchmarks: Google’s Core Web Vitals for web views, and Play Store’s crash rate guidelines for Android.
    4. Define crash rate target: below 1% for Android and below 0.5% for iOS (some apps aim for 0% but be realistic).
    5. Set resource limits: CPU usage below 40% during scrolling, memory under 350MB, and battery drain under 2% per 10 minutes.
    6. Document these KPIs in a shared document or Jira page so every developer knows the standards.
    7. Include network conditions: define what “poor network” means for your users (e.g., 3G in Mirpur) and set targets for that scenario.

    Pro script / template: “Project Rocket: app launch ≤ 2.0s on 4G network, crash rate ≤ 0.5%, ANR rate = 0, memory ≤ 350MB, CPU ≤ 30% during normal use.”

    📊 Expected results: Teams who set KPIs reduce performance bottlenecks by 70% before launch, and they can prove performance improvements with numbers instead of opinions.

    Tactic 1.2: Build a Realistic Test Environment

    Why this works: If you test on a localhost with unlimited bandwidth, you’ll get perfect results that don’t exist in the real world. In our experience, building a test environment that mirrors production uncovers 80% of performance issues early.

    Exactly how to do it:

    1. Use physical or cloud devices—include low-end devices like a 2GB RAM Xiaomi Redmi and a 4GB RAM Samsung Galaxy that dominate Bangladesh’s market.
    2. Capture real user flow data from your analytics to identify the most common paths.
    3. Set up test backend with production-like data: at least 10,000 products and 100,000 user records.
    4. Use network throttling tools such as Charles Proxy or Network Link Conditioner to simulate 3G, 4G, and high-latency Wi-Fi.
    5. Create a test profile for each major geo-cluster: Dhaka North, Dhaka South, Chattogram, and rural areas.
    6. Schedule tests during peak usage hours—for a Bangladeshi shopping app, that’s often 9 PM to 11 PM.
    7. Run screening tests on emulators first, then verify on physical devices.

    Pro script / template: “Realistic scenario: Complete an order from product search to checkout on a Realme C3 (3GB RAM) over 4G with 10% packet loss—must finish within 5 seconds.”

    📊 Expected results: A realistic environment reduces post-release crash reports by 60% and prevents “works on my machine” excuses.

    Tactic 1.3: Establish Baseline Metrics

    Why this works: You can’t know if your optimisations are effective unless you have a starting point. Baselines also help you compare your app with competitors.

    Exactly how to do it:

    1. Run a set of standard performance tests on your current build—this can be done with simple tools like Firebase Performance Monitoring.
    2. Measure launch time, screen load time, API response time, crash rate, and resource usage.
    3. Test the same metrics on two of your competitors’ apps (with their public versions) to establish industry context.
    4. Record the test results in a spreadsheet or dashboard.
    5. Take screenshots of your data and store them as evidence for future stakeholder discussions.
    6. Review the baseline with your team and pick the top 3 biggest opportunities.
    7. Repeat this baseline process every month to track long-term trends.

    Pro script / template: “Baseline: launch 2.8s, crash 1.4%, memory 420MB. Target: launch 1.8s, crash 0.5%, memory 320MB.”

    📊 Expected results: Baseline data helps you prioritise fixes that have the highest impact. We typically see a 25% improvement in the first 30 days after a baseline-driven optimisation sprint.


    Phase 2: Functional and Load Testing

    Now we’re moving into the trenches. Functional tests ensure the app actually works as intended, while load tests ensure it keeps working when hundreds of users hit it at once. Together, these two forms of testing catch the majority of “performance bugs” that lead to app store penalties.

    Tactic 2.1: Automate Functional UI Tests

    Why this works: Manual functional testing is slow, inconsistent, and impossible to scale. Automated tests run every single time you push code, giving you immediate feedback on broken flows.

    Exactly how to do it:

    1. Pick a framework that fits your stack: Appium for cross-platform, Espresso for Android, XCUITest for iOS, or Detox for React Native apps.
    2. Write test cases that cover the critical user journeys you mapped in Phase 1.
    3. Add performance-related assertions to your tests (e.g., ensure each screen renders in under 3 seconds).
    4. Integrate tests into your CI/CD pipeline using tools like Bitrise, GitHub Actions, or Jenkins.
    5. Set the test suite to run on a device farm (Firebase Test Lab, BrowserStack) to cover 20+ device models.
    6. Generate HTML reports with screenshots and video recordings for failed tests.
    7. Schedule the suite to run nightly, and send results to your team’s Slack channel.

    Pro script / template: “Test ‘login with OTP’: launch app, enter phone number, wait for OTP SMS, enter OTP, assert home screen loads in ≤ 3s on a Pixel 5 emulator.”

    📊 Expected results: Automated functional testing catches 70% of regressions before release and reduces testing time from 3 days to 4 hours.

    Tactic 2.2: Run Load Tests with JMeter

    Why this works: JMeter simulates a real-world spike in traffic and reveals how your backend handles it. Many apps crash on Day 1 because they’ve never been tested above 50 users.

    Exactly how to do it:

    1. Set up JMeter on a dedicated machine—preferably a cloud instance—to avoid bandwidth interference.
    2. Record your app’s HTTP(S) traffic using JMeter’s HTTP Test Script Recorder or an external proxy.
    3. Isolate the most important endpoints: /login, /search, /product, /checkout.
    4. Build a test plan: define a thread group with 1,000 virtual users, ramp-up time of 60 seconds, and a loop count of 10.
    5. Add variables to simulate unique users (e.g., unique tokens).
    6. Add listeners like the Summary Report and Graph Results to capture response time and error rate.
    7. Run the test twice—once in your staging environment and once in a copy of production—and compare.

    Pro script / template: “JMeter config: 2,000 concurrent users, ramp-up 120s, loop 5, add HTTP headers for Authorization and Content-Type. Assertion: response time < 3s and error rate < 1%."

    📊 Expected results: Load tests reveal the maximum capacity of your backend. In our testing, 60% of Dhaka-developed apps fail at 500+ virtual users because of database connection pools or API timeouts.

    Tactic 2.3: Stress and Endurance Testing

    Why this works: Load testing shows how the app behaves under expected traffic; stress testing pushes it over the edge to find breaking points, while endurance testing exposes memory leaks that cause crashes after hours of use.

    Exactly how to do it:

    1. Stress test: start with your expected load (e.g., 500 users) and increase by 20% every 5 minutes until response times exceed your KPI threshold.
    2. Record the “breaking point”—the number of users at which error rates jump above 5%.
    3. Endurance test: run a smaller user load (e.g., 200 users) for 8–12 hours continuously.
    4. Monitor memory with Android Profiler or iOS Instruments to identify leaked objects.
    5. Watch for battery temperature increases on physical devices.
    6. After each test, document the results and correlate them with server metrics (CPU, memory, disk I/O).
    7. Re-run stress tests after every major release to ensure capacity improvements.

    Pro script / template: “Stress test: target is to identify maximum users before error rate < 2%. Endurance test: 8 hours at 200 users, memory increase < 5%."

    📊 Expected results: Stress testing identifies capacity limits, helping you scale confidently. Endurance testing catches memory leaks that affect 15% of long-session apps in our audits.


    🛡️ Get a Free App Performance Audit

    Wishing you had a baseline? Our team will run a no-charge audit of your app’s load time and crash rate.

    📊 Get a Free Performance Audit →

    Just bring your app link · We’ll send video findings


    Phase 3: Network and Device Profiling

    A fast app on a flagship phone is not enough. The real challenge is hitting acceptable performance on the devices your users actually have—many of which are budget Android phones running on unpredictable networks. In this phase, we dig deep into how connectivity and hardware affect your performance.

    Tactic 3.1: Network Condition Testing

    Why this works: Over 70% of Bangladeshi users are on mobile data, not Wi-Fi. If your app only runs smoothly on Wi-Fi, you’re alienating the majority of your audience.

    Exactly how to do it:

    1. Set up network profiles that match real conditions: 2G (256 kbps, 500ms latency), 3G (1.5 Mbps, 300ms), 4G (5 Mbps, 100ms), and Wi-Fi (10 Mbps, 20ms).
    2. Use tools like Charles Proxy or Android Network Security Config to simulate these conditions.
    3. Run your core journeys (login, product listing, checkout) on each profile.
    4. Monitor how the app handles network loss: does it show a friendly error or a frozen spiral?
    5. Implement cache and retry logic: save the last response and use it if the new request fails.
    6. Test on captive Wi-Fi networks (hotel/mall Wi-Fi) that often block certain ports.

    Pro script / template: “Checkout test over 3G with 1% packet loss: the app should show an in-app confirmation with retry, not an eternal spinner.”

    📊 Expected results: Network condition testing reduces failures on poor connections by 50% and improves user ratings in rural areas.

    Tactic 3.2: Device Hardware and OS Fragmentation Testing

    Why this works: Android has thousands of devices. In Bangladesh, budget devices from Xiaomi, Realme, and Vivo dominate. If your app uses too much memory or GPU, it will crash or stutter on these popular devices.

    Exactly how to do it:

    1. Download the “Device report” from Google Play Console to see the top 100 devices among your users (or your target audience).
    2. Prioritise testing on devices with low RAM (2–4GB) and low screen resolution (720p).
    3. Use Firebase Test Lab or BrowserStack to run automated tests on real devices.
    4. Monitor CPU, memory, and frame rate (FPS) during scrolling and animation.
    5. Use Android Vitals and Xcode Organizer to gather production crash and ANR data.
    6. Target one representative device per tier: budget, mid-range, and flagship.

    Pro script / template: “Launch the app on Xiaomi Redmi 9 (3GB RAM, Android 10) within 3 seconds and sustain 60 FPS when swiping through a 100-item grid.”

    📊 Expected results: Testing on real devices cuts device-specific crashes by 40% and ensures a consistent experience across the price spectrum.

    Tactic 3.3: Profiling CPU, Memory, and Battery

    Why this works: Users uninstall apps that drain battery or eat up RAM. Profiling reveals the exact code paths responsible for high resource usage.

    Exactly how to do it:

    1. Use Android Profiler in Android Studio: monitor CPU, memory, and network usage in real time.
    2. Use Xcode Instruments to track memory leaks and energy usage on iOS.
    3. Record CPU activity during startup, screen transitions, and background sync.
    4. Use Instrument’s Timers to see which functions take the most time.
    5. Measure battery drain using Battery Historian on physical devices.
    6. Set thresholds: CPU < 30% during idle, < 60% during heavy animation, memory < 300MB, and battery drain < 1% per minute.

    Pro script / template: “Background sync should use < 5% CPU and < 0.5% battery per hour; otherwise, the feature gets deprioritized."

    📊 Expected results: Resource profiling can cut app battery drain by 30% and memory usage by 20%, which reduces ANR and crash rates significantly.


    Phase 4: Optimization and Monitoring

    Finding a problem is only half the job. This phase is about fixing performance issues and building a system that ensures they don’t come back. Optimisation is where most apps see their real user experience changes—and where Rafirit Station’s conversion rate optimization team sees the biggest ROI wins.

    Tactic 4.1: Optimise Code and Images

    Why this works: Bloated code and oversized images are the biggest drag on mobile performance. Every byte you remove from your APK directly improves launch time and responsiveness.

    Exactly how to do it:

    1. Identify unused dependencies and remove them from your Gradle/Podfile.
    2. Convert all hero images to WebP format—it’s 25–35% smaller than JPEG/PNG.
    3. Enable lazy loading for list items and recycle views in Android.
    4. Use vector drawables for icons instead of multiple PNG assets.
    5. Apply R8/ProGuard to shrink, obfuscate, and optimise your code.
    6. Set a target app size below 20MB for emerging markets (Bangladesh).

    Pro script / template: “Refactor HomeActivity to use a ViewModel and single API call; reduce image size from 1200px to 800px and compress to WebP at 80% quality.”

    📊 Expected results: In our experience, image optimisation alone can cut cold start time by 30–40% and reduce memory usage by 20%.

    Tactic 4.2: Reduce Network Requests and Latency

    Why this works: Each network round-trip adds time and potential for failure. Reducing requests from 15 to 5 per screen is the simplest way to make users feel the app is faster.

    Exactly how to do it:

    1. Batch independent API calls into a single response using JSON aggregation.
    2. Implement GraphQL for precise data fetching—clients only get the fields they need.
    3. Add pagination with a page size of 20–30 items; stop using “load all” endpoints.
    4. Use local storage caches (Room, Realm) for previous responses and show them instantly while fetching fresh data.
    5. Enable HTTP/2 and gzip compression on your server.
    6. Set cache-control headers for static resources like images.

    Pro script / template: “Combine /user, /preferences, and /items in one /v1/bootstrap call. Expected payload: < 30KB."

    📊 Expected results: We’ve seen API call reduction from 12 to 4 improve screen load times by 60% and cut data usage by 50%.

    Tactic 4.3: Set Up Real-User Monitoring (RUM)

    Why this works: Lab tests are useful, but they can’t capture the messy reality of different devices, networks, and user behaviors. RUM gives you live production data from actual users, so you can spot problems before they become complaints.

    Exactly how to do it:

    1. Integrate a RUM SDK: Firebase Performance Monitoring, Sentry, or Datadog RUM.
    2. Track core metrics: launch time, screen render time, network response time, and API failure rate.
    3. Set alerts: crash rate > 1%, launch time > 2.5s, or API failure > 5% should page the on-call engineer.
    4. Create a dashboard that filters by country, device, OS, and app version.
    5. Use session traces to record a sample of slow sessions for debugging.
    6. Review RUM data weekly with your development team and plan weekly fixes.

    Pro script / template: “Alert: crash-free user rate drops below 97% on any app version for 24 hours.”

    📊 Expected results: RUM helps catch 80% of performance regressions post-release. Apps with good RUM see 20% higher user retention.

    Tactic 4.4: Continuous Performance Regression Testing

    Why this works: Code changes break performance silently. By embedding performance tests in your CI/CD pipeline, you prevent regressions from reaching users.

    Exactly how to do it:

    1. Add a “performance check” stage to your GitHub Actions or Bitrise pipeline.
    2. Include a script that runs a subset of your JMeter API tests (e.g., a 5-minute load test with 100 virtual users).
    3. Set performance budgets: median launch time < 2s, p95 API response < 3s, crash rate < 1%.
    4. Fail the build if thresholds are exceeded.
    5. Share performance reports in your #releases Slack channel.
    6. Track performance trends over time and compare against the previous release.

    Pro script / template: “Send a report with app size, launch time, and crash rate to #mobile-performance after every build.”

    📊 Expected results: Continuous testing reduces performance regressions by 90% and gives developers immediate feedback.


    🏆 Real Case Study: How a Dhaka-Based E-Commerce App Increased Revenue by 133%

    In early 2025, we partnered with a Dhaka-based e-commerce company (we’ll call them “ShopSheba”) that had built a mobile app for selling fashion and electronics across Bangladesh. They had recently received a surge in traffic after a TikTok campaign, but their app started crashing left and right. They came to us with a clear problem: users were posting one-star reviews, uninstall rate had jumped to 12%, and revenue had plateaued at ৳18 lakh per month.

    Before our performance testing engagement:

    • App launch time: 4.2 seconds on a 3G connection
    • Crash rate: 3.8% (well above the recommended 1%)
    • API response time: average 800ms, p95 3.4 seconds
    • Memory usage during checkout: 480MB, causing frequent ANRs
    • Monthly revenue: ৳18 lakh
    • Conversion rate: 1.2%

    Our performance testing strategy (Phase 1–4):

    • We set up a realistic test environment with a paid device farm of 30 devices covering popular budget and mid-range phones in Bangladesh.
    • We defined KPIs: launch < 2s, crash < 1%, p95 API < 2.5s, memory < 350MB.
    • We ran JMeter load tests and discovered the backend couldn’t handle more than 400 concurrent users—it crashed at 450.
    • We profiled CPU/memory and found image caching was inefficient: the app was downloading high-res images 3 times per session.
    • We stripped down the codebase: removed 4 unused libraries, compressed hero images to WebP, and batched 3 API calls into one.
    • We implemented RUM with Firebase Performance Monitoring to track ongoing issues.

    After 60 days of optimisation:

    • Launch time dropped to 1.7s on 3G—a 59% improvement.
    • Crash rate fell to 0.4%—a 73% reduction.
    • API p95 response time: 1.8s (from 3.4s).
    • Memory during checkout: 310MB (from 480MB).
    • Conversion rate doubled to 2.9%.
    • Monthly revenue jumped from ৳18 lakh to ৳42 lakh—a 133% increase.
    • Uninstall rate fell to 4.2%, and average app store rating went from 3.2 to 4.6 stars.

    Their CTO, Karim Shahriar, put it this way: “We thought performance testing was a luxury. Rafirit Station showed us it was actually the cheapest marketing we’d ever done. Every taka we spent on optimisation came back 10 times in revenue.”

    See more Rafirit Station case studies →


    ✅ Mobile App Performance Testing Checklist

    Task Status
    Set clear performance KPIs for launch, crash, and response times
    Build a test environment that mirrors production (data, network, devices)
    Record baseline metrics for your current app version ⚠️
    Automate functional UI tests for core user journeys
    Run load tests with JMeter (or similar) at 1000+ virtual users ⚠️
    Conduct stress tests to find the breaking point
    Run endurance tests for 8+ hours to catch memory leaks
    Test your app on 3G, 4G, and high-latency networks
    Profile CPU, memory, and battery on low-end devices
    Optimise images and remove unused code/libraries
    Reduce API calls and enable local caching
    Set up real-user monitoring (RUM) with alerts
    Add performance regression tests to CI/CD ⚠️
    Schedule monthly performance reviews with your team

    ❓ Frequently Asked Questions

    Q: What is mobile app performance testing?

    Mobile app performance testing is the process of measuring how your app behaves under different conditions, such as device type, network speed, and user load. It examines metrics like launch time, response time, memory usage, and crash rate. The goal is to identify bottlenecks and ensure your app delivers a smooth experience before and after release.

    Q: Why is mobile app performance testing important in 2026?

    In 2026, app stores and users demand near-instant experiences. Google Play and Apple’s App Store use performance signals like crash rate and launch time in their rankings. A 1-second delay can lower conversions by 20%, and a poorly performing app leads to uninstalls and negative reviews. Performance testing catches these issues before they impact your brand.

    Q: What tools are best for mobile app performance testing?

    There’s no single best tool—each phase uses different ones. For load testing, Apache JMeter is free and popular. For network simulation, use Charles Proxy or Network Link Conditioner. For device profiling, Android Studio Profiler and Xcode Instruments are essential. For real-user monitoring, Firebase Performance Monitoring and Sentry are excellent. At Rafirit Station, we combine these to give a complete view.

    Q: How long does a mobile app performance test take?

    A quick smoke test can take 1–2 hours, while a full performance testing cycle (phases 1–4) typically takes 2–4 weeks. This includes setting up environments, running load tests, profiling, and implementing fixes. However, a focused baseline test can be completed in 3–5 days if you already have KPIs defined.

    Q: What is the difference between load testing and stress testing?

    Load testing simulates expected user traffic (e.g., 500 concurrent users) to see if the app meets performance targets. Stress testing goes beyond that to find the breaking point by increasing load until the app fails. Both are vital—load tests validate normal operation, while stress tests help you plan for spikes like Black Friday.

    Q: How do I measure mobile app performance?

    You measure performance by tracking predefined KPIs. Use a combination of lab tests (JMeter, Android Profiler) and real-user monitoring (Firebase Performance Monitoring). Key metrics include launch time, screen render time, API response, crash rate, and resource usage. Tools like Firebase automatically record these if integrated.

    Q: Does Rafirit Station offer mobile app performance testing services?

    Yes. Rafirit Station provides comprehensive mobile app performance testing and optimisation as part of our app development and digital marketing services. We help Bangladeshi startups and enterprises find and fix bottlenecks using proven frameworks. You can book a free strategy call or explore our Dhaka agency services.


    🎯 The Bottom Line

    Performance testing is not a one-time activity; it’s a mindset. The apps that win in 2026 are the ones that treat performance as a product feature, not a technical chore. The counterintuitive truth? You don’t need expensive tools or a huge QA team to start. Some of the biggest wins come from simply reducing API calls and image sizes—changes that take less than a day.

    We’ve seen 10-person startups with no dedicated QA outperform large companies simply because they monitored their performance consistently. The same approach works whether you’re building a south asian ride-hailing app or a global e-commerce platform. If you only remember one thing, let it be this: test early, test often, and test in the real world.


    ⚡ Your Next Step (Do This Today)

    1. Open your app in a profiler (Android Studio or Xcode) and measure its launch time.
    2. Write down your top 3 user journeys and set a target for each.
    3. Use Charles Proxy to simulate a 3G network and run a basic test.
    4. Sign up for Google’s Firebase Performance Monitoring (it takes 10 minutes to integrate).
    5. Review your app’s current crash rate in Play Console or App Store Connect.

    Ready to Get Results?

    Let our Dhaka-based team help you build a fast, stable app that users love.

    🗓 Book Your Free Strategy Call →

    💬 Drop “mobile app performance testing” in the comments and we’ll send you our free performance testing checklist — no email required.

    Leave a comment

    Your email address will not be published. Required fields are marked *

    Ready to apply this?

    Need help with your app dev?

    Book a free 30-minute call. We will tell you what we would do first, whether or not you hire us.

    Book a free app scoping call WhatsApp us