Note:

If you want to create a new page for developers, you should create it on the Moodle Developer Resource site.

Behat: Difference between revisions

From MoodleDocs
No edit summary
No edit summary
Line 73: Line 73:
* Clone the Moodle features project: https://github.com/dmonllao/moodle-behat-features
* Clone the Moodle features project: https://github.com/dmonllao/moodle-behat-features
* Follow the [https://github.com/dmonllao/moodle-behat-features/blob/master/README.md README] instructions
* Follow the [https://github.com/dmonllao/moodle-behat-features/blob/master/README.md README] instructions
== Usage ==
* To test a feature type "bin/behat features/FEATURENAME.feature" from the clone directory
* If you want to execute the feature in a Selenium Grid2 you can specify another behat profile: "bin/behat --profile seleniumGrid2Firefox features/FEATURENAME.feature"


== Links ==  
== Links ==  

Revision as of 08:21, 10 August 2012

Note: This page is a work-in-progress. Feedback and suggested improvements are welcome. Please join the discussion on moodle.org or use the page comments.


Behat is a Behaviour Driven Development (BDD) framework, allows development and testing guided by steps to simulate users interaction.

This document is a work in progress (STABLE team week off project) and at the moment it should not be taken into account for nothing out of this scope nor nothing official.


Example

The expected behaviours are specified as scenarios.

Basic scenarios

   Scenario: Login as an existing user
     Given I am on "login/index.php"
     When I fill in "username" with "admin"
     And I fill in "password" with "moodle"
     And I press "loginbtn"
     Then I should see "Moodle 101: Course Name"
   Scenario: Login as an unexisting user
     Given I am on "login/index.php"
     When I fill in "username" with "adminasdasd"
     And I fill in "password" with "moodlesdfasdf"
     And I press "loginbtn"
     Then I should see "Invalid login, please try again"

Complex scenario

The aim of this project is to be able to define scenarios like this. Note the quoted strings are received as variables by the steps definitions which will process them.

 Scenario: A teacher adds a discussion
   Given I am logged as a "teacher"
   And I go to a course
   And I create a "forum" activity
   And I view the "forum" activity    # The step definition class will keep a reference to the lasts steps
   When I add a "forum_discussion" filling the fields "subject,message[text]" with "I'm the user subject,Dealing with \, split"    # Wrapper step, it will redirect the petition to a "forum_discussion" method
   Then I should see "Discussion"
   And I should see "Subject"
   And I should see "I'm the user subject"

In order to be able to process the "logged as a $roleshortname" or the "a course" statements the /behat.yml file should be filled with your own installation data

Contexts

Steps are processed in a step definition, which are defined in "context" classes.

The FeaturesContext class is split in different context to organize the steps definitions according to the Moodle components organization and to avoid having all of them in just one file.

  • FeaturesContext
    • A main class which extends BehatContext, the base class this is responsible of loading the contexts of all the Moodle components.
  • Sanpi/Behatch/Context
    • Behat extension with a lot of common actions like send REST petitions, store screenshots, DOM / XPath parsing
  • Moodle/Behat/Context
    • All the Moodle components
    • An abstract BaseContext class with helper methods, all the Moodle components should extend it
    • CoreContext
      • contains basic steps definitions like visit($url), pressButton($button) to manage the browser
      • The cross-component and the most common Moodle actions like iAmLoggedAsA($roleshortname) or aUserAssignedInContextOfContextlevel($roleshortname, $instanceid, $contextlevel) to speed up the creation of scenarios
    • CourseContext
    • ModForumContext
    • ...

Packages

There are two packages, one with the features files (scenarios like the above examples) and a package with Moodle contexts and steps definitions (PHP code to interact with selenium2). Only the features project is required since it manages all it's dependencies.

Requirements

  • PHP 5.3.1
  • PHPUnit
  • There are other packages and PHP settings requirements, but they be checked by the composer installer

Installation

Usage

  • To test a feature type "bin/behat features/FEATURENAME.feature" from the clone directory
  • If you want to execute the feature in a Selenium Grid2 you can specify another behat profile: "bin/behat --profile seleniumGrid2Firefox features/FEATURENAME.feature"

Links

Moodle features project

Moodle contexts repository