The difference between Stress and Load Testing is already clearly defined by wikipedia.Wikipedia refers to Stress Tests even as Torture Tests:
Stress testing (sometimes called torture testing) is a form of deliberately intense or thorough testing used to determine the stability of a given system or entity. It involves testing beyond normal operational capacity, often to a breaking point, in order to observe the results.
Load Tests are more formal and usually predefined by the client / domain experts:
Load testing is the process of putting demand on a system or device and measuring its response. Load testing is performed to determine a system’s behavior under both normal and anticipated peak load conditions. It helps to identify the maximum operating capacity of an application as well as any bottlenecks and determine which element is causing degradation. When the load placed on the system is raised beyond normal usage patterns, in order to test the system's response at unusually high or peak loads, it is known as stress testing. The load is usually so great that error conditions are the expected result, although no clear boundary exists when an activity ceases to be a load test and becomes a stress test.
Load Tests are more realistic and therefore contain "think times" to simulate realistic user behavior. Because of "think times" and other throttling, Load Tests are far less interesting for finding concurrency bugs, dead locks or memory leaks. Every "think time" decreases concurrency and so the probability of bug identification.
I try to implement as early as only possible "torture tests". Interestingly, Stress Tests are widely ignored in enterprise projects and load tests are performed so late in the game, that the actual results don't even matter...
...stress tests could be even fun.Thanks Arturo for the idea of this post:
@AdamBien In "RealWorldJavaEEPatterns" p. 79 you say 'stress tests don't have to be realistic but to try to break the system' Elaborate pls?— Arturo Tena (@arturotena) February 15, 2014