Alexandre.iline rit 2010 java_fxui_extra


Published on

  • Be the first to comment

Alexandre.iline rit 2010 java_fxui_extra

  1. 1. Testing JavaFX UI Tips from JavaFX quality team Alexandre (Shura) Iline Java and JavaFX quality architect Oracle
  2. 2. The following is intended to outline our general product direction. It is intended for information purposes, and may not be incorporated into any contract. It is not a commitment to deliver any material, code, or functionality, and should not be relied upon in making purchasing decisions. The development, release, and timing of any features or functionality described for Oracle's products remains at the sole discretion of Oracle.
  3. 3. Agenda <ul><li>UI testing overview
  4. 4. Test automation approaches
  5. 5. Jemmy library
  6. 6. Test automation effectiveness
  7. 7. Test library design approaches </li></ul>
  8. 8. UI testing … by Wikipedia «GUI software testing is the process of testing a product that uses a graphical user interface, to ensure it meets its written specifications.»
  9. 9. UI testing … most often ... «Checking whether usage of a product UI leads to results expected by the the person who performs testing »
  10. 10. <ul><li>Start text editor
  11. 11. Push «File/Open»
  12. 12. Verify file chooser directory
  13. 13. Select some file
  14. 14. Verify editor area content
  15. 15. Verify application title
  16. 16. Verify buttons availabilities
  17. 17. .... </li></ul>
  18. 18. UI Testing Manual Automated Initial step Design test specification. Create tests. Establish regular runs. Ongoing Click, click, click Analyze results File bugs Change the specification Change the tests Qualification High, low for test executors High Effectiveness Low High Other Inexpensive to start Continuous quality monitoring , inexpensive to reuse Fun Bo-o-o-ring Much like programming
  19. 19. Continuous build No Yes. Development Success
  20. 20. Continuous build with testing No No Yes Yes. = Compilation successful Success Passed
  21. 21. Automation approach Record && Replay Coding Test creation Inexpensive* Usually just repeating manual test in special environment Must be accompanied by other means Expensive* Consists of programming Test execution Does not depend on approach Test maintenance Higher (in most cases)* Very much depends on test format Lower* Depends on principles of building test library Test analysis Does not depend on approach (*) Much more information closer to the end of this presentation
  22. 22. Jemmy
  23. 23. Jemmy v2 Started as a tool to tests TeamWare UI (1999) Used for NetBeans extensions (2000) Official test tool for NetBeans (2001) Open-source (2001) Jemmy v3 Started in (2008) as a proof of concept experiment Extended to support JavaFX (2009) Open-source with support of JavaFX 1.2 (2009) Developed in close-source for 1.3 since then
  24. 24. Jemmy usages <ul><li>V2 (Swing/AWT) </li><ul><li>Internal: Swing, NetBeans, Glassfish
  25. 25. External: </li><ul><li>Used by: Boeing (x2),,,,,,,
  26. 26. Evaluated by:,,,,,, </li></ul></ul><li>V3 (FX) </li><ul><li>Internal: JavaFX, Authoring Tool, JavaStore </li></ul></ul>
  27. 27. Demo... Finally!
  28. 28. Jemmy v3 Covered in this presentation JavaFX AWT/Swing SWT Scenegraph LCDUI JemmyCore Interfaces AWT robot FX robot Hierarchy Input Scene, node containers Scroller, slider, list, text, ... Generic interfaces
  29. 29. UI test Find Do Verify Pass Pass Pass Fail Fail Fail Failure analysis Find next control To perform operation On in Verify that expected State reached Perform necessary actions
  30. 30. Lookup <ul><li>By ID </li><ul><li>Easiest but may not be possible
  31. 31. «open_file_btn» </li></ul><li>By type </li><ul><li>Most common
  32. 32. Button, text, combo box, etc </li></ul><li>By index </li><ul><li>Unavoidable
  33. 33. 2 nd button with text «browse» </li></ul></ul><ul><li>By toString() </li><ul><li>Sucks
  34. 34. projectmanager.Main$Main$Script$1Scene$ObjLit$20@4d16318b </li></ul><li>By text, tooltip, associated label </li><ul><li>Best, if possible
  35. 35. Button with text «browse» </li></ul></ul>
  36. 36. UI could be very complicated
  37. 37. UI could be very complicated
  38. 38. Lookup demo
  39. 39. Interfaces Interface Control types Description Mouse, Keyboard, Drag Anything Low level input Parent Containers, list (for its content) Something you could look within Selectable Toggle button, radio button, combo box , check box, lists, etc A control which provides limited number of choices CaretOwner Text box, scroll bar, slider A control which has a number value which changes within some range Text Text box Editable text container
  40. 40. Interfaces demo
  41. 41. Verifications UI feedback Non UI feedback Dialog displayed Text changed Image updated Progress bar changed position File created Database updated Sunset happened :)
  42. 42. Waiting <ul><li>UI is a multi -thread environment </li></ul>Things happen in background Test code is in another thread <ul><li>Not much could be really verified
  43. 43. Everything should be waited for </li></ul>
  44. 44. Verification demo
  45. 45. Test automation effectiveness
  46. 46. E A – automation effectiveness N R and N C are characteristics for a product. T M is a characteristic of a test suite T D and T S depend on test automation approach Smaller T D and T S - higher the E A . T D + * T S N R T M * N R N C * E A = N C *
  47. 47. Assumptions: T M = 1 engineer*week T S = 0.1 * T M T D = 5 * T M N R = 8
  48. 48. T d or T s – what to minimize T S - if (N C * N R ) is big Multi-platform Compatibility with external products (servers, browsers, ...) Long-living T D - if (N C * N R ) is small Proof of concept Preview
  49. 49. Tests fail every now and then ... … because the tested UI is changed
  50. 50. Tests fail every now and then ... Ah! And also because errors are made ...
  51. 51. End2End demo
  52. 52. T s components Time spent on What to do %% of time Allocating failures Use test harness 1% - 5% Understanding the failure reason Use test logging, save images, save UI state 10% - 80% Fix the tests Move common code to the library ( * ) 90% - 10% (*) The only way it is different from programming is that there are a lot of tests. More on this later.
  53. 53. Harness TestNG
  54. 54. Understanding failure Logging UI operations Going to push ... button Selecting ... menu UI responses Found list view: … UI hierarchy Scene «…» Group «…» Button «…» UI states Images
  55. 55. Demo Jemmy logging functionality
  56. 56. Fix the tests One UI, many-many tests. Do as few test code changes as possible Ideally … one change in test code for one change in UI code.
  57. 57. Decrease maintenance cost <ul><li>Implement reusable operations in a library </li></ul>openFile(String filename) <ul><li>Decrease implementation dependencies </li></ul>lookup(Button.class, new ByText<Button>( «Low» )) <ul><li>Increasing stability </li></ul>.wrap(0).mouse().click(); Thread.sleep(1000); ...
  58. 58. Demo Refining test.
  59. 59. Decrease implementation cost This is not the main target, but still … <ul><li>Use IDE
  60. 60. Use UI exploration tools </li></ul>
  61. 61. Demo JemmyFXBrowser
  62. 62. Library design approaches
  63. 63. Remember the formula? T D + * T S N R T M * N R N C * E A = N C * E A – automation effectiveness To be used for every particular product. N R and N C are unique for a product. T M is a characteristic of a test suite. Smaller T D and T S - higher the E A . Coefficient depend on the way you write your tests
  64. 64. T S mainly consists of time for test modification. When product changes, tests need to be changed accordingly. Many tests! Hundreds. “ Less changes of test code per a change in the product UI.” Ideally ... no more than one. But ... how? You are the coders – you know: Move code to test library.
  65. 65. Application domain model That's ... car catalog of some sort
  66. 66. Application UI
  67. 67. Coordinates <ul><li>click(134,32) //selects some record
  68. 68. click(215,122) //hits “Properties”
  69. 69. sleep(5) //sleeps to let dialog be painted
  70. 70. click(64,182) //expands color combo
  71. 71. click(235,182) //selects Gray
  72. 72. click(235,212) //hit OK </li></ul>T d ~= 1.1 * T m , T s ~= 1 * T m Never tried, but ...
  73. 73. Widgets <ul><li>Find “Car records” frame
  74. 74. Find table
  75. 75. Select “1abc234” cell
  76. 76. Push “Properties” button
  77. 77. Wait for “1abc234” dialog
  78. 78. Select “Gray” color in combo box
  79. 79. Push “OK” </li></ul>
  80. 80. Widgets or coordinates T D ~= 3 * T M , T S ~= .5 * T M
  81. 81. UI Primitives <ul><li>Find car list frame </li></ul>CarListFrame list = new CarListFrame() <ul><li>Open properties dialog for car “1abc234” </li></ul>CarDialog propDialog = list.carProperties(“1abc234”); <ul><li>Set color to gray </li></ul>propDialog.setColor(Color.GRAY); <ul><li>Apply changes </li></ul>propDialog.ok();
  82. 82. T D ~= 5 * T M , T S ~= .2 * T M
  83. 83. Domain model <ul><li>Set color to gray for a car “1abc234” </li></ul>new CarRecord(“1abc234”). setColor(Color.GRAY); Underneath the cover, CarRecord class does all described earlier
  84. 84. T D ~= 7.5 * T M , T S ~= .05 * T M
  85. 85. T d and T s together
  86. 86. T D and T S for N C =3, N R =8, T M =1
  87. 87. E A for N C =3, N R =8
  88. 88. Testing JavaFX UI Tips from JavaFX quality team Alexandre (Shura) Iline Java and JavaFX quality architect Oracle
  89. 89. References [email_address]