Bird
Raised Fist0
Testing Fundamentalstesting~15 mins

Performance test types (load, stress, spike, soak) in Testing Fundamentals - Build an Automation Script

Choose your learning style10 modes available
Verify system behavior under different performance test types
Preconditions (2)
Step 1: Run a load test by simulating 1000 users accessing the system steadily for 30 minutes
Step 2: Observe system response times and error rates during load test
Step 3: Run a stress test by gradually increasing users beyond 1000 until system fails or degrades
Step 4: Observe system behavior and recovery after stress test
Step 5: Run a spike test by suddenly increasing users from 100 to 2000 within 1 minute
Step 6: Observe system response and error rates during spike test
Step 7: Run a soak test by running 500 users continuously for 8 hours
Step 8: Observe system stability, memory usage, and error rates during soak test
✅ Expected Result: System maintains acceptable response times and error rates during load and soak tests; system fails gracefully and recovers after stress test; system handles sudden user spikes without crashing.
Automation Requirements - JMeter
Assertions Needed:
Response time is below threshold during load and soak tests
Error rate is below 1% during load and soak tests
System recovers after stress test failure
No crashes during spike test
Best Practices:
Use separate test plans for each test type
Use assertions to validate response times and error rates
Use listeners to monitor system metrics
Run tests in controlled environment to avoid external interference
Automated Solution
Testing Fundamentals
/* JMeter test plan XML snippet for load test example */

<jmeterTestPlan version="1.2" properties="5.0" jmeter="5.5">
  <hashTree>
    <TestPlan guiclass="TestPlanGui" testclass="TestPlan" testname="Performance Test Plan" enabled="true">
      <stringProp name="TestPlan.comments"></stringProp>
      <boolProp name="TestPlan.functional_mode">false</boolProp>
      <boolProp name="TestPlan.tearDown_on_shutdown">true</boolProp>
      <elementProp name="TestPlan.user_defined_variables" elementType="Arguments" guiclass="ArgumentsPanel" testclass="Arguments" testname="User Defined Variables" enabled="true">
        <collectionProp name="Arguments.arguments"/>
      </elementProp>
      <stringProp name="TestPlan.serialize_threadgroups">false</stringProp>
    </TestPlan>
    <hashTree>
      <ThreadGroup guiclass="ThreadGroupGui" testclass="ThreadGroup" testname="Load Test Thread Group" enabled="true">
        <stringProp name="ThreadGroup.on_sample_error">continue</stringProp>
        <elementProp name="ThreadGroup.main_controller" elementType="LoopController" guiclass="LoopControlPanel" testclass="LoopController" testname="Loop Controller" enabled="true">
          <boolProp name="LoopController.continue_forever">false</boolProp>
          <stringProp name="LoopController.loops">1</stringProp>
        </elementProp>
        <stringProp name="ThreadGroup.num_threads">1000</stringProp>
        <stringProp name="ThreadGroup.ramp_time">60</stringProp>
        <longProp name="ThreadGroup.start_time">1696000000000</longProp>
        <longProp name="ThreadGroup.end_time">1696003600000</longProp>
        <boolProp name="ThreadGroup.scheduler">true</boolProp>
        <stringProp name="ThreadGroup.duration">1800</stringProp>
        <stringProp name="ThreadGroup.delay">0</stringProp>
      </ThreadGroup>
      <hashTree>
        <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="HTTP Request" enabled="true">
          <elementProp name="HTTPsampler.Arguments" elementType="Arguments">
            <collectionProp name="Arguments.arguments"/>
          </elementProp>
          <stringProp name="HTTPSampler.domain">example.com</stringProp>
          <stringProp name="HTTPSampler.port">80</stringProp>
          <stringProp name="HTTPSampler.protocol">http</stringProp>
          <stringProp name="HTTPSampler.path">/api/test</stringProp>
          <stringProp name="HTTPSampler.method">GET</stringProp>
          <boolProp name="HTTPSampler.follow_redirects">true</boolProp>
          <boolProp name="HTTPSampler.auto_redirects">false</boolProp>
          <boolProp name="HTTPSampler.use_keepalive">true</boolProp>
          <boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
          <stringProp name="HTTPSampler.embedded_url_re"></stringProp>
          <stringProp name="HTTPSampler.connect_timeout"></stringProp>
          <stringProp name="HTTPSampler.response_timeout"></stringProp>
        </HTTPSamplerProxy>
        <hashTree/>
        <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="Response Time Assertion" enabled="true">
          <collectionProp name="Asserion.test_strings">
            <stringProp name="0">200</stringProp>
          </collectionProp>
          <stringProp name="Assertion.test_field">Assertion.response_code</stringProp>
          <boolProp name="Assertion.assume_success">false</boolProp>
          <intProp name="Assertion.test_type">2</intProp>
        </ResponseAssertion>
        <hashTree/>
      </hashTree>
    </hashTree>
  </hashTree>
</jmeterTestPlan>

This JMeter test plan defines a load test with 1000 users ramping up over 60 seconds and running for 30 minutes (1800 seconds). The HTTP Request sampler targets the example.com API endpoint. The Response Assertion checks that the HTTP response code is 200, indicating success.

Separate test plans should be created similarly for stress, spike, and soak tests with appropriate thread counts, ramp times, and durations.

Listeners and monitoring tools should be added in JMeter GUI to observe response times, error rates, and system metrics during test execution.

Common Mistakes - 4 Pitfalls
Using very high number of users without ramp-up time
Not adding assertions to check response codes or times
Running tests without monitoring system resources
Mixing different test types in one test plan
Bonus Challenge

Now add data-driven testing with 3 different API endpoints for the load test

Show Hint

Practice

(1/5)
1. Which type of performance test checks how a system handles normal user traffic over a period?
easy
A. Load test
B. Stress test
C. Spike test
D. Soak test

Solution

  1. Step 1: Understand the purpose of load testing

    Load testing measures system behavior under expected normal traffic to ensure it can handle typical user demand.
  2. Step 2: Differentiate from other test types

    Stress tests push beyond normal limits, spike tests check sudden jumps, and soak tests check long-term stability, not normal traffic.
  3. Final Answer:

    Load test -> Option A
  4. Quick Check:

    Normal traffic = Load test [OK]
Hint: Normal user traffic means load test [OK]
Common Mistakes:
  • Confusing stress test with load test
  • Thinking spike test handles normal traffic
  • Mixing soak test with short-term tests
2. Which of the following is the correct description of a spike test?
easy
A. Testing system reaction to sudden traffic increase
B. Testing system under gradually increasing load
C. Testing system limits by pushing beyond capacity
D. Testing system stability over a long period

Solution

  1. Step 1: Define spike test

    Spike testing checks how a system reacts to sudden, sharp increases in traffic or load.
  2. Step 2: Compare with other test types

    Gradual increase is load test, pushing beyond capacity is stress test, and long period stability is soak test.
  3. Final Answer:

    Testing system reaction to sudden traffic increase -> Option A
  4. Quick Check:

    Sudden jump = Spike test [OK]
Hint: Sudden traffic jump means spike test [OK]
Common Mistakes:
  • Confusing spike test with load test
  • Mixing stress test with spike test
  • Thinking soak test is about sudden changes
3. Consider this scenario: A system is tested by gradually increasing users from 100 to 1000 over 30 minutes, then holding steady at 1000 users for 2 hours. Which test types are being combined?
medium
A. Load test and stress test
B. Stress test and spike test
C. Load test and soak test
D. Spike test and soak test

Solution

  1. Step 1: Identify gradual increase phase

    Gradually increasing users from 100 to 1000 is typical of a load test to check normal traffic handling.
  2. Step 2: Identify steady high load phase

    Holding 1000 users for 2 hours tests long-term stability, which is soak testing.
  3. Final Answer:

    Load test and soak test -> Option C
  4. Quick Check:

    Gradual increase + long hold = Load + Soak [OK]
Hint: Gradual rise + long hold = Load and soak tests [OK]
Common Mistakes:
  • Confusing spike test with gradual increase
  • Thinking stress test applies to steady load
  • Mixing soak test with short duration tests
4. A tester wrote this description: 'Stress testing is done by suddenly increasing the load to check system limits.' What is wrong with this statement?
medium
A. Stress testing uses gradual load increase, not sudden
B. Stress testing checks long-term stability, not limits
C. Stress testing pushes beyond limits but not suddenly
D. Sudden load increase describes spike testing, not stress testing

Solution

  1. Step 1: Understand stress testing

    Stress testing pushes the system beyond its limits to find breaking points, usually by increasing load beyond normal gradually or rapidly.
  2. Step 2: Identify sudden load increase meaning

    Sudden load increase is characteristic of spike testing, which tests system reaction to abrupt changes.
  3. Final Answer:

    Sudden load increase describes spike testing, not stress testing -> Option D
  4. Quick Check:

    Sudden jump = Spike test, not stress test [OK]
Hint: Sudden jump means spike, not stress test [OK]
Common Mistakes:
  • Mixing stress and spike test definitions
  • Thinking stress test is only gradual
  • Confusing soak test with stress test
5. A web app must be tested to ensure it can handle 500 users normally, survive sudden spikes to 2000 users, and remain stable under 500 users for 24 hours. Which combination of tests should be planned?
hard
A. Stress test, spike test, soak test
B. Load test, spike test, soak test
C. Load test, stress test, soak test
D. Stress test, load test, spike test

Solution

  1. Step 1: Identify normal user handling test

    Testing 500 users normally is a load test to check typical performance.
  2. Step 2: Identify sudden spike handling test

    Handling sudden spikes to 2000 users requires spike testing to check system reaction.
  3. Step 3: Identify long-term stability test

    Remaining stable under 500 users for 24 hours is soak testing for endurance.
  4. Final Answer:

    Load test, spike test, soak test -> Option B
  5. Quick Check:

    Normal + sudden spike + long run = Load + Spike + Soak [OK]
Hint: Normal + spike + long run = Load, spike, soak tests [OK]
Common Mistakes:
  • Replacing spike test with stress test incorrectly
  • Confusing soak test with stress test
  • Ignoring long-term stability requirement
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard