Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

  • Every spec file should intend to test one and only one business feature.  For example, new_user_registration, program_enrollment etc.  The description of the spec should be clearly mentioned.  This document should look like a feature documentation.
  • A spec file can contain multiple scenarios.  Each scenario represents a test case.
  • Each test step should convey an intent.  Do not write steps which are low level and that do not convey the business intent
    • On the login page - Is the wrong way as you are not conveying a specific intent
    • Login to the application with username "test" and password "1235" - Is the correct way
  • Each scenario execution should be independent of others.  i.e. every scenario should setup data, execute and tear down the test data.  It helps in running this multiple times without worrying about previous scenarios setting up data if any.  This loose coupling of scenarios helps in parallelizing the tests.
  • The scenarios should NOT depend on the data that is already available in the database unless it comes bundled with Bahmni installation.
  • Every spec and scenario should contain Tags.  This helps in executing specific scenarios (or specs) by tags.
  • The setting up of test data should be done using API calls.  OpenMRS has a very mature API for querying/updating the database.  We are relying on Unirest for posting the HTTP requests.  The APIs are part of BahmniRestClient which leverages the freemarker templates.
  • Do not use plain text passwords in the test specs.
  • Every Page classes should extend BahmniPage and expose the methods for performing a specific functionality.  These methods should have a business meaning.
    • LoginPage.login(username,password) - Is the correct way because login represents a valid business functionality
    • LoginPage.enterUsername() - Is the wrong way.  This can be a private convenience method.
  • Do not use Sleep (or wait) methods during execution waiting for pages to load.  Use synchronization.  Explicit Waits are fine.
  • The spec file should use snake case for the filenames.  The filename should outline the intent clearly.  The extension of the file name should be .spec.
  • The code quality of Bahmni Gauge will be tracked here in codacy.