Performance & Security Testing Services
Mutqan Soft's performance and security testing service measures how your web application or API behaves under real load and against common exploitation attempts — in numbers, before thousands of users measure it on launch day. We run load, stress and soak tests with JMeter, trace bottlenecks into the services and databases behind slow requests, check for the common OWASP weaknesses in web apps and APIs, and review authentication, authorisation and input handling.
What you receive: latency, throughput and error-rate metrics; findings ranked by severity, each with reproduction steps; fix recommendations; and a re-measurement afterwards. Mutqan Soft is a software testing company based in Riyadh, and the engineer who runs your tests writes the findings and verifies the fixes.
- Load, stress and soak tests with JMeter, reported as latency, throughput and error-rate metrics.
- Checks for the common OWASP weaknesses in web apps and APIs, with authentication, authorisation and input handling reviewed.
- Findings ranked by severity, each with reproduction steps, evidence and a fix recommendation.
- A re-measurement after the fixes, and a written release decision: what was tested and what remains open.
- Based in Riyadh: on site in Saudi Arabia or remote, with reports in Arabic or English.
Performance testing: load, stress and soak
A performance testing service is only useful if each run answers a question someone will act on. Load, stress and soak tests answer different questions, so the test strategy names which of them your release needs and what each must show. All three are run with Apache JMeter. The workload model typically comes from your analytics or your business forecast: which endpoints, in what mix, with what data, at what concurrency.
When a number misses its target, the number is not yet the finding. Bottleneck analysis follows the slow requests into the services and databases behind them — whether latency rises while throughput flattens (a saturated resource such as CPU or a connection pool), whether errors appear before slowness (a hard limit), and which queries slow down under concurrency — so that a finding can name a cause, not only a symptom.
- Load test — does the product meet its targets at the traffic you expect? The expected workload at normal and peak levels, compared with the targets you set.
- Stress test — where is the limit, and how does the system fail? Load is raised past the expected peak until errors or time-outs appear, to see whether the system degrades with clear errors and recovers by itself, or crashes and needs a restart.
- Soak test — does it stay healthy for hours? A realistic load held for several hours exposes memory leaks, connection-pool exhaustion, and tables or queues that grow until everything slows down.
- Metrics — latency, throughput and error rate. Latency is typically read as percentiles (p50, p95 and p99 rather than the average, which hides the slow tail) and broken down by endpoint, so a fast home page cannot hide a slow checkout.
Pass/fail criteria: agree thresholds before the run
A test without agreed thresholds measures, but it cannot pass or fail. Thresholds should be agreed before the first run, as numbers tied to a workload and a time window — whoever runs your load tests, ask for them. The table is an illustrative example for the checkout of a fictional shop, Bustan Market — your values come from your own traffic, journeys and commitments, not from this page.
How response time is measured matters as much as the limit. For every request, JMeter records the elapsed time from just before the request is sent to just after the last part of the response arrives; it does not include browser rendering or JavaScript. Those per-request times are summarised as percentiles — JMeter's HTML dashboard reports the 90th, 95th and 99th by default — next to throughput and error rate. Useful criteria also say which window counts (usually the steady state after ramp-up), what counts as an error (5xx responses, time-outs, and 200 responses with an error body caught by an assertion), and when a run is invalid rather than passed: the load generator itself saturated, the build changed mid-run, or the environment was not the one agreed.
| Criterion (example) | Measured on | Pass | Fail |
|---|---|---|---|
| p95 response time | POST /api/checkout, 30-minute steady state at 120 requests/s | 800 ms or less | Above 800 ms |
| p99 response time | The same window | 1,500 ms or less | Above 1,500 ms |
| Error rate | Every request in the mix: 5xx, time-outs, failed assertions | Below 0.5% | 0.5% or more |
| Throughput | The whole workload mix | 120 requests/s sustained for 30 minutes | The rate cannot be sustained because responses slow down |
| Soak stability | 4-hour run at 60% of peak | p95 in the last hour within 10% of the first hour | Drift above 10%, or memory or open connections keep climbing |
| Stress behaviour | Ramp past peak until errors appear | Clear 503 or 429 responses; normal service within 5 minutes after the load drops | Crash, hung requests, wrong data, or no recovery without a restart |
Security testing: common OWASP weaknesses in web apps and APIs
The security part checks your web application and its APIs for the common weaknesses catalogued in two OWASP lists: the OWASP Top 10:2025 for web applications and the OWASP API Security Top 10 (2023 edition) for APIs. Checks run in the agreed environment; access-control checks need test accounts for each role. Both lists are references, not checklists to tick: the OWASP Web Security Testing Guide (WSTG) describes how each weakness is tested, and the Application Security Verification Standard (ASVS) states testable requirements — both useful to your team when it writes the fix and its own regression test.
Authentication, authorisation and input handling are reviewed as part of this service. They are where the two lists overlap and where automated scanners are weakest: a scanner cannot know that customer A must not read customer B's order. Some categories — such as Software Supply Chain Failures (A03:2025) and Insecure Design (A06:2025) — are only partly visible from the outside, and testing alone cannot rule them out.
| Area | OWASP reference | Example checks |
|---|---|---|
| Access control | A01:2025 Broken Access Control; API1:2023 Broken Object Level Authorization; API5:2023 Broken Function Level Authorization | Customer A's token used to read customer B's order by changing the id; a customer token calling an admin endpoint; a field such as role or price accepted from the client (API3:2023) |
| Authentication and sessions | A07:2025 Authentication Failures; API2:2023 Broken Authentication | Login throttling and lockout, generic error messages, token expiry, logout and password change that really invalidate the session, the password-reset flow |
| Input handling | A05:2025 Injection | Hostile values in search, filters, sort fields, file names and headers; database errors or reflected script in responses |
| Configuration | A02:2025 Security Misconfiguration; API8:2023 Security Misconfiguration | Security headers, TLS versions, cookie flags (Secure, HttpOnly, SameSite), CORS policy, verbose errors and default pages |
| Exceptional conditions | A10:2025 Mishandling of Exceptional Conditions | Malformed bodies, missing fields and time-outs: no stack traces in responses, no failing open |
| Resource consumption | API4:2023 Unrestricted Resource Consumption | Page-size and payload limits, rate limiting with 429 responses — measured alongside the load tests |
Scope boundary: what this service does not claim
This is testing for common weaknesses and measured performance, with the evidence behind each finding. It is worth being precise about what it is not, so you can plan anything else you need.
- Not a certified penetration test or a compliance attestation. The report is test evidence: it does not certify compliance with a regulation or a standard. If an auditor, a regulator or a client contract requires either, plan for it separately; the findings and re-test results from this work remain useful input.
- Mobile apps: the APIs a mobile app calls are in scope and get the same checks as any other API. The app package itself — data stored on the device, platform interaction, resistance to reverse engineering and tampering, the areas the OWASP MASVS standard defines — is not part of this service as described here.
- Not a denial-of-service exercise. A stress test finds the capacity limit of your system under controlled load from a load generator; it is not a simulation of a distributed attack.
- Third-party services — payment gateways, SMS providers, national integrations — should not receive test load without their owner's permission. Whoever tests for you, make sure the scope says whether each one is replaced by a stub or called through its sandbox.
- Production: testing runs against a test or staging environment. Running anything against production is your decision; if you make it, agree the targets, rate, time window and stop conditions explicitly beforehand (see the FAQ).
How an engagement runs
The work follows the same six stages as every Mutqan Soft engagement, adapted to performance and security. A stage is not closed until its output exists.
The engineer who runs the tests writes the findings and verifies the fixes, so nothing is lost between the person who found a problem and the person who confirms it is gone.
| Stage | What happens | Output |
|---|---|---|
| Discover | Requirements, architecture and defect history read; what costs most if it breaks — journeys, data, traffic peaks | Risk map |
| Model | Coverage designed — typically a workload model (endpoint mix, data, concurrency, ramp-up, duration) and the security areas to test, by role and endpoint | Test strategy |
| Test | JMeter load, stress and soak runs and OWASP-based security checks on the agreed environment; every run and its result recorded | Execution logs and metrics |
| Report | Findings with severity, reproduction steps and evidence in your tracker; a critical finding is reported immediately | Findings ranked by severity |
| Re-test | Every fix re-tested and re-measured; regression run | Re-measurement and regression results |
| Release decision | What was tested, what remains open, which risks are accepted | Written release decision |
What you receive
Findings land in the tracker your team already uses, and test documentation and reports are in Arabic or English — whichever your team works in. The table shows the shape of a performance finding, on the same fictional checkout as above.
- Latency, throughput and error-rate metrics — typically as percentiles per endpoint and per run. Whoever measures for you, ask for each number together with the workload and environment it was measured under; without them it cannot be compared next time.
- Findings ranked by severity, each with reproduction steps, environment and evidence (request, response, timings or a recording). A critical finding is reported immediately, not held for the final report.
- Fix recommendations: what to change and where — an index, a pool size, a missing ownership check, a header.
- A re-measurement after the fixes (typically with the same workload, so the comparison is honest), and every fix re-tested.
- Execution logs and a written release decision: what was tested, what remains open, and which risks are accepted.
| Field | Example (fictional: Bustan Market checkout API) |
|---|---|
| Title | Checkout p95 is three times the threshold at peak load |
| Severity | High — fails the release threshold for checkout |
| Where | POST /api/checkout, staging build 2.14.0, 120 requests/s |
| Measured | p95 2,400 ms against a threshold of 800 ms; error rate 0.2% |
| Cause found | The query for orders by customer and date scans the whole table under concurrency; database CPU at 95% |
| Steps to reproduce | Run the checkout workload (JMeter plan and data file attached) for 10 minutes at 120 requests/s |
| Recommendation | Composite index on orders (customer_id, created_at), then re-measure |
| Re-measurement | Build 2.14.1: p95 610 ms at 120 requests/s — threshold met |
What we need from you
Product, stack and release date are enough to start the conversation. To run the tests, these need to be in place:
- An environment: a test or staging environment as close to production in size and configuration as possible; where it differs, the difference is written into the report so the numbers are read correctly. And a build that does not change during a run.
- Traffic and dates: the expected peak in users or requests per second, the main journeys, the release date and any seasonal peaks — or the analytics to derive them from.
- Test data at volume: synthetic accounts (at least two per role, for the access-control checks) and a database filled to a realistic size — not copies of real customer records.
- Access: the API contract (OpenAPI or a Postman collection), test accounts, and read access to monitoring, logs or database metrics during the runs. Repository access helps root-cause analysis but is not required.
- Clear authorisation: with any provider, it is worth writing down which hosts and endpoints are in scope for load and security tests and when they may run, and checking whether a WAF or rate limiter needs the load generators allow-listed.
- A contact: one technical person who can read logs, restart a service and stop a run if something unexpected happens.
When to run performance and security testing
- Before a launch or a major release — before thousands of users measure the performance themselves on launch day.
- Before a seasonal peak: government digital services before their seasonal peak load, e-commerce before its sale seasons — with the workload set to the expected peak, not to an ordinary day.
- After an architecture change: a new database or caching layer, a move to another cloud or region, a new API gateway or message queue — ideally re-measured with the same workload as before the change, so the comparison is honest.
- After a change to authentication or permissions: a new SSO provider, a new token scheme, new roles or tenants — with the access-control and session checks run again.
- When an API is opened to partners or to a mobile app — it becomes reachable by clients you do not control.
- When production is already slow — the slowdown is reproduced under controlled load in a test environment and the bottleneck found before the next peak.
Frequently asked questions
Which tool do you use for load testing?
Apache JMeter, for load, stress and soak tests. JMeter's own manual recommends CLI (non-GUI) mode for load runs and keeps the GUI for building and debugging scripts. If your team already has load scripts in another tool, say so when scoping: we work with what your team already uses when it exists.
Can you test APIs without the frontend?
Yes, and it is often the better order. We test from the contract — an OpenAPI description or a Postman collection — covering valid and invalid cases, authentication, limits and performance, so the service layer is measured before the frontend arrives.
Do you test in production?
Testing runs against a test or staging environment. A stress test in particular pushes the system towards its breaking point, which is not something to do to real users. Running anything against production — even a low-rate response-time check — is your decision; if you make it, agree the targets, rate, time window and stop conditions explicitly beforehand.
Is this a penetration test, and do we get a certificate?
It is testing for the common OWASP weaknesses in web apps and APIs, with the findings and re-tests documented. It is not presented as a certified penetration test, and the report is not a compliance certificate. If an auditor, a regulator or a client contract requires either, plan for it separately; the findings and re-test evidence from this work remain useful input.
Do you do mobile app security testing?
We test the APIs the app calls — the server any attacker talks to, whatever the client — with the same checks: object-level authorisation, authentication, input validation and resource limits. Analysis of the app package itself (storage on the device, resistance to reverse engineering, the OWASP MASVS areas) is not part of this service as described here.
Do you provide web app assessment services in Saudi Arabia?
Yes. We are based in Riyadh, work on site in the Kingdom and remotely with clients across the Gulf, and write reports in Arabic or English. For a web application, the assessment described here covers performance under load and the common OWASP weaknesses; if you need a wider independent assessment of quality and readiness before a major launch, that is our enterprise consulting service.
Do you need our source code?
No. Performance and API testing run against a test or staging environment without the code. Repository access helps with the root-cause analysis of a bottleneck, but it is not a precondition for starting.
References
- Apache JMeter User's ManualHow to build, parameterise and run load tests with JMeter, and how to read its listeners and reports.
- OWASP Top 10:2025The ten most critical web application security risks, with how to test for and prevent each.
- OWASP API Security Top 10 (2023)The ten most common API weaknesses: broken object-level authorization, broken authentication, unrestricted resource consumption and more.
- OWASP Web Security Testing Guide (WSTG)The reference methodology for testing web applications and APIs for security weaknesses, test by test.
- OWASP Application Security Verification Standard (ASVS)A checklist of verifiable security requirements for web applications, grouped in three assurance levels.
- OWASP Mobile Application Security Verification Standard (MASVS)OWASP's security requirements for mobile apps, grouped into control areas such as storage, cryptography, authentication, network and platform interaction.
Planning a launch or a peak season?
Tell us about the product, its stack, the release date and the traffic you expect at peak. You will get a proposed test scope and an effort estimate back — not a sales pitch.
Email: info@mutqansoft.sa · Phone: +966 55 704 9016
Read more before you decide
Performance & Security Resilience Testing
How to test a product under load, failure and attack: load, stress and soak tests with real targets, failure injection, the OWASP baseline and what to record.
PerformanceWhat is Performance Testing?
Performance testing explained: load vs stress vs spike vs soak tests, the metrics that matter (p95, throughput, error rate), planning a first test, and tools.
API TestingWhat is API Testing? How to Test a REST API
API testing explained: what it is, what to check in every request and response, a step-by-step method for a REST API, common failures and free browser tools.
AutomationDeployment Verification Testing
How to verify a deployment: a plan written in advance, post-deploy smoke tests, synthetic checks, canary releases, feature flags, signals and rollback.
QA Roadmap lessons
Free tools from the same team
The tools we use in our own engagements, free to use without signing up for most of them.
Measure an endpoint's response time over several samples: min, max, average, median and p95.
Run a small, safe benchmark against a public endpoint (bounded requests and concurrency) and get throughput and latency percentiles.
Generate large parameter datasets (users, tokens, ids, payloads) for k6, JMeter, Gatling and Locust load tests.
Grade HTTP security headers (CSP, HSTS, X-Frame-Options, Referrer-Policy, Permissions-Policy, COOP/CORP) from pasted headers or a public URL.
Test which TLS versions a server accepts, the cipher suite it negotiates, weak suites and HSTS, with an A+ to F grade that explains every cap.
Grade the Set-Cookie headers of a page, or ones you paste, for Secure, HttpOnly, SameSite, prefixes, scope and lifetime, with the fix for each issue.