Testing Blog

GUI Testing: Don't Sleep Without Synchronization

martedì, ottobre 28, 2008
Share on Twitter Share on Facebook
Google
Etichette: Philip Zembrod

10 commenti :

  1. Ced28 ottobre 2008 alle ore 02:14:00 GMT-7

    Isn't this style of coding automated GUI tests too grey or even white? As far as I understand, checking for the availability of GUI elements via the code itself prevents the tests from recognizing any delays or lags in the user interface.

    In general, could you provide any pointers to what you would consider the best approach to automated GUI tests regarding the level of reliance on code internas? As a simple example, merely to illustrate the question, should one use the actual Strings to check for menu items or constants in the code?

    RispondiElimina
    Risposte
      Rispondi
  2. Eliot Sykes28 ottobre 2008 alle ore 02:41:00 GMT-7

    Questo commento è stato eliminato dall'autore.

    RispondiElimina
    Risposte
      Rispondi
  3. Eliot Sykes28 ottobre 2008 alle ore 02:51:00 GMT-7

    "I'd be interested to hear if someone has done something similar, e.g. for an Ajax application"

    Selenium has the waitForCondition() function. You pass in some javascript that will evaluate to true when the part of the page you're interested in is loaded.

    RispondiElimina
    Risposte
      Rispondi
  4. Tom28 ottobre 2008 alle ore 02:59:00 GMT-7

    Jemmy, a Java Swing GUI testing library, has a similar method to check if there are pending events in the event queue.

    See http://jemmy.netbeans.org/javadoc/org/netbeans/jemmy/QueueTool.html#waitEmpty(long)

    RispondiElimina
    Risposte
      Rispondi
  5. Andy28 ottobre 2008 alle ore 06:25:00 GMT-7

    Tyburn, a swing testing harness also works in a similar way.
    It adds an observer to the swing event queue and then listens for one of it's own messages.
    Once it receives that, it knows that all previous messages have been processed
    See: http://code.google.com/p/tyburn/

    RispondiElimina
    Risposte
      Rispondi
  6. Santi28 ottobre 2008 alle ore 07:02:00 GMT-7

    As eliot, the first think I though was in Selenium which enters in a loop checking if the desired condition is true and waiting a second for re-check if it isn't...

    RispondiElimina
    Risposte
      Rispondi
  7. Nat Pryce28 ottobre 2008 alle ore 15:17:00 GMT-7

    The approach of synchronising via the GUI event queue only works if the system under test has no other inputs but the GUI. However, if the system reacts to other events (network messages, for example), then using the event message queue won't work. You don't know how long it will take the system to process the event that will, eventually, cause paint/expose or other GUI events to appear on the client's queue.

    RispondiElimina
    Risposte
      Rispondi
  8. Ankur30 ottobre 2008 alle ore 20:53:00 GMT-7

    nice post there, you touched upon the internals of how sync works...

    In case of automated tools like QTP and Robot we generally don't have to worry about these aspects since they are taken care by the tool itself.

    RispondiElimina
    Risposte
      Rispondi
  9. Unknown16 dicembre 2008 alle ore 14:18:00 GMT-8

    Relying solely on the GUI queue is problematic in case there has other threads. Say a GUI operation ended, but a non-GUI thread is still running (calculating something). After some time, the non-GUI thread invokes a GUI operation (e.g. invokeLater() in swing).
    For a human, it will probably work since we can understands that we are suppose to wait, even if the GUI is not blocked (see excellent post http://googletesting.blogspot.com/2008/10/gui-testing-dont-sleep-without.html)
    But a testing machine will break.

    In our company, we have implemented a mechanism that is indeed waiting for the GUI thread queue to be empty, but every once in a while the application is indeed violating
    and we had to add some waitFor() synchronizers.

    RispondiElimina
    Risposte
      Rispondi
  10. Unknown16 dicembre 2008 alle ore 14:21:00 GMT-8

    The previous web address was cut.
    Here it is in small pieces:
    http://
    googletesting.blogspot.com/
    2008/
    10/
    gui-testing-dont-sleep-without.html

    (it is worth reading)

    RispondiElimina
    Risposte
      Rispondi
Aggiungi commento
Carica altro...

The comments you read and contribute here belong only to the person who posted them. We reserve the right to remove off-topic comments.

  

Labels


  • TotT 114
  • GTAC 61
  • James Whittaker 42
  • Misko Hevery 32
  • Code Health 31
  • Anthony Vallone 27
  • Patrick Copeland 23
  • Jobs 18
  • Andrew Trenk 13
  • C++ 11
  • Patrik Höglund 8
  • JavaScript 7
  • Allen Hutchison 6
  • George Pirocanac 6
  • Zhanyong Wan 6
  • Harry Robinson 5
  • Java 5
  • Julian Harty 5
  • Adam Bender 4
  • Alberto Savoia 4
  • Ben Yu 4
  • Erik Kuefler 4
  • Philip Zembrod 4
  • Shyam Seshadri 4
  • Chrome 3
  • Dillon Bly 3
  • John Thomas 3
  • Lesley Katzen 3
  • Marc Kaplan 3
  • Markus Clermont 3
  • Max Kanat-Alexander 3
  • Sonal Shah 3
  • APIs 2
  • Abhishek Arya 2
  • Alan Myrvold 2
  • Alek Icev 2
  • Android 2
  • April Fools 2
  • Chaitali Narla 2
  • Chris Lewis 2
  • Chrome OS 2
  • Diego Salas 2
  • Dori Reuveni 2
  • Jason Arbon 2
  • Jochen Wuttke 2
  • Kostya Serebryany 2
  • Marc Eaddy 2
  • Marko Ivanković 2
  • Mobile 2
  • Oliver Chang 2
  • Simon Stewart 2
  • Stefan Kennedy 2
  • Test Flakiness 2
  • Titus Winters 2
  • Tony Voellm 2
  • WebRTC 2
  • Yiming Sun 2
  • Yvette Nameth 2
  • Zuri Kemp 2
  • Aaron Jacobs 1
  • Adam Porter 1
  • Adam Raider 1
  • Adel Saoud 1
  • Alan Faulkner 1
  • Alex Eagle 1
  • Amy Fu 1
  • Anantha Keesara 1
  • Antoine Picard 1
  • App Engine 1
  • Arham Jain 1
  • Ari Shamash 1
  • Arif Sukoco 1
  • Bartosz Papis 1
  • Benjamin Pick 1
  • Bob Nystrom 1
  • Bruce Leban 1
  • Carlos Arguelles 1
  • Carlos Israel Ortiz García 1
  • Cathal Weakliam 1
  • Chris Kennelly 1
  • Christopher Semturs 1
  • Clay Murphy 1
  • Dagang Wei 1
  • Dan Maksimovich 1
  • Dan Shi 1
  • Dan Willemsen 1
  • Dave Chen 1
  • Dave Gladfelter 1
  • David Bendory 1
  • David Mandelberg 1
  • Derek Snyder 1
  • Diego Cavalcanti 1
  • Dmitry Vyukov 1
  • Eduardo Bravo Ortiz 1
  • Ekaterina Kamenskaya 1
  • Elliott Karpilovsky 1
  • Elliotte Rusty Harold 1
  • Espresso 1
  • Felipe Sodré 1
  • Francois Aube 1
  • Gene Volovich 1
  • Google+ 1
  • Goran Petrovic 1
  • Goranka Bjedov 1
  • Hank Duan 1
  • Havard Rast Blok 1
  • Hongfei Ding 1
  • Jason Elbaum 1
  • Jason Huggins 1
  • Jay Han 1
  • Jeff Hoy 1
  • Jeff Listfield 1
  • Jessica Tomechak 1
  • Jim Reardon 1
  • Joe Allan Muharsky 1
  • Joel Hynoski 1
  • John Micco 1
  • John Penix 1
  • Jonathan Rockway 1
  • Jonathan Velasquez 1
  • Josh Armour 1
  • Julie Ralph 1
  • Kai Kent 1
  • Kanu Tewary 1
  • Karin Lundberg 1
  • Kaue Silveira 1
  • Kevin Bourrillion 1
  • Kevin Graney 1
  • Kirkland 1
  • Kurt Alfred Kluever 1
  • Kyle Freeman 1
  • Manjusha Parvathaneni 1
  • Marek Kiszkis 1
  • Marius Latinis 1
  • Mark Ivey 1
  • Mark Manley 1
  • Mark Striebeck 1
  • Matt Lowrie 1
  • Meredith Whittaker 1
  • Michael Bachman 1
  • Michael Klepikov 1
  • Mike Aizatsky 1
  • Mike Wacker 1
  • Mona El Mahdy 1
  • Nimit Khandelwal 1
  • Noel Yap 1
  • Palak Bansal 1
  • Patricia Legaspi 1
  • Per Jacobsson 1
  • Peter Arrenbrecht 1
  • Peter Spragins 1
  • Phil Norman 1
  • Phil Rollet 1
  • Pooja Gupta 1
  • Project Showcase 1
  • Radion Khait 1
  • Radoslav Vasilev 1
  • Rahul Singal 1
  • Rajat Dewan 1
  • Rajat Jain 1
  • Rich Martin 1
  • Richard Bustamante 1
  • Roman Govsheev 1
  • Roshan Sembacuttiaratchy 1
  • Ruslan Khamitov 1
  • Saicharan Nimmala 1
  • Sam Lee 1
  • Sean Jordan 1
  • Sebastian Dörner 1
  • Shahar Roth 1
  • Sharon Zhou 1
  • Shiva Garg 1
  • Siddartha Janga 1
  • Simran Basi 1
  • Stan Chan 1
  • Stephen Ng 1
  • Tejas Shah 1
  • Test Analytics 1
  • Test Engineer 1
  • Tim Lyakhovetskiy 1
  • Tom O'Neill 1
  • Vojta Jína 1
  • Zhe Lu 1
  • automation 1
  • dead code 1
  • iOS 1
  • mutation testing 1


Archive


  • ►  2026 (8)
    • ►  ott (1)
    • ►  lug (1)
    • ►  giu (1)
    • ►  mag (2)
    • ►  apr (1)
    • ►  mar (2)
  • ►  2025 (3)
    • ►  ott (1)
    • ►  set (1)
    • ►  gen (1)
  • ►  2024 (13)
    • ►  dic (1)
    • ►  ott (1)
    • ►  set (1)
    • ►  ago (1)
    • ►  lug (1)
    • ►  mag (3)
    • ►  apr (3)
    • ►  mar (1)
    • ►  feb (1)
  • ►  2023 (14)
    • ►  dic (2)
    • ►  nov (2)
    • ►  ott (5)
    • ►  set (3)
    • ►  ago (1)
    • ►  apr (1)
  • ►  2022 (2)
    • ►  feb (2)
  • ►  2021 (3)
    • ►  giu (1)
    • ►  apr (1)
    • ►  mar (1)
  • ►  2020 (8)
    • ►  dic (2)
    • ►  nov (1)
    • ►  ott (1)
    • ►  ago (2)
    • ►  lug (1)
    • ►  mag (1)
  • ►  2019 (4)
    • ►  dic (1)
    • ►  nov (1)
    • ►  lug (1)
    • ►  gen (1)
  • ►  2018 (7)
    • ►  nov (1)
    • ►  set (1)
    • ►  lug (1)
    • ►  giu (2)
    • ►  mag (1)
    • ►  feb (1)
  • ►  2017 (17)
    • ►  dic (1)
    • ►  nov (1)
    • ►  ott (1)
    • ►  set (1)
    • ►  ago (1)
    • ►  lug (2)
    • ►  giu (2)
    • ►  mag (3)
    • ►  apr (2)
    • ►  feb (1)
    • ►  gen (2)
  • ►  2016 (15)
    • ►  dic (1)
    • ►  nov (2)
    • ►  ott (1)
    • ►  set (2)
    • ►  ago (1)
    • ►  giu (2)
    • ►  mag (3)
    • ►  apr (1)
    • ►  mar (1)
    • ►  feb (1)
  • ►  2015 (14)
    • ►  dic (1)
    • ►  nov (1)
    • ►  ott (2)
    • ►  ago (1)
    • ►  giu (1)
    • ►  mag (2)
    • ►  apr (2)
    • ►  mar (1)
    • ►  feb (1)
    • ►  gen (2)
  • ►  2014 (24)
    • ►  dic (2)
    • ►  nov (1)
    • ►  ott (2)
    • ►  set (2)
    • ►  ago (2)
    • ►  lug (3)
    • ►  giu (3)
    • ►  mag (2)
    • ►  apr (2)
    • ►  mar (2)
    • ►  feb (1)
    • ►  gen (2)
  • ►  2013 (16)
    • ►  dic (1)
    • ►  nov (1)
    • ►  ott (1)
    • ►  ago (2)
    • ►  lug (1)
    • ►  giu (2)
    • ►  mag (2)
    • ►  apr (2)
    • ►  mar (2)
    • ►  gen (2)
  • ►  2012 (11)
    • ►  dic (1)
    • ►  nov (2)
    • ►  ott (3)
    • ►  set (1)
    • ►  ago (4)
  • ►  2011 (39)
    • ►  nov (2)
    • ►  ott (5)
    • ►  set (2)
    • ►  ago (4)
    • ►  lug (2)
    • ►  giu (5)
    • ►  mag (4)
    • ►  apr (3)
    • ►  mar (4)
    • ►  feb (5)
    • ►  gen (3)
  • ►  2010 (37)
    • ►  dic (3)
    • ►  nov (3)
    • ►  ott (4)
    • ►  set (8)
    • ►  ago (3)
    • ►  lug (3)
    • ►  giu (2)
    • ►  mag (2)
    • ►  apr (3)
    • ►  mar (3)
    • ►  feb (2)
    • ►  gen (1)
  • ►  2009 (54)
    • ►  dic (3)
    • ►  nov (2)
    • ►  ott (3)
    • ►  set (5)
    • ►  ago (4)
    • ►  lug (15)
    • ►  giu (8)
    • ►  mag (3)
    • ►  apr (2)
    • ►  feb (5)
    • ►  gen (4)
  • ▼  2008 (75)
    • ►  dic (6)
    • ►  nov (8)
    • ▼  ott (9)
      • TotT: Contain Your Environment
      • GUI Testing: Don't Sleep Without Synchronization
      • Testability Explorer: Measuring Testability
      • Dependency Injection Myth: Reference Passing
      • Test Engineering at Google
      • TotT: Floating-Point Comparison
      • To "new" or not to "new"...
      • TotT: Simulating Time in jsUnit Tests
      • Six Hats of Software Testing
    • ►  set (8)
    • ►  ago (9)
    • ►  lug (9)
    • ►  giu (6)
    • ►  mag (6)
    • ►  apr (4)
    • ►  mar (4)
    • ►  feb (4)
    • ►  gen (2)
  • ►  2007 (41)
    • ►  ott (6)
    • ►  set (5)
    • ►  ago (3)
    • ►  lug (2)
    • ►  giu (2)
    • ►  mag (2)
    • ►  apr (7)
    • ►  mar (5)
    • ►  feb (5)
    • ►  gen (4)

Feed

  • Google
  • Privacy
  • Terms