Automated GUI Performance Testing

Journal Paper: Software Quality Journal, March, 2011

A significant body of prior work has devised approaches for automating the functional testing of interactive applications. However, little work exists for automatically testing their performance. Performance testing imposes additional requirements upon GUI test automation tools: the tools have to be able to replay complex interactive sessions, and they have to avoid perturbing the application's performance. We study the feasibility of using five Java GUI capture & replay tools for GUI performance test automation.

Besides confirming the severity of the previously known GUI element identification problem, we also describe a related problem, the temporal synchronization problem, which is of increasing importance for GUI applications that use timer-driven activity.

We find that most of the tools we study have severe limitations when used for recording and replaying realistic sessions of real-world Java applications, and that all of them suffer from the temporal synchronization problem. However, we find that the most reliable tool, Pounder, causes only limited perturbation, and thus can be used to automate performance testing.

Based on an investigation of Pounder's approach, we further improve its robustness and reduce its perturbation.

Finally, we demonstrate in a set of case studies that the conclusions about perceptible performance drawn from manual tests still hold when using automated tests driven by Pounder.

Besides the significance of our findings to GUI performance testing, the results are also relevant to capture & replay-based functional GUI test automation approaches.

@article {Adamoli11, author = {Adamoli, Andrea and Zaparanuks, Dmitrijs and Jovic, Milan and Hauswirth, Matthias}, affiliation = {Via Giuseppe Buffi 13, 6904 Lugano, Switzerland}, title = {Automated GUI performance testing}, journal = {Software Quality Journal}, publisher = {Springer Netherlands}, issn = {0963-9314}, keyword = {Computer Science}, pages = {801-839}, volume = {19}, issue = {4}, url = {}, note = {10.1007/s11219-011-9135-x}, year = {2011} }