Author: pekka.klarck
Date: Tue Jun 23 12:45:03 2009
New Revision: 2044

Added:
   wiki/HowToWriteGoodTestCases.wiki

Log:
initial skeleton, needs more meat and examples

Added: wiki/HowToWriteGoodTestCases.wiki
==============================================================================
--- (empty file)
+++ wiki/HowToWriteGoodTestCases.wiki   Tue Jun 23 12:45:03 2009
@@ -0,0 +1,162 @@
+#summary Guidelines for writing good test cases using Robot Framework
+
+<wiki:toc max_depth="2" />
+
+= Introduction =
+
+  * How to write tests in high-level, not how to interact with the SUT
+ * Most important guideline is keeping test cases as easy to read as possible.
+
+
+= Naming =
+
+== Test suite names ==
+
+  * Names should be as describing as possible
+  * Can be relatively long but over 40 characters starts to be too much
+
+== Test case names ==
+
+  * Should be describing similarly as test suite names
+  * If a suite contain many similar tests, their names can be shorter
+
+== Keyword names ==
+
+  * Should be describing and clear
+  * Should explain what a keyword does, not how it does it
+  * Very different abstraction levels
+
+== Naming setup and teardown ==
+
+  * Try to use name that describes what is done
+    - Possibly an existing keyword
+  * More abstract names acceptable if setup/teardown contain unrelatd steps
+    - Listing steps in name is dublication and a maintenance problem
+      (e.g. `Login to system, add user, activate alarms and check balance`)
+    - May need to use something generic like `Initialize system`
+  * Everyone working with these tests should always understand the name
+
+
+= Documentation =
+
+== Test suite documentation ==
+
+  * Often a good idea to add documentation to suites containing tests
+    - Higher level suites don't need documentation that often
+  * Should contain background information, why tests are created, etc.
+  * Don't just repeat test suite name
+    - Better to not have at all if not needed
+  * Don't include too much details about test cases
+    - Tests should be clear enough to
+    - Dublicate information is waste and maintenance problem
+  * Can contain links to more information
+
+== Test case documentation ==
+
+  * Test cases normally don't need documentation
+    - Suite's name and documentation and test's name should give enough
+      background information
+    - Test cases' structure should be clear enough without documentation
+      or other comments
+  * Sometimes useful so don't be afraid to use it
+
+== User keyword documentation ==
+
+  * Normally not needed
+    - Good name and clear structure should be enough
+  * Can be used to explain arguments and return values
+  * Visible in resource file documentations generated with libdoc.py
+
+= Test case structure =
+
+  * Test case should be easy to understand
+  * One test case should be testing one thing
+    - 'Things' can be small (part of single feature) or large (end-to-end)
+  * Select suitable abstraction level
+    - Only include information that is relevant for the test case
+  * Two kinds of test cases
+    - Workflow tests
+    - Data-driven tests
+
+== Workflow tests ==
+
+  * Steps describe what test does
+    - Use clear keyword names and suitable abstraction level
+    - Should contain enough information to run manually
+ - Should never need documentation or commenting to explain what test does
+  * Can have different abstraction level
+    - Tests for a detailed functionality are more precise
+    - End-to-end tests can be on very high level
+    - One test should use only one abstraction level
+  * Different styles
+    - More techical tests for lower level details and integration tests
+    - "Executable specifications" act as requiremens
+    - Everyone (including customer/product owner) should always understand
+  * No complex logic
+    - No for loops or if/else constructs
+    - Use variable assignements with care
+    - Test cases should not look like scripts
+  * Max 10 steps, preferably less
+
+== Data-driven tests ==
+
+  * One high-level keyword per test
+    - Different arguments create different tests
+    - The keyword often contains similar workflow as workflow tests
+      and is created in the same test case file
+  * Possible, and recommended, to name column headings
+  * Better to have separate tests than test multiple things in one test
+    - Easier to understand than for example looping
+    - No tricks needed to go through all test even if some fails
+    - There's not that much extra work or other overhead
+ * If lots of test needed, consider generating them based on a separate model
+
+
+= User keywords =
+
+  * Should be easy to understand
+    - Same rules as with workflow tests
+  * Different abstraction levels
+  * Can contain some programming logic (for loops, if/else)
+    - Especially on lower level keywords
+    - Complex logic in libraries rather than in user keywords
+
+
+= Variables =
+
+== Variable naming ==
+
+  * Clear but not too long names
+  * Can use comments in variable table to document them more
+  * Use case consistently
+ - Lower case with variables only available inside certain test or keyword
+    - Upper case with others (global, suite or test level)
+    - Both space and underscore can be used as word separator
+  * Recommended to list also variables that are set dynamically in the
+    variable table
+    - Set typically using `Set Global/Suite/Test Variable` keywords
+    - The initial value should explain where/how the real value is set
+
+== Passing and returning values ==
+
+ * Common approach is to return values from keywords, assign them to variables
+    and then pass them as arguments to other keywords
+    - Clear and easy to follow approach
+    - Looks like programming
+  * Alternative approach is using `Set Test Variable` keyword
+    - No need to have any programming style in test case level
+    - More complex to follow, reusing keywords harder
+    - Avoid below test case level
+
+
+= Avoid sleeping =
+
+  * Sleeping is very fragile
+  * Safety margins cause too long sleeps on average
+  * Instead of sleep, use keyword that polls has certain action occurred
+    - Should have a maximum time to wait
+    - Keyword names often starts with `Wait Until ...`
+    - Possible to wrap other keywords inside built-in keyword
+      `Wait Until Keyword Succeeds`
+  * Sometimes sleeping is easiest but use with care
+    - Never use in keywords that are used often by tests or other keywords

Reply via email to