<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://docs.moodle.org/dev/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Esqueeze</id>
	<title>MoodleDocs - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://docs.moodle.org/dev/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Esqueeze"/>
	<link rel="alternate" type="text/html" href="https://docs.moodle.org/dev/Special:Contributions/Esqueeze"/>
	<updated>2026-08-12T01:32:06Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.43.5</generator>
	<entry>
		<id>https://docs.moodle.org/dev/index.php?title=Acceptance_testing&amp;diff=35840</id>
		<title>Acceptance testing</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/dev/index.php?title=Acceptance_testing&amp;diff=35840"/>
		<updated>2012-10-18T01:56:16Z</updated>

		<summary type="html">&lt;p&gt;Esqueeze: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Work in progress}}&lt;br /&gt;
&lt;br /&gt;
== Introduction ==&lt;br /&gt;
This page describes how we describe Moodle functionalities and how we automatically test all of this Moodle&#039;s functionalities.&lt;br /&gt;
&lt;br /&gt;
Behat is a behavioural driven development (BDD) tool written in PHP, it can parse a human-readable list of sentences (called steps) and execute actions in a browser using Selenium or other tools to simulate users interactions.&lt;br /&gt;
&lt;br /&gt;
(This is not in standard Moodle yet: to play a bit with it now clone https://github.com/moodlehq/moodle-behat-features and follow the installation and usage instructions.)&lt;br /&gt;
&lt;br /&gt;
=== How it works ===&lt;br /&gt;
Behat parses and executes features files which describes Moodle features (for example &#039;&#039;Post in a forum&#039;&#039;), each feature file is composed by many scenarios (for example &#039;&#039;Add a post to a discussion&#039;&#039; or &#039;&#039;Create a new discussion&#039;&#039;), and finally each scenario is composed by steps (for example  &#039;&#039;I press &amp;quot;Post to Forum&amp;quot;&#039;&#039; or &#039;&#039;I should see &amp;quot;My post title&amp;quot;&#039;&#039;). When the feature file is executed, every step internally is translated into an PHP method and is executed.&lt;br /&gt;
&lt;br /&gt;
This features are executed nightly in the HQ servers with all the supported databases (MySQL, PostgreSQL, MSSQL and Oracle) and with different browsers (Firefox, Internet Explorer, Safari and Chrome) to avoid regressions and test new functionalities.&lt;br /&gt;
&lt;br /&gt;
=== Examples ===&lt;br /&gt;
&lt;br /&gt;
* There is a closed list of steps to use in the features, a feature written with the basic (or low-level) steps looks like this:&lt;br /&gt;
  @auth&lt;br /&gt;
  &#039;&#039;&#039;Feature&#039;&#039;&#039;: Login&lt;br /&gt;
    In order to login&lt;br /&gt;
    As a moodle user&lt;br /&gt;
    I need to be able to validate the username and password against moodle&lt;br /&gt;
    &lt;br /&gt;
    &#039;&#039;&#039;Scenario&#039;&#039;&#039;: Login as an existing user&lt;br /&gt;
      Given I am on &amp;quot;login/index.php&amp;quot;&lt;br /&gt;
      When I fill in &amp;quot;username&amp;quot; with &amp;quot;admin&amp;quot;&lt;br /&gt;
      And I fill in &amp;quot;password&amp;quot; with &amp;quot;moodle&amp;quot;&lt;br /&gt;
      And I press &amp;quot;loginbtn&amp;quot;&lt;br /&gt;
      Then I should see &amp;quot;Moodle 101: Course Name&amp;quot;&lt;br /&gt;
    &lt;br /&gt;
    &#039;&#039;&#039;Scenario&#039;&#039;&#039;: Login as an unexisting user&lt;br /&gt;
      Given I am on &amp;quot;login/index.php&amp;quot;&lt;br /&gt;
      When I fill in &amp;quot;username&amp;quot; with &amp;quot;admin&amp;quot;&lt;br /&gt;
      And I fill in &amp;quot;password&amp;quot; with &amp;quot;moodle&amp;quot;&lt;br /&gt;
      And I press &amp;quot;loginbtn&amp;quot;&lt;br /&gt;
      Then I should see &amp;quot;Moodle 101: Course Name&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Note that The 3 sentences below &#039;&#039;Feature: Login&#039;&#039; are only information about what we want to test.&lt;br /&gt;
&lt;br /&gt;
These are simple scenarios, but most of Moodle functionalities would require a huge list of this steps to test a scenario, imagine a &#039;&#039;Add a post to a discussion&#039;&#039; scenario; you need to login, create a course, create a user and enrol it in the course... Most of this steps is not what we intend to test in a &#039;&#039;Post in a forum&#039;&#039; feature, Moodle provides extra steps to quickly set up the context required to test a Moodle feature, for example:&lt;br /&gt;
&lt;br /&gt;
  @mod_forum&lt;br /&gt;
  &#039;&#039;&#039;Feature&#039;&#039;&#039;: Post in a forum&lt;br /&gt;
    In order to add contents to a forum&lt;br /&gt;
    As a moodle user&lt;br /&gt;
    I need to be able to enter the contents and verify they are correctly shown&lt;br /&gt;
    &lt;br /&gt;
    &#039;&#039;&#039;Background&#039;&#039;&#039;:&lt;br /&gt;
      Given the following &amp;quot;courses&amp;quot; exists&lt;br /&gt;
        | fullname | shortname |&lt;br /&gt;
        | Course 1 | C1        |&lt;br /&gt;
      And the following &amp;quot;users&amp;quot; exists&lt;br /&gt;
        | username | firstname | lastname | email        |&lt;br /&gt;
        | student1 | First     | Student  | stu1@asd.com |&lt;br /&gt;
      And the following &amp;quot;enrolments&amp;quot; exists&lt;br /&gt;
        | username | courseshortname | enrolmenttype |&lt;br /&gt;
        | student1 | C1              | manual        |&lt;br /&gt;
    &lt;br /&gt;
    &#039;&#039;&#039;Scenario&#039;&#039;&#039;: Create a forum&lt;br /&gt;
      Given I loggin as an &amp;quot;admin&amp;quot;&lt;br /&gt;
      And I go to &amp;quot;Course 1&amp;quot; course&lt;br /&gt;
      And I add a &amp;quot;forum&amp;quot; to section &amp;quot;1&amp;quot;&lt;br /&gt;
      And I fill the form with&lt;br /&gt;
        | field_name        | value                          |&lt;br /&gt;
        | Forum name        | ForumTest1                     |&lt;br /&gt;
        | Forum description | Test description               |&lt;br /&gt;
        | Forum type        | Standard forum for general use |&lt;br /&gt;
        | Any other field   | Value                          |&lt;br /&gt;
      When I press &amp;quot;Save and display&amp;quot;&lt;br /&gt;
      Then I should see &amp;quot;Test1&amp;quot;&lt;br /&gt;
      And I should see &amp;quot;Add a new discussion topic&amp;quot;&lt;br /&gt;
    &lt;br /&gt;
    &#039;&#039;&#039;Scenario&#039;&#039;&#039;: Add a post to a discussion&lt;br /&gt;
      Given I run &amp;quot;Create a forum&amp;quot; scenario&lt;br /&gt;
      And I go to &amp;quot;Course 1&amp;quot; course&lt;br /&gt;
      And I follow &amp;quot;ForumTest1&amp;quot;&lt;br /&gt;
      When I press &amp;quot;Add a new discussion topic&amp;quot;&lt;br /&gt;
      And I fill the form with&lt;br /&gt;
        | Subject | test subject |&lt;br /&gt;
        | Message | message body |&lt;br /&gt;
      And I press &amp;quot;Post to forum&amp;quot;&lt;br /&gt;
      Then I should see &amp;quot;test subject&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Note that:&lt;br /&gt;
* Background is executed before each scenario execution&lt;br /&gt;
* Each scenario is executed in an isolated testing environment, so what you set up in an scenario (like the &#039;&#039;ForumTest1&#039;&#039; forum in the example above) is cleaned up after the scenario execution&lt;br /&gt;
* The prefixes &amp;quot;Given&amp;quot;, &amp;quot;When&amp;quot; and &amp;quot;Then&amp;quot; are only informative and they as used to define the context (Given), specify the action (When) and check the results (Then).&lt;br /&gt;
&lt;br /&gt;
== Requirements ==&lt;br /&gt;
* Selenium server (formerly the Selenium RC Server) You can download it from http://seleniumhq.org/download/ &lt;br /&gt;
* PHP 5.3.3&lt;br /&gt;
* PHPUnit&lt;br /&gt;
* There are other packages and PHP settings requirements, but they will be checked by the behat-moodle composer installer&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
* Set up your Moodle installation and initialize your PHPUnit environment https://docs.moodle.org/23/en/Installing_Moodle and https://docs.moodle.org/dev/PHPUnit&lt;br /&gt;
* Clone the behat-moodle project https://github.com/dmonllao/behat-moodle and follow the README https://github.com/dmonllao/behat-moodle/blob/master/README.md&lt;br /&gt;
* If you have not done it, in behat-moodle/ set the Moodle site URL and the path to the config.yml file (/PATH/TO/YOUR/MOODLEDATA/behat/config.yml) in your /behat.yml file&lt;br /&gt;
* In Moodle, set the &#039;behatpath&#039; setting pointing to your behat-moodle/ root (setting under Site Administration -&amp;gt; Server -&amp;gt; System paths)&lt;br /&gt;
&lt;br /&gt;
== Usage ==&lt;br /&gt;
* Run your Selenium server with &amp;quot;java -jar /path/to/your/selenium/server/selenium-server-standalone-2.NN.N.jar&amp;quot;&lt;br /&gt;
* Open another CLI and &amp;quot;cd /to/your/moodle/dirroot/&amp;quot;&lt;br /&gt;
* php admin/tool/behat/cli/util.php --buildconfigfile # Updates your config file with all Moodle components .feature files and steps definitions&lt;br /&gt;
* php admin/tool/behat/cli/util.php --runtests        # To run the whole list of tests, you can execute only a set of tests with --tags=&amp;quot;mod_forum&amp;quot; option or add extra behat commands with --extra=&amp;quot;--format junit --out /path/to/junit/reports&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== Writting features ==&lt;br /&gt;
* Select the most appropriate Moodle component to include your test and create a COMPONENTNAME/tests/behat/an_example.feature&lt;br /&gt;
* Write your scenarios checking the list of available steps to include (Site Administration -&amp;gt; Development -&amp;gt; Acceptance testing) and maintaining a correct indentation &lt;br /&gt;
* Run the tests, you can specify a tag in both the .feature file and the test runner to limit the executed tests.&lt;br /&gt;
&lt;br /&gt;
== Links == &lt;br /&gt;
Technical info: https://docs.moodle.org/dev/Behat_integration&lt;/div&gt;</summary>
		<author><name>Esqueeze</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/dev/index.php?title=Testing&amp;diff=35801</id>
		<title>Testing</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/dev/index.php?title=Testing&amp;diff=35801"/>
		<updated>2012-10-15T00:46:15Z</updated>

		<summary type="html">&lt;p&gt;Esqueeze: /* QA regression testing */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page is the top level page regarding all testing activities around the Moodle project.  Testing is essential to make sure that developed code does what it is meant to do, without causing new problems.&lt;br /&gt;
&lt;br /&gt;
==Manual testing==&lt;br /&gt;
&lt;br /&gt;
===Code testing===&lt;br /&gt;
&lt;br /&gt;
Code is tested as part of reviewing at some key parts of the [[Process|Moodle development process]].&lt;br /&gt;
&lt;br /&gt;
* Development - the developer of some code should test their own work on a wide variety of environments for correctness and performance&lt;br /&gt;
* Peer review - developers often test each others work early in the development process&lt;br /&gt;
* Integration reviews - Our integration team tests code weekly while they are evaluating suitability for integration into Moodle.&lt;br /&gt;
&lt;br /&gt;
===Integration functional testing===&lt;br /&gt;
&lt;br /&gt;
On Wednesday (all timezones) our Moodle HQ developers spend the day to manually test the functionality of all the issues that have been integrated that week. Where possible, developers submitting patches should first try to cover the testing required with unit tests and then with Behat behavioural tests. If neither of these are possible only then will manual testing be performed by the Moodle HQ developers.&lt;br /&gt;
&lt;br /&gt;
* [[Testing of integrated issues]]&lt;br /&gt;
&lt;br /&gt;
===QA regression testing===&lt;br /&gt;
&lt;br /&gt;
For versions up to 2.4 all the [[QA testing]] was conducted manually before each major release.  This process will soon be replaced by a combination of automated systems (see below) and a more lightweight manual user acceptance testing (UAT) cycle involving the Moodle community prior to release.&lt;br /&gt;
&lt;br /&gt;
* [[QA testing]]&lt;br /&gt;
&lt;br /&gt;
==Automated testing==&lt;br /&gt;
&lt;br /&gt;
===Unit tests===&lt;br /&gt;
&lt;br /&gt;
Moodle 2.3 and later fully supports PHPUnit tests as part of the code.  These are automated tests of very low-level code functionality that a developer should write as part of any new code.&lt;br /&gt;
&lt;br /&gt;
* [[PHPUnit_integration]]&lt;br /&gt;
&lt;br /&gt;
===Continuous integration testing===&lt;br /&gt;
&lt;br /&gt;
As soon as code is added to the integration repository, our continuous integration server tests the new code for:&lt;br /&gt;
&lt;br /&gt;
* Coding guidelines&lt;br /&gt;
* PHPUnit tests&lt;br /&gt;
* SimpleTest unit tests on older versions of Moodle&lt;br /&gt;
* Detect unresolved merge conflicts&lt;br /&gt;
* Compare databases upgraded from previous versions&lt;br /&gt;
* Check the version.php is correct&lt;br /&gt;
&lt;br /&gt;
A failure here notifies the integrators that the build has failed.&lt;br /&gt;
&lt;br /&gt;
===QA regression testing===&lt;br /&gt;
&lt;br /&gt;
Every week an automated build and test server runs a large number of tests on key functions in Moodle to make sure everything still works and that some new fix in Moodle hasn&#039;t caused problems elsewhere.&lt;br /&gt;
&lt;br /&gt;
These tests must pass completely before a release can be made.&lt;br /&gt;
&lt;br /&gt;
* [https://docs.moodle.org/dev/Behat Selenium based functional testing using the Behat framework]&lt;br /&gt;
* Performance testing using JMeter.&lt;/div&gt;</summary>
		<author><name>Esqueeze</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/dev/index.php?title=Testing&amp;diff=35800</id>
		<title>Testing</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/dev/index.php?title=Testing&amp;diff=35800"/>
		<updated>2012-10-15T00:45:27Z</updated>

		<summary type="html">&lt;p&gt;Esqueeze: /* Integration functional testing */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page is the top level page regarding all testing activities around the Moodle project.  Testing is essential to make sure that developed code does what it is meant to do, without causing new problems.&lt;br /&gt;
&lt;br /&gt;
==Manual testing==&lt;br /&gt;
&lt;br /&gt;
===Code testing===&lt;br /&gt;
&lt;br /&gt;
Code is tested as part of reviewing at some key parts of the [[Process|Moodle development process]].&lt;br /&gt;
&lt;br /&gt;
* Development - the developer of some code should test their own work on a wide variety of environments for correctness and performance&lt;br /&gt;
* Peer review - developers often test each others work early in the development process&lt;br /&gt;
* Integration reviews - Our integration team tests code weekly while they are evaluating suitability for integration into Moodle.&lt;br /&gt;
&lt;br /&gt;
===Integration functional testing===&lt;br /&gt;
&lt;br /&gt;
On Wednesday (all timezones) our Moodle HQ developers spend the day to manually test the functionality of all the issues that have been integrated that week. Where possible, developers submitting patches should first try to cover the testing required with unit tests and then with Behat behavioural tests. If neither of these are possible only then will manual testing be performed by the Moodle HQ developers.&lt;br /&gt;
&lt;br /&gt;
* [[Testing of integrated issues]]&lt;br /&gt;
&lt;br /&gt;
===QA regression testing===&lt;br /&gt;
&lt;br /&gt;
For versions up to 2.4 all the [[QA testing]] was conducted manually before each major release.  This process will soon be replaced by a combination of automated systems (see below) and a more lightweight manual user acceptance testing cycle involving the Moodle community prior to release.&lt;br /&gt;
&lt;br /&gt;
* [[QA testing]]&lt;br /&gt;
&lt;br /&gt;
==Automated testing==&lt;br /&gt;
&lt;br /&gt;
===Unit tests===&lt;br /&gt;
&lt;br /&gt;
Moodle 2.3 and later fully supports PHPUnit tests as part of the code.  These are automated tests of very low-level code functionality that a developer should write as part of any new code.&lt;br /&gt;
&lt;br /&gt;
* [[PHPUnit_integration]]&lt;br /&gt;
&lt;br /&gt;
===Continuous integration testing===&lt;br /&gt;
&lt;br /&gt;
As soon as code is added to the integration repository, our continuous integration server tests the new code for:&lt;br /&gt;
&lt;br /&gt;
* Coding guidelines&lt;br /&gt;
* PHPUnit tests&lt;br /&gt;
* SimpleTest unit tests on older versions of Moodle&lt;br /&gt;
* Detect unresolved merge conflicts&lt;br /&gt;
* Compare databases upgraded from previous versions&lt;br /&gt;
* Check the version.php is correct&lt;br /&gt;
&lt;br /&gt;
A failure here notifies the integrators that the build has failed.&lt;br /&gt;
&lt;br /&gt;
===QA regression testing===&lt;br /&gt;
&lt;br /&gt;
Every week an automated build and test server runs a large number of tests on key functions in Moodle to make sure everything still works and that some new fix in Moodle hasn&#039;t caused problems elsewhere.&lt;br /&gt;
&lt;br /&gt;
These tests must pass completely before a release can be made.&lt;br /&gt;
&lt;br /&gt;
* [https://docs.moodle.org/dev/Behat Selenium based functional testing using the Behat framework]&lt;br /&gt;
* Performance testing using JMeter.&lt;/div&gt;</summary>
		<author><name>Esqueeze</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/dev/index.php?title=Testing&amp;diff=35799</id>
		<title>Testing</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/dev/index.php?title=Testing&amp;diff=35799"/>
		<updated>2012-10-15T00:42:37Z</updated>

		<summary type="html">&lt;p&gt;Esqueeze: /* QA regression testing */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page is the top level page regarding all testing activities around the Moodle project.  Testing is essential to make sure that developed code does what it is meant to do, without causing new problems.&lt;br /&gt;
&lt;br /&gt;
==Manual testing==&lt;br /&gt;
&lt;br /&gt;
===Code testing===&lt;br /&gt;
&lt;br /&gt;
Code is tested as part of reviewing at some key parts of the [[Process|Moodle development process]].&lt;br /&gt;
&lt;br /&gt;
* Development - the developer of some code should test their own work on a wide variety of environments for correctness and performance&lt;br /&gt;
* Peer review - developers often test each others work early in the development process&lt;br /&gt;
* Integration reviews - Our integration team tests code weekly while they are evaluating suitability for integration into Moodle.&lt;br /&gt;
&lt;br /&gt;
===Integration functional testing===&lt;br /&gt;
&lt;br /&gt;
On Wednesday (all timezones) our Moodle HQ developers spend the day to manually test the functionality of all the issues that have been integrated that week.&lt;br /&gt;
&lt;br /&gt;
* [[Testing of integrated issues]]&lt;br /&gt;
&lt;br /&gt;
===QA regression testing===&lt;br /&gt;
&lt;br /&gt;
For versions up to 2.4 all the [[QA testing]] was conducted manually before each major release.  This process will soon be replaced by a combination of automated systems (see below) and a more lightweight manual user acceptance testing cycle involving the Moodle community prior to release.&lt;br /&gt;
&lt;br /&gt;
* [[QA testing]]&lt;br /&gt;
&lt;br /&gt;
==Automated testing==&lt;br /&gt;
&lt;br /&gt;
===Unit tests===&lt;br /&gt;
&lt;br /&gt;
Moodle 2.3 and later fully supports PHPUnit tests as part of the code.  These are automated tests of very low-level code functionality that a developer should write as part of any new code.&lt;br /&gt;
&lt;br /&gt;
* [[PHPUnit_integration]]&lt;br /&gt;
&lt;br /&gt;
===Continuous integration testing===&lt;br /&gt;
&lt;br /&gt;
As soon as code is added to the integration repository, our continuous integration server tests the new code for:&lt;br /&gt;
&lt;br /&gt;
* Coding guidelines&lt;br /&gt;
* PHPUnit tests&lt;br /&gt;
* SimpleTest unit tests on older versions of Moodle&lt;br /&gt;
* Detect unresolved merge conflicts&lt;br /&gt;
* Compare databases upgraded from previous versions&lt;br /&gt;
* Check the version.php is correct&lt;br /&gt;
&lt;br /&gt;
A failure here notifies the integrators that the build has failed.&lt;br /&gt;
&lt;br /&gt;
===QA regression testing===&lt;br /&gt;
&lt;br /&gt;
Every week an automated build and test server runs a large number of tests on key functions in Moodle to make sure everything still works and that some new fix in Moodle hasn&#039;t caused problems elsewhere.&lt;br /&gt;
&lt;br /&gt;
These tests must pass completely before a release can be made.&lt;br /&gt;
&lt;br /&gt;
* [https://docs.moodle.org/dev/Behat Selenium based functional testing using the Behat framework]&lt;br /&gt;
* Performance testing using JMeter.&lt;/div&gt;</summary>
		<author><name>Esqueeze</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/dev/index.php?title=Testing&amp;diff=35744</id>
		<title>Testing</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/dev/index.php?title=Testing&amp;diff=35744"/>
		<updated>2012-10-04T03:03:56Z</updated>

		<summary type="html">&lt;p&gt;Esqueeze: /* QA regression testing (AUTOMATED) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page is the top level page regarding all testing activities around the Moodle project.  Testing is essential to make sure that developed code does what it is meant to do, without causing new problems.&lt;br /&gt;
&lt;br /&gt;
==Unit tests (AUTOMATED)==&lt;br /&gt;
&lt;br /&gt;
Moodle 2.3 and later fully supports PHPUnit tests as part of the code.  These are automated tests of very low-level code functionality that a developer should write as part of any new code.&lt;br /&gt;
&lt;br /&gt;
* [[PHPUnit_integration]]&lt;br /&gt;
&lt;br /&gt;
==Code testing (MANUAL)==&lt;br /&gt;
&lt;br /&gt;
Code is tested as part of reviewing at some key parts of the [[Process|Moodle development process]].&lt;br /&gt;
&lt;br /&gt;
* Development - the developer of some code should test their own work on a wide variety of environments for correctness and performance&lt;br /&gt;
* Peer review - developers often test each others work early in the development process&lt;br /&gt;
* Integration reviews - Our integration team tests code weekly while they are evaluating suitability for integration into Moodle.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Continuous integration testing (AUTOMATED)==&lt;br /&gt;
&lt;br /&gt;
As soon as code is added to the integration repository, our continuous integration server tests the new code for:&lt;br /&gt;
&lt;br /&gt;
* Coding guidelines&lt;br /&gt;
* PHPUnit tests&lt;br /&gt;
* SimpleTest unit tests on older versions of Moodle&lt;br /&gt;
* Detect unresolved merge conflicts&lt;br /&gt;
* Compare databases upgraded from previous versions&lt;br /&gt;
* Check the version.php is correct&lt;br /&gt;
&lt;br /&gt;
A failure here notifies the integrators that the build has failed.&lt;br /&gt;
&lt;br /&gt;
==Integration functional testing (MANUAL)==&lt;br /&gt;
&lt;br /&gt;
On Wednesday (all timezones) our Moodle HQ developers spend the day to manually test the functionality of all the issues that have been integrated that week.&lt;br /&gt;
&lt;br /&gt;
* [[Testing of integrated issues]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==QA regression testing (AUTOMATED)==&lt;br /&gt;
&lt;br /&gt;
Every week an automated build and test server runs a large number of tests on key functions in Moodle to make sure everything still works and that some new fix in Moodle hasn&#039;t caused problems elsewhere.&lt;br /&gt;
&lt;br /&gt;
These tests must pass completely before a release can be made.&lt;br /&gt;
&lt;br /&gt;
* [https://docs.moodle.org/dev/Behat Selenium based functional testing using the Behat framework]&lt;br /&gt;
* Performance testing using JMeter.&lt;br /&gt;
&lt;br /&gt;
==QA regression testing (MANUAL)==&lt;br /&gt;
&lt;br /&gt;
For past versions all the [[QA testing]] was conducted manually before each major release.  This process will soon be replaced by the above automated systems.&lt;br /&gt;
&lt;br /&gt;
* [[QA testing]]&lt;/div&gt;</summary>
		<author><name>Esqueeze</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/dev/index.php?title=Testing&amp;diff=35743</id>
		<title>Testing</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/dev/index.php?title=Testing&amp;diff=35743"/>
		<updated>2012-10-04T03:00:44Z</updated>

		<summary type="html">&lt;p&gt;Esqueeze: /* QA regression testing (AUTOMATED) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page is the top level page regarding all testing activities around the Moodle project.  Testing is essential to make sure that developed code does what it is meant to do, without causing new problems.&lt;br /&gt;
&lt;br /&gt;
==Unit tests (AUTOMATED)==&lt;br /&gt;
&lt;br /&gt;
Moodle 2.3 and later fully supports PHPUnit tests as part of the code.  These are automated tests of very low-level code functionality that a developer should write as part of any new code.&lt;br /&gt;
&lt;br /&gt;
* [[PHPUnit_integration]]&lt;br /&gt;
&lt;br /&gt;
==Code testing (MANUAL)==&lt;br /&gt;
&lt;br /&gt;
Code is tested as part of reviewing at some key parts of the [[Process|Moodle development process]].&lt;br /&gt;
&lt;br /&gt;
* Development - the developer of some code should test their own work on a wide variety of environments for correctness and performance&lt;br /&gt;
* Peer review - developers often test each others work early in the development process&lt;br /&gt;
* Integration reviews - Our integration team tests code weekly while they are evaluating suitability for integration into Moodle.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Continuous integration testing (AUTOMATED)==&lt;br /&gt;
&lt;br /&gt;
As soon as code is added to the integration repository, our continuous integration server tests the new code for:&lt;br /&gt;
&lt;br /&gt;
* Coding guidelines&lt;br /&gt;
* PHPUnit tests&lt;br /&gt;
* SimpleTest unit tests on older versions of Moodle&lt;br /&gt;
* Detect unresolved merge conflicts&lt;br /&gt;
* Compare databases upgraded from previous versions&lt;br /&gt;
* Check the version.php is correct&lt;br /&gt;
&lt;br /&gt;
A failure here notifies the integrators that the build has failed.&lt;br /&gt;
&lt;br /&gt;
==Integration functional testing (MANUAL)==&lt;br /&gt;
&lt;br /&gt;
On Wednesday (all timezones) our Moodle HQ developers spend the day to manually test the functionality of all the issues that have been integrated that week.&lt;br /&gt;
&lt;br /&gt;
* [[Testing of integrated issues]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==QA regression testing (AUTOMATED)==&lt;br /&gt;
&lt;br /&gt;
Every week an automated Selenium-based system tests a large number of key functions in Moodle to make sure everything still works and that some new fix in Moodle hasn&#039;t caused problems elsewhere.&lt;br /&gt;
&lt;br /&gt;
This test must pass completely before a release can be made.&lt;br /&gt;
&lt;br /&gt;
* [https://docs.moodle.org/dev/Behat Functional testing]&lt;br /&gt;
* Performance testing&lt;br /&gt;
&lt;br /&gt;
==QA regression testing (MANUAL)==&lt;br /&gt;
&lt;br /&gt;
For past versions all the [[QA testing]] was conducted manually before each major release.  This process will soon be replaced by the above automated systems.&lt;br /&gt;
&lt;br /&gt;
* [[QA testing]]&lt;/div&gt;</summary>
		<author><name>Esqueeze</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/dev/index.php?title=Testing&amp;diff=35742</id>
		<title>Testing</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/dev/index.php?title=Testing&amp;diff=35742"/>
		<updated>2012-10-04T02:57:58Z</updated>

		<summary type="html">&lt;p&gt;Esqueeze: /* Continuous integration testing (AUTOMATED) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page is the top level page regarding all testing activities around the Moodle project.  Testing is essential to make sure that developed code does what it is meant to do, without causing new problems.&lt;br /&gt;
&lt;br /&gt;
==Unit tests (AUTOMATED)==&lt;br /&gt;
&lt;br /&gt;
Moodle 2.3 and later fully supports PHPUnit tests as part of the code.  These are automated tests of very low-level code functionality that a developer should write as part of any new code.&lt;br /&gt;
&lt;br /&gt;
* [[PHPUnit_integration]]&lt;br /&gt;
&lt;br /&gt;
==Code testing (MANUAL)==&lt;br /&gt;
&lt;br /&gt;
Code is tested as part of reviewing at some key parts of the [[Process|Moodle development process]].&lt;br /&gt;
&lt;br /&gt;
* Development - the developer of some code should test their own work on a wide variety of environments for correctness and performance&lt;br /&gt;
* Peer review - developers often test each others work early in the development process&lt;br /&gt;
* Integration reviews - Our integration team tests code weekly while they are evaluating suitability for integration into Moodle.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Continuous integration testing (AUTOMATED)==&lt;br /&gt;
&lt;br /&gt;
As soon as code is added to the integration repository, our continuous integration server tests the new code for:&lt;br /&gt;
&lt;br /&gt;
* Coding guidelines&lt;br /&gt;
* PHPUnit tests&lt;br /&gt;
* SimpleTest unit tests on older versions of Moodle&lt;br /&gt;
* Detect unresolved merge conflicts&lt;br /&gt;
* Compare databases upgraded from previous versions&lt;br /&gt;
* Check the version.php is correct&lt;br /&gt;
&lt;br /&gt;
A failure here notifies the integrators that the build has failed.&lt;br /&gt;
&lt;br /&gt;
==Integration functional testing (MANUAL)==&lt;br /&gt;
&lt;br /&gt;
On Wednesday (all timezones) our Moodle HQ developers spend the day to manually test the functionality of all the issues that have been integrated that week.&lt;br /&gt;
&lt;br /&gt;
* [[Testing of integrated issues]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==QA regression testing (AUTOMATED)==&lt;br /&gt;
&lt;br /&gt;
Every week an automated Selenium-based system tests a large number of key functions in Moodle to make sure everything still works and that some new fix in Moodle hasn&#039;t caused problems elsewhere.&lt;br /&gt;
&lt;br /&gt;
This test must pass completely before a release can be made.&lt;br /&gt;
&lt;br /&gt;
* Functional testing&lt;br /&gt;
* Performance testing&lt;br /&gt;
&lt;br /&gt;
==QA regression testing (MANUAL)==&lt;br /&gt;
&lt;br /&gt;
For past versions all the [[QA testing]] was conducted manually before each major release.  This process will soon be replaced by the above automated systems.&lt;br /&gt;
&lt;br /&gt;
* [[QA testing]]&lt;/div&gt;</summary>
		<author><name>Esqueeze</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/dev/index.php?title=2.4_Test_Plan&amp;diff=35635</id>
		<title>2.4 Test Plan</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/dev/index.php?title=2.4_Test_Plan&amp;diff=35635"/>
		<updated>2012-09-24T02:28:58Z</updated>

		<summary type="html">&lt;p&gt;Esqueeze: /* Risks */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=General Aim=&lt;br /&gt;
The general aim of testing applied to Moodle 2.4 is to provide early feedback and critique to developers about the system under test. This in turn will hopefully mitigate the bulk of issues earlier in the release cycle than Moodle QA. It may also increase flexibility and mitigate the risk posed by changing requirements; thus allowing requirements to change if necessary with the minimum of impact on the delivery of the project.&lt;br /&gt;
&lt;br /&gt;
=Testing Applied to the Roadmap=&lt;br /&gt;
Suitable testing methods will be applied to the tracker issues in the roadmap for 2.4. Testing will be performed as features are implemented throughout the integration process. This includes pulling testable versions of Moodle from developers local branches and prototypes.&lt;br /&gt;
&lt;br /&gt;
==Unit Testing==&lt;br /&gt;
PHP Unit tests will be provided where applicable(tba) and scheduled to run using the [http://integrationci.test.local:8080 CI Server].&lt;br /&gt;
&lt;br /&gt;
==Feature Comparison Testing==&lt;br /&gt;
Feature Comparison testing of MDL-21538 and MDL-31830 will take place at regular intervals during implementation. These tracker issues involve completely replacing existing Moodle plugins/features. The purpose of this testing is to ensure that no features are lost during implementation i.e. when implemented the features/plugins being implemented retain all of the functionality of what they are replacing without prior agreement otherwise.&lt;br /&gt;
&lt;br /&gt;
The testing will provide a critique of the changes and the method used to test will be in the form of session based testing.&lt;br /&gt;
&lt;br /&gt;
==Usability Testing==&lt;br /&gt;
MOBILE-153, MDL-34080 and MDL-31830 require usability testing. The method to be used for this is persona based testing. This involves creating a number of personas of potential users of these features and then running exploratory tests role playing as these users. e.g. a study at home single mum or a super geek who knows everything about everything and highly critical of Moodle. Persona testing will take place regularly during the implementation of 2.4.&lt;br /&gt;
&lt;br /&gt;
==Session Based Exploratory Testing==&lt;br /&gt;
In Moodle QA Cycle 2 for Moodle 2.3 the Moodle HQ team took part in session based testing. Session based exploratory testing will take place at regular intervals for MDL-31830, MDL-21538, MDL-16660, MDL-34086 and MOBILE-153. Test sessions will be 1 hour long and of limited scope.&lt;br /&gt;
&lt;br /&gt;
==Installability Testing==&lt;br /&gt;
MDL-34086 tackles upgrading from version 1.9 to 2.2 of Moodle. Selenium tests can be created to automate the upgrade part of this testing and some sanity testing of the application after the upgrade. This will be done in conjunction with session based testing.&lt;br /&gt;
&lt;br /&gt;
==Performance Testing==&lt;br /&gt;
MDL-25290 aims to improve the performance of Moodle. A performance comparison of Moodle 2.3 to Moodle 2.4 will critique theses changes. This testing will be automated so the early involvement of the Moodle HQ sysadmin is required to ensure the correct monitors and testing tools are implemented.&lt;br /&gt;
&lt;br /&gt;
=Test Tools=&lt;br /&gt;
&lt;br /&gt;
==Test Automation==&lt;br /&gt;
===Selenium Grid===&lt;br /&gt;
Moodle have access to automated functional regression and browser interoperability testing via Selenium WebDriver. To execute these tests the following is requred:&lt;br /&gt;
# A GIT repository for the test and test harness application.&lt;br /&gt;
# A CI server to schedule tests and report results.&lt;br /&gt;
# Server VMs to host webservers and databases of the supported types.&lt;br /&gt;
# Client VM&#039;s to support supported client operating systems and browsers.&lt;br /&gt;
&lt;br /&gt;
There is currently no suitable method of executing these tests as point 4 remains unimplemented.&lt;br /&gt;
&lt;br /&gt;
===JMeter===&lt;br /&gt;
Sam Hemelryk has developed a performance test monitor web application based upon JMeter, this can be used to monitor performance.&lt;br /&gt;
&lt;br /&gt;
===PHPUnit===&lt;br /&gt;
Moodle unit tests are written using the PHPUnit framework.&lt;br /&gt;
&lt;br /&gt;
===Miscellaneous===&lt;br /&gt;
Additional monitors may be required to measure the performance of the system.&lt;br /&gt;
&lt;br /&gt;
==Test Management==&lt;br /&gt;
===Dedicated Test Management Plugin for Jira===&lt;br /&gt;
In the past Moodle tracker has been used to manage test cases and test runs. Jira is not a test management tool and using it as such increases the documentation overhead for any scripted testing. Replacements are currently being evaluated.&lt;br /&gt;
&lt;br /&gt;
===Bonfire===&lt;br /&gt;
The Bonfire Jira plugin was successfully used to run session based testing for Moodle 2.3. This will be used to manage and report upon exploratory test sessions during 2.4 testing.&lt;br /&gt;
&lt;br /&gt;
=Moodle 2.4 QA=&lt;br /&gt;
Moodle 2.4 QA will go ahead as usual and the current test cases will need to be reviewed and updated as required. It will be possible, with a dedicated test management tool that supports test runs to remove some test cases for things such as browser interoperability and testing specific test environments.&lt;br /&gt;
&lt;br /&gt;
The aim of Moodle 2.4 QA will be to put a gold stamp from the Moodle community on the release, to receive critique from our users and involve the Moodle community in product developement. The aim of the other methods of testing documented here is to take the burden of issue finding off the QA process late in the developement cycle.&lt;br /&gt;
&lt;br /&gt;
Early and consistent promotion of Moodle QA and personal contact with existing Moodle QA testers will facilitate wider involvement in Moodle QA.&lt;br /&gt;
&lt;br /&gt;
=Risks=&lt;br /&gt;
==Change of requirements==&lt;br /&gt;
Having a lightweight, flexible, early testing process will mitigate the risk posed by changes to requirements.&lt;br /&gt;
&lt;br /&gt;
==No Replacement Test Management Tool is Found==&lt;br /&gt;
If this happens we can continue to use the existing tools.&lt;/div&gt;</summary>
		<author><name>Esqueeze</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/dev/index.php?title=Peer_reviewing&amp;diff=35565</id>
		<title>Peer reviewing</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/dev/index.php?title=Peer_reviewing&amp;diff=35565"/>
		<updated>2012-09-14T07:02:18Z</updated>

		<summary type="html">&lt;p&gt;Esqueeze: /* Testing */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;These are points to consider while peer-reviewing issues. They can also be applied when solving issues, to reduce the likelihood of problems during peer-review and integration.&lt;br /&gt;
&lt;br /&gt;
=The checklist=&lt;br /&gt;
&lt;br /&gt;
==Syntax==&lt;br /&gt;
To allow the community of Moodle developers to work together, conventions should be followed.&lt;br /&gt;
&lt;br /&gt;
* The code is easy to understand and, where it isn&#039;t, comments have been provided.&lt;br /&gt;
* Variables are named correctly (all lower case, no camel-case, no underscores).&lt;br /&gt;
* Functions are named correctly (all lower case, no camel-case, underscores allowed).&lt;br /&gt;
* PHP DocBlocks have been updated and adhere to [[Coding_style#Documentation_and_comments|coding style guide]].&lt;br /&gt;
* Where functions are being removed, the [[Deprecation]] process is followed.&lt;br /&gt;
* The code doesn&#039;t use [[Deprecated_functions_in_2.0|deprecated functions]].&lt;br /&gt;
* $_GET, $_POST, $_REQUEST, $_COOKIE, and $_SESSION are never used.&lt;br /&gt;
&lt;br /&gt;
See the [[Coding style]] guide for details.&lt;br /&gt;
&lt;br /&gt;
==Whitespace==&lt;br /&gt;
Unnecessary whitespace changes can cause conflicts when committing code.&lt;br /&gt;
&lt;br /&gt;
Ensure that:&lt;br /&gt;
* there are no unnecessary blank lines in the new code;&lt;br /&gt;
* blank lines do not contain spaces;&lt;br /&gt;
* there are no unnecessary changes to whitespace in other areas on the file;&lt;br /&gt;
&lt;br /&gt;
==Output==&lt;br /&gt;
Output needs to be controlled by renderers to achieve consistency and correct application of themes.&lt;br /&gt;
&lt;br /&gt;
Ensure that:&lt;br /&gt;
* output renders are used to generate output strings, including HTML tags;&lt;br /&gt;
* HTML output is valid XHTML;&lt;br /&gt;
* no inline styles have been used in HTML output (everything has to be in CSS);&lt;br /&gt;
* CSS has been added to the appropriate CSS files (base, specific area, sometimes canvas); and&lt;br /&gt;
* the code doesn&#039;t use buffered output unless absolutely necessary.&lt;br /&gt;
&lt;br /&gt;
feedback any notices (E_STRICT, etc) seen into the MDL.&lt;br /&gt;
&lt;br /&gt;
==Language==&lt;br /&gt;
To achieve appropriate internationalisation of Moodle, language strings must be managed correctly.&lt;br /&gt;
&lt;br /&gt;
Ensure that:&lt;br /&gt;
* new language strings are named correctly (all lower case, no camel-case, underscores are permissible in some cases);&lt;br /&gt;
* language strings are used instead of hard-coded strings for text output;&lt;br /&gt;
* language strings have not been removed or renamed in stable branches (permitted only in master); and&lt;br /&gt;
* AMOS commands have been specified when moving, copying, or deleting language strings.&lt;br /&gt;
&lt;br /&gt;
==Databases==&lt;br /&gt;
DB calls are the greatest performance bottleneck in Moodle.&lt;br /&gt;
&lt;br /&gt;
If there is SQL code you can test quickly then do so. &lt;br /&gt;
&lt;br /&gt;
Ensure that:&lt;br /&gt;
* there are minimal DB calls (no excessive use of the DB); and&lt;br /&gt;
* the code uses SQL compatible with all the supported DB engines (check all selected fields appear in an &#039;order by&#039; clause).&lt;br /&gt;
&lt;br /&gt;
==Testing==&lt;br /&gt;
All code must be tested before integration. If testing instructions are insufficient, it&#039;s likely to cause more work down the track.&lt;br /&gt;
&lt;br /&gt;
Ensure that:&lt;br /&gt;
* there are specific testing instructions that state how, as well as what, to test. Please ensure that the testing instructions are in the correct format: [https://docs.moodle.org/dev/Behat Behat gherkin];&lt;br /&gt;
* new unit tests have been added when there is a change in functionality; and&lt;br /&gt;
* unit tests pass for related areas where changes have been made.&lt;br /&gt;
&lt;br /&gt;
==Security==&lt;br /&gt;
The user community relies on Moodle being responsibly secure.&lt;br /&gt;
&lt;br /&gt;
Ensure that:&lt;br /&gt;
* User login is checked where an identity is needed;&lt;br /&gt;
* Sesskey values are checked before all write actions where appropriate (some read actions as well); and&lt;br /&gt;
* Capabilities are checked where roles differ.&lt;br /&gt;
&lt;br /&gt;
==Documentation==&lt;br /&gt;
Work does not stop when code is integrated.&lt;br /&gt;
&lt;br /&gt;
Ensure that:&lt;br /&gt;
* Appropriate [[Tracker_issue_labels|labels]] have been added when there has been a function change, particularly&lt;br /&gt;
** qa_test_required (significant functional change),&lt;br /&gt;
** docs_required (any functional change, usually paired with ui_change),&lt;br /&gt;
** dev_docs_required (any change to APIs, usually paired with api_chage),&lt;br /&gt;
** ui_change (any functional change, usually paired with docs_required, except ui_change remains permanetly), and&lt;br /&gt;
** api_change (any change to APIs that devs will need to know about, usually paired with dev_docs_required, except api_change remains permanetly).&lt;br /&gt;
&lt;br /&gt;
==Git==&lt;br /&gt;
Ensure that:&lt;br /&gt;
* the commit message includes the tracker issue number and the component (ideal format is &amp;lt;code&amp;gt;MDL-xxxx Component Commit message&amp;lt;/code&amp;gt;);&lt;br /&gt;
* the Git history is clean and the work has been rebased to minimal commits; and&lt;br /&gt;
* the original author of the work provided as a patch has been given credit within the commit (as author of in the commit message if changes were made).&lt;br /&gt;
&lt;br /&gt;
==Misc==&lt;br /&gt;
Ensure that:&lt;br /&gt;
* the code seems to solve the described problem completely (or that further issues have been created to resolve remaining parts);&lt;br /&gt;
* the code makes sense in relation to the broader codebase (look at the whole function, not just the altered code); and&lt;br /&gt;
* the developer has searched for and fixed other areas that may also have been affected.&lt;br /&gt;
&lt;br /&gt;
=See Also=&lt;br /&gt;
* [http://moodle.org/plugins/view.php?plugin=local_codechecker Code checker plugin]&lt;/div&gt;</summary>
		<author><name>Esqueeze</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/dev/index.php?title=Testing_strategy&amp;diff=35560</id>
		<title>Testing strategy</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/dev/index.php?title=Testing_strategy&amp;diff=35560"/>
		<updated>2012-09-14T06:45:24Z</updated>

		<summary type="html">&lt;p&gt;Esqueeze: /* Purpose */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Work in progress}}&lt;br /&gt;
=Introduction=&lt;br /&gt;
==Purpose==&lt;br /&gt;
The purpose of this document is to define a high level QA strategy&lt;br /&gt;
at Moodle and communicate that process to the relevant stakeholders.&lt;br /&gt;
&lt;br /&gt;
This document is test centric, only explaining the development&lt;br /&gt;
process from a testing point of view. The scope of this document does&lt;br /&gt;
not cover the details of the entire development process at Moodle but&lt;br /&gt;
how testing is applied to it. This document also discusses potential&lt;br /&gt;
benefits to the organization of the processes discussed.&lt;br /&gt;
Currently the processes that are documented here are under development. Progress can be viewed via the [https://docs.moodle.org/dev/Testing_Roadmap Testing Roadmap]&lt;br /&gt;
&lt;br /&gt;
==Scope==&lt;br /&gt;
This document encompasses all testing activities at Moodle and how they will be performed. This includes:&lt;br /&gt;
&lt;br /&gt;
* [https://docs.moodle.org/dev/Testing_strategy/Testing_Methodology_At_Moodle Testing Methodology at Moodle]&lt;br /&gt;
* [https://docs.moodle.org/dev/Testing_strategy/The_Moodle_Testing_Process The Moodle Testing Process]&lt;br /&gt;
* [https://docs.moodle.org/dev/Testing_strategy/Hardware_Requirements Hardware requirements]&lt;br /&gt;
* [https://docs.moodle.org/dev/Testing_strategy/Testing_Tools_and_Their_Use Testing Tools and Their Use]&lt;br /&gt;
* [https://docs.moodle.org/dev/Testing_strategy/Test_Automation_Process Test Automation Process]&lt;br /&gt;
* [https://docs.moodle.org/dev/Testing_strategy/Test_Environments Test Environments]&lt;br /&gt;
* [https://docs.moodle.org/dev/Testing_strategy/Useful_Resources Useful Resources]&lt;/div&gt;</summary>
		<author><name>Esqueeze</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/dev/index.php?title=Testing_strategy/The_Moodle_Testing_Process&amp;diff=35559</id>
		<title>Testing strategy/The Moodle Testing Process</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/dev/index.php?title=Testing_strategy/The_Moodle_Testing_Process&amp;diff=35559"/>
		<updated>2012-09-14T06:43:38Z</updated>

		<summary type="html">&lt;p&gt;Esqueeze: /* Major Releases and New Development */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Work in progress}}&lt;br /&gt;
=Methodologies in the Moodle Development Process=&lt;br /&gt;
Moodle has an established process for developing and integrating software. This section describes relevant testing methodology within the existing process.&lt;br /&gt;
The full [https://docs.moodle.org/dev/Process development]&lt;br /&gt;
life-cycle at Moodle is documented in detail [https://docs.moodle.org/dev/Releases#General_release_calendar elsewhere].&lt;br /&gt;
Moodle is currently developed using Agile methodologies including&lt;br /&gt;
Scrum. The following stages of development take place within this&lt;br /&gt;
life-cycle:&lt;br /&gt;
&lt;br /&gt;
* Weekly integration cycle&lt;br /&gt;
* 3-weekly stable sprints&lt;br /&gt;
* 6-monthly major releases&lt;br /&gt;
* 3 minor releases between every major release&lt;br /&gt;
&lt;br /&gt;
==Weekly (Continuous) Integration Cycle==&lt;br /&gt;
A manual testing phase of integration issues occurs towards&lt;br /&gt;
the end of the SDLC at Moodle during the Wednesday (AWST) testing&lt;br /&gt;
phase. This is the last possible chance Moodle gets to capture&lt;br /&gt;
regressions. Relying soley on this phase to capture regressions could result in the late discovery of regressions&lt;br /&gt;
during unguided exploratory testing and worse still the introduction&lt;br /&gt;
of regressions into Master. Discovery of issues late in the SDLC&lt;br /&gt;
prevents issues from being dealt with in a timely manner when&lt;br /&gt;
integrators, or even those writing the code, are able to resolve those issues relatively easily.&lt;br /&gt;
&lt;br /&gt;
The processes described here ensure the bulk of&lt;br /&gt;
testing and the majority of responsibility for capturing regressions&lt;br /&gt;
does not lie with the Wednesday testing phase. Testing is performed as early in the SDLC as possible.&lt;br /&gt;
==New Unit Tests==&lt;br /&gt;
Creating unit tests prior to coding starts&lt;br /&gt;
the whole SDLC off with a focus on quality. If code isn&#039;t&lt;br /&gt;
considered complete until unit tests pass, then the code itself will&lt;br /&gt;
be of a high quality by the time it is implemented. This also creates a&lt;br /&gt;
repository of unit regression tests in an iterative manner while not&lt;br /&gt;
requiring of a great deal of extra effort to write those tests. As&lt;br /&gt;
these tests are added, they will provide early regression testing of&lt;br /&gt;
new code.&lt;br /&gt;
&lt;br /&gt;
Unit tests in the PHPUnit framework are a requirement when submitting code to Moodle.&lt;br /&gt;
&lt;br /&gt;
==Integration Steps==&lt;br /&gt;
===Step 1: GIT Pull to integration CI server===&lt;br /&gt;
When developers are ready to submit their code into the integration process, they set the status of the tracker issue to &#039;Ready for integration&#039;. This in turn triggers the Jenkins CI job &amp;quot;Pre-check remote branch&amp;quot;. This job performs the following tasks:&lt;br /&gt;
* Pull the changes to a local branch on the Integration CI Server.&lt;br /&gt;
** git reset --hard origin =&amp;gt; so it is in the same status than the official git repository&lt;br /&gt;
** git pull =&amp;gt; get the changes proposed by a developer&lt;br /&gt;
* Run checks on the code.&lt;br /&gt;
* Generate a results artefact that is sent to the developer.&lt;br /&gt;
&lt;br /&gt;
Please note; each job begins by resetting the local git repository to the original state so the pulls are never permanent. This mitigates the risk posed by &amp;quot;collisions&amp;quot; as the purpose of this step is not to test for &amp;quot;collisions&amp;quot; between conflicting patches but to verify that code meets the required standard to proceed to peer review.&lt;br /&gt;
===Step 2: Peer Review===&lt;br /&gt;
Any code sent back to the developer at Peer Review, after any changes have been made, must be must pass step 1 again before re-review.&lt;br /&gt;
===Step 3: GIT Pull to integration===&lt;br /&gt;
Code passing peer review can be pulled from the developers repository to integration where, among other things, the main Jenkins integration jobs run. At this stage integrators also check for &amp;quot;collisions&amp;quot; and conflicts between submitted patches.&lt;br /&gt;
===Step 4: GIT Pull to Nightly Build Machine, performance and browser driven automation suite===&lt;br /&gt;
A set of regression tests are run at 2AM AWST Daily. These tests are scheduled to run automatically from the Moodle test automation framework and run on all supported platforms e.g. all databases MySQL, Oracle, MSSQL, PostgreSQL. The following tests are performed in this order:&lt;br /&gt;
# Moodle unit tests, including those submitted by developers.&lt;br /&gt;
# PerfComp performance comparison tests.&lt;br /&gt;
# Selenium acceptance tests, automated browser tests based upon the existing Moodle QA test suite.&lt;br /&gt;
===Step 5: Issue retest===&lt;br /&gt;
On Wednesday (AWST) the manual issue retesting is performed at Moodle HQ. Issue test steps must be clear and concise, allowing the issue to be recreated easily. Testing steps must go in the testing instructions field to prove that the bug is resolved. Areas of Moodle to investigate with extra exploratory testing should be entered here also.&lt;br /&gt;
&lt;br /&gt;
==Stable Sprints and Point Releases==&lt;br /&gt;
Development work performed during stable sprints and point releases are subject to the stringent integration review and testing process described above.&lt;br /&gt;
&lt;br /&gt;
==Major Releases and New Development==&lt;br /&gt;
The Moodle QA cycle is a user acceptance testing phase at the end of every 6 month development cycle and is a chance for the community to become directly involved in road testing the latest testing release. &lt;br /&gt;
&lt;br /&gt;
In reality testing starts much earlier in the development process. All code submitted to Moodle has to pass through the integration process and normally does so in an incremental manner. Any additional testing to be undertaken for a Moodle release is tailored to what will be in that release and defined in the [https://docs.moodle.org/dev/2.4_Test_Plan current release test plan test plan ].&lt;/div&gt;</summary>
		<author><name>Esqueeze</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/dev/index.php?title=Testing_strategy/The_Moodle_Testing_Process&amp;diff=35558</id>
		<title>Testing strategy/The Moodle Testing Process</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/dev/index.php?title=Testing_strategy/The_Moodle_Testing_Process&amp;diff=35558"/>
		<updated>2012-09-14T06:43:00Z</updated>

		<summary type="html">&lt;p&gt;Esqueeze: /* Major Releases and New Development */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Work in progress}}&lt;br /&gt;
=Methodologies in the Moodle Development Process=&lt;br /&gt;
Moodle has an established process for developing and integrating software. This section describes relevant testing methodology within the existing process.&lt;br /&gt;
The full [https://docs.moodle.org/dev/Process development]&lt;br /&gt;
life-cycle at Moodle is documented in detail [https://docs.moodle.org/dev/Releases#General_release_calendar elsewhere].&lt;br /&gt;
Moodle is currently developed using Agile methodologies including&lt;br /&gt;
Scrum. The following stages of development take place within this&lt;br /&gt;
life-cycle:&lt;br /&gt;
&lt;br /&gt;
* Weekly integration cycle&lt;br /&gt;
* 3-weekly stable sprints&lt;br /&gt;
* 6-monthly major releases&lt;br /&gt;
* 3 minor releases between every major release&lt;br /&gt;
&lt;br /&gt;
==Weekly (Continuous) Integration Cycle==&lt;br /&gt;
A manual testing phase of integration issues occurs towards&lt;br /&gt;
the end of the SDLC at Moodle during the Wednesday (AWST) testing&lt;br /&gt;
phase. This is the last possible chance Moodle gets to capture&lt;br /&gt;
regressions. Relying soley on this phase to capture regressions could result in the late discovery of regressions&lt;br /&gt;
during unguided exploratory testing and worse still the introduction&lt;br /&gt;
of regressions into Master. Discovery of issues late in the SDLC&lt;br /&gt;
prevents issues from being dealt with in a timely manner when&lt;br /&gt;
integrators, or even those writing the code, are able to resolve those issues relatively easily.&lt;br /&gt;
&lt;br /&gt;
The processes described here ensure the bulk of&lt;br /&gt;
testing and the majority of responsibility for capturing regressions&lt;br /&gt;
does not lie with the Wednesday testing phase. Testing is performed as early in the SDLC as possible.&lt;br /&gt;
==New Unit Tests==&lt;br /&gt;
Creating unit tests prior to coding starts&lt;br /&gt;
the whole SDLC off with a focus on quality. If code isn&#039;t&lt;br /&gt;
considered complete until unit tests pass, then the code itself will&lt;br /&gt;
be of a high quality by the time it is implemented. This also creates a&lt;br /&gt;
repository of unit regression tests in an iterative manner while not&lt;br /&gt;
requiring of a great deal of extra effort to write those tests. As&lt;br /&gt;
these tests are added, they will provide early regression testing of&lt;br /&gt;
new code.&lt;br /&gt;
&lt;br /&gt;
Unit tests in the PHPUnit framework are a requirement when submitting code to Moodle.&lt;br /&gt;
&lt;br /&gt;
==Integration Steps==&lt;br /&gt;
===Step 1: GIT Pull to integration CI server===&lt;br /&gt;
When developers are ready to submit their code into the integration process, they set the status of the tracker issue to &#039;Ready for integration&#039;. This in turn triggers the Jenkins CI job &amp;quot;Pre-check remote branch&amp;quot;. This job performs the following tasks:&lt;br /&gt;
* Pull the changes to a local branch on the Integration CI Server.&lt;br /&gt;
** git reset --hard origin =&amp;gt; so it is in the same status than the official git repository&lt;br /&gt;
** git pull =&amp;gt; get the changes proposed by a developer&lt;br /&gt;
* Run checks on the code.&lt;br /&gt;
* Generate a results artefact that is sent to the developer.&lt;br /&gt;
&lt;br /&gt;
Please note; each job begins by resetting the local git repository to the original state so the pulls are never permanent. This mitigates the risk posed by &amp;quot;collisions&amp;quot; as the purpose of this step is not to test for &amp;quot;collisions&amp;quot; between conflicting patches but to verify that code meets the required standard to proceed to peer review.&lt;br /&gt;
===Step 2: Peer Review===&lt;br /&gt;
Any code sent back to the developer at Peer Review, after any changes have been made, must be must pass step 1 again before re-review.&lt;br /&gt;
===Step 3: GIT Pull to integration===&lt;br /&gt;
Code passing peer review can be pulled from the developers repository to integration where, among other things, the main Jenkins integration jobs run. At this stage integrators also check for &amp;quot;collisions&amp;quot; and conflicts between submitted patches.&lt;br /&gt;
===Step 4: GIT Pull to Nightly Build Machine, performance and browser driven automation suite===&lt;br /&gt;
A set of regression tests are run at 2AM AWST Daily. These tests are scheduled to run automatically from the Moodle test automation framework and run on all supported platforms e.g. all databases MySQL, Oracle, MSSQL, PostgreSQL. The following tests are performed in this order:&lt;br /&gt;
# Moodle unit tests, including those submitted by developers.&lt;br /&gt;
# PerfComp performance comparison tests.&lt;br /&gt;
# Selenium acceptance tests, automated browser tests based upon the existing Moodle QA test suite.&lt;br /&gt;
===Step 5: Issue retest===&lt;br /&gt;
On Wednesday (AWST) the manual issue retesting is performed at Moodle HQ. Issue test steps must be clear and concise, allowing the issue to be recreated easily. Testing steps must go in the testing instructions field to prove that the bug is resolved. Areas of Moodle to investigate with extra exploratory testing should be entered here also.&lt;br /&gt;
&lt;br /&gt;
==Stable Sprints and Point Releases==&lt;br /&gt;
Development work performed during stable sprints and point releases are subject to the stringent integration review and testing process described above.&lt;br /&gt;
&lt;br /&gt;
==Major Releases and New Development==&lt;br /&gt;
The Moodle QA cycle is a user acceptance testing phase at the end of every 6 month development cycle and is a chance for the community to become directly involved in road testing the latest testing release. &lt;br /&gt;
&lt;br /&gt;
In reality testing starts much earlier in the development process. All code submitted to Moodle has to pass through the integration process and normally does so in an incremental manner. All testing to be undertaken for a Moodle release is tailored to what will be in that release and defined in the [https://docs.moodle.org/dev/2.4_Test_Plan current release test plan test plan ].&lt;/div&gt;</summary>
		<author><name>Esqueeze</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/dev/index.php?title=Testing_strategy/The_Moodle_Testing_Process&amp;diff=35557</id>
		<title>Testing strategy/The Moodle Testing Process</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/dev/index.php?title=Testing_strategy/The_Moodle_Testing_Process&amp;diff=35557"/>
		<updated>2012-09-14T06:35:38Z</updated>

		<summary type="html">&lt;p&gt;Esqueeze: /* Stable Sprints and Point Releases */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Work in progress}}&lt;br /&gt;
=Methodologies in the Moodle Development Process=&lt;br /&gt;
Moodle has an established process for developing and integrating software. This section describes relevant testing methodology within the existing process.&lt;br /&gt;
The full [https://docs.moodle.org/dev/Process development]&lt;br /&gt;
life-cycle at Moodle is documented in detail [https://docs.moodle.org/dev/Releases#General_release_calendar elsewhere].&lt;br /&gt;
Moodle is currently developed using Agile methodologies including&lt;br /&gt;
Scrum. The following stages of development take place within this&lt;br /&gt;
life-cycle:&lt;br /&gt;
&lt;br /&gt;
* Weekly integration cycle&lt;br /&gt;
* 3-weekly stable sprints&lt;br /&gt;
* 6-monthly major releases&lt;br /&gt;
* 3 minor releases between every major release&lt;br /&gt;
&lt;br /&gt;
==Weekly (Continuous) Integration Cycle==&lt;br /&gt;
A manual testing phase of integration issues occurs towards&lt;br /&gt;
the end of the SDLC at Moodle during the Wednesday (AWST) testing&lt;br /&gt;
phase. This is the last possible chance Moodle gets to capture&lt;br /&gt;
regressions. Relying soley on this phase to capture regressions could result in the late discovery of regressions&lt;br /&gt;
during unguided exploratory testing and worse still the introduction&lt;br /&gt;
of regressions into Master. Discovery of issues late in the SDLC&lt;br /&gt;
prevents issues from being dealt with in a timely manner when&lt;br /&gt;
integrators, or even those writing the code, are able to resolve those issues relatively easily.&lt;br /&gt;
&lt;br /&gt;
The processes described here ensure the bulk of&lt;br /&gt;
testing and the majority of responsibility for capturing regressions&lt;br /&gt;
does not lie with the Wednesday testing phase. Testing is performed as early in the SDLC as possible.&lt;br /&gt;
==New Unit Tests==&lt;br /&gt;
Creating unit tests prior to coding starts&lt;br /&gt;
the whole SDLC off with a focus on quality. If code isn&#039;t&lt;br /&gt;
considered complete until unit tests pass, then the code itself will&lt;br /&gt;
be of a high quality by the time it is implemented. This also creates a&lt;br /&gt;
repository of unit regression tests in an iterative manner while not&lt;br /&gt;
requiring of a great deal of extra effort to write those tests. As&lt;br /&gt;
these tests are added, they will provide early regression testing of&lt;br /&gt;
new code.&lt;br /&gt;
&lt;br /&gt;
Unit tests in the PHPUnit framework are a requirement when submitting code to Moodle.&lt;br /&gt;
&lt;br /&gt;
==Integration Steps==&lt;br /&gt;
===Step 1: GIT Pull to integration CI server===&lt;br /&gt;
When developers are ready to submit their code into the integration process, they set the status of the tracker issue to &#039;Ready for integration&#039;. This in turn triggers the Jenkins CI job &amp;quot;Pre-check remote branch&amp;quot;. This job performs the following tasks:&lt;br /&gt;
* Pull the changes to a local branch on the Integration CI Server.&lt;br /&gt;
** git reset --hard origin =&amp;gt; so it is in the same status than the official git repository&lt;br /&gt;
** git pull =&amp;gt; get the changes proposed by a developer&lt;br /&gt;
* Run checks on the code.&lt;br /&gt;
* Generate a results artefact that is sent to the developer.&lt;br /&gt;
&lt;br /&gt;
Please note; each job begins by resetting the local git repository to the original state so the pulls are never permanent. This mitigates the risk posed by &amp;quot;collisions&amp;quot; as the purpose of this step is not to test for &amp;quot;collisions&amp;quot; between conflicting patches but to verify that code meets the required standard to proceed to peer review.&lt;br /&gt;
===Step 2: Peer Review===&lt;br /&gt;
Any code sent back to the developer at Peer Review, after any changes have been made, must be must pass step 1 again before re-review.&lt;br /&gt;
===Step 3: GIT Pull to integration===&lt;br /&gt;
Code passing peer review can be pulled from the developers repository to integration where, among other things, the main Jenkins integration jobs run. At this stage integrators also check for &amp;quot;collisions&amp;quot; and conflicts between submitted patches.&lt;br /&gt;
===Step 4: GIT Pull to Nightly Build Machine, performance and browser driven automation suite===&lt;br /&gt;
A set of regression tests are run at 2AM AWST Daily. These tests are scheduled to run automatically from the Moodle test automation framework and run on all supported platforms e.g. all databases MySQL, Oracle, MSSQL, PostgreSQL. The following tests are performed in this order:&lt;br /&gt;
# Moodle unit tests, including those submitted by developers.&lt;br /&gt;
# PerfComp performance comparison tests.&lt;br /&gt;
# Selenium acceptance tests, automated browser tests based upon the existing Moodle QA test suite.&lt;br /&gt;
===Step 5: Issue retest===&lt;br /&gt;
On Wednesday (AWST) the manual issue retesting is performed at Moodle HQ. Issue test steps must be clear and concise, allowing the issue to be recreated easily. Testing steps must go in the testing instructions field to prove that the bug is resolved. Areas of Moodle to investigate with extra exploratory testing should be entered here also.&lt;br /&gt;
&lt;br /&gt;
==Stable Sprints and Point Releases==&lt;br /&gt;
Development work performed during stable sprints and point releases are subject to the stringent integration review and testing process described above.&lt;br /&gt;
&lt;br /&gt;
==Major Releases and New Development==&lt;br /&gt;
&#039;&#039;&#039;TODO&#039;&#039;&#039;&lt;/div&gt;</summary>
		<author><name>Esqueeze</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/dev/index.php?title=Testing_strategy/The_Moodle_Testing_Process&amp;diff=35556</id>
		<title>Testing strategy/The Moodle Testing Process</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/dev/index.php?title=Testing_strategy/The_Moodle_Testing_Process&amp;diff=35556"/>
		<updated>2012-09-14T06:35:18Z</updated>

		<summary type="html">&lt;p&gt;Esqueeze: /* Stable Sprints */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Work in progress}}&lt;br /&gt;
=Methodologies in the Moodle Development Process=&lt;br /&gt;
Moodle has an established process for developing and integrating software. This section describes relevant testing methodology within the existing process.&lt;br /&gt;
The full [https://docs.moodle.org/dev/Process development]&lt;br /&gt;
life-cycle at Moodle is documented in detail [https://docs.moodle.org/dev/Releases#General_release_calendar elsewhere].&lt;br /&gt;
Moodle is currently developed using Agile methodologies including&lt;br /&gt;
Scrum. The following stages of development take place within this&lt;br /&gt;
life-cycle:&lt;br /&gt;
&lt;br /&gt;
* Weekly integration cycle&lt;br /&gt;
* 3-weekly stable sprints&lt;br /&gt;
* 6-monthly major releases&lt;br /&gt;
* 3 minor releases between every major release&lt;br /&gt;
&lt;br /&gt;
==Weekly (Continuous) Integration Cycle==&lt;br /&gt;
A manual testing phase of integration issues occurs towards&lt;br /&gt;
the end of the SDLC at Moodle during the Wednesday (AWST) testing&lt;br /&gt;
phase. This is the last possible chance Moodle gets to capture&lt;br /&gt;
regressions. Relying soley on this phase to capture regressions could result in the late discovery of regressions&lt;br /&gt;
during unguided exploratory testing and worse still the introduction&lt;br /&gt;
of regressions into Master. Discovery of issues late in the SDLC&lt;br /&gt;
prevents issues from being dealt with in a timely manner when&lt;br /&gt;
integrators, or even those writing the code, are able to resolve those issues relatively easily.&lt;br /&gt;
&lt;br /&gt;
The processes described here ensure the bulk of&lt;br /&gt;
testing and the majority of responsibility for capturing regressions&lt;br /&gt;
does not lie with the Wednesday testing phase. Testing is performed as early in the SDLC as possible.&lt;br /&gt;
==New Unit Tests==&lt;br /&gt;
Creating unit tests prior to coding starts&lt;br /&gt;
the whole SDLC off with a focus on quality. If code isn&#039;t&lt;br /&gt;
considered complete until unit tests pass, then the code itself will&lt;br /&gt;
be of a high quality by the time it is implemented. This also creates a&lt;br /&gt;
repository of unit regression tests in an iterative manner while not&lt;br /&gt;
requiring of a great deal of extra effort to write those tests. As&lt;br /&gt;
these tests are added, they will provide early regression testing of&lt;br /&gt;
new code.&lt;br /&gt;
&lt;br /&gt;
Unit tests in the PHPUnit framework are a requirement when submitting code to Moodle.&lt;br /&gt;
&lt;br /&gt;
==Integration Steps==&lt;br /&gt;
===Step 1: GIT Pull to integration CI server===&lt;br /&gt;
When developers are ready to submit their code into the integration process, they set the status of the tracker issue to &#039;Ready for integration&#039;. This in turn triggers the Jenkins CI job &amp;quot;Pre-check remote branch&amp;quot;. This job performs the following tasks:&lt;br /&gt;
* Pull the changes to a local branch on the Integration CI Server.&lt;br /&gt;
** git reset --hard origin =&amp;gt; so it is in the same status than the official git repository&lt;br /&gt;
** git pull =&amp;gt; get the changes proposed by a developer&lt;br /&gt;
* Run checks on the code.&lt;br /&gt;
* Generate a results artefact that is sent to the developer.&lt;br /&gt;
&lt;br /&gt;
Please note; each job begins by resetting the local git repository to the original state so the pulls are never permanent. This mitigates the risk posed by &amp;quot;collisions&amp;quot; as the purpose of this step is not to test for &amp;quot;collisions&amp;quot; between conflicting patches but to verify that code meets the required standard to proceed to peer review.&lt;br /&gt;
===Step 2: Peer Review===&lt;br /&gt;
Any code sent back to the developer at Peer Review, after any changes have been made, must be must pass step 1 again before re-review.&lt;br /&gt;
===Step 3: GIT Pull to integration===&lt;br /&gt;
Code passing peer review can be pulled from the developers repository to integration where, among other things, the main Jenkins integration jobs run. At this stage integrators also check for &amp;quot;collisions&amp;quot; and conflicts between submitted patches.&lt;br /&gt;
===Step 4: GIT Pull to Nightly Build Machine, performance and browser driven automation suite===&lt;br /&gt;
A set of regression tests are run at 2AM AWST Daily. These tests are scheduled to run automatically from the Moodle test automation framework and run on all supported platforms e.g. all databases MySQL, Oracle, MSSQL, PostgreSQL. The following tests are performed in this order:&lt;br /&gt;
# Moodle unit tests, including those submitted by developers.&lt;br /&gt;
# PerfComp performance comparison tests.&lt;br /&gt;
# Selenium acceptance tests, automated browser tests based upon the existing Moodle QA test suite.&lt;br /&gt;
===Step 5: Issue retest===&lt;br /&gt;
On Wednesday (AWST) the manual issue retesting is performed at Moodle HQ. Issue test steps must be clear and concise, allowing the issue to be recreated easily. Testing steps must go in the testing instructions field to prove that the bug is resolved. Areas of Moodle to investigate with extra exploratory testing should be entered here also.&lt;br /&gt;
&lt;br /&gt;
==Stable Sprints and Point Releases==&lt;br /&gt;
Development work performed during stable sprints and point releases are subject to the stringent integration review process.&lt;br /&gt;
&lt;br /&gt;
==Major Releases and New Development==&lt;br /&gt;
&#039;&#039;&#039;TODO&#039;&#039;&#039;&lt;/div&gt;</summary>
		<author><name>Esqueeze</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/dev/index.php?title=Testing_strategy/The_Moodle_Testing_Process&amp;diff=35555</id>
		<title>Testing strategy/The Moodle Testing Process</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/dev/index.php?title=Testing_strategy/The_Moodle_Testing_Process&amp;diff=35555"/>
		<updated>2012-09-14T06:34:49Z</updated>

		<summary type="html">&lt;p&gt;Esqueeze: /* Point Releases */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Work in progress}}&lt;br /&gt;
=Methodologies in the Moodle Development Process=&lt;br /&gt;
Moodle has an established process for developing and integrating software. This section describes relevant testing methodology within the existing process.&lt;br /&gt;
The full [https://docs.moodle.org/dev/Process development]&lt;br /&gt;
life-cycle at Moodle is documented in detail [https://docs.moodle.org/dev/Releases#General_release_calendar elsewhere].&lt;br /&gt;
Moodle is currently developed using Agile methodologies including&lt;br /&gt;
Scrum. The following stages of development take place within this&lt;br /&gt;
life-cycle:&lt;br /&gt;
&lt;br /&gt;
* Weekly integration cycle&lt;br /&gt;
* 3-weekly stable sprints&lt;br /&gt;
* 6-monthly major releases&lt;br /&gt;
* 3 minor releases between every major release&lt;br /&gt;
&lt;br /&gt;
==Weekly (Continuous) Integration Cycle==&lt;br /&gt;
A manual testing phase of integration issues occurs towards&lt;br /&gt;
the end of the SDLC at Moodle during the Wednesday (AWST) testing&lt;br /&gt;
phase. This is the last possible chance Moodle gets to capture&lt;br /&gt;
regressions. Relying soley on this phase to capture regressions could result in the late discovery of regressions&lt;br /&gt;
during unguided exploratory testing and worse still the introduction&lt;br /&gt;
of regressions into Master. Discovery of issues late in the SDLC&lt;br /&gt;
prevents issues from being dealt with in a timely manner when&lt;br /&gt;
integrators, or even those writing the code, are able to resolve those issues relatively easily.&lt;br /&gt;
&lt;br /&gt;
The processes described here ensure the bulk of&lt;br /&gt;
testing and the majority of responsibility for capturing regressions&lt;br /&gt;
does not lie with the Wednesday testing phase. Testing is performed as early in the SDLC as possible.&lt;br /&gt;
==New Unit Tests==&lt;br /&gt;
Creating unit tests prior to coding starts&lt;br /&gt;
the whole SDLC off with a focus on quality. If code isn&#039;t&lt;br /&gt;
considered complete until unit tests pass, then the code itself will&lt;br /&gt;
be of a high quality by the time it is implemented. This also creates a&lt;br /&gt;
repository of unit regression tests in an iterative manner while not&lt;br /&gt;
requiring of a great deal of extra effort to write those tests. As&lt;br /&gt;
these tests are added, they will provide early regression testing of&lt;br /&gt;
new code.&lt;br /&gt;
&lt;br /&gt;
Unit tests in the PHPUnit framework are a requirement when submitting code to Moodle.&lt;br /&gt;
&lt;br /&gt;
==Integration Steps==&lt;br /&gt;
===Step 1: GIT Pull to integration CI server===&lt;br /&gt;
When developers are ready to submit their code into the integration process, they set the status of the tracker issue to &#039;Ready for integration&#039;. This in turn triggers the Jenkins CI job &amp;quot;Pre-check remote branch&amp;quot;. This job performs the following tasks:&lt;br /&gt;
* Pull the changes to a local branch on the Integration CI Server.&lt;br /&gt;
** git reset --hard origin =&amp;gt; so it is in the same status than the official git repository&lt;br /&gt;
** git pull =&amp;gt; get the changes proposed by a developer&lt;br /&gt;
* Run checks on the code.&lt;br /&gt;
* Generate a results artefact that is sent to the developer.&lt;br /&gt;
&lt;br /&gt;
Please note; each job begins by resetting the local git repository to the original state so the pulls are never permanent. This mitigates the risk posed by &amp;quot;collisions&amp;quot; as the purpose of this step is not to test for &amp;quot;collisions&amp;quot; between conflicting patches but to verify that code meets the required standard to proceed to peer review.&lt;br /&gt;
===Step 2: Peer Review===&lt;br /&gt;
Any code sent back to the developer at Peer Review, after any changes have been made, must be must pass step 1 again before re-review.&lt;br /&gt;
===Step 3: GIT Pull to integration===&lt;br /&gt;
Code passing peer review can be pulled from the developers repository to integration where, among other things, the main Jenkins integration jobs run. At this stage integrators also check for &amp;quot;collisions&amp;quot; and conflicts between submitted patches.&lt;br /&gt;
===Step 4: GIT Pull to Nightly Build Machine, performance and browser driven automation suite===&lt;br /&gt;
A set of regression tests are run at 2AM AWST Daily. These tests are scheduled to run automatically from the Moodle test automation framework and run on all supported platforms e.g. all databases MySQL, Oracle, MSSQL, PostgreSQL. The following tests are performed in this order:&lt;br /&gt;
# Moodle unit tests, including those submitted by developers.&lt;br /&gt;
# PerfComp performance comparison tests.&lt;br /&gt;
# Selenium acceptance tests, automated browser tests based upon the existing Moodle QA test suite.&lt;br /&gt;
===Step 5: Issue retest===&lt;br /&gt;
On Wednesday (AWST) the manual issue retesting is performed at Moodle HQ. Issue test steps must be clear and concise, allowing the issue to be recreated easily. Testing steps must go in the testing instructions field to prove that the bug is resolved. Areas of Moodle to investigate with extra exploratory testing should be entered here also.&lt;br /&gt;
&lt;br /&gt;
==Stable Sprints==&lt;br /&gt;
Development work performed during stable sprints are subject to the stringent integration review process.&lt;br /&gt;
&lt;br /&gt;
==Major Releases and New Development==&lt;br /&gt;
&#039;&#039;&#039;TODO&#039;&#039;&#039;&lt;/div&gt;</summary>
		<author><name>Esqueeze</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/dev/index.php?title=Testing_strategy/The_Moodle_Testing_Process&amp;diff=35554</id>
		<title>Testing strategy/The Moodle Testing Process</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/dev/index.php?title=Testing_strategy/The_Moodle_Testing_Process&amp;diff=35554"/>
		<updated>2012-09-14T06:34:13Z</updated>

		<summary type="html">&lt;p&gt;Esqueeze: /* Stable Sprints */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Work in progress}}&lt;br /&gt;
=Methodologies in the Moodle Development Process=&lt;br /&gt;
Moodle has an established process for developing and integrating software. This section describes relevant testing methodology within the existing process.&lt;br /&gt;
The full [https://docs.moodle.org/dev/Process development]&lt;br /&gt;
life-cycle at Moodle is documented in detail [https://docs.moodle.org/dev/Releases#General_release_calendar elsewhere].&lt;br /&gt;
Moodle is currently developed using Agile methodologies including&lt;br /&gt;
Scrum. The following stages of development take place within this&lt;br /&gt;
life-cycle:&lt;br /&gt;
&lt;br /&gt;
* Weekly integration cycle&lt;br /&gt;
* 3-weekly stable sprints&lt;br /&gt;
* 6-monthly major releases&lt;br /&gt;
* 3 minor releases between every major release&lt;br /&gt;
&lt;br /&gt;
==Weekly (Continuous) Integration Cycle==&lt;br /&gt;
A manual testing phase of integration issues occurs towards&lt;br /&gt;
the end of the SDLC at Moodle during the Wednesday (AWST) testing&lt;br /&gt;
phase. This is the last possible chance Moodle gets to capture&lt;br /&gt;
regressions. Relying soley on this phase to capture regressions could result in the late discovery of regressions&lt;br /&gt;
during unguided exploratory testing and worse still the introduction&lt;br /&gt;
of regressions into Master. Discovery of issues late in the SDLC&lt;br /&gt;
prevents issues from being dealt with in a timely manner when&lt;br /&gt;
integrators, or even those writing the code, are able to resolve those issues relatively easily.&lt;br /&gt;
&lt;br /&gt;
The processes described here ensure the bulk of&lt;br /&gt;
testing and the majority of responsibility for capturing regressions&lt;br /&gt;
does not lie with the Wednesday testing phase. Testing is performed as early in the SDLC as possible.&lt;br /&gt;
==New Unit Tests==&lt;br /&gt;
Creating unit tests prior to coding starts&lt;br /&gt;
the whole SDLC off with a focus on quality. If code isn&#039;t&lt;br /&gt;
considered complete until unit tests pass, then the code itself will&lt;br /&gt;
be of a high quality by the time it is implemented. This also creates a&lt;br /&gt;
repository of unit regression tests in an iterative manner while not&lt;br /&gt;
requiring of a great deal of extra effort to write those tests. As&lt;br /&gt;
these tests are added, they will provide early regression testing of&lt;br /&gt;
new code.&lt;br /&gt;
&lt;br /&gt;
Unit tests in the PHPUnit framework are a requirement when submitting code to Moodle.&lt;br /&gt;
&lt;br /&gt;
==Integration Steps==&lt;br /&gt;
===Step 1: GIT Pull to integration CI server===&lt;br /&gt;
When developers are ready to submit their code into the integration process, they set the status of the tracker issue to &#039;Ready for integration&#039;. This in turn triggers the Jenkins CI job &amp;quot;Pre-check remote branch&amp;quot;. This job performs the following tasks:&lt;br /&gt;
* Pull the changes to a local branch on the Integration CI Server.&lt;br /&gt;
** git reset --hard origin =&amp;gt; so it is in the same status than the official git repository&lt;br /&gt;
** git pull =&amp;gt; get the changes proposed by a developer&lt;br /&gt;
* Run checks on the code.&lt;br /&gt;
* Generate a results artefact that is sent to the developer.&lt;br /&gt;
&lt;br /&gt;
Please note; each job begins by resetting the local git repository to the original state so the pulls are never permanent. This mitigates the risk posed by &amp;quot;collisions&amp;quot; as the purpose of this step is not to test for &amp;quot;collisions&amp;quot; between conflicting patches but to verify that code meets the required standard to proceed to peer review.&lt;br /&gt;
===Step 2: Peer Review===&lt;br /&gt;
Any code sent back to the developer at Peer Review, after any changes have been made, must be must pass step 1 again before re-review.&lt;br /&gt;
===Step 3: GIT Pull to integration===&lt;br /&gt;
Code passing peer review can be pulled from the developers repository to integration where, among other things, the main Jenkins integration jobs run. At this stage integrators also check for &amp;quot;collisions&amp;quot; and conflicts between submitted patches.&lt;br /&gt;
===Step 4: GIT Pull to Nightly Build Machine, performance and browser driven automation suite===&lt;br /&gt;
A set of regression tests are run at 2AM AWST Daily. These tests are scheduled to run automatically from the Moodle test automation framework and run on all supported platforms e.g. all databases MySQL, Oracle, MSSQL, PostgreSQL. The following tests are performed in this order:&lt;br /&gt;
# Moodle unit tests, including those submitted by developers.&lt;br /&gt;
# PerfComp performance comparison tests.&lt;br /&gt;
# Selenium acceptance tests, automated browser tests based upon the existing Moodle QA test suite.&lt;br /&gt;
===Step 5: Issue retest===&lt;br /&gt;
On Wednesday (AWST) the manual issue retesting is performed at Moodle HQ. Issue test steps must be clear and concise, allowing the issue to be recreated easily. Testing steps must go in the testing instructions field to prove that the bug is resolved. Areas of Moodle to investigate with extra exploratory testing should be entered here also.&lt;br /&gt;
&lt;br /&gt;
==Stable Sprints==&lt;br /&gt;
Development work performed during stable sprints are subject to the stringent integration review process.&lt;br /&gt;
&lt;br /&gt;
==Major Releases and New Development==&lt;br /&gt;
&#039;&#039;&#039;TODO&#039;&#039;&#039;&lt;br /&gt;
==Point Releases==&lt;br /&gt;
&#039;&#039;&#039;TODO&#039;&#039;&#039;&lt;/div&gt;</summary>
		<author><name>Esqueeze</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/dev/index.php?title=Testing_strategy/The_Moodle_Testing_Process&amp;diff=35553</id>
		<title>Testing strategy/The Moodle Testing Process</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/dev/index.php?title=Testing_strategy/The_Moodle_Testing_Process&amp;diff=35553"/>
		<updated>2012-09-14T06:30:45Z</updated>

		<summary type="html">&lt;p&gt;Esqueeze: /* Step 5: Issue retest */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Work in progress}}&lt;br /&gt;
=Methodologies in the Moodle Development Process=&lt;br /&gt;
Moodle has an established process for developing and integrating software. This section describes relevant testing methodology within the existing process.&lt;br /&gt;
The full [https://docs.moodle.org/dev/Process development]&lt;br /&gt;
life-cycle at Moodle is documented in detail [https://docs.moodle.org/dev/Releases#General_release_calendar elsewhere].&lt;br /&gt;
Moodle is currently developed using Agile methodologies including&lt;br /&gt;
Scrum. The following stages of development take place within this&lt;br /&gt;
life-cycle:&lt;br /&gt;
&lt;br /&gt;
* Weekly integration cycle&lt;br /&gt;
* 3-weekly stable sprints&lt;br /&gt;
* 6-monthly major releases&lt;br /&gt;
* 3 minor releases between every major release&lt;br /&gt;
&lt;br /&gt;
==Weekly (Continuous) Integration Cycle==&lt;br /&gt;
A manual testing phase of integration issues occurs towards&lt;br /&gt;
the end of the SDLC at Moodle during the Wednesday (AWST) testing&lt;br /&gt;
phase. This is the last possible chance Moodle gets to capture&lt;br /&gt;
regressions. Relying soley on this phase to capture regressions could result in the late discovery of regressions&lt;br /&gt;
during unguided exploratory testing and worse still the introduction&lt;br /&gt;
of regressions into Master. Discovery of issues late in the SDLC&lt;br /&gt;
prevents issues from being dealt with in a timely manner when&lt;br /&gt;
integrators, or even those writing the code, are able to resolve those issues relatively easily.&lt;br /&gt;
&lt;br /&gt;
The processes described here ensure the bulk of&lt;br /&gt;
testing and the majority of responsibility for capturing regressions&lt;br /&gt;
does not lie with the Wednesday testing phase. Testing is performed as early in the SDLC as possible.&lt;br /&gt;
==New Unit Tests==&lt;br /&gt;
Creating unit tests prior to coding starts&lt;br /&gt;
the whole SDLC off with a focus on quality. If code isn&#039;t&lt;br /&gt;
considered complete until unit tests pass, then the code itself will&lt;br /&gt;
be of a high quality by the time it is implemented. This also creates a&lt;br /&gt;
repository of unit regression tests in an iterative manner while not&lt;br /&gt;
requiring of a great deal of extra effort to write those tests. As&lt;br /&gt;
these tests are added, they will provide early regression testing of&lt;br /&gt;
new code.&lt;br /&gt;
&lt;br /&gt;
Unit tests in the PHPUnit framework are a requirement when submitting code to Moodle.&lt;br /&gt;
&lt;br /&gt;
==Integration Steps==&lt;br /&gt;
===Step 1: GIT Pull to integration CI server===&lt;br /&gt;
When developers are ready to submit their code into the integration process, they set the status of the tracker issue to &#039;Ready for integration&#039;. This in turn triggers the Jenkins CI job &amp;quot;Pre-check remote branch&amp;quot;. This job performs the following tasks:&lt;br /&gt;
* Pull the changes to a local branch on the Integration CI Server.&lt;br /&gt;
** git reset --hard origin =&amp;gt; so it is in the same status than the official git repository&lt;br /&gt;
** git pull =&amp;gt; get the changes proposed by a developer&lt;br /&gt;
* Run checks on the code.&lt;br /&gt;
* Generate a results artefact that is sent to the developer.&lt;br /&gt;
&lt;br /&gt;
Please note; each job begins by resetting the local git repository to the original state so the pulls are never permanent. This mitigates the risk posed by &amp;quot;collisions&amp;quot; as the purpose of this step is not to test for &amp;quot;collisions&amp;quot; between conflicting patches but to verify that code meets the required standard to proceed to peer review.&lt;br /&gt;
===Step 2: Peer Review===&lt;br /&gt;
Any code sent back to the developer at Peer Review, after any changes have been made, must be must pass step 1 again before re-review.&lt;br /&gt;
===Step 3: GIT Pull to integration===&lt;br /&gt;
Code passing peer review can be pulled from the developers repository to integration where, among other things, the main Jenkins integration jobs run. At this stage integrators also check for &amp;quot;collisions&amp;quot; and conflicts between submitted patches.&lt;br /&gt;
===Step 4: GIT Pull to Nightly Build Machine, performance and browser driven automation suite===&lt;br /&gt;
A set of regression tests are run at 2AM AWST Daily. These tests are scheduled to run automatically from the Moodle test automation framework and run on all supported platforms e.g. all databases MySQL, Oracle, MSSQL, PostgreSQL. The following tests are performed in this order:&lt;br /&gt;
# Moodle unit tests, including those submitted by developers.&lt;br /&gt;
# PerfComp performance comparison tests.&lt;br /&gt;
# Selenium acceptance tests, automated browser tests based upon the existing Moodle QA test suite.&lt;br /&gt;
===Step 5: Issue retest===&lt;br /&gt;
On Wednesday (AWST) the manual issue retesting is performed at Moodle HQ. Issue test steps must be clear and concise, allowing the issue to be recreated easily. Testing steps must go in the testing instructions field to prove that the bug is resolved. Areas of Moodle to investigate with extra exploratory testing should be entered here also.&lt;br /&gt;
&lt;br /&gt;
==Stable Sprints==&lt;br /&gt;
&#039;&#039;&#039;TODO&#039;&#039;&#039;&lt;br /&gt;
==Major Releases and New Development==&lt;br /&gt;
&#039;&#039;&#039;TODO&#039;&#039;&#039;&lt;br /&gt;
==Point Releases==&lt;br /&gt;
&#039;&#039;&#039;TODO&#039;&#039;&#039;&lt;/div&gt;</summary>
		<author><name>Esqueeze</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/dev/index.php?title=Testing_strategy/The_Moodle_Testing_Process&amp;diff=35552</id>
		<title>Testing strategy/The Moodle Testing Process</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/dev/index.php?title=Testing_strategy/The_Moodle_Testing_Process&amp;diff=35552"/>
		<updated>2012-09-14T06:26:12Z</updated>

		<summary type="html">&lt;p&gt;Esqueeze: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Work in progress}}&lt;br /&gt;
=Methodologies in the Moodle Development Process=&lt;br /&gt;
Moodle has an established process for developing and integrating software. This section describes relevant testing methodology within the existing process.&lt;br /&gt;
The full [https://docs.moodle.org/dev/Process development]&lt;br /&gt;
life-cycle at Moodle is documented in detail [https://docs.moodle.org/dev/Releases#General_release_calendar elsewhere].&lt;br /&gt;
Moodle is currently developed using Agile methodologies including&lt;br /&gt;
Scrum. The following stages of development take place within this&lt;br /&gt;
life-cycle:&lt;br /&gt;
&lt;br /&gt;
* Weekly integration cycle&lt;br /&gt;
* 3-weekly stable sprints&lt;br /&gt;
* 6-monthly major releases&lt;br /&gt;
* 3 minor releases between every major release&lt;br /&gt;
&lt;br /&gt;
==Weekly (Continuous) Integration Cycle==&lt;br /&gt;
A manual testing phase of integration issues occurs towards&lt;br /&gt;
the end of the SDLC at Moodle during the Wednesday (AWST) testing&lt;br /&gt;
phase. This is the last possible chance Moodle gets to capture&lt;br /&gt;
regressions. Relying soley on this phase to capture regressions could result in the late discovery of regressions&lt;br /&gt;
during unguided exploratory testing and worse still the introduction&lt;br /&gt;
of regressions into Master. Discovery of issues late in the SDLC&lt;br /&gt;
prevents issues from being dealt with in a timely manner when&lt;br /&gt;
integrators, or even those writing the code, are able to resolve those issues relatively easily.&lt;br /&gt;
&lt;br /&gt;
The processes described here ensure the bulk of&lt;br /&gt;
testing and the majority of responsibility for capturing regressions&lt;br /&gt;
does not lie with the Wednesday testing phase. Testing is performed as early in the SDLC as possible.&lt;br /&gt;
==New Unit Tests==&lt;br /&gt;
Creating unit tests prior to coding starts&lt;br /&gt;
the whole SDLC off with a focus on quality. If code isn&#039;t&lt;br /&gt;
considered complete until unit tests pass, then the code itself will&lt;br /&gt;
be of a high quality by the time it is implemented. This also creates a&lt;br /&gt;
repository of unit regression tests in an iterative manner while not&lt;br /&gt;
requiring of a great deal of extra effort to write those tests. As&lt;br /&gt;
these tests are added, they will provide early regression testing of&lt;br /&gt;
new code.&lt;br /&gt;
&lt;br /&gt;
Unit tests in the PHPUnit framework are a requirement when submitting code to Moodle.&lt;br /&gt;
&lt;br /&gt;
==Integration Steps==&lt;br /&gt;
===Step 1: GIT Pull to integration CI server===&lt;br /&gt;
When developers are ready to submit their code into the integration process, they set the status of the tracker issue to &#039;Ready for integration&#039;. This in turn triggers the Jenkins CI job &amp;quot;Pre-check remote branch&amp;quot;. This job performs the following tasks:&lt;br /&gt;
* Pull the changes to a local branch on the Integration CI Server.&lt;br /&gt;
** git reset --hard origin =&amp;gt; so it is in the same status than the official git repository&lt;br /&gt;
** git pull =&amp;gt; get the changes proposed by a developer&lt;br /&gt;
* Run checks on the code.&lt;br /&gt;
* Generate a results artefact that is sent to the developer.&lt;br /&gt;
&lt;br /&gt;
Please note; each job begins by resetting the local git repository to the original state so the pulls are never permanent. This mitigates the risk posed by &amp;quot;collisions&amp;quot; as the purpose of this step is not to test for &amp;quot;collisions&amp;quot; between conflicting patches but to verify that code meets the required standard to proceed to peer review.&lt;br /&gt;
===Step 2: Peer Review===&lt;br /&gt;
Any code sent back to the developer at Peer Review, after any changes have been made, must be must pass step 1 again before re-review.&lt;br /&gt;
===Step 3: GIT Pull to integration===&lt;br /&gt;
Code passing peer review can be pulled from the developers repository to integration where, among other things, the main Jenkins integration jobs run. At this stage integrators also check for &amp;quot;collisions&amp;quot; and conflicts between submitted patches.&lt;br /&gt;
===Step 4: GIT Pull to Nightly Build Machine, performance and browser driven automation suite===&lt;br /&gt;
A set of regression tests are run at 2AM AWST Daily. These tests are scheduled to run automatically from the Moodle test automation framework and run on all supported platforms e.g. all databases MySQL, Oracle, MSSQL, PostgreSQL. The following tests are performed in this order:&lt;br /&gt;
# Moodle unit tests, including those submitted by developers.&lt;br /&gt;
# PerfComp performance comparison tests.&lt;br /&gt;
# Selenium acceptance tests, automated browser tests based upon the existing Moodle QA test suite.&lt;br /&gt;
===Step 5: Issue retest===&lt;br /&gt;
On Wednesday (AWST) the manual issue retesting is performed at Moodle HQ. Issue test steps must be clear and concise, allowing the issue to be recreated easily. Testing steps must go in the testing instructions field to prove that the bug is resolved. Areas of Moodle to investigate with extra exploratory testing should be entered here also.&lt;br /&gt;
&lt;br /&gt;
The format for writing test steps is:&lt;br /&gt;
&lt;br /&gt;
====Pre-requisites:====&lt;br /&gt;
Everything required to allow the test to start. This can include, but is not limited to: issue specific data, test platform information: e.g. OS.&lt;br /&gt;
====Test Steps:====&lt;br /&gt;
A clear and concise list of test steps required to test the issue with the expected results of each step.&lt;br /&gt;
====Actual Result:====&lt;br /&gt;
The actual result of what happened when the test is complete.&lt;br /&gt;
====Exploratory focus:====&lt;br /&gt;
Areas of Moodle that may need to be investigated further to identify regressions etc.&lt;br /&gt;
An issue passes when the actual result of test no longer occurs and no regressions have been created.&lt;br /&gt;
&lt;br /&gt;
==Stable Sprints==&lt;br /&gt;
&#039;&#039;&#039;TODO&#039;&#039;&#039;&lt;br /&gt;
==Major Releases and New Development==&lt;br /&gt;
&#039;&#039;&#039;TODO&#039;&#039;&#039;&lt;br /&gt;
==Point Releases==&lt;br /&gt;
&#039;&#039;&#039;TODO&#039;&#039;&#039;&lt;/div&gt;</summary>
		<author><name>Esqueeze</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/dev/index.php?title=Testing_strategy/The_Moodle_Testing_Process&amp;diff=35551</id>
		<title>Testing strategy/The Moodle Testing Process</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/dev/index.php?title=Testing_strategy/The_Moodle_Testing_Process&amp;diff=35551"/>
		<updated>2012-09-14T06:23:45Z</updated>

		<summary type="html">&lt;p&gt;Esqueeze: /* Integration Steps */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Work in progress}}&lt;br /&gt;
=Methodologies in the Moodle Development Process=&lt;br /&gt;
Moodle has an established process for developing and integrating software. This section describes relevant testing methodology within the existing process.&lt;br /&gt;
The full [https://docs.moodle.org/dev/Process development]&lt;br /&gt;
life-cycle at Moodle is documented in detail [https://docs.moodle.org/dev/Releases#General_release_calendar elsewhere].&lt;br /&gt;
Moodle is currently developed using Agile methodologies including&lt;br /&gt;
Scrum. The following stages of development take place within this&lt;br /&gt;
life-cycle:&lt;br /&gt;
&lt;br /&gt;
* Weekly integration cycle&amp;lt;/P&amp;gt;&lt;br /&gt;
* 3-weekly stable sprints&amp;lt;/P&amp;gt;&lt;br /&gt;
* 6-monthly major releases&amp;lt;/P&amp;gt;&lt;br /&gt;
* 3 minor releases between every major release&amp;lt;/P&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Weekly (Continuous) Integration Cycle==&lt;br /&gt;
A manual testing phase of integration issues occurs towards&lt;br /&gt;
the end of the SDLC at Moodle during the Wednesday (AWST) testing&lt;br /&gt;
phase. This is the last possible chance Moodle gets to capture&lt;br /&gt;
regressions. Relying soley on this phase to capture regressions could result in the late discovery of regressions&lt;br /&gt;
during unguided exploratory testing and worse still the introduction&lt;br /&gt;
of regressions into Master. Discovery of issues late in the SDLC&lt;br /&gt;
prevents issues from being dealt with in a timely manner when&lt;br /&gt;
integrators, or even those writing the code, are able to resolve those issues relatively easily.&lt;br /&gt;
&lt;br /&gt;
The processes described here ensure the bulk of&lt;br /&gt;
testing and the majority of responsibility for capturing regressions&lt;br /&gt;
does not lie with the Wednesday testing phase. Testing is performed as early in the SDLC as possible.&lt;br /&gt;
==New Unit Tests==&lt;br /&gt;
Creating unit tests prior to coding starts&lt;br /&gt;
the whole SDLC off with a focus on quality. If code isn&#039;t&lt;br /&gt;
considered complete until unit tests pass, then the code itself will&lt;br /&gt;
be of a high quality by the time it is implemented. This also creates a&lt;br /&gt;
repository of unit regression tests in an iterative manner while not&lt;br /&gt;
requiring of a great deal of extra effort to write those tests. As&lt;br /&gt;
these tests are added, they will provide early regression testing of&lt;br /&gt;
new code.&lt;br /&gt;
&lt;br /&gt;
Unit tests in the PHPUnit framework are a requirement when submitting code to Moodle.&lt;br /&gt;
&lt;br /&gt;
==Integration Steps==&lt;br /&gt;
===Step 1: GIT Pull to integration CI server===&lt;br /&gt;
When developers are ready to submit their code into the integration process, they set the status of the tracker issue to &#039;Ready for integration&#039;. This in turn triggers the Jenkins CI job &amp;quot;Pre-check remote branch&amp;quot;. This job performs the following tasks:&lt;br /&gt;
* Pull the changes to a local branch on the Integration CI Server.&lt;br /&gt;
** git reset --hard origin =&amp;gt; so it is in the same status than the official git repository&lt;br /&gt;
** git pull =&amp;gt; get the changes proposed by a developer&lt;br /&gt;
* Run checks on the code.&lt;br /&gt;
* Generate a results artefact that is sent to the developer.&lt;br /&gt;
&lt;br /&gt;
Please note; each job begins by resetting the local git repository to the original state so the pulls are never permanent. This mitigates the risk posed by &amp;quot;collisions&amp;quot; as the purpose of this step is not to test for &amp;quot;collisions&amp;quot; between conflicting patches but to verify that code meets the required standard to proceed to peer review.&lt;br /&gt;
===Step 2: Peer Review===&lt;br /&gt;
Any code sent back to the developer at Peer Review, after any changes have been made, must be must pass step 1 again before re-review.&lt;br /&gt;
===Step 3: GIT Pull to integration===&lt;br /&gt;
Code passing peer review can be pulled from the developers repository to integration where, among other things, the main Jenkins integration jobs run. At this stage integrators also check for &amp;quot;collisions&amp;quot; and conflicts between submitted patches.&lt;br /&gt;
===Step 4: GIT Pull to Nightly Build Machine, performance and browser driven automation suite===&lt;br /&gt;
A set of regression tests are run at 2AM AWST Daily. These tests are scheduled to run automatically from the Moodle test automation framework and run on all supported platforms e.g. all databases MySQL, Oracle, MSSQL, PostgreSQL. The following tests are performed in this order:&lt;br /&gt;
# Moodle unit tests, including those submitted by developers.&lt;br /&gt;
# PerfComp performance comparison tests.&lt;br /&gt;
# Selenium acceptance tests, automated browser tests based upon the existing Moodle QA test suite.&lt;br /&gt;
===Step 5: Issue retest===&lt;br /&gt;
On Wednesday (AWST) the manual issue retesting is performed at Moodle HQ. Issue test steps must be clear and concise, allowing the issue to be recreated easily. Testing steps must go in the testing instructions field to prove that the bug is resolved. Areas of Moodle to investigate with extra exploratory testing should be entered here also.&lt;br /&gt;
&lt;br /&gt;
The format for writing test steps is:&lt;br /&gt;
&lt;br /&gt;
====Pre-requisites:====&lt;br /&gt;
Everything required to allow the test to start. This can include, but is not limited to: issue specific data, test platform information: e.g. OS.&lt;br /&gt;
====Test Steps:====&lt;br /&gt;
A clear and concise list of test steps required to test the issue with the expected results of each step.&lt;br /&gt;
====Actual Result:====&lt;br /&gt;
The actual result of what happened when the test is complete.&lt;br /&gt;
====Exploratory focus:====&lt;br /&gt;
Areas of Moodle that may need to be investigated further to identify regressions etc.&lt;br /&gt;
An issue passes when the actual result of test no longer occurs and no regressions have been created.&lt;br /&gt;
&lt;br /&gt;
==Stable Sprints==&lt;br /&gt;
&#039;&#039;&#039;TODO&#039;&#039;&#039;&lt;br /&gt;
==Major Releases and New Development==&lt;br /&gt;
&#039;&#039;&#039;TODO&#039;&#039;&#039;&lt;br /&gt;
==Point Releases==&lt;br /&gt;
&#039;&#039;&#039;TODO&#039;&#039;&#039;&lt;/div&gt;</summary>
		<author><name>Esqueeze</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/dev/index.php?title=Testing_strategy/The_Moodle_Testing_Process&amp;diff=35550</id>
		<title>Testing strategy/The Moodle Testing Process</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/dev/index.php?title=Testing_strategy/The_Moodle_Testing_Process&amp;diff=35550"/>
		<updated>2012-09-14T06:23:06Z</updated>

		<summary type="html">&lt;p&gt;Esqueeze: /* Step 5: Issue retest */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Work in progress}}&lt;br /&gt;
=Methodologies in the Moodle Development Process=&lt;br /&gt;
Moodle has an established process for developing and integrating software. This section describes relevant testing methodology within the existing process.&lt;br /&gt;
The full [https://docs.moodle.org/dev/Process development]&lt;br /&gt;
life-cycle at Moodle is documented in detail [https://docs.moodle.org/dev/Releases#General_release_calendar elsewhere].&lt;br /&gt;
Moodle is currently developed using Agile methodologies including&lt;br /&gt;
Scrum. The following stages of development take place within this&lt;br /&gt;
life-cycle:&lt;br /&gt;
&lt;br /&gt;
* Weekly integration cycle&amp;lt;/P&amp;gt;&lt;br /&gt;
* 3-weekly stable sprints&amp;lt;/P&amp;gt;&lt;br /&gt;
* 6-monthly major releases&amp;lt;/P&amp;gt;&lt;br /&gt;
* 3 minor releases between every major release&amp;lt;/P&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Weekly (Continuous) Integration Cycle==&lt;br /&gt;
A manual testing phase of integration issues occurs towards&lt;br /&gt;
the end of the SDLC at Moodle during the Wednesday (AWST) testing&lt;br /&gt;
phase. This is the last possible chance Moodle gets to capture&lt;br /&gt;
regressions. Relying soley on this phase to capture regressions could result in the late discovery of regressions&lt;br /&gt;
during unguided exploratory testing and worse still the introduction&lt;br /&gt;
of regressions into Master. Discovery of issues late in the SDLC&lt;br /&gt;
prevents issues from being dealt with in a timely manner when&lt;br /&gt;
integrators, or even those writing the code, are able to resolve those issues relatively easily.&lt;br /&gt;
&lt;br /&gt;
The processes described here ensure the bulk of&lt;br /&gt;
testing and the majority of responsibility for capturing regressions&lt;br /&gt;
does not lie with the Wednesday testing phase. Testing is performed as early in the SDLC as possible.&lt;br /&gt;
==New Unit Tests==&lt;br /&gt;
Creating unit tests prior to coding starts&lt;br /&gt;
the whole SDLC off with a focus on quality. If code isn&#039;t&lt;br /&gt;
considered complete until unit tests pass, then the code itself will&lt;br /&gt;
be of a high quality by the time it is implemented. This also creates a&lt;br /&gt;
repository of unit regression tests in an iterative manner while not&lt;br /&gt;
requiring of a great deal of extra effort to write those tests. As&lt;br /&gt;
these tests are added, they will provide early regression testing of&lt;br /&gt;
new code.&lt;br /&gt;
&lt;br /&gt;
Unit tests in the PHPUnit framework are a requirement when submitting code to Moodle.&lt;br /&gt;
&lt;br /&gt;
==Integration Steps==&lt;br /&gt;
===Step 1: GIT Pull to integration CI server===&lt;br /&gt;
When developers are ready to submit their code into the integration process, they set the status of the tracker issue to &#039;Ready for integration&#039;. This in turn triggers the Jenkins CI job &amp;quot;Pre-check remote branch&amp;quot;. This job performs the following tasks:&lt;br /&gt;
* Pull the changes to a local branch on the Integration CI Server.&lt;br /&gt;
** git reset --hard origin =&amp;gt; so it is in the same status than the official git repository&lt;br /&gt;
** git pull =&amp;gt; get the changes proposed by a developer&lt;br /&gt;
* Run checks on the code.&lt;br /&gt;
* Generate a results artefact that is sent to the developer.&lt;br /&gt;
&lt;br /&gt;
Please note; each job begins by resetting the local git repository to the original state so the pulls are never permanent. This mitigates the risk posed by &amp;quot;collisions&amp;quot; as the purpose of this step is not to test for &amp;quot;collisions&amp;quot; between conflicting patches but to verify that code meets the required standard to proceed to peer review.&lt;br /&gt;
===Step 2: Peer Review===&lt;br /&gt;
Any code sent back to the developer at Peer Review, after any changes have been made, must be must pass step 1 again before re-review.&lt;br /&gt;
===Step 3: GIT Pull to integration===&lt;br /&gt;
Code passing peer review can be pulled from the developers repository to integration where, among other things, the main Jenkins integration jobs run. At this stage integrators also check for &amp;quot;collisions&amp;quot; and conflicts between submitted patches.&lt;br /&gt;
===Step 4: GIT Pull to Nightly Build Machine, performance and browser driven automation suite===&lt;br /&gt;
A set of regression tests are run at 2AM AWST Daily. These tests are scheduled to run automatically from the Moodle test automation framework and run on all supported platforms e.g. all databases MySQL, Oracle, MSSQL, PostgreSQL. The following tests are performed in this order:&lt;br /&gt;
# Moodle unit tests, including those submitted by developers.&lt;br /&gt;
# PerfComp performance comparison tests.&lt;br /&gt;
# Selenium acceptance tests, automated browser tests based upon the existing Moodle QA test suite.&lt;br /&gt;
===Step 5: Issue retest===&lt;br /&gt;
On Wednesday (AWST) the manual issue retesting is performed at Moodle HQ. Issue test steps must be clear and concise, allowing the issue to be recreated easily. Testing steps must go in the testing instructions field to prove that the bug is resolved. Areas of Moodle to investigate with extra exploratory testing should be entered here also.&lt;br /&gt;
&lt;br /&gt;
The format for writing test steps is:&lt;br /&gt;
&lt;br /&gt;
===Pre-requisites:===&lt;br /&gt;
Everything required to allow the test to start. This can include, but is not limited to: issue specific data, test platform information: e.g. OS.&lt;br /&gt;
===Test Steps:===&lt;br /&gt;
A clear and concise list of test steps required to test the issue with the expected results of each step.&lt;br /&gt;
===Actual Result:===&lt;br /&gt;
The actual result of what happened when the test is complete.&lt;br /&gt;
===Exploratory focus:===&lt;br /&gt;
Areas of Moodle that may need to be investigated further to identify regressions etc.&lt;br /&gt;
An issue passes when the actual result of test no longer occurs and no regressions have been created.&lt;br /&gt;
&lt;br /&gt;
==Stable Sprints==&lt;br /&gt;
&#039;&#039;&#039;TODO&#039;&#039;&#039;&lt;br /&gt;
==Major Releases and New Development==&lt;br /&gt;
&#039;&#039;&#039;TODO&#039;&#039;&#039;&lt;br /&gt;
==Point Releases==&lt;br /&gt;
&#039;&#039;&#039;TODO&#039;&#039;&#039;&lt;/div&gt;</summary>
		<author><name>Esqueeze</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/dev/index.php?title=Testing_strategy/The_Moodle_Testing_Process&amp;diff=35549</id>
		<title>Testing strategy/The Moodle Testing Process</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/dev/index.php?title=Testing_strategy/The_Moodle_Testing_Process&amp;diff=35549"/>
		<updated>2012-09-14T06:22:10Z</updated>

		<summary type="html">&lt;p&gt;Esqueeze: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Work in progress}}&lt;br /&gt;
=Methodologies in the Moodle Development Process=&lt;br /&gt;
Moodle has an established process for developing and integrating software. This section describes relevant testing methodology within the existing process.&lt;br /&gt;
The full [https://docs.moodle.org/dev/Process development]&lt;br /&gt;
life-cycle at Moodle is documented in detail [https://docs.moodle.org/dev/Releases#General_release_calendar elsewhere].&lt;br /&gt;
Moodle is currently developed using Agile methodologies including&lt;br /&gt;
Scrum. The following stages of development take place within this&lt;br /&gt;
life-cycle:&lt;br /&gt;
&lt;br /&gt;
* Weekly integration cycle&amp;lt;/P&amp;gt;&lt;br /&gt;
* 3-weekly stable sprints&amp;lt;/P&amp;gt;&lt;br /&gt;
* 6-monthly major releases&amp;lt;/P&amp;gt;&lt;br /&gt;
* 3 minor releases between every major release&amp;lt;/P&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Weekly (Continuous) Integration Cycle==&lt;br /&gt;
A manual testing phase of integration issues occurs towards&lt;br /&gt;
the end of the SDLC at Moodle during the Wednesday (AWST) testing&lt;br /&gt;
phase. This is the last possible chance Moodle gets to capture&lt;br /&gt;
regressions. Relying soley on this phase to capture regressions could result in the late discovery of regressions&lt;br /&gt;
during unguided exploratory testing and worse still the introduction&lt;br /&gt;
of regressions into Master. Discovery of issues late in the SDLC&lt;br /&gt;
prevents issues from being dealt with in a timely manner when&lt;br /&gt;
integrators, or even those writing the code, are able to resolve those issues relatively easily.&lt;br /&gt;
&lt;br /&gt;
The processes described here ensure the bulk of&lt;br /&gt;
testing and the majority of responsibility for capturing regressions&lt;br /&gt;
does not lie with the Wednesday testing phase. Testing is performed as early in the SDLC as possible.&lt;br /&gt;
==New Unit Tests==&lt;br /&gt;
Creating unit tests prior to coding starts&lt;br /&gt;
the whole SDLC off with a focus on quality. If code isn&#039;t&lt;br /&gt;
considered complete until unit tests pass, then the code itself will&lt;br /&gt;
be of a high quality by the time it is implemented. This also creates a&lt;br /&gt;
repository of unit regression tests in an iterative manner while not&lt;br /&gt;
requiring of a great deal of extra effort to write those tests. As&lt;br /&gt;
these tests are added, they will provide early regression testing of&lt;br /&gt;
new code.&lt;br /&gt;
&lt;br /&gt;
Unit tests in the PHPUnit framework are a requirement when submitting code to Moodle.&lt;br /&gt;
&lt;br /&gt;
==Integration Steps==&lt;br /&gt;
===Step 1: GIT Pull to integration CI server===&lt;br /&gt;
When developers are ready to submit their code into the integration process, they set the status of the tracker issue to &#039;Ready for integration&#039;. This in turn triggers the Jenkins CI job &amp;quot;Pre-check remote branch&amp;quot;. This job performs the following tasks:&lt;br /&gt;
* Pull the changes to a local branch on the Integration CI Server.&lt;br /&gt;
** git reset --hard origin =&amp;gt; so it is in the same status than the official git repository&lt;br /&gt;
** git pull =&amp;gt; get the changes proposed by a developer&lt;br /&gt;
* Run checks on the code.&lt;br /&gt;
* Generate a results artefact that is sent to the developer.&lt;br /&gt;
&lt;br /&gt;
Please note; each job begins by resetting the local git repository to the original state so the pulls are never permanent. This mitigates the risk posed by &amp;quot;collisions&amp;quot; as the purpose of this step is not to test for &amp;quot;collisions&amp;quot; between conflicting patches but to verify that code meets the required standard to proceed to peer review.&lt;br /&gt;
===Step 2: Peer Review===&lt;br /&gt;
Any code sent back to the developer at Peer Review, after any changes have been made, must be must pass step 1 again before re-review.&lt;br /&gt;
===Step 3: GIT Pull to integration===&lt;br /&gt;
Code passing peer review can be pulled from the developers repository to integration where, among other things, the main Jenkins integration jobs run. At this stage integrators also check for &amp;quot;collisions&amp;quot; and conflicts between submitted patches.&lt;br /&gt;
===Step 4: GIT Pull to Nightly Build Machine, performance and browser driven automation suite===&lt;br /&gt;
A set of regression tests are run at 2AM AWST Daily. These tests are scheduled to run automatically from the Moodle test automation framework and run on all supported platforms e.g. all databases MySQL, Oracle, MSSQL, PostgreSQL. The following tests are performed in this order:&lt;br /&gt;
# Moodle unit tests, including those submitted by developers.&lt;br /&gt;
# PerfComp performance comparison tests.&lt;br /&gt;
# Selenium acceptance tests, automated browser tests based upon the existing Moodle QA test suite.&lt;br /&gt;
===Step 5: Issue retest===&lt;br /&gt;
On Wednesday (AWST) the manual issue retesting is performed at Moodle HQ. Issue test steps must be clear and concise, allowing the issue to be recreated easily. Testing steps must go in the testing instructions field to prove that the bug is resolved. Areas of Moodle to investigate with extra exploratory testing should be entered here also.&lt;br /&gt;
&lt;br /&gt;
The format for writing test steps is:&lt;br /&gt;
&#039;&#039;&#039;Pre-requisites:&#039;&#039;&#039;&lt;br /&gt;
Everything required to allow the test to start. This can include, but is not limited to: issue specific data, test platform information: e.g. OS.&lt;br /&gt;
&#039;&#039;&#039;Test Steps:&#039;&#039;&#039;&lt;br /&gt;
A clear and concise list of test steps required to test the issue with the expected results of each step.&lt;br /&gt;
&#039;&#039;&#039;Actual Result:&#039;&#039;&#039;&lt;br /&gt;
The actual result of what happened when the test is complete.&lt;br /&gt;
&#039;&#039;&#039;Exploratory focus:&#039;&#039;&#039;&lt;br /&gt;
Areas of Moodle that may need to be investigated further to identify regressions etc.&lt;br /&gt;
An issue passes when the actual result of test no longer occurs and no regressions have been created.&lt;br /&gt;
==Stable Sprints==&lt;br /&gt;
&#039;&#039;&#039;TODO&#039;&#039;&#039;&lt;br /&gt;
==Major Releases and New Development==&lt;br /&gt;
&#039;&#039;&#039;TODO&#039;&#039;&#039;&lt;br /&gt;
==Point Releases==&lt;br /&gt;
&#039;&#039;&#039;TODO&#039;&#039;&#039;&lt;/div&gt;</summary>
		<author><name>Esqueeze</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/dev/index.php?title=Testing_strategy/Useful_Resources&amp;diff=35548</id>
		<title>Testing strategy/Useful Resources</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/dev/index.php?title=Testing_strategy/Useful_Resources&amp;diff=35548"/>
		<updated>2012-09-14T06:16:47Z</updated>

		<summary type="html">&lt;p&gt;Esqueeze: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Work in progress}}&lt;br /&gt;
&amp;lt;H1 CLASS=&amp;quot;western&amp;quot;&amp;gt;Useful Resources&amp;lt;/H1&amp;gt;&lt;br /&gt;
&amp;lt;UL&amp;gt;&lt;br /&gt;
&amp;lt;LI&amp;gt;&amp;lt;P&amp;gt;[http://jenkins-php.org/ Template for Jenkins Jobs for PHP Projects]&amp;lt;/P&amp;gt;&lt;br /&gt;
&amp;lt;LI&amp;gt;&amp;lt;P&amp;gt;[https://wiki.jenkins-ci.org/display/JENKINS/TestLink+Plugin Testlink Jenkins Plugin]&amp;lt;/P&amp;gt;&lt;br /&gt;
&amp;lt;LI&amp;gt;&amp;lt;P&amp;gt;[http://seleniumhq.org/ Selenium]&amp;lt;/P&amp;gt;&lt;br /&gt;
&amp;lt;/UL&amp;gt;&lt;/div&gt;</summary>
		<author><name>Esqueeze</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/dev/index.php?title=Testing_strategy&amp;diff=35547</id>
		<title>Testing strategy</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/dev/index.php?title=Testing_strategy&amp;diff=35547"/>
		<updated>2012-09-14T06:15:33Z</updated>

		<summary type="html">&lt;p&gt;Esqueeze: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Work in progress}}&lt;br /&gt;
=Introduction=&lt;br /&gt;
==Purpose==&lt;br /&gt;
The purpose of this document is to define a high level QA strategy&lt;br /&gt;
at Moodle and communicate that process to the relevant stakeholders.&lt;br /&gt;
This document is loosely based upon the IEEE829 standard for software&lt;br /&gt;
testing documentation; adaptations have been made to this standard to&lt;br /&gt;
make the document more lightweight, suitable for use in an agile&lt;br /&gt;
process and relevant to the organization. &lt;br /&gt;
&lt;br /&gt;
This document is test centric, only explaining the development&lt;br /&gt;
process from a testing point of view. The scope of this document does&lt;br /&gt;
not cover the details of the entire development process at Moodle but&lt;br /&gt;
how testing is applied to it. This document also discusses potential&lt;br /&gt;
benefits to the organization of the processes discussed.&lt;br /&gt;
Currently the processes that are documented here are under development. Progress can be viewed via the [https://docs.moodle.org/dev/Testing_Roadmap Testing Roadmap]&lt;br /&gt;
==Scope==&lt;br /&gt;
This document encompasses all testing activities at Moodle and how they will be performed. This includes:&lt;br /&gt;
&lt;br /&gt;
* [https://docs.moodle.org/dev/Testing_strategy/Testing_Methodology_At_Moodle Testing Methodology at Moodle]&lt;br /&gt;
* [https://docs.moodle.org/dev/Testing_strategy/The_Moodle_Testing_Process The Moodle Testing Process]&lt;br /&gt;
* [https://docs.moodle.org/dev/Testing_strategy/Hardware_Requirements Hardware requirements]&lt;br /&gt;
* [https://docs.moodle.org/dev/Testing_strategy/Testing_Tools_and_Their_Use Testing Tools and Their Use]&lt;br /&gt;
* [https://docs.moodle.org/dev/Testing_strategy/Test_Automation_Process Test Automation Process]&lt;br /&gt;
* [https://docs.moodle.org/dev/Testing_strategy/Test_Environments Test Environments]&lt;br /&gt;
* [https://docs.moodle.org/dev/Testing_strategy/Useful_Resources Useful Resources]&lt;/div&gt;</summary>
		<author><name>Esqueeze</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/dev/index.php?title=Testing_strategy&amp;diff=35546</id>
		<title>Testing strategy</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/dev/index.php?title=Testing_strategy&amp;diff=35546"/>
		<updated>2012-09-14T06:15:07Z</updated>

		<summary type="html">&lt;p&gt;Esqueeze: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Work in progress}}&lt;br /&gt;
=Introduction=&lt;br /&gt;
==Purpose==&lt;br /&gt;
The purpose of this document is to define a high level QA strategy&lt;br /&gt;
at Moodle and communicate that process to the relevant stakeholders.&lt;br /&gt;
This document is loosely based upon the IEEE829 standard for software&lt;br /&gt;
testing documentation; adaptations have been made to this standard to&lt;br /&gt;
make the document more lightweight, suitable for use in an agile&lt;br /&gt;
process and relevant to the organization. &lt;br /&gt;
&lt;br /&gt;
This document is test centric, only explaining the development&lt;br /&gt;
process from a testing point of view. The scope of this document does&lt;br /&gt;
not cover the details of the entire development process at Moodle but&lt;br /&gt;
how testing is applied to it. This document also discusses potential&lt;br /&gt;
benefits to the organization of the processes discussed.&lt;br /&gt;
Currently the processes that are documented here are under development. Progress can be viewed via the [https://docs.moodle.org/dev/Testing_Roadmap Testing Roadmap]&lt;br /&gt;
==Scope==&lt;br /&gt;
This document encompasses all testing activities at Moodle and how they will be performed. This includes:&lt;br /&gt;
&lt;br /&gt;
* [https://docs.moodle.org/dev/Testing_strategy/Testing_Methodology_At_Moodle Testing Methodology at Moodle]&lt;br /&gt;
* [https://docs.moodle.org/dev/Testing_strategy/The_Moodle_Testing_Process The Moodle Testing Process]&lt;br /&gt;
* [https://docs.moodle.org/dev/Testing_strategy/Hardware_Requirements Hardware requirements]&lt;br /&gt;
* [https://docs.moodle.org/dev/Testing_strategy/Testing_Tools_and_Their_Use Testing Tools and Their Use]&lt;br /&gt;
* [https://docs.moodle.org/dev/Testing_strategy/Test_Automation_Process Test Automation Process]&lt;br /&gt;
* [https://docs.moodle.org/dev/Testing_strategy/Test_Environments Test Environments]&lt;br /&gt;
* [https://docs.moodle.org/dev/Testing_strategy/Training Training]&lt;br /&gt;
* [https://docs.moodle.org/dev/Testing_strategy/Useful_Resources Useful Resources]&lt;/div&gt;</summary>
		<author><name>Esqueeze</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/dev/index.php?title=Testing_strategy/Implementation_Plan&amp;diff=35545</id>
		<title>Testing strategy/Implementation Plan</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/dev/index.php?title=Testing_strategy/Implementation_Plan&amp;diff=35545"/>
		<updated>2012-09-14T06:14:37Z</updated>

		<summary type="html">&lt;p&gt;Esqueeze: Blanked the page&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Esqueeze</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/dev/index.php?title=Testing_strategy/Test_Environments&amp;diff=35544</id>
		<title>Testing strategy/Test Environments</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/dev/index.php?title=Testing_strategy/Test_Environments&amp;diff=35544"/>
		<updated>2012-09-14T06:13:31Z</updated>

		<summary type="html">&lt;p&gt;Esqueeze: /* CI Server */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Work in progress}}&lt;br /&gt;
== Test Automation Environments ==&lt;br /&gt;
Test environments for automation are hosted on&lt;br /&gt;
the Xen VM server. These will include a CI server (the build machine), The nightly build machine&lt;br /&gt;
database servers and web servers.&lt;br /&gt;
&lt;br /&gt;
== Requirements Gathering ==&lt;br /&gt;
As a task while provisioning the VM Server, two&lt;br /&gt;
surveys have been run to determine popular Test Platforms. Survey 1&lt;br /&gt;
gathered metrics from the Moodle Community and Survey 2 gathered&lt;br /&gt;
metrics from Moodle Partners. Limiting factors of these surveys are&lt;br /&gt;
that both samples are relatively small. The results of the surveys&lt;br /&gt;
are as follows:&lt;br /&gt;
=== Survey 1 The Moodle Community:===&lt;br /&gt;
Fig. 1 Separate Database and Web Server Yes/No:&lt;br /&gt;
&lt;br /&gt;
[[File:Fig._2_user_split_system.png]]&lt;br /&gt;
&lt;br /&gt;
Fig. 2 Operating System of Separate Web Server:&lt;br /&gt;
&lt;br /&gt;
[[File:fig.3_user_os_separatewebserver.gif]]&lt;br /&gt;
&lt;br /&gt;
Fig. 3 Operating System of Separate Database Server:&lt;br /&gt;
&lt;br /&gt;
[[File:fig.6_user_OS_SeparateDB.gif]]&lt;br /&gt;
&lt;br /&gt;
Fig. 4 What Databases are Used on a Split System:&lt;br /&gt;
&lt;br /&gt;
[[File:Fig7_user_dbs_used_split.png]]&lt;br /&gt;
&lt;br /&gt;
Fig. 5 What Databases are Used on an all in one Database Server and Webserver:&lt;br /&gt;
&lt;br /&gt;
[[File:fig8_user_database_combined.png]]&lt;br /&gt;
&lt;br /&gt;
Fig. 6 What Web Server is Used on a Split System:&lt;br /&gt;
&lt;br /&gt;
[[File:user_webserver_split.png]]&lt;br /&gt;
&lt;br /&gt;
Fig. 7 What Web Server is Used on an all in one Database Server and Webserver:&lt;br /&gt;
&lt;br /&gt;
[[File:user_webserver_combined.png]]&lt;br /&gt;
&lt;br /&gt;
As Debian and Ubuntu are similar and Red Hat and Centos are similar that,based upon our sample data, our three main operating used by the Moodle community Debian/Ubuntu, Red Hat/Centos and MS Server 2008 with a weighting of almost 75% towards the two&lt;br /&gt;
Linux operating systems.&lt;br /&gt;
&lt;br /&gt;
Of the five supported databases, the majority of community users prefer MySQL with PostgreSQL and MSSQL a fairly equal&lt;br /&gt;
but distant second and third.&lt;br /&gt;
&lt;br /&gt;
The Majority of community users also use Apache with IIS a very distant second.&lt;br /&gt;
&lt;br /&gt;
=== Survey 2 The Moodle Partners: ===&lt;br /&gt;
&lt;br /&gt;
Fig. 8 Separate Database and Web Server Yes/No:&lt;br /&gt;
&lt;br /&gt;
[[File:partner_split_combine.png]]&lt;br /&gt;
&lt;br /&gt;
Fig. 9 Partner OS Database Server:&lt;br /&gt;
&lt;br /&gt;
[[File:partner_OS_DB.gif]]&lt;br /&gt;
&lt;br /&gt;
Fig. 10 Partner OS Web Server (combining answers for fig 8):&lt;br /&gt;
&lt;br /&gt;
[[File:partner_OS_Web.gif]]&lt;br /&gt;
&lt;br /&gt;
Fig. 11  What Databases are Used on a Split System:&lt;br /&gt;
&lt;br /&gt;
[[File:partner_db_split.png]]&lt;br /&gt;
&lt;br /&gt;
Fig. 12 What Databases are Used on a Combined System:&lt;br /&gt;
&lt;br /&gt;
[[File:partner_db_combine.png]]&lt;br /&gt;
&lt;br /&gt;
Fig. 13 What Web Servers are used on a Split System:&lt;br /&gt;
&lt;br /&gt;
[[File:partner_webserver_split.png]]&lt;br /&gt;
&lt;br /&gt;
Fig. 14 What Web Servers are used on a Combined System:&lt;br /&gt;
&lt;br /&gt;
[[File:partner_webserver_combined.png]]&lt;br /&gt;
&lt;br /&gt;
This suggests that the majority of partners use Debian/Ubuntu or Centos/Rad Hat Linux, Apache and either a MySQL or&lt;br /&gt;
PostgreSQL database. &lt;br /&gt;
&lt;br /&gt;
== VM Requirements ==&lt;br /&gt;
VM&#039;s for test environments are modular i.e. they are separate database servers and web servers. This allows the mixing and&lt;br /&gt;
matching of databases and their host OS to the web servers and their host OS as requirements change. At any time, any Web Server can&lt;br /&gt;
connect to any Database Server. It should also reduce potential numbers of running VMs required for a particular platform.&lt;br /&gt;
A master hub VM is required for Jenkins and the hub for the Selenium grid.&lt;br /&gt;
&lt;br /&gt;
== CI Server ==&lt;br /&gt;
There are two CI Servers.&lt;br /&gt;
===Integration CI===&lt;br /&gt;
This is used to run integration jobs, checks and tests when code is checked in. The unit tests run on this machine on a MySQL database.&lt;br /&gt;
===Nightly Integration Build===&lt;br /&gt;
This is used to run PHPUnit tests on Postgres, performance tests against the Moodle supported databases and Browser driven Selenium tests.&lt;br /&gt;
&lt;br /&gt;
Fig. 15 Selenium Test VM Architecture:&lt;br /&gt;
&lt;br /&gt;
[[File:VM Architecture Selenium.gif]]&lt;/div&gt;</summary>
		<author><name>Esqueeze</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/dev/index.php?title=Testing_strategy/Test_Environments&amp;diff=35543</id>
		<title>Testing strategy/Test Environments</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/dev/index.php?title=Testing_strategy/Test_Environments&amp;diff=35543"/>
		<updated>2012-09-14T06:08:50Z</updated>

		<summary type="html">&lt;p&gt;Esqueeze: /* Test Environments */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Work in progress}}&lt;br /&gt;
== Test Automation Environments ==&lt;br /&gt;
Test environments for automation are hosted on&lt;br /&gt;
the Xen VM server. These will include a CI server (the build machine), The nightly build machine&lt;br /&gt;
database servers and web servers.&lt;br /&gt;
&lt;br /&gt;
== Requirements Gathering ==&lt;br /&gt;
As a task while provisioning the VM Server, two&lt;br /&gt;
surveys have been run to determine popular Test Platforms. Survey 1&lt;br /&gt;
gathered metrics from the Moodle Community and Survey 2 gathered&lt;br /&gt;
metrics from Moodle Partners. Limiting factors of these surveys are&lt;br /&gt;
that both samples are relatively small. The results of the surveys&lt;br /&gt;
are as follows:&lt;br /&gt;
=== Survey 1 The Moodle Community:===&lt;br /&gt;
Fig. 1 Separate Database and Web Server Yes/No:&lt;br /&gt;
&lt;br /&gt;
[[File:Fig._2_user_split_system.png]]&lt;br /&gt;
&lt;br /&gt;
Fig. 2 Operating System of Separate Web Server:&lt;br /&gt;
&lt;br /&gt;
[[File:fig.3_user_os_separatewebserver.gif]]&lt;br /&gt;
&lt;br /&gt;
Fig. 3 Operating System of Separate Database Server:&lt;br /&gt;
&lt;br /&gt;
[[File:fig.6_user_OS_SeparateDB.gif]]&lt;br /&gt;
&lt;br /&gt;
Fig. 4 What Databases are Used on a Split System:&lt;br /&gt;
&lt;br /&gt;
[[File:Fig7_user_dbs_used_split.png]]&lt;br /&gt;
&lt;br /&gt;
Fig. 5 What Databases are Used on an all in one Database Server and Webserver:&lt;br /&gt;
&lt;br /&gt;
[[File:fig8_user_database_combined.png]]&lt;br /&gt;
&lt;br /&gt;
Fig. 6 What Web Server is Used on a Split System:&lt;br /&gt;
&lt;br /&gt;
[[File:user_webserver_split.png]]&lt;br /&gt;
&lt;br /&gt;
Fig. 7 What Web Server is Used on an all in one Database Server and Webserver:&lt;br /&gt;
&lt;br /&gt;
[[File:user_webserver_combined.png]]&lt;br /&gt;
&lt;br /&gt;
As Debian and Ubuntu are similar and Red Hat and Centos are similar that,based upon our sample data, our three main operating used by the Moodle community Debian/Ubuntu, Red Hat/Centos and MS Server 2008 with a weighting of almost 75% towards the two&lt;br /&gt;
Linux operating systems.&lt;br /&gt;
&lt;br /&gt;
Of the five supported databases, the majority of community users prefer MySQL with PostgreSQL and MSSQL a fairly equal&lt;br /&gt;
but distant second and third.&lt;br /&gt;
&lt;br /&gt;
The Majority of community users also use Apache with IIS a very distant second.&lt;br /&gt;
&lt;br /&gt;
=== Survey 2 The Moodle Partners: ===&lt;br /&gt;
&lt;br /&gt;
Fig. 8 Separate Database and Web Server Yes/No:&lt;br /&gt;
&lt;br /&gt;
[[File:partner_split_combine.png]]&lt;br /&gt;
&lt;br /&gt;
Fig. 9 Partner OS Database Server:&lt;br /&gt;
&lt;br /&gt;
[[File:partner_OS_DB.gif]]&lt;br /&gt;
&lt;br /&gt;
Fig. 10 Partner OS Web Server (combining answers for fig 8):&lt;br /&gt;
&lt;br /&gt;
[[File:partner_OS_Web.gif]]&lt;br /&gt;
&lt;br /&gt;
Fig. 11  What Databases are Used on a Split System:&lt;br /&gt;
&lt;br /&gt;
[[File:partner_db_split.png]]&lt;br /&gt;
&lt;br /&gt;
Fig. 12 What Databases are Used on a Combined System:&lt;br /&gt;
&lt;br /&gt;
[[File:partner_db_combine.png]]&lt;br /&gt;
&lt;br /&gt;
Fig. 13 What Web Servers are used on a Split System:&lt;br /&gt;
&lt;br /&gt;
[[File:partner_webserver_split.png]]&lt;br /&gt;
&lt;br /&gt;
Fig. 14 What Web Servers are used on a Combined System:&lt;br /&gt;
&lt;br /&gt;
[[File:partner_webserver_combined.png]]&lt;br /&gt;
&lt;br /&gt;
This suggests that the majority of partners use Debian/Ubuntu or Centos/Rad Hat Linux, Apache and either a MySQL or&lt;br /&gt;
PostgreSQL database. &lt;br /&gt;
&lt;br /&gt;
== VM Requirements ==&lt;br /&gt;
VM&#039;s for test environments are modular i.e. they are separate database servers and web servers. This allows the mixing and&lt;br /&gt;
matching of databases and their host OS to the web servers and their host OS as requirements change. At any time, any Web Server can&lt;br /&gt;
connect to any Database Server. It should also reduce potential numbers of running VMs required for a particular platform.&lt;br /&gt;
A master hub VM is required for Jenkins and the hub for the Selenium grid.&lt;br /&gt;
&lt;br /&gt;
== CI Server ==&lt;br /&gt;
The CI Server is used to run integration jobs, checks and tests. The unit and integration items are all tested on the CI server itself whereas the Selenium acceptance, performance and regression tests run on other VM&#039;s.&lt;br /&gt;
&lt;br /&gt;
Fig. 15 Selenium Test VM Architecture:&lt;br /&gt;
&lt;br /&gt;
[[File:VM Architecture Selenium.gif]]&lt;/div&gt;</summary>
		<author><name>Esqueeze</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/dev/index.php?title=Testing_strategy&amp;diff=35542</id>
		<title>Testing strategy</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/dev/index.php?title=Testing_strategy&amp;diff=35542"/>
		<updated>2012-09-14T06:07:25Z</updated>

		<summary type="html">&lt;p&gt;Esqueeze: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Work in progress}}&lt;br /&gt;
=Introduction=&lt;br /&gt;
==Purpose==&lt;br /&gt;
The purpose of this document is to define a high level QA strategy&lt;br /&gt;
at Moodle and communicate that process to the relevant stakeholders.&lt;br /&gt;
This document is loosely based upon the IEEE829 standard for software&lt;br /&gt;
testing documentation; adaptations have been made to this standard to&lt;br /&gt;
make the document more lightweight, suitable for use in an agile&lt;br /&gt;
process and relevant to the organization. &lt;br /&gt;
&lt;br /&gt;
This document is test centric, only explaining the development&lt;br /&gt;
process from a testing point of view. The scope of this document does&lt;br /&gt;
not cover the details of the entire development process at Moodle but&lt;br /&gt;
how testing is applied to it. This document also discusses potential&lt;br /&gt;
benefits to the organization of the processes discussed.&lt;br /&gt;
Currently the processes that are documented here are under development. Progress can be viewed via the [https://docs.moodle.org/dev/Testing_Roadmap Testing Roadmap]&lt;br /&gt;
==Scope==&lt;br /&gt;
This document encompasses all testing activities at Moodle and how they will be performed. This includes:&lt;br /&gt;
&lt;br /&gt;
* [https://docs.moodle.org/dev/Testing_strategy/Testing_Methodology_At_Moodle Testing Methodology at Moodle]&lt;br /&gt;
* [https://docs.moodle.org/dev/Testing_strategy/The_Moodle_Testing_Process The Moodle Testing Process]&lt;br /&gt;
* [https://docs.moodle.org/dev/Testing_strategy/Hardware_Requirements Hardware requirements]&lt;br /&gt;
* [https://docs.moodle.org/dev/Testing_strategy/Testing_Tools_and_Their_Use Testing Tools and Their Use]&lt;br /&gt;
* [https://docs.moodle.org/dev/Testing_strategy/Test_Automation_Process Test Automation Process]&lt;br /&gt;
* [https://docs.moodle.org/dev/Testing_strategy/Test_Environments Test Environments]&lt;br /&gt;
* [https://docs.moodle.org/dev/Testing_strategy/Implementation_Plan Implementation Plan]&lt;br /&gt;
* [https://docs.moodle.org/dev/Testing_strategy/Training Training]&lt;br /&gt;
* [https://docs.moodle.org/dev/Testing_strategy/Useful_Resources Useful Resources]&lt;/div&gt;</summary>
		<author><name>Esqueeze</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/dev/index.php?title=Testing_strategy/Testing_Tools_and_Their_Use&amp;diff=35541</id>
		<title>Testing strategy/Testing Tools and Their Use</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/dev/index.php?title=Testing_strategy/Testing_Tools_and_Their_Use&amp;diff=35541"/>
		<updated>2012-09-14T06:04:25Z</updated>

		<summary type="html">&lt;p&gt;Esqueeze: /* Test Management and Defect Tracking */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Work in progress}}&lt;br /&gt;
=Testing Tools and Their Use=&lt;br /&gt;
All of the tools specified below are free with most being open source and extendible. The advantages are:&lt;br /&gt;
* There is no cost to Moodle for licences.&lt;br /&gt;
* Applications are web based with a tiny footprint and will run on low spec hardware/VMs.&lt;br /&gt;
* Applications with databases all run on MySQL,which is free.&lt;br /&gt;
* Moodle can extend the tools/create plugins, in-house, if customisations are required.&lt;br /&gt;
&lt;br /&gt;
==Continuous Integration==&lt;br /&gt;
Continuous integration is the process of running tests frequently when code is checked into a repository. The aim of this is to keep code clean and allow the early capture of&lt;br /&gt;
broken/incomplete code, early warning of conflicting changes (regressions) and a constantly available current “build” for demo&lt;br /&gt;
and testing.&lt;br /&gt;
Moodle&#039;s continuous integration process uses a second &amp;quot;Test&amp;quot; integration server where code must be submitted to prior to being reviewed by integrators.&lt;br /&gt;
===Jenkins===&lt;br /&gt;
Jenkins is a fully extendible application that monitors executions of repeated jobs. Results are displayed via a web application. Jenkins is an information hub to provide Moodle with continuous feedback about the quality of Moodle software.&lt;br /&gt;
Jenkins can monitor any/multiple GIT repository for changes without adding hooks to the code and be used to run a set of&lt;br /&gt;
tasks such as:&lt;br /&gt;
* Pull git&lt;br /&gt;
* Run unit tests&lt;br /&gt;
* Create a moodle site&lt;br /&gt;
* Add some information to it&lt;br /&gt;
* Run the selenium tests&lt;br /&gt;
* Report errors/warnings/failures&lt;br /&gt;
===Performance Testing Matrix===&lt;br /&gt;
Measuring system performance during this testing will assist with preventing degradation of performance in existing code caused by regressions.&lt;br /&gt;
To assist with early capture of performance degradation due to regression; a performance matrix records performance against automated user interactions generated using JMeter.&lt;br /&gt;
===PHPUnit===&lt;br /&gt;
Unit testing tool for PHP; implementation is already&lt;br /&gt;
planned.&lt;br /&gt;
===SimpleTest===&lt;br /&gt;
Moodle&#039;s legacy unit testing tool.&lt;br /&gt;
&lt;br /&gt;
==Other Automated Testing==&lt;br /&gt;
Methods of testing other than unit testing is automated. Selenium is used for functional testing in conjunction with the Behat behavioural driven development tool.&lt;br /&gt;
===Selenium===&lt;br /&gt;
Selenium is an extremely powerful, free and fully extendible browser automation tool. Selenium Webdriver – Selenium Server is a language independent server application that runs Selenium test cases. Selenium WebDriver is a collection of language specific bindings to drive a browser. There are unofficial language bindings for PHP and WebDriver. Selenium test cases can be written in an object oriented manner and re-usable methods can be created. Selenium is highly resistant to CSS changes and supports using XPath to locate page elements.&lt;br /&gt;
Furthermore Selenium server can be run in a grid configuration so that tests can&lt;br /&gt;
run in parallel across multiple test environments controlled by one&lt;br /&gt;
hub:&lt;br /&gt;
Fig.2 Selenium Grid&lt;br /&gt;
[[File:grid1.png]]&lt;br /&gt;
When a test is&lt;br /&gt;
required to run on a specific platform Selenium Grid can be&lt;br /&gt;
made aware of the environments you wish to use. The Selenium Hub will&lt;br /&gt;
then ensure that a test runs only on the Selenium slaves providing&lt;br /&gt;
the requested environment:&lt;br /&gt;
Fig.3 Requesting Grid Environments&lt;br /&gt;
[[File:grid2.png]]&lt;br /&gt;
===Behat===&lt;br /&gt;
Tests that will run in Selenium are written in Behat. Behat is a PHP port of Cucumber, the popular Behavioural Driven Development (BDD) tool. Gherkin is a ubiquitous, domain specific language (DSL) that is used to document system behaviours. This DSL can be understood in the context of the business domain and acts as a layer of abstraction to automated tests. A great way of documenting requirements.&lt;br /&gt;
===PHPUnit Selenium Extension===&lt;br /&gt;
Selenium/Behat test results are output in PHPUnit xml format.&lt;br /&gt;
&lt;br /&gt;
==Hosting Test Environments==&lt;br /&gt;
Hosting instances of Jenkins and test environments will be performed using server virtualization.&lt;br /&gt;
===XEN===&lt;br /&gt;
Xen is a robust, secure, high performance type 1 baremetal hypervisor, or a virtual machine monitor (VMM). Xen can securely&lt;br /&gt;
execute multiple virtual machines, each running its own OS, on a&lt;br /&gt;
single physical system with close-to-native performance. Xen is open&lt;br /&gt;
source, and it&#039;s used as the core virtualization engine for many&lt;br /&gt;
vendors products.&lt;br /&gt;
==Version Control==&lt;br /&gt;
===GIT===&lt;br /&gt;
Moodle use GIT for version control.&lt;br /&gt;
==Test Management and Defect Tracking==&lt;br /&gt;
===Jira===&lt;br /&gt;
Moodle already use Jira for development and project&lt;br /&gt;
planning and tracking issues.&lt;br /&gt;
===Zephyr===&lt;br /&gt;
The Zephyr test management plugin for Jira is used to manage test documentation and execution.&lt;/div&gt;</summary>
		<author><name>Esqueeze</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/dev/index.php?title=Testing_strategy/Testing_Tools_and_Their_Use&amp;diff=35540</id>
		<title>Testing strategy/Testing Tools and Their Use</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/dev/index.php?title=Testing_strategy/Testing_Tools_and_Their_Use&amp;diff=35540"/>
		<updated>2012-09-14T05:56:28Z</updated>

		<summary type="html">&lt;p&gt;Esqueeze: /* Other Automated Testing */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Work in progress}}&lt;br /&gt;
=Testing Tools and Their Use=&lt;br /&gt;
All of the tools specified below are free with most being open source and extendible. The advantages are:&lt;br /&gt;
* There is no cost to Moodle for licences.&lt;br /&gt;
* Applications are web based with a tiny footprint and will run on low spec hardware/VMs.&lt;br /&gt;
* Applications with databases all run on MySQL,which is free.&lt;br /&gt;
* Moodle can extend the tools/create plugins, in-house, if customisations are required.&lt;br /&gt;
&lt;br /&gt;
==Continuous Integration==&lt;br /&gt;
Continuous integration is the process of running tests frequently when code is checked into a repository. The aim of this is to keep code clean and allow the early capture of&lt;br /&gt;
broken/incomplete code, early warning of conflicting changes (regressions) and a constantly available current “build” for demo&lt;br /&gt;
and testing.&lt;br /&gt;
Moodle&#039;s continuous integration process uses a second &amp;quot;Test&amp;quot; integration server where code must be submitted to prior to being reviewed by integrators.&lt;br /&gt;
===Jenkins===&lt;br /&gt;
Jenkins is a fully extendible application that monitors executions of repeated jobs. Results are displayed via a web application. Jenkins is an information hub to provide Moodle with continuous feedback about the quality of Moodle software.&lt;br /&gt;
Jenkins can monitor any/multiple GIT repository for changes without adding hooks to the code and be used to run a set of&lt;br /&gt;
tasks such as:&lt;br /&gt;
* Pull git&lt;br /&gt;
* Run unit tests&lt;br /&gt;
* Create a moodle site&lt;br /&gt;
* Add some information to it&lt;br /&gt;
* Run the selenium tests&lt;br /&gt;
* Report errors/warnings/failures&lt;br /&gt;
===Performance Testing Matrix===&lt;br /&gt;
Measuring system performance during this testing will assist with preventing degradation of performance in existing code caused by regressions.&lt;br /&gt;
To assist with early capture of performance degradation due to regression; a performance matrix records performance against automated user interactions generated using JMeter.&lt;br /&gt;
===PHPUnit===&lt;br /&gt;
Unit testing tool for PHP; implementation is already&lt;br /&gt;
planned.&lt;br /&gt;
===SimpleTest===&lt;br /&gt;
Moodle&#039;s legacy unit testing tool.&lt;br /&gt;
&lt;br /&gt;
==Other Automated Testing==&lt;br /&gt;
Methods of testing other than unit testing is automated. Selenium is used for functional testing in conjunction with the Behat behavioural driven development tool.&lt;br /&gt;
===Selenium===&lt;br /&gt;
Selenium is an extremely powerful, free and fully extendible browser automation tool. Selenium Webdriver – Selenium Server is a language independent server application that runs Selenium test cases. Selenium WebDriver is a collection of language specific bindings to drive a browser. There are unofficial language bindings for PHP and WebDriver. Selenium test cases can be written in an object oriented manner and re-usable methods can be created. Selenium is highly resistant to CSS changes and supports using XPath to locate page elements.&lt;br /&gt;
Furthermore Selenium server can be run in a grid configuration so that tests can&lt;br /&gt;
run in parallel across multiple test environments controlled by one&lt;br /&gt;
hub:&lt;br /&gt;
Fig.2 Selenium Grid&lt;br /&gt;
[[File:grid1.png]]&lt;br /&gt;
When a test is&lt;br /&gt;
required to run on a specific platform Selenium Grid can be&lt;br /&gt;
made aware of the environments you wish to use. The Selenium Hub will&lt;br /&gt;
then ensure that a test runs only on the Selenium slaves providing&lt;br /&gt;
the requested environment:&lt;br /&gt;
Fig.3 Requesting Grid Environments&lt;br /&gt;
[[File:grid2.png]]&lt;br /&gt;
===Behat===&lt;br /&gt;
Tests that will run in Selenium are written in Behat. Behat is a PHP port of Cucumber, the popular Behavioural Driven Development (BDD) tool. Gherkin is a ubiquitous, domain specific language (DSL) that is used to document system behaviours. This DSL can be understood in the context of the business domain and acts as a layer of abstraction to automated tests. A great way of documenting requirements.&lt;br /&gt;
===PHPUnit Selenium Extension===&lt;br /&gt;
Selenium/Behat test results are output in PHPUnit xml format.&lt;br /&gt;
&lt;br /&gt;
==Hosting Test Environments==&lt;br /&gt;
Hosting instances of Jenkins and test environments will be performed using server virtualization.&lt;br /&gt;
===XEN===&lt;br /&gt;
Xen is a robust, secure, high performance type 1 baremetal hypervisor, or a virtual machine monitor (VMM). Xen can securely&lt;br /&gt;
execute multiple virtual machines, each running its own OS, on a&lt;br /&gt;
single physical system with close-to-native performance. Xen is open&lt;br /&gt;
source, and it&#039;s used as the core virtualization engine for many&lt;br /&gt;
vendors products.&lt;br /&gt;
==Version Control==&lt;br /&gt;
===GIT===&lt;br /&gt;
Moodle use GIT for version control.&lt;br /&gt;
==Test Management and Defect Tracking==&lt;br /&gt;
===TestLink===&lt;br /&gt;
TestLink is a free test management tool written in PHP. The test management tool is used to specify and manage tests and&lt;br /&gt;
test suites, then report on test execution. A test management tool is&lt;br /&gt;
useful for managing and co-ordinating organisational testing effort&lt;br /&gt;
and documenting testing. Currently Moodle use Jira as the test&lt;br /&gt;
management tool. Jira is software development management tool and not&lt;br /&gt;
a test management tool.&lt;br /&gt;
&lt;br /&gt;
In TestLink we can create testing projects, test&lt;br /&gt;
plans and document test cases, manage test execution runs then log&lt;br /&gt;
and report results for manual and automated tests.&lt;br /&gt;
===TestLink Jenkins Plugin===&lt;br /&gt;
This plugin integrates TestLink with Jenkins and&lt;br /&gt;
generates reports on automated test execution.&lt;br /&gt;
===Jira===&lt;br /&gt;
Moodle already use Jira for development and project&lt;br /&gt;
planning and tracking issues.&lt;/div&gt;</summary>
		<author><name>Esqueeze</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/dev/index.php?title=Testing_strategy/Testing_Tools_and_Their_Use&amp;diff=35539</id>
		<title>Testing strategy/Testing Tools and Their Use</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/dev/index.php?title=Testing_strategy/Testing_Tools_and_Their_Use&amp;diff=35539"/>
		<updated>2012-09-14T03:20:28Z</updated>

		<summary type="html">&lt;p&gt;Esqueeze: /* Other Automated Testing */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Work in progress}}&lt;br /&gt;
=Testing Tools and Their Use=&lt;br /&gt;
All of the tools specified below are free with most being open source and extendible. The advantages are:&lt;br /&gt;
* There is no cost to Moodle for licences.&lt;br /&gt;
* Applications are web based with a tiny footprint and will run on low spec hardware/VMs.&lt;br /&gt;
* Applications with databases all run on MySQL,which is free.&lt;br /&gt;
* Moodle can extend the tools/create plugins, in-house, if customisations are required.&lt;br /&gt;
&lt;br /&gt;
==Continuous Integration==&lt;br /&gt;
Continuous integration is the process of running tests frequently when code is checked into a repository. The aim of this is to keep code clean and allow the early capture of&lt;br /&gt;
broken/incomplete code, early warning of conflicting changes (regressions) and a constantly available current “build” for demo&lt;br /&gt;
and testing.&lt;br /&gt;
Moodle&#039;s continuous integration process uses a second &amp;quot;Test&amp;quot; integration server where code must be submitted to prior to being reviewed by integrators.&lt;br /&gt;
===Jenkins===&lt;br /&gt;
Jenkins is a fully extendible application that monitors executions of repeated jobs. Results are displayed via a web application. Jenkins is an information hub to provide Moodle with continuous feedback about the quality of Moodle software.&lt;br /&gt;
Jenkins can monitor any/multiple GIT repository for changes without adding hooks to the code and be used to run a set of&lt;br /&gt;
tasks such as:&lt;br /&gt;
* Pull git&lt;br /&gt;
* Run unit tests&lt;br /&gt;
* Create a moodle site&lt;br /&gt;
* Add some information to it&lt;br /&gt;
* Run the selenium tests&lt;br /&gt;
* Report errors/warnings/failures&lt;br /&gt;
===Performance Testing Matrix===&lt;br /&gt;
Measuring system performance during this testing will assist with preventing degradation of performance in existing code caused by regressions.&lt;br /&gt;
To assist with early capture of performance degradation due to regression; a performance matrix records performance against automated user interactions generated using JMeter.&lt;br /&gt;
===PHPUnit===&lt;br /&gt;
Unit testing tool for PHP; implementation is already&lt;br /&gt;
planned.&lt;br /&gt;
===SimpleTest===&lt;br /&gt;
Moodle&#039;s legacy unit testing tool.&lt;br /&gt;
&lt;br /&gt;
==Other Automated Testing==&lt;br /&gt;
Methods of testing other than unit testing is automated. Selenium is used for functional testing in conjunction with the Behat behavioural driven development tool.&lt;br /&gt;
===Selenium===&lt;br /&gt;
Selenium is an extremely powerful, free and fully extendible browser automation tool. Selenium Webdriver – Selenium Server is a language independent server application that runs Selenium test cases. Selenium WebDriver is a collection of language specific bindings to drive a browser. There are unofficial language bindings for PHP and WebDriver. Selenium test cases can be written in an object oriented manner and re-usable methods can be created. Selenium is highly resistant to CSS changes and supports using XPath to locate page elements.&lt;br /&gt;
Furthermore Selenium server can be run in a grid configuration so that tests can&lt;br /&gt;
run in parallel across multiple test environments controlled by one&lt;br /&gt;
hub:&lt;br /&gt;
Fig.2 Selenium Grid&lt;br /&gt;
[[File:grid1.png]]&lt;br /&gt;
When a test is&lt;br /&gt;
required to run on a specific platform Selenium Grid can be&lt;br /&gt;
made aware of the environments you wish to use. The Selenium Hub will&lt;br /&gt;
then ensure that a test runs only on the Selenium slaves providing&lt;br /&gt;
the requested environment:&lt;br /&gt;
Fig.3 Requesting Grid Environments&lt;br /&gt;
[[File:grid2.png]]&lt;br /&gt;
===Behat===&lt;br /&gt;
Tests that will run in Selenium are written in Behat. Behat is a PHP port of Cucumber, the popular Behavioural Driven Development (BDD) tool. Gherkin is a ubiquitous, domain specific language (DSL) that is used to document system behaviours. This DSL can be understood in the context of the business domain and acts as a layer of abstraction to automated tests. A great way of documenting requirements.&lt;br /&gt;
===Firebug===&lt;br /&gt;
Firebug is Firefox plugin that gives a user the ability to easily inspect page source.&lt;br /&gt;
===Firepath===&lt;br /&gt;
Firepath is a Firefox plugin that can generate XPath expressions.&lt;br /&gt;
===Eclipse IDE===&lt;br /&gt;
Eclipse IDE will be used to design Selenium test cases.&lt;br /&gt;
===JUnit/PHPUnit Selenium Extension===&lt;br /&gt;
SeleniumHQ officially support JUnit extensions for Selenium. The JUnit support is more mature than PHPUnit and is fully updated to work with the latest version of Selenium Server.&lt;br /&gt;
&lt;br /&gt;
==Hosting Test Environments==&lt;br /&gt;
Hosting instances of Jenkins and test environments will be performed using server virtualization.&lt;br /&gt;
===XEN===&lt;br /&gt;
Xen is a robust, secure, high performance type 1 baremetal hypervisor, or a virtual machine monitor (VMM). Xen can securely&lt;br /&gt;
execute multiple virtual machines, each running its own OS, on a&lt;br /&gt;
single physical system with close-to-native performance. Xen is open&lt;br /&gt;
source, and it&#039;s used as the core virtualization engine for many&lt;br /&gt;
vendors products.&lt;br /&gt;
==Version Control==&lt;br /&gt;
===GIT===&lt;br /&gt;
Moodle use GIT for version control.&lt;br /&gt;
==Test Management and Defect Tracking==&lt;br /&gt;
===TestLink===&lt;br /&gt;
TestLink is a free test management tool written in PHP. The test management tool is used to specify and manage tests and&lt;br /&gt;
test suites, then report on test execution. A test management tool is&lt;br /&gt;
useful for managing and co-ordinating organisational testing effort&lt;br /&gt;
and documenting testing. Currently Moodle use Jira as the test&lt;br /&gt;
management tool. Jira is software development management tool and not&lt;br /&gt;
a test management tool.&lt;br /&gt;
&lt;br /&gt;
In TestLink we can create testing projects, test&lt;br /&gt;
plans and document test cases, manage test execution runs then log&lt;br /&gt;
and report results for manual and automated tests.&lt;br /&gt;
===TestLink Jenkins Plugin===&lt;br /&gt;
This plugin integrates TestLink with Jenkins and&lt;br /&gt;
generates reports on automated test execution.&lt;br /&gt;
===Jira===&lt;br /&gt;
Moodle already use Jira for development and project&lt;br /&gt;
planning and tracking issues.&lt;/div&gt;</summary>
		<author><name>Esqueeze</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/dev/index.php?title=Testing_strategy/Testing_Tools_and_Their_Use&amp;diff=35538</id>
		<title>Testing strategy/Testing Tools and Their Use</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/dev/index.php?title=Testing_strategy/Testing_Tools_and_Their_Use&amp;diff=35538"/>
		<updated>2012-09-14T03:07:33Z</updated>

		<summary type="html">&lt;p&gt;Esqueeze: /* Continuous Integration */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Work in progress}}&lt;br /&gt;
=Testing Tools and Their Use=&lt;br /&gt;
All of the tools specified below are free with most being open source and extendible. The advantages are:&lt;br /&gt;
* There is no cost to Moodle for licences.&lt;br /&gt;
* Applications are web based with a tiny footprint and will run on low spec hardware/VMs.&lt;br /&gt;
* Applications with databases all run on MySQL,which is free.&lt;br /&gt;
* Moodle can extend the tools/create plugins, in-house, if customisations are required.&lt;br /&gt;
&lt;br /&gt;
==Continuous Integration==&lt;br /&gt;
Continuous integration is the process of running tests frequently when code is checked into a repository. The aim of this is to keep code clean and allow the early capture of&lt;br /&gt;
broken/incomplete code, early warning of conflicting changes (regressions) and a constantly available current “build” for demo&lt;br /&gt;
and testing.&lt;br /&gt;
Moodle&#039;s continuous integration process uses a second &amp;quot;Test&amp;quot; integration server where code must be submitted to prior to being reviewed by integrators.&lt;br /&gt;
===Jenkins===&lt;br /&gt;
Jenkins is a fully extendible application that monitors executions of repeated jobs. Results are displayed via a web application. Jenkins is an information hub to provide Moodle with continuous feedback about the quality of Moodle software.&lt;br /&gt;
Jenkins can monitor any/multiple GIT repository for changes without adding hooks to the code and be used to run a set of&lt;br /&gt;
tasks such as:&lt;br /&gt;
* Pull git&lt;br /&gt;
* Run unit tests&lt;br /&gt;
* Create a moodle site&lt;br /&gt;
* Add some information to it&lt;br /&gt;
* Run the selenium tests&lt;br /&gt;
* Report errors/warnings/failures&lt;br /&gt;
===Performance Testing Matrix===&lt;br /&gt;
Measuring system performance during this testing will assist with preventing degradation of performance in existing code caused by regressions.&lt;br /&gt;
To assist with early capture of performance degradation due to regression; a performance matrix records performance against automated user interactions generated using JMeter.&lt;br /&gt;
===PHPUnit===&lt;br /&gt;
Unit testing tool for PHP; implementation is already&lt;br /&gt;
planned.&lt;br /&gt;
===SimpleTest===&lt;br /&gt;
Moodle&#039;s legacy unit testing tool.&lt;br /&gt;
&lt;br /&gt;
==Other Automated Testing==&lt;br /&gt;
Methods of testing other than unit testing will be automated. This includes, but is not limited to functional testing.&lt;br /&gt;
===Selenium===&lt;br /&gt;
Selenium is an extremely powerful, free and fully extendible browser automation tool that contains the following&lt;br /&gt;
features:&lt;br /&gt;
* Selenium IDE – Firefox plugin app for recording browser interactions with any web application. This is ideal for creating quick bug recreation test scripts and automation aided exploratory testing.&lt;br /&gt;
* Selenium Webdriver – Selenium Server is a server application that runs Selenium test cases. Selenium webdriver is a collection of language specific bindings to drive a browser.&lt;br /&gt;
Selenium provides extensions to existing unit test tools such as JUnit. There are unofficial language bindings for PHPUnit and webdriver and an official backwards compatibility to&lt;br /&gt;
version one of Selenium through PHPUnit. Selenium test cases can be written in an object oriented manner and re-usable methods can be created. Selenium is highly resistant to CSS changes and supports using XPath to locate page elements.&lt;br /&gt;
Furthermore Selenium server can be run in a grid configuration so that tests can&lt;br /&gt;
run in parallel across multiple test environments controlled by one&lt;br /&gt;
hub:&lt;br /&gt;
Fig.2 Selenium Grid&lt;br /&gt;
[[File:grid1.png]]&lt;br /&gt;
When a test is&lt;br /&gt;
required to run on a specific platform Selenium Grid can be&lt;br /&gt;
made aware of the environments you wish to use. The Selenium Hub will&lt;br /&gt;
then ensure that a test runs only on the Selenium slaves providing&lt;br /&gt;
the requested environment:&lt;br /&gt;
Fig.3 Requesting Grid Environments&lt;br /&gt;
[[File:grid2.png]]&lt;br /&gt;
===Firebug===&lt;br /&gt;
Firebug is Firefox plugin that gives a user the ability to easily inspect page source.&lt;br /&gt;
===Firepath===&lt;br /&gt;
Firepath is a Firefox plugin that can generate XPath expressions.&lt;br /&gt;
===Eclipse IDE===&lt;br /&gt;
Eclipse IDE will be used to design Selenium test cases.&lt;br /&gt;
===JUnit/PHPUnit Selenium Extension===&lt;br /&gt;
SeleniumHQ officially support JUnit extensions for Selenium. The JUnit support is more mature than PHPUnit and is fully updated to work with the latest version of Selenium Server.&lt;br /&gt;
==Hosting Test Environments==&lt;br /&gt;
Hosting instances of Jenkins and test environments will be performed using server virtualization.&lt;br /&gt;
===XEN===&lt;br /&gt;
Xen is a robust, secure, high performance type 1 baremetal hypervisor, or a virtual machine monitor (VMM). Xen can securely&lt;br /&gt;
execute multiple virtual machines, each running its own OS, on a&lt;br /&gt;
single physical system with close-to-native performance. Xen is open&lt;br /&gt;
source, and it&#039;s used as the core virtualization engine for many&lt;br /&gt;
vendors products.&lt;br /&gt;
==Version Control==&lt;br /&gt;
===GIT===&lt;br /&gt;
Moodle use GIT for version control.&lt;br /&gt;
==Test Management and Defect Tracking==&lt;br /&gt;
===TestLink===&lt;br /&gt;
TestLink is a free test management tool written in PHP. The test management tool is used to specify and manage tests and&lt;br /&gt;
test suites, then report on test execution. A test management tool is&lt;br /&gt;
useful for managing and co-ordinating organisational testing effort&lt;br /&gt;
and documenting testing. Currently Moodle use Jira as the test&lt;br /&gt;
management tool. Jira is software development management tool and not&lt;br /&gt;
a test management tool.&lt;br /&gt;
&lt;br /&gt;
In TestLink we can create testing projects, test&lt;br /&gt;
plans and document test cases, manage test execution runs then log&lt;br /&gt;
and report results for manual and automated tests.&lt;br /&gt;
===TestLink Jenkins Plugin===&lt;br /&gt;
This plugin integrates TestLink with Jenkins and&lt;br /&gt;
generates reports on automated test execution.&lt;br /&gt;
===Jira===&lt;br /&gt;
Moodle already use Jira for development and project&lt;br /&gt;
planning and tracking issues.&lt;/div&gt;</summary>
		<author><name>Esqueeze</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/dev/index.php?title=Testing_strategy/Testing_Tools_and_Their_Use&amp;diff=35537</id>
		<title>Testing strategy/Testing Tools and Their Use</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/dev/index.php?title=Testing_strategy/Testing_Tools_and_Their_Use&amp;diff=35537"/>
		<updated>2012-09-14T03:04:14Z</updated>

		<summary type="html">&lt;p&gt;Esqueeze: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Work in progress}}&lt;br /&gt;
=Testing Tools and Their Use=&lt;br /&gt;
All of the tools specified below are free with most being open source and extendible. The advantages are:&lt;br /&gt;
* There is no cost to Moodle for licences.&lt;br /&gt;
* Applications are web based with a tiny footprint and will run on low spec hardware/VMs.&lt;br /&gt;
* Applications with databases all run on MySQL,which is free.&lt;br /&gt;
* Moodle can extend the tools/create plugins, in-house, if customisations are required.&lt;br /&gt;
&lt;br /&gt;
==Continuous Integration==&lt;br /&gt;
Continuous integration is the process of running tests frequently when code is checked into a repository. The aim of this is to keep code clean and allow the early capture of&lt;br /&gt;
broken/incomplete code, early warning of conflicting changes (regressions) and a constantly available current “build” for demo&lt;br /&gt;
and testing.&lt;br /&gt;
Moodle&#039;s continuous integration process uses a second &amp;quot;Test&amp;quot; integration server where code must be submitted to prior to being reviewed by integrators.&lt;br /&gt;
===Jenkins===&lt;br /&gt;
Jenkins is a fully extendible application that monitors executions of repeated jobs. Results are displayed via a web application.&lt;br /&gt;
Jenkins will be used as an information hub to provide Moodle with continuous feedback about the quality of Moodle software.&lt;br /&gt;
Jenkins can monitor any/multiple GIT repository for changes without adding hooks to the code and be used to run a set of&lt;br /&gt;
tasks such as:&lt;br /&gt;
* Pull git&lt;br /&gt;
* Run unit tests&lt;br /&gt;
* Create a moodle site&lt;br /&gt;
* Add some information to it&lt;br /&gt;
* Run the selenium tests&lt;br /&gt;
* Report errors/warnings/failures&lt;br /&gt;
===Performance Testing Matrix===&lt;br /&gt;
Measuring system performance during this testing will assist with preventing degradation of performance in existing code caused by regressions.&lt;br /&gt;
To assist with early capture of performance degradation due to regression; a performance matrix will record performance against automated user interactions generated by the functional test harness.&lt;br /&gt;
&lt;br /&gt;
Consideration will be given to modifying the functional test harness, selecting relevant test cases that will be re-run a given number of times to generate aggregated results as part of a performance and load suite. i.e. running the same test several times as part of a suite of tests in one “test run” will provide more accurate performance data, providing mean values, than running a test once.&lt;br /&gt;
===Clover PHP Plugin===&lt;br /&gt;
To capture code coverage reports from PHPUnit.&lt;br /&gt;
===PHPUnit===&lt;br /&gt;
Unit testing tool for PHP; implementation is already&lt;br /&gt;
planned.&lt;br /&gt;
===SimpleTest===&lt;br /&gt;
Moodle&#039;s legacy unit testing tool.&lt;br /&gt;
==Other Automated Testing==&lt;br /&gt;
Methods of testing other than unit testing will be automated. This includes, but is not limited to functional testing.&lt;br /&gt;
===Selenium===&lt;br /&gt;
Selenium is an extremely powerful, free and fully extendible browser automation tool that contains the following&lt;br /&gt;
features:&lt;br /&gt;
* Selenium IDE – Firefox plugin app for recording browser interactions with any web application. This is ideal for creating quick bug recreation test scripts and automation aided exploratory testing.&lt;br /&gt;
* Selenium Webdriver – Selenium Server is a server application that runs Selenium test cases. Selenium webdriver is a collection of language specific bindings to drive a browser.&lt;br /&gt;
Selenium provides extensions to existing unit test tools such as JUnit. There are unofficial language bindings for PHPUnit and webdriver and an official backwards compatibility to&lt;br /&gt;
version one of Selenium through PHPUnit. Selenium test cases can be written in an object oriented manner and re-usable methods can be created. Selenium is highly resistant to CSS changes and supports using XPath to locate page elements.&lt;br /&gt;
Furthermore Selenium server can be run in a grid configuration so that tests can&lt;br /&gt;
run in parallel across multiple test environments controlled by one&lt;br /&gt;
hub:&lt;br /&gt;
Fig.2 Selenium Grid&lt;br /&gt;
[[File:grid1.png]]&lt;br /&gt;
When a test is&lt;br /&gt;
required to run on a specific platform Selenium Grid can be&lt;br /&gt;
made aware of the environments you wish to use. The Selenium Hub will&lt;br /&gt;
then ensure that a test runs only on the Selenium slaves providing&lt;br /&gt;
the requested environment:&lt;br /&gt;
Fig.3 Requesting Grid Environments&lt;br /&gt;
[[File:grid2.png]]&lt;br /&gt;
===Firebug===&lt;br /&gt;
Firebug is Firefox plugin that gives a user the ability to easily inspect page source.&lt;br /&gt;
===Firepath===&lt;br /&gt;
Firepath is a Firefox plugin that can generate XPath expressions.&lt;br /&gt;
===Eclipse IDE===&lt;br /&gt;
Eclipse IDE will be used to design Selenium test cases.&lt;br /&gt;
===JUnit/PHPUnit Selenium Extension===&lt;br /&gt;
SeleniumHQ officially support JUnit extensions for Selenium. The JUnit support is more mature than PHPUnit and is fully updated to work with the latest version of Selenium Server.&lt;br /&gt;
==Hosting Test Environments==&lt;br /&gt;
Hosting instances of Jenkins and test environments will be performed using server virtualization.&lt;br /&gt;
===XEN===&lt;br /&gt;
Xen is a robust, secure, high performance type 1 baremetal hypervisor, or a virtual machine monitor (VMM). Xen can securely&lt;br /&gt;
execute multiple virtual machines, each running its own OS, on a&lt;br /&gt;
single physical system with close-to-native performance. Xen is open&lt;br /&gt;
source, and it&#039;s used as the core virtualization engine for many&lt;br /&gt;
vendors products.&lt;br /&gt;
==Version Control==&lt;br /&gt;
===GIT===&lt;br /&gt;
Moodle use GIT for version control.&lt;br /&gt;
==Test Management and Defect Tracking==&lt;br /&gt;
===TestLink===&lt;br /&gt;
TestLink is a free test management tool written in PHP. The test management tool is used to specify and manage tests and&lt;br /&gt;
test suites, then report on test execution. A test management tool is&lt;br /&gt;
useful for managing and co-ordinating organisational testing effort&lt;br /&gt;
and documenting testing. Currently Moodle use Jira as the test&lt;br /&gt;
management tool. Jira is software development management tool and not&lt;br /&gt;
a test management tool.&lt;br /&gt;
&lt;br /&gt;
In TestLink we can create testing projects, test&lt;br /&gt;
plans and document test cases, manage test execution runs then log&lt;br /&gt;
and report results for manual and automated tests.&lt;br /&gt;
===TestLink Jenkins Plugin===&lt;br /&gt;
This plugin integrates TestLink with Jenkins and&lt;br /&gt;
generates reports on automated test execution.&lt;br /&gt;
===Jira===&lt;br /&gt;
Moodle already use Jira for development and project&lt;br /&gt;
planning and tracking issues.&lt;/div&gt;</summary>
		<author><name>Esqueeze</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/dev/index.php?title=Behat&amp;diff=35439</id>
		<title>Behat</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/dev/index.php?title=Behat&amp;diff=35439"/>
		<updated>2012-09-08T01:12:49Z</updated>

		<summary type="html">&lt;p&gt;Esqueeze: /* Teardown */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Work in progress}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Behat is a Behaviour Driven Development (BDD) framework, allows development and testing guided by steps to simulate users interaction.&lt;br /&gt;
* Support for multiple browsers drivers (including selenium 2) http://mink.behat.org/#different-browsers-drivers&lt;br /&gt;
* Extension to connect to Jira (linking issues to features)&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Example ==&lt;br /&gt;
The expected behaviours are specified as scenarios.&lt;br /&gt;
&lt;br /&gt;
=== Basic scenarios ===&lt;br /&gt;
&lt;br /&gt;
  Scenario: Login as an existing user&lt;br /&gt;
    Given I am on &amp;quot;login/index.php&amp;quot;&lt;br /&gt;
    When I fill in &amp;quot;username&amp;quot; with &amp;quot;admin&amp;quot;&lt;br /&gt;
    And I fill in &amp;quot;password&amp;quot; with &amp;quot;moodle&amp;quot;&lt;br /&gt;
    And I press &amp;quot;loginbtn&amp;quot;&lt;br /&gt;
    Then I should see &amp;quot;Moodle 101: Course Name&amp;quot;&lt;br /&gt;
&lt;br /&gt;
  Scenario: Login as an unexisting user&lt;br /&gt;
    Given I am on &amp;quot;login/index.php&amp;quot;&lt;br /&gt;
    When I fill in &amp;quot;username&amp;quot; with &amp;quot;adminasdasd&amp;quot;&lt;br /&gt;
    And I fill in &amp;quot;password&amp;quot; with &amp;quot;moodlesdfasdf&amp;quot;&lt;br /&gt;
    And I press &amp;quot;loginbtn&amp;quot;&lt;br /&gt;
    Then I should see &amp;quot;Invalid login, please try again&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== Complex scenario === &lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
  Scenario: A teacher adds a discussion&lt;br /&gt;
    Given I am logged as a &amp;quot;teacher&amp;quot;&lt;br /&gt;
    And I go to a course&lt;br /&gt;
    And I create a &amp;quot;forum&amp;quot; activity&lt;br /&gt;
    And I view the &amp;quot;forum&amp;quot; activity    # The step definition class will keep a reference to the lasts steps&lt;br /&gt;
    When I add a &amp;quot;forum_discussion&amp;quot; filling the fields &amp;quot;subject,message[text]&amp;quot; with &amp;quot;I&#039;m the user subject,Dealing with \, split&amp;quot;    #     Wrapper step, it will redirect the petition to a &amp;quot;forum_discussion&amp;quot; method&lt;br /&gt;
    Then I should see &amp;quot;Discussion&amp;quot;&lt;br /&gt;
    And I should see &amp;quot;Subject&amp;quot;&lt;br /&gt;
    And I should see &amp;quot;I&#039;m the user subject&amp;quot;&lt;br /&gt;
&lt;br /&gt;
In order to be able to process the &amp;quot;logged as a $roleshortname&amp;quot; or the &amp;quot;a course&amp;quot; statements the /behat.yml file should be filled with your own installation data&lt;br /&gt;
&lt;br /&gt;
=== Input Tables ===&lt;br /&gt;
To improve readability and reduce unnecessary verbosity; complex scenarios can use input tables to group similar types of input:&lt;br /&gt;
&lt;br /&gt;
  Scenario: Add Offline text assignment&lt;br /&gt;
    Given that I add &amp;quot;assignment&amp;quot; to section &amp;quot;1&amp;quot;&lt;br /&gt;
    And I fill in the form:&lt;br /&gt;
      | field_name       | value  |&lt;br /&gt;
      | Assignment name  | Test3  |&lt;br /&gt;
      | Description      | Test3  |&lt;br /&gt;
      | Online text      | No     |&lt;br /&gt;
      | File submissions | No     |&lt;br /&gt;
    And I click &amp;quot;Save and display&amp;quot;&lt;br /&gt;
    Then the title &amp;quot;Test3&amp;quot; should be displayed&lt;br /&gt;
&lt;br /&gt;
or even:&lt;br /&gt;
&lt;br /&gt;
  Scenario: Set Submissions from date&lt;br /&gt;
    Given that I add &amp;quot;assignment&amp;quot; to section &amp;quot;1&amp;quot;&lt;br /&gt;
    And I fill in the form:&lt;br /&gt;
      | field_name             | value |&lt;br /&gt;
      | Assignment name        | Test4 |&lt;br /&gt;
      | Description            | Test4 |&lt;br /&gt;
    And I enter the dates in &amp;quot;Allow submissions from&amp;quot;:&lt;br /&gt;
      | date_unit | value     |&lt;br /&gt;
      | day       | 1         |&lt;br /&gt;
      | month     | September |&lt;br /&gt;
      | year      | 2012      |&lt;br /&gt;
      | hour      | 09        |&lt;br /&gt;
      | minute    | 05        |&lt;br /&gt;
    And I click &amp;quot;Save and display&amp;quot;&lt;br /&gt;
    Then the title &amp;quot;Test4&amp;quot; should be displayed&lt;br /&gt;
&lt;br /&gt;
=== Background Steps ===&lt;br /&gt;
&lt;br /&gt;
In a feature where certain steps are repeated in every scenario, a feature background can be defined. The feature background will be repeated just before every scenario in the feature:&lt;br /&gt;
&lt;br /&gt;
  Background:   &lt;br /&gt;
    Given I am logged in as a &amp;quot;teacher&amp;quot;&lt;br /&gt;
    And I go to a course&lt;br /&gt;
&lt;br /&gt;
This also helps to increase readability and reduce the verbosity of the tests.&lt;br /&gt;
&lt;br /&gt;
=== Teardown ===&lt;br /&gt;
&lt;br /&gt;
Most automated tests require teardown steps after each test has run. The teardown ends the test session, closes browsers etc. Behat does this automatically after every scenario, so you don&#039;t have to worry about adding any teardown steps.&lt;br /&gt;
&lt;br /&gt;
== Packages ==&lt;br /&gt;
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&#039;s dependencies, including the Moodle contexts&lt;br /&gt;
&lt;br /&gt;
== Requirements ==&lt;br /&gt;
* PHP 5.3.3&lt;br /&gt;
* PHPUnit&lt;br /&gt;
* There are other packages and PHP settings requirements, but they be checked by the composer installer&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
* Clone the Moodle features project: https://github.com/moodlehq/moodle-behat-features&lt;br /&gt;
* Follow the [https://github.com/moodlehq/moodle-behat-features/blob/master/README.md README] instructions&lt;br /&gt;
&lt;br /&gt;
== Usage ==&lt;br /&gt;
* To test a feature type &amp;quot;bin/behat features/FEATURENAME.feature&amp;quot; from the clone directory&lt;br /&gt;
* If you want to execute the feature in a Selenium Grid2 you can specify another behat profile: &amp;quot;bin/behat --profile seleniumGrid2Firefox features/FEATURENAME.feature&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== Steps ==&lt;br /&gt;
Every step is processed in a step definition, which is defined in &amp;quot;context&amp;quot; classes. The Behat project has a main context class, FeaturesContext, but it allows more contexts to be added as subcontexts, Moodle is one of this subcontexts, all the Moodle steps definitions are split in a modular way following the [[https://docs.moodle.org/dev/Frankenstyle Frankenstyle]] format, and are loaded dynamically by Moodle\Behat\Context\MoodleContext.&lt;br /&gt;
&lt;br /&gt;
A quick view of the hierarchy:&lt;br /&gt;
&lt;br /&gt;
* FeaturesContext&lt;br /&gt;
** Sanpi/Behatch/Context&lt;br /&gt;
*** Behat extension with a lot of common actions like send REST petitions, store screenshots, DOM / XPath parsing&lt;br /&gt;
** Moodle/Behat/Context&lt;br /&gt;
*** MoodleContext as a reference to the rest of the Moodle components&lt;br /&gt;
*** BaseContext abstract class with helper methods&lt;br /&gt;
**** CoreContext&lt;br /&gt;
***** contains basic steps definitions like visit($url), pressButton($button) to manage the browser &lt;br /&gt;
***** The cross-component and the most common Moodle actions like iAmLoggedAsA($roleshortname) or aUserAssignedInContextOfContextlevel($roleshortname, $instanceid, $contextlevel) to speed up the creation of scenarios&lt;br /&gt;
**** CourseContext&lt;br /&gt;
***** Course related steps definitions&lt;br /&gt;
**** ModForumContext&lt;br /&gt;
***** mod_forum related steps definitions&lt;br /&gt;
**** ...&lt;br /&gt;
&lt;br /&gt;
In a future with a lot of Moodle components, having a single shared directory could not be the best way to store the contexts, other directory hierarchies more similar to a moodle distribution can be made without changing references between components since they are currently made using the Frankenstyle component name.&lt;br /&gt;
&lt;br /&gt;
== Links == &lt;br /&gt;
[http://www.github.com/dmonllao/moodle-behat-features Moodle features project]&lt;br /&gt;
&lt;br /&gt;
[http://www.github.com/dmonllao/moodle-behat-contexts Moodle contexts repository]&lt;/div&gt;</summary>
		<author><name>Esqueeze</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/dev/index.php?title=Behat&amp;diff=35438</id>
		<title>Behat</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/dev/index.php?title=Behat&amp;diff=35438"/>
		<updated>2012-09-08T01:10:29Z</updated>

		<summary type="html">&lt;p&gt;Esqueeze: /* Example */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Work in progress}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Behat is a Behaviour Driven Development (BDD) framework, allows development and testing guided by steps to simulate users interaction.&lt;br /&gt;
* Support for multiple browsers drivers (including selenium 2) http://mink.behat.org/#different-browsers-drivers&lt;br /&gt;
* Extension to connect to Jira (linking issues to features)&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Example ==&lt;br /&gt;
The expected behaviours are specified as scenarios.&lt;br /&gt;
&lt;br /&gt;
=== Basic scenarios ===&lt;br /&gt;
&lt;br /&gt;
  Scenario: Login as an existing user&lt;br /&gt;
    Given I am on &amp;quot;login/index.php&amp;quot;&lt;br /&gt;
    When I fill in &amp;quot;username&amp;quot; with &amp;quot;admin&amp;quot;&lt;br /&gt;
    And I fill in &amp;quot;password&amp;quot; with &amp;quot;moodle&amp;quot;&lt;br /&gt;
    And I press &amp;quot;loginbtn&amp;quot;&lt;br /&gt;
    Then I should see &amp;quot;Moodle 101: Course Name&amp;quot;&lt;br /&gt;
&lt;br /&gt;
  Scenario: Login as an unexisting user&lt;br /&gt;
    Given I am on &amp;quot;login/index.php&amp;quot;&lt;br /&gt;
    When I fill in &amp;quot;username&amp;quot; with &amp;quot;adminasdasd&amp;quot;&lt;br /&gt;
    And I fill in &amp;quot;password&amp;quot; with &amp;quot;moodlesdfasdf&amp;quot;&lt;br /&gt;
    And I press &amp;quot;loginbtn&amp;quot;&lt;br /&gt;
    Then I should see &amp;quot;Invalid login, please try again&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== Complex scenario === &lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
  Scenario: A teacher adds a discussion&lt;br /&gt;
    Given I am logged as a &amp;quot;teacher&amp;quot;&lt;br /&gt;
    And I go to a course&lt;br /&gt;
    And I create a &amp;quot;forum&amp;quot; activity&lt;br /&gt;
    And I view the &amp;quot;forum&amp;quot; activity    # The step definition class will keep a reference to the lasts steps&lt;br /&gt;
    When I add a &amp;quot;forum_discussion&amp;quot; filling the fields &amp;quot;subject,message[text]&amp;quot; with &amp;quot;I&#039;m the user subject,Dealing with \, split&amp;quot;    #     Wrapper step, it will redirect the petition to a &amp;quot;forum_discussion&amp;quot; method&lt;br /&gt;
    Then I should see &amp;quot;Discussion&amp;quot;&lt;br /&gt;
    And I should see &amp;quot;Subject&amp;quot;&lt;br /&gt;
    And I should see &amp;quot;I&#039;m the user subject&amp;quot;&lt;br /&gt;
&lt;br /&gt;
In order to be able to process the &amp;quot;logged as a $roleshortname&amp;quot; or the &amp;quot;a course&amp;quot; statements the /behat.yml file should be filled with your own installation data&lt;br /&gt;
&lt;br /&gt;
=== Input Tables ===&lt;br /&gt;
To improve readability and reduce unnecessary verbosity; complex scenarios can use input tables to group similar types of input:&lt;br /&gt;
&lt;br /&gt;
  Scenario: Add Offline text assignment&lt;br /&gt;
    Given that I add &amp;quot;assignment&amp;quot; to section &amp;quot;1&amp;quot;&lt;br /&gt;
    And I fill in the form:&lt;br /&gt;
      | field_name       | value  |&lt;br /&gt;
      | Assignment name  | Test3  |&lt;br /&gt;
      | Description      | Test3  |&lt;br /&gt;
      | Online text      | No     |&lt;br /&gt;
      | File submissions | No     |&lt;br /&gt;
    And I click &amp;quot;Save and display&amp;quot;&lt;br /&gt;
    Then the title &amp;quot;Test3&amp;quot; should be displayed&lt;br /&gt;
&lt;br /&gt;
or even:&lt;br /&gt;
&lt;br /&gt;
  Scenario: Set Submissions from date&lt;br /&gt;
    Given that I add &amp;quot;assignment&amp;quot; to section &amp;quot;1&amp;quot;&lt;br /&gt;
    And I fill in the form:&lt;br /&gt;
      | field_name             | value |&lt;br /&gt;
      | Assignment name        | Test4 |&lt;br /&gt;
      | Description            | Test4 |&lt;br /&gt;
    And I enter the dates in &amp;quot;Allow submissions from&amp;quot;:&lt;br /&gt;
      | date_unit | value     |&lt;br /&gt;
      | day       | 1         |&lt;br /&gt;
      | month     | September |&lt;br /&gt;
      | year      | 2012      |&lt;br /&gt;
      | hour      | 09        |&lt;br /&gt;
      | minute    | 05        |&lt;br /&gt;
    And I click &amp;quot;Save and display&amp;quot;&lt;br /&gt;
    Then the title &amp;quot;Test4&amp;quot; should be displayed&lt;br /&gt;
&lt;br /&gt;
=== Background Steps ===&lt;br /&gt;
&lt;br /&gt;
In a feature where certain steps are repeated in every scenario, a feature background can be defined. The feature background will be repeated just before every scenario in the feature:&lt;br /&gt;
&lt;br /&gt;
  Background:   &lt;br /&gt;
    Given I am logged in as a &amp;quot;teacher&amp;quot;&lt;br /&gt;
    And I go to a course&lt;br /&gt;
&lt;br /&gt;
This also helps to increase readability and reduce the verbosity of the tests.&lt;br /&gt;
&lt;br /&gt;
=== Teardown ===&lt;br /&gt;
&lt;br /&gt;
Most automated tests require teardown steps after each test has run. The teardown ends the test session, closes browsers etc. Behat, however, does this automatically after every scenario, so you don&#039;t have to worry about it.&lt;br /&gt;
&lt;br /&gt;
== Packages ==&lt;br /&gt;
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&#039;s dependencies, including the Moodle contexts&lt;br /&gt;
&lt;br /&gt;
== Requirements ==&lt;br /&gt;
* PHP 5.3.3&lt;br /&gt;
* PHPUnit&lt;br /&gt;
* There are other packages and PHP settings requirements, but they be checked by the composer installer&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
* Clone the Moodle features project: https://github.com/moodlehq/moodle-behat-features&lt;br /&gt;
* Follow the [https://github.com/moodlehq/moodle-behat-features/blob/master/README.md README] instructions&lt;br /&gt;
&lt;br /&gt;
== Usage ==&lt;br /&gt;
* To test a feature type &amp;quot;bin/behat features/FEATURENAME.feature&amp;quot; from the clone directory&lt;br /&gt;
* If you want to execute the feature in a Selenium Grid2 you can specify another behat profile: &amp;quot;bin/behat --profile seleniumGrid2Firefox features/FEATURENAME.feature&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== Steps ==&lt;br /&gt;
Every step is processed in a step definition, which is defined in &amp;quot;context&amp;quot; classes. The Behat project has a main context class, FeaturesContext, but it allows more contexts to be added as subcontexts, Moodle is one of this subcontexts, all the Moodle steps definitions are split in a modular way following the [[https://docs.moodle.org/dev/Frankenstyle Frankenstyle]] format, and are loaded dynamically by Moodle\Behat\Context\MoodleContext.&lt;br /&gt;
&lt;br /&gt;
A quick view of the hierarchy:&lt;br /&gt;
&lt;br /&gt;
* FeaturesContext&lt;br /&gt;
** Sanpi/Behatch/Context&lt;br /&gt;
*** Behat extension with a lot of common actions like send REST petitions, store screenshots, DOM / XPath parsing&lt;br /&gt;
** Moodle/Behat/Context&lt;br /&gt;
*** MoodleContext as a reference to the rest of the Moodle components&lt;br /&gt;
*** BaseContext abstract class with helper methods&lt;br /&gt;
**** CoreContext&lt;br /&gt;
***** contains basic steps definitions like visit($url), pressButton($button) to manage the browser &lt;br /&gt;
***** The cross-component and the most common Moodle actions like iAmLoggedAsA($roleshortname) or aUserAssignedInContextOfContextlevel($roleshortname, $instanceid, $contextlevel) to speed up the creation of scenarios&lt;br /&gt;
**** CourseContext&lt;br /&gt;
***** Course related steps definitions&lt;br /&gt;
**** ModForumContext&lt;br /&gt;
***** mod_forum related steps definitions&lt;br /&gt;
**** ...&lt;br /&gt;
&lt;br /&gt;
In a future with a lot of Moodle components, having a single shared directory could not be the best way to store the contexts, other directory hierarchies more similar to a moodle distribution can be made without changing references between components since they are currently made using the Frankenstyle component name.&lt;br /&gt;
&lt;br /&gt;
== Links == &lt;br /&gt;
[http://www.github.com/dmonllao/moodle-behat-features Moodle features project]&lt;br /&gt;
&lt;br /&gt;
[http://www.github.com/dmonllao/moodle-behat-contexts Moodle contexts repository]&lt;/div&gt;</summary>
		<author><name>Esqueeze</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/dev/index.php?title=Behat&amp;diff=35437</id>
		<title>Behat</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/dev/index.php?title=Behat&amp;diff=35437"/>
		<updated>2012-09-08T01:05:28Z</updated>

		<summary type="html">&lt;p&gt;Esqueeze: /* Installation */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Work in progress}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Behat is a Behaviour Driven Development (BDD) framework, allows development and testing guided by steps to simulate users interaction.&lt;br /&gt;
* Support for multiple browsers drivers (including selenium 2) http://mink.behat.org/#different-browsers-drivers&lt;br /&gt;
* Extension to connect to Jira (linking issues to features)&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Example ==&lt;br /&gt;
The expected behaviours are specified as scenarios.&lt;br /&gt;
&lt;br /&gt;
=== Basic scenarios ===&lt;br /&gt;
&lt;br /&gt;
  Scenario: Login as an existing user&lt;br /&gt;
    Given I am on &amp;quot;login/index.php&amp;quot;&lt;br /&gt;
    When I fill in &amp;quot;username&amp;quot; with &amp;quot;admin&amp;quot;&lt;br /&gt;
    And I fill in &amp;quot;password&amp;quot; with &amp;quot;moodle&amp;quot;&lt;br /&gt;
    And I press &amp;quot;loginbtn&amp;quot;&lt;br /&gt;
    Then I should see &amp;quot;Moodle 101: Course Name&amp;quot;&lt;br /&gt;
&lt;br /&gt;
  Scenario: Login as an unexisting user&lt;br /&gt;
    Given I am on &amp;quot;login/index.php&amp;quot;&lt;br /&gt;
    When I fill in &amp;quot;username&amp;quot; with &amp;quot;adminasdasd&amp;quot;&lt;br /&gt;
    And I fill in &amp;quot;password&amp;quot; with &amp;quot;moodlesdfasdf&amp;quot;&lt;br /&gt;
    And I press &amp;quot;loginbtn&amp;quot;&lt;br /&gt;
    Then I should see &amp;quot;Invalid login, please try again&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== Complex scenario === &lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
  Scenario: A teacher adds a discussion&lt;br /&gt;
    Given I am logged as a &amp;quot;teacher&amp;quot;&lt;br /&gt;
    And I go to a course&lt;br /&gt;
    And I create a &amp;quot;forum&amp;quot; activity&lt;br /&gt;
    And I view the &amp;quot;forum&amp;quot; activity    # The step definition class will keep a reference to the lasts steps&lt;br /&gt;
    When I add a &amp;quot;forum_discussion&amp;quot; filling the fields &amp;quot;subject,message[text]&amp;quot; with &amp;quot;I&#039;m the user subject,Dealing with \, split&amp;quot;    #     Wrapper step, it will redirect the petition to a &amp;quot;forum_discussion&amp;quot; method&lt;br /&gt;
    Then I should see &amp;quot;Discussion&amp;quot;&lt;br /&gt;
    And I should see &amp;quot;Subject&amp;quot;&lt;br /&gt;
    And I should see &amp;quot;I&#039;m the user subject&amp;quot;&lt;br /&gt;
&lt;br /&gt;
In order to be able to process the &amp;quot;logged as a $roleshortname&amp;quot; or the &amp;quot;a course&amp;quot; statements the /behat.yml file should be filled with your own installation data&lt;br /&gt;
&lt;br /&gt;
=== Input Tables ===&lt;br /&gt;
To improve readability and reduce unnecessary verbosity; complex scenarios can use input tables to group similar types of input:&lt;br /&gt;
&lt;br /&gt;
  Scenario: Add Offline text assignment&lt;br /&gt;
    Given that I add &amp;quot;assignment&amp;quot; to section &amp;quot;1&amp;quot;&lt;br /&gt;
    And I fill in the form:&lt;br /&gt;
      | field_name       | value  |&lt;br /&gt;
      | Assignment name  | Test3  |&lt;br /&gt;
      | Description      | Test3  |&lt;br /&gt;
      | Online text      | No     |&lt;br /&gt;
      | File submissions | No     |&lt;br /&gt;
    And I click &amp;quot;Save and display&amp;quot;&lt;br /&gt;
    Then the title &amp;quot;Test3&amp;quot; should be displayed&lt;br /&gt;
&lt;br /&gt;
or even:&lt;br /&gt;
&lt;br /&gt;
  Scenario: Set Submissions from date&lt;br /&gt;
    Given that I add &amp;quot;assignment&amp;quot; to section &amp;quot;1&amp;quot;&lt;br /&gt;
    And I fill in the form:&lt;br /&gt;
      | field_name             | value |&lt;br /&gt;
      | Assignment name        | Test4 |&lt;br /&gt;
      | Description            | Test4 |&lt;br /&gt;
    And I enter the dates in &amp;quot;Allow submissions from&amp;quot;:&lt;br /&gt;
      | date_unit | value     |&lt;br /&gt;
      | day       | 1         |&lt;br /&gt;
      | month     | September |&lt;br /&gt;
      | year      | 2012      |&lt;br /&gt;
      | hour      | 09        |&lt;br /&gt;
      | minute    | 05        |&lt;br /&gt;
    And I click &amp;quot;Save and display&amp;quot;&lt;br /&gt;
    Then the title &amp;quot;Test4&amp;quot; should be displayed&lt;br /&gt;
&lt;br /&gt;
=== Background Steps ===&lt;br /&gt;
&lt;br /&gt;
In a feature where certain steps are repeated in every scenario, a feature background can be defined. The feature background will be repeated just before every scenario in the feature:&lt;br /&gt;
&lt;br /&gt;
  Background:   &lt;br /&gt;
    Given I am logged in as a &amp;quot;teacher&amp;quot;&lt;br /&gt;
    And I go to a course&lt;br /&gt;
&lt;br /&gt;
This also helps to increase readability and reduce the verbosity of the tests.&lt;br /&gt;
&lt;br /&gt;
== Packages ==&lt;br /&gt;
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&#039;s dependencies, including the Moodle contexts&lt;br /&gt;
&lt;br /&gt;
== Requirements ==&lt;br /&gt;
* PHP 5.3.3&lt;br /&gt;
* PHPUnit&lt;br /&gt;
* There are other packages and PHP settings requirements, but they be checked by the composer installer&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
* Clone the Moodle features project: https://github.com/moodlehq/moodle-behat-features&lt;br /&gt;
* Follow the [https://github.com/moodlehq/moodle-behat-features/blob/master/README.md README] instructions&lt;br /&gt;
&lt;br /&gt;
== Usage ==&lt;br /&gt;
* To test a feature type &amp;quot;bin/behat features/FEATURENAME.feature&amp;quot; from the clone directory&lt;br /&gt;
* If you want to execute the feature in a Selenium Grid2 you can specify another behat profile: &amp;quot;bin/behat --profile seleniumGrid2Firefox features/FEATURENAME.feature&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== Steps ==&lt;br /&gt;
Every step is processed in a step definition, which is defined in &amp;quot;context&amp;quot; classes. The Behat project has a main context class, FeaturesContext, but it allows more contexts to be added as subcontexts, Moodle is one of this subcontexts, all the Moodle steps definitions are split in a modular way following the [[https://docs.moodle.org/dev/Frankenstyle Frankenstyle]] format, and are loaded dynamically by Moodle\Behat\Context\MoodleContext.&lt;br /&gt;
&lt;br /&gt;
A quick view of the hierarchy:&lt;br /&gt;
&lt;br /&gt;
* FeaturesContext&lt;br /&gt;
** Sanpi/Behatch/Context&lt;br /&gt;
*** Behat extension with a lot of common actions like send REST petitions, store screenshots, DOM / XPath parsing&lt;br /&gt;
** Moodle/Behat/Context&lt;br /&gt;
*** MoodleContext as a reference to the rest of the Moodle components&lt;br /&gt;
*** BaseContext abstract class with helper methods&lt;br /&gt;
**** CoreContext&lt;br /&gt;
***** contains basic steps definitions like visit($url), pressButton($button) to manage the browser &lt;br /&gt;
***** The cross-component and the most common Moodle actions like iAmLoggedAsA($roleshortname) or aUserAssignedInContextOfContextlevel($roleshortname, $instanceid, $contextlevel) to speed up the creation of scenarios&lt;br /&gt;
**** CourseContext&lt;br /&gt;
***** Course related steps definitions&lt;br /&gt;
**** ModForumContext&lt;br /&gt;
***** mod_forum related steps definitions&lt;br /&gt;
**** ...&lt;br /&gt;
&lt;br /&gt;
In a future with a lot of Moodle components, having a single shared directory could not be the best way to store the contexts, other directory hierarchies more similar to a moodle distribution can be made without changing references between components since they are currently made using the Frankenstyle component name.&lt;br /&gt;
&lt;br /&gt;
== Links == &lt;br /&gt;
[http://www.github.com/dmonllao/moodle-behat-features Moodle features project]&lt;br /&gt;
&lt;br /&gt;
[http://www.github.com/dmonllao/moodle-behat-contexts Moodle contexts repository]&lt;/div&gt;</summary>
		<author><name>Esqueeze</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/dev/index.php?title=Behat&amp;diff=35436</id>
		<title>Behat</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/dev/index.php?title=Behat&amp;diff=35436"/>
		<updated>2012-09-08T01:00:59Z</updated>

		<summary type="html">&lt;p&gt;Esqueeze: /* Basic scenarios */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Work in progress}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Behat is a Behaviour Driven Development (BDD) framework, allows development and testing guided by steps to simulate users interaction.&lt;br /&gt;
* Support for multiple browsers drivers (including selenium 2) http://mink.behat.org/#different-browsers-drivers&lt;br /&gt;
* Extension to connect to Jira (linking issues to features)&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Example ==&lt;br /&gt;
The expected behaviours are specified as scenarios.&lt;br /&gt;
&lt;br /&gt;
=== Basic scenarios ===&lt;br /&gt;
&lt;br /&gt;
  Scenario: Login as an existing user&lt;br /&gt;
    Given I am on &amp;quot;login/index.php&amp;quot;&lt;br /&gt;
    When I fill in &amp;quot;username&amp;quot; with &amp;quot;admin&amp;quot;&lt;br /&gt;
    And I fill in &amp;quot;password&amp;quot; with &amp;quot;moodle&amp;quot;&lt;br /&gt;
    And I press &amp;quot;loginbtn&amp;quot;&lt;br /&gt;
    Then I should see &amp;quot;Moodle 101: Course Name&amp;quot;&lt;br /&gt;
&lt;br /&gt;
  Scenario: Login as an unexisting user&lt;br /&gt;
    Given I am on &amp;quot;login/index.php&amp;quot;&lt;br /&gt;
    When I fill in &amp;quot;username&amp;quot; with &amp;quot;adminasdasd&amp;quot;&lt;br /&gt;
    And I fill in &amp;quot;password&amp;quot; with &amp;quot;moodlesdfasdf&amp;quot;&lt;br /&gt;
    And I press &amp;quot;loginbtn&amp;quot;&lt;br /&gt;
    Then I should see &amp;quot;Invalid login, please try again&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== Complex scenario === &lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
  Scenario: A teacher adds a discussion&lt;br /&gt;
    Given I am logged as a &amp;quot;teacher&amp;quot;&lt;br /&gt;
    And I go to a course&lt;br /&gt;
    And I create a &amp;quot;forum&amp;quot; activity&lt;br /&gt;
    And I view the &amp;quot;forum&amp;quot; activity    # The step definition class will keep a reference to the lasts steps&lt;br /&gt;
    When I add a &amp;quot;forum_discussion&amp;quot; filling the fields &amp;quot;subject,message[text]&amp;quot; with &amp;quot;I&#039;m the user subject,Dealing with \, split&amp;quot;    #     Wrapper step, it will redirect the petition to a &amp;quot;forum_discussion&amp;quot; method&lt;br /&gt;
    Then I should see &amp;quot;Discussion&amp;quot;&lt;br /&gt;
    And I should see &amp;quot;Subject&amp;quot;&lt;br /&gt;
    And I should see &amp;quot;I&#039;m the user subject&amp;quot;&lt;br /&gt;
&lt;br /&gt;
In order to be able to process the &amp;quot;logged as a $roleshortname&amp;quot; or the &amp;quot;a course&amp;quot; statements the /behat.yml file should be filled with your own installation data&lt;br /&gt;
&lt;br /&gt;
=== Input Tables ===&lt;br /&gt;
To improve readability and reduce unnecessary verbosity; complex scenarios can use input tables to group similar types of input:&lt;br /&gt;
&lt;br /&gt;
  Scenario: Add Offline text assignment&lt;br /&gt;
    Given that I add &amp;quot;assignment&amp;quot; to section &amp;quot;1&amp;quot;&lt;br /&gt;
    And I fill in the form:&lt;br /&gt;
      | field_name       | value  |&lt;br /&gt;
      | Assignment name  | Test3  |&lt;br /&gt;
      | Description      | Test3  |&lt;br /&gt;
      | Online text      | No     |&lt;br /&gt;
      | File submissions | No     |&lt;br /&gt;
    And I click &amp;quot;Save and display&amp;quot;&lt;br /&gt;
    Then the title &amp;quot;Test3&amp;quot; should be displayed&lt;br /&gt;
&lt;br /&gt;
or even:&lt;br /&gt;
&lt;br /&gt;
  Scenario: Set Submissions from date&lt;br /&gt;
    Given that I add &amp;quot;assignment&amp;quot; to section &amp;quot;1&amp;quot;&lt;br /&gt;
    And I fill in the form:&lt;br /&gt;
      | field_name             | value |&lt;br /&gt;
      | Assignment name        | Test4 |&lt;br /&gt;
      | Description            | Test4 |&lt;br /&gt;
    And I enter the dates in &amp;quot;Allow submissions from&amp;quot;:&lt;br /&gt;
      | date_unit | value     |&lt;br /&gt;
      | day       | 1         |&lt;br /&gt;
      | month     | September |&lt;br /&gt;
      | year      | 2012      |&lt;br /&gt;
      | hour      | 09        |&lt;br /&gt;
      | minute    | 05        |&lt;br /&gt;
    And I click &amp;quot;Save and display&amp;quot;&lt;br /&gt;
    Then the title &amp;quot;Test4&amp;quot; should be displayed&lt;br /&gt;
&lt;br /&gt;
=== Background Steps ===&lt;br /&gt;
&lt;br /&gt;
In a feature where certain steps are repeated in every scenario, a feature background can be defined. The feature background will be repeated just before every scenario in the feature:&lt;br /&gt;
&lt;br /&gt;
  Background:   &lt;br /&gt;
    Given I am logged in as a &amp;quot;teacher&amp;quot;&lt;br /&gt;
    And I go to a course&lt;br /&gt;
&lt;br /&gt;
This also helps to increase readability and reduce the verbosity of the tests.&lt;br /&gt;
&lt;br /&gt;
== Packages ==&lt;br /&gt;
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&#039;s dependencies, including the Moodle contexts&lt;br /&gt;
&lt;br /&gt;
== Requirements ==&lt;br /&gt;
* PHP 5.3.3&lt;br /&gt;
* PHPUnit&lt;br /&gt;
* There are other packages and PHP settings requirements, but they be checked by the composer installer&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
* Clone the Moodle features project: https://github.com/dmonllao/moodle-behat-features&lt;br /&gt;
* Follow the [https://github.com/dmonllao/moodle-behat-features/blob/master/README.md README] instructions&lt;br /&gt;
&lt;br /&gt;
== Usage ==&lt;br /&gt;
* To test a feature type &amp;quot;bin/behat features/FEATURENAME.feature&amp;quot; from the clone directory&lt;br /&gt;
* If you want to execute the feature in a Selenium Grid2 you can specify another behat profile: &amp;quot;bin/behat --profile seleniumGrid2Firefox features/FEATURENAME.feature&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== Steps ==&lt;br /&gt;
Every step is processed in a step definition, which is defined in &amp;quot;context&amp;quot; classes. The Behat project has a main context class, FeaturesContext, but it allows more contexts to be added as subcontexts, Moodle is one of this subcontexts, all the Moodle steps definitions are split in a modular way following the [[https://docs.moodle.org/dev/Frankenstyle Frankenstyle]] format, and are loaded dynamically by Moodle\Behat\Context\MoodleContext.&lt;br /&gt;
&lt;br /&gt;
A quick view of the hierarchy:&lt;br /&gt;
&lt;br /&gt;
* FeaturesContext&lt;br /&gt;
** Sanpi/Behatch/Context&lt;br /&gt;
*** Behat extension with a lot of common actions like send REST petitions, store screenshots, DOM / XPath parsing&lt;br /&gt;
** Moodle/Behat/Context&lt;br /&gt;
*** MoodleContext as a reference to the rest of the Moodle components&lt;br /&gt;
*** BaseContext abstract class with helper methods&lt;br /&gt;
**** CoreContext&lt;br /&gt;
***** contains basic steps definitions like visit($url), pressButton($button) to manage the browser &lt;br /&gt;
***** The cross-component and the most common Moodle actions like iAmLoggedAsA($roleshortname) or aUserAssignedInContextOfContextlevel($roleshortname, $instanceid, $contextlevel) to speed up the creation of scenarios&lt;br /&gt;
**** CourseContext&lt;br /&gt;
***** Course related steps definitions&lt;br /&gt;
**** ModForumContext&lt;br /&gt;
***** mod_forum related steps definitions&lt;br /&gt;
**** ...&lt;br /&gt;
&lt;br /&gt;
In a future with a lot of Moodle components, having a single shared directory could not be the best way to store the contexts, other directory hierarchies more similar to a moodle distribution can be made without changing references between components since they are currently made using the Frankenstyle component name.&lt;br /&gt;
&lt;br /&gt;
== Links == &lt;br /&gt;
[http://www.github.com/dmonllao/moodle-behat-features Moodle features project]&lt;br /&gt;
&lt;br /&gt;
[http://www.github.com/dmonllao/moodle-behat-contexts Moodle contexts repository]&lt;/div&gt;</summary>
		<author><name>Esqueeze</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/dev/index.php?title=Behat&amp;diff=35435</id>
		<title>Behat</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/dev/index.php?title=Behat&amp;diff=35435"/>
		<updated>2012-09-08T00:58:52Z</updated>

		<summary type="html">&lt;p&gt;Esqueeze: /* Background Steps */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Work in progress}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Behat is a Behaviour Driven Development (BDD) framework, allows development and testing guided by steps to simulate users interaction.&lt;br /&gt;
* Support for multiple browsers drivers (including selenium 2) http://mink.behat.org/#different-browsers-drivers&lt;br /&gt;
* Extension to connect to Jira (linking issues to features)&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Example ==&lt;br /&gt;
The expected behaviours are specified as scenarios.&lt;br /&gt;
&lt;br /&gt;
=== Basic scenarios ===&lt;br /&gt;
&lt;br /&gt;
    Scenario: Login as an existing user&lt;br /&gt;
      Given I am on &amp;quot;login/index.php&amp;quot;&lt;br /&gt;
      When I fill in &amp;quot;username&amp;quot; with &amp;quot;admin&amp;quot;&lt;br /&gt;
      And I fill in &amp;quot;password&amp;quot; with &amp;quot;moodle&amp;quot;&lt;br /&gt;
      And I press &amp;quot;loginbtn&amp;quot;&lt;br /&gt;
      Then I should see &amp;quot;Moodle 101: Course Name&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    Scenario: Login as an unexisting user&lt;br /&gt;
      Given I am on &amp;quot;login/index.php&amp;quot;&lt;br /&gt;
      When I fill in &amp;quot;username&amp;quot; with &amp;quot;adminasdasd&amp;quot;&lt;br /&gt;
      And I fill in &amp;quot;password&amp;quot; with &amp;quot;moodlesdfasdf&amp;quot;&lt;br /&gt;
      And I press &amp;quot;loginbtn&amp;quot;&lt;br /&gt;
      Then I should see &amp;quot;Invalid login, please try again&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== Complex scenario === &lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
  Scenario: A teacher adds a discussion&lt;br /&gt;
    Given I am logged as a &amp;quot;teacher&amp;quot;&lt;br /&gt;
    And I go to a course&lt;br /&gt;
    And I create a &amp;quot;forum&amp;quot; activity&lt;br /&gt;
    And I view the &amp;quot;forum&amp;quot; activity    # The step definition class will keep a reference to the lasts steps&lt;br /&gt;
    When I add a &amp;quot;forum_discussion&amp;quot; filling the fields &amp;quot;subject,message[text]&amp;quot; with &amp;quot;I&#039;m the user subject,Dealing with \, split&amp;quot;    #     Wrapper step, it will redirect the petition to a &amp;quot;forum_discussion&amp;quot; method&lt;br /&gt;
    Then I should see &amp;quot;Discussion&amp;quot;&lt;br /&gt;
    And I should see &amp;quot;Subject&amp;quot;&lt;br /&gt;
    And I should see &amp;quot;I&#039;m the user subject&amp;quot;&lt;br /&gt;
&lt;br /&gt;
In order to be able to process the &amp;quot;logged as a $roleshortname&amp;quot; or the &amp;quot;a course&amp;quot; statements the /behat.yml file should be filled with your own installation data&lt;br /&gt;
&lt;br /&gt;
=== Input Tables ===&lt;br /&gt;
To improve readability and reduce unnecessary verbosity; complex scenarios can use input tables to group similar types of input:&lt;br /&gt;
&lt;br /&gt;
  Scenario: Add Offline text assignment&lt;br /&gt;
    Given that I add &amp;quot;assignment&amp;quot; to section &amp;quot;1&amp;quot;&lt;br /&gt;
    And I fill in the form:&lt;br /&gt;
      | field_name       | value  |&lt;br /&gt;
      | Assignment name  | Test3  |&lt;br /&gt;
      | Description      | Test3  |&lt;br /&gt;
      | Online text      | No     |&lt;br /&gt;
      | File submissions | No     |&lt;br /&gt;
    And I click &amp;quot;Save and display&amp;quot;&lt;br /&gt;
    Then the title &amp;quot;Test3&amp;quot; should be displayed&lt;br /&gt;
&lt;br /&gt;
or even:&lt;br /&gt;
&lt;br /&gt;
  Scenario: Set Submissions from date&lt;br /&gt;
    Given that I add &amp;quot;assignment&amp;quot; to section &amp;quot;1&amp;quot;&lt;br /&gt;
    And I fill in the form:&lt;br /&gt;
      | field_name             | value |&lt;br /&gt;
      | Assignment name        | Test4 |&lt;br /&gt;
      | Description            | Test4 |&lt;br /&gt;
    And I enter the dates in &amp;quot;Allow submissions from&amp;quot;:&lt;br /&gt;
      | date_unit | value     |&lt;br /&gt;
      | day       | 1         |&lt;br /&gt;
      | month     | September |&lt;br /&gt;
      | year      | 2012      |&lt;br /&gt;
      | hour      | 09        |&lt;br /&gt;
      | minute    | 05        |&lt;br /&gt;
    And I click &amp;quot;Save and display&amp;quot;&lt;br /&gt;
    Then the title &amp;quot;Test4&amp;quot; should be displayed&lt;br /&gt;
&lt;br /&gt;
=== Background Steps ===&lt;br /&gt;
&lt;br /&gt;
In a feature where certain steps are repeated in every scenario, a feature background can be defined. The feature background will be repeated just before every scenario in the feature:&lt;br /&gt;
&lt;br /&gt;
  Background:   &lt;br /&gt;
    Given I am logged in as a &amp;quot;teacher&amp;quot;&lt;br /&gt;
    And I go to a course&lt;br /&gt;
&lt;br /&gt;
This also helps to increase readability and reduce the verbosity of the tests.&lt;br /&gt;
&lt;br /&gt;
== Packages ==&lt;br /&gt;
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&#039;s dependencies, including the Moodle contexts&lt;br /&gt;
&lt;br /&gt;
== Requirements ==&lt;br /&gt;
* PHP 5.3.3&lt;br /&gt;
* PHPUnit&lt;br /&gt;
* There are other packages and PHP settings requirements, but they be checked by the composer installer&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
* Clone the Moodle features project: https://github.com/dmonllao/moodle-behat-features&lt;br /&gt;
* Follow the [https://github.com/dmonllao/moodle-behat-features/blob/master/README.md README] instructions&lt;br /&gt;
&lt;br /&gt;
== Usage ==&lt;br /&gt;
* To test a feature type &amp;quot;bin/behat features/FEATURENAME.feature&amp;quot; from the clone directory&lt;br /&gt;
* If you want to execute the feature in a Selenium Grid2 you can specify another behat profile: &amp;quot;bin/behat --profile seleniumGrid2Firefox features/FEATURENAME.feature&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== Steps ==&lt;br /&gt;
Every step is processed in a step definition, which is defined in &amp;quot;context&amp;quot; classes. The Behat project has a main context class, FeaturesContext, but it allows more contexts to be added as subcontexts, Moodle is one of this subcontexts, all the Moodle steps definitions are split in a modular way following the [[https://docs.moodle.org/dev/Frankenstyle Frankenstyle]] format, and are loaded dynamically by Moodle\Behat\Context\MoodleContext.&lt;br /&gt;
&lt;br /&gt;
A quick view of the hierarchy:&lt;br /&gt;
&lt;br /&gt;
* FeaturesContext&lt;br /&gt;
** Sanpi/Behatch/Context&lt;br /&gt;
*** Behat extension with a lot of common actions like send REST petitions, store screenshots, DOM / XPath parsing&lt;br /&gt;
** Moodle/Behat/Context&lt;br /&gt;
*** MoodleContext as a reference to the rest of the Moodle components&lt;br /&gt;
*** BaseContext abstract class with helper methods&lt;br /&gt;
**** CoreContext&lt;br /&gt;
***** contains basic steps definitions like visit($url), pressButton($button) to manage the browser &lt;br /&gt;
***** The cross-component and the most common Moodle actions like iAmLoggedAsA($roleshortname) or aUserAssignedInContextOfContextlevel($roleshortname, $instanceid, $contextlevel) to speed up the creation of scenarios&lt;br /&gt;
**** CourseContext&lt;br /&gt;
***** Course related steps definitions&lt;br /&gt;
**** ModForumContext&lt;br /&gt;
***** mod_forum related steps definitions&lt;br /&gt;
**** ...&lt;br /&gt;
&lt;br /&gt;
In a future with a lot of Moodle components, having a single shared directory could not be the best way to store the contexts, other directory hierarchies more similar to a moodle distribution can be made without changing references between components since they are currently made using the Frankenstyle component name.&lt;br /&gt;
&lt;br /&gt;
== Links == &lt;br /&gt;
[http://www.github.com/dmonllao/moodle-behat-features Moodle features project]&lt;br /&gt;
&lt;br /&gt;
[http://www.github.com/dmonllao/moodle-behat-contexts Moodle contexts repository]&lt;/div&gt;</summary>
		<author><name>Esqueeze</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/dev/index.php?title=Behat&amp;diff=35434</id>
		<title>Behat</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/dev/index.php?title=Behat&amp;diff=35434"/>
		<updated>2012-09-08T00:58:19Z</updated>

		<summary type="html">&lt;p&gt;Esqueeze: /* Background Steps */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Work in progress}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Behat is a Behaviour Driven Development (BDD) framework, allows development and testing guided by steps to simulate users interaction.&lt;br /&gt;
* Support for multiple browsers drivers (including selenium 2) http://mink.behat.org/#different-browsers-drivers&lt;br /&gt;
* Extension to connect to Jira (linking issues to features)&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Example ==&lt;br /&gt;
The expected behaviours are specified as scenarios.&lt;br /&gt;
&lt;br /&gt;
=== Basic scenarios ===&lt;br /&gt;
&lt;br /&gt;
    Scenario: Login as an existing user&lt;br /&gt;
      Given I am on &amp;quot;login/index.php&amp;quot;&lt;br /&gt;
      When I fill in &amp;quot;username&amp;quot; with &amp;quot;admin&amp;quot;&lt;br /&gt;
      And I fill in &amp;quot;password&amp;quot; with &amp;quot;moodle&amp;quot;&lt;br /&gt;
      And I press &amp;quot;loginbtn&amp;quot;&lt;br /&gt;
      Then I should see &amp;quot;Moodle 101: Course Name&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    Scenario: Login as an unexisting user&lt;br /&gt;
      Given I am on &amp;quot;login/index.php&amp;quot;&lt;br /&gt;
      When I fill in &amp;quot;username&amp;quot; with &amp;quot;adminasdasd&amp;quot;&lt;br /&gt;
      And I fill in &amp;quot;password&amp;quot; with &amp;quot;moodlesdfasdf&amp;quot;&lt;br /&gt;
      And I press &amp;quot;loginbtn&amp;quot;&lt;br /&gt;
      Then I should see &amp;quot;Invalid login, please try again&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== Complex scenario === &lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
  Scenario: A teacher adds a discussion&lt;br /&gt;
    Given I am logged as a &amp;quot;teacher&amp;quot;&lt;br /&gt;
    And I go to a course&lt;br /&gt;
    And I create a &amp;quot;forum&amp;quot; activity&lt;br /&gt;
    And I view the &amp;quot;forum&amp;quot; activity    # The step definition class will keep a reference to the lasts steps&lt;br /&gt;
    When I add a &amp;quot;forum_discussion&amp;quot; filling the fields &amp;quot;subject,message[text]&amp;quot; with &amp;quot;I&#039;m the user subject,Dealing with \, split&amp;quot;    #     Wrapper step, it will redirect the petition to a &amp;quot;forum_discussion&amp;quot; method&lt;br /&gt;
    Then I should see &amp;quot;Discussion&amp;quot;&lt;br /&gt;
    And I should see &amp;quot;Subject&amp;quot;&lt;br /&gt;
    And I should see &amp;quot;I&#039;m the user subject&amp;quot;&lt;br /&gt;
&lt;br /&gt;
In order to be able to process the &amp;quot;logged as a $roleshortname&amp;quot; or the &amp;quot;a course&amp;quot; statements the /behat.yml file should be filled with your own installation data&lt;br /&gt;
&lt;br /&gt;
=== Input Tables ===&lt;br /&gt;
To improve readability and reduce unnecessary verbosity; complex scenarios can use input tables to group similar types of input:&lt;br /&gt;
&lt;br /&gt;
  Scenario: Add Offline text assignment&lt;br /&gt;
    Given that I add &amp;quot;assignment&amp;quot; to section &amp;quot;1&amp;quot;&lt;br /&gt;
    And I fill in the form:&lt;br /&gt;
      | field_name       | value  |&lt;br /&gt;
      | Assignment name  | Test3  |&lt;br /&gt;
      | Description      | Test3  |&lt;br /&gt;
      | Online text      | No     |&lt;br /&gt;
      | File submissions | No     |&lt;br /&gt;
    And I click &amp;quot;Save and display&amp;quot;&lt;br /&gt;
    Then the title &amp;quot;Test3&amp;quot; should be displayed&lt;br /&gt;
&lt;br /&gt;
or even:&lt;br /&gt;
&lt;br /&gt;
  Scenario: Set Submissions from date&lt;br /&gt;
    Given that I add &amp;quot;assignment&amp;quot; to section &amp;quot;1&amp;quot;&lt;br /&gt;
    And I fill in the form:&lt;br /&gt;
      | field_name             | value |&lt;br /&gt;
      | Assignment name        | Test4 |&lt;br /&gt;
      | Description            | Test4 |&lt;br /&gt;
    And I enter the dates in &amp;quot;Allow submissions from&amp;quot;:&lt;br /&gt;
      | date_unit | value     |&lt;br /&gt;
      | day       | 1         |&lt;br /&gt;
      | month     | September |&lt;br /&gt;
      | year      | 2012      |&lt;br /&gt;
      | hour      | 09        |&lt;br /&gt;
      | minute    | 05        |&lt;br /&gt;
    And I click &amp;quot;Save and display&amp;quot;&lt;br /&gt;
    Then the title &amp;quot;Test4&amp;quot; should be displayed&lt;br /&gt;
&lt;br /&gt;
=== Background Steps ===&lt;br /&gt;
&lt;br /&gt;
In a feature where certain steps are repeated in every scenario, a feature background can be defined. The feature background will be repeated just before every scenario in the feature:&lt;br /&gt;
&lt;br /&gt;
  Background:   &lt;br /&gt;
    Given I am logged in as a &amp;quot;teacher&lt;br /&gt;
    And I go to a course&lt;br /&gt;
&lt;br /&gt;
This also helps to increase readability and reduce the verbosity of the tests.&lt;br /&gt;
&lt;br /&gt;
== Packages ==&lt;br /&gt;
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&#039;s dependencies, including the Moodle contexts&lt;br /&gt;
&lt;br /&gt;
== Requirements ==&lt;br /&gt;
* PHP 5.3.3&lt;br /&gt;
* PHPUnit&lt;br /&gt;
* There are other packages and PHP settings requirements, but they be checked by the composer installer&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
* Clone the Moodle features project: https://github.com/dmonllao/moodle-behat-features&lt;br /&gt;
* Follow the [https://github.com/dmonllao/moodle-behat-features/blob/master/README.md README] instructions&lt;br /&gt;
&lt;br /&gt;
== Usage ==&lt;br /&gt;
* To test a feature type &amp;quot;bin/behat features/FEATURENAME.feature&amp;quot; from the clone directory&lt;br /&gt;
* If you want to execute the feature in a Selenium Grid2 you can specify another behat profile: &amp;quot;bin/behat --profile seleniumGrid2Firefox features/FEATURENAME.feature&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== Steps ==&lt;br /&gt;
Every step is processed in a step definition, which is defined in &amp;quot;context&amp;quot; classes. The Behat project has a main context class, FeaturesContext, but it allows more contexts to be added as subcontexts, Moodle is one of this subcontexts, all the Moodle steps definitions are split in a modular way following the [[https://docs.moodle.org/dev/Frankenstyle Frankenstyle]] format, and are loaded dynamically by Moodle\Behat\Context\MoodleContext.&lt;br /&gt;
&lt;br /&gt;
A quick view of the hierarchy:&lt;br /&gt;
&lt;br /&gt;
* FeaturesContext&lt;br /&gt;
** Sanpi/Behatch/Context&lt;br /&gt;
*** Behat extension with a lot of common actions like send REST petitions, store screenshots, DOM / XPath parsing&lt;br /&gt;
** Moodle/Behat/Context&lt;br /&gt;
*** MoodleContext as a reference to the rest of the Moodle components&lt;br /&gt;
*** BaseContext abstract class with helper methods&lt;br /&gt;
**** CoreContext&lt;br /&gt;
***** contains basic steps definitions like visit($url), pressButton($button) to manage the browser &lt;br /&gt;
***** The cross-component and the most common Moodle actions like iAmLoggedAsA($roleshortname) or aUserAssignedInContextOfContextlevel($roleshortname, $instanceid, $contextlevel) to speed up the creation of scenarios&lt;br /&gt;
**** CourseContext&lt;br /&gt;
***** Course related steps definitions&lt;br /&gt;
**** ModForumContext&lt;br /&gt;
***** mod_forum related steps definitions&lt;br /&gt;
**** ...&lt;br /&gt;
&lt;br /&gt;
In a future with a lot of Moodle components, having a single shared directory could not be the best way to store the contexts, other directory hierarchies more similar to a moodle distribution can be made without changing references between components since they are currently made using the Frankenstyle component name.&lt;br /&gt;
&lt;br /&gt;
== Links == &lt;br /&gt;
[http://www.github.com/dmonllao/moodle-behat-features Moodle features project]&lt;br /&gt;
&lt;br /&gt;
[http://www.github.com/dmonllao/moodle-behat-contexts Moodle contexts repository]&lt;/div&gt;</summary>
		<author><name>Esqueeze</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/dev/index.php?title=Behat&amp;diff=35433</id>
		<title>Behat</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/dev/index.php?title=Behat&amp;diff=35433"/>
		<updated>2012-09-08T00:57:17Z</updated>

		<summary type="html">&lt;p&gt;Esqueeze: /* Input Tables */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Work in progress}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Behat is a Behaviour Driven Development (BDD) framework, allows development and testing guided by steps to simulate users interaction.&lt;br /&gt;
* Support for multiple browsers drivers (including selenium 2) http://mink.behat.org/#different-browsers-drivers&lt;br /&gt;
* Extension to connect to Jira (linking issues to features)&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Example ==&lt;br /&gt;
The expected behaviours are specified as scenarios.&lt;br /&gt;
&lt;br /&gt;
=== Basic scenarios ===&lt;br /&gt;
&lt;br /&gt;
    Scenario: Login as an existing user&lt;br /&gt;
      Given I am on &amp;quot;login/index.php&amp;quot;&lt;br /&gt;
      When I fill in &amp;quot;username&amp;quot; with &amp;quot;admin&amp;quot;&lt;br /&gt;
      And I fill in &amp;quot;password&amp;quot; with &amp;quot;moodle&amp;quot;&lt;br /&gt;
      And I press &amp;quot;loginbtn&amp;quot;&lt;br /&gt;
      Then I should see &amp;quot;Moodle 101: Course Name&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    Scenario: Login as an unexisting user&lt;br /&gt;
      Given I am on &amp;quot;login/index.php&amp;quot;&lt;br /&gt;
      When I fill in &amp;quot;username&amp;quot; with &amp;quot;adminasdasd&amp;quot;&lt;br /&gt;
      And I fill in &amp;quot;password&amp;quot; with &amp;quot;moodlesdfasdf&amp;quot;&lt;br /&gt;
      And I press &amp;quot;loginbtn&amp;quot;&lt;br /&gt;
      Then I should see &amp;quot;Invalid login, please try again&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== Complex scenario === &lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
  Scenario: A teacher adds a discussion&lt;br /&gt;
    Given I am logged as a &amp;quot;teacher&amp;quot;&lt;br /&gt;
    And I go to a course&lt;br /&gt;
    And I create a &amp;quot;forum&amp;quot; activity&lt;br /&gt;
    And I view the &amp;quot;forum&amp;quot; activity    # The step definition class will keep a reference to the lasts steps&lt;br /&gt;
    When I add a &amp;quot;forum_discussion&amp;quot; filling the fields &amp;quot;subject,message[text]&amp;quot; with &amp;quot;I&#039;m the user subject,Dealing with \, split&amp;quot;    #     Wrapper step, it will redirect the petition to a &amp;quot;forum_discussion&amp;quot; method&lt;br /&gt;
    Then I should see &amp;quot;Discussion&amp;quot;&lt;br /&gt;
    And I should see &amp;quot;Subject&amp;quot;&lt;br /&gt;
    And I should see &amp;quot;I&#039;m the user subject&amp;quot;&lt;br /&gt;
&lt;br /&gt;
In order to be able to process the &amp;quot;logged as a $roleshortname&amp;quot; or the &amp;quot;a course&amp;quot; statements the /behat.yml file should be filled with your own installation data&lt;br /&gt;
&lt;br /&gt;
=== Input Tables ===&lt;br /&gt;
To improve readability and reduce unnecessary verbosity; complex scenarios can use input tables to group similar types of input:&lt;br /&gt;
&lt;br /&gt;
  Scenario: Add Offline text assignment&lt;br /&gt;
    Given that I add &amp;quot;assignment&amp;quot; to section &amp;quot;1&amp;quot;&lt;br /&gt;
    And I fill in the form:&lt;br /&gt;
      | field_name       | value  |&lt;br /&gt;
      | Assignment name  | Test3  |&lt;br /&gt;
      | Description      | Test3  |&lt;br /&gt;
      | Online text      | No     |&lt;br /&gt;
      | File submissions | No     |&lt;br /&gt;
    And I click &amp;quot;Save and display&amp;quot;&lt;br /&gt;
    Then the title &amp;quot;Test3&amp;quot; should be displayed&lt;br /&gt;
&lt;br /&gt;
or even:&lt;br /&gt;
&lt;br /&gt;
  Scenario: Set Submissions from date&lt;br /&gt;
    Given that I add &amp;quot;assignment&amp;quot; to section &amp;quot;1&amp;quot;&lt;br /&gt;
    And I fill in the form:&lt;br /&gt;
      | field_name             | value |&lt;br /&gt;
      | Assignment name        | Test4 |&lt;br /&gt;
      | Description            | Test4 |&lt;br /&gt;
    And I enter the dates in &amp;quot;Allow submissions from&amp;quot;:&lt;br /&gt;
      | date_unit | value     |&lt;br /&gt;
      | day       | 1         |&lt;br /&gt;
      | month     | September |&lt;br /&gt;
      | year      | 2012      |&lt;br /&gt;
      | hour      | 09        |&lt;br /&gt;
      | minute    | 05        |&lt;br /&gt;
    And I click &amp;quot;Save and display&amp;quot;&lt;br /&gt;
    Then the title &amp;quot;Test4&amp;quot; should be displayed&lt;br /&gt;
&lt;br /&gt;
=== Background Steps ===&lt;br /&gt;
&lt;br /&gt;
In a feature where certain steps are repeated in every scenario, a feature background can be defined. The feature background will be repeated just before every scenario in the feature:&lt;br /&gt;
&lt;br /&gt;
    Background:   &lt;br /&gt;
      Given I am logged in as a &amp;quot;teacher&amp;quot;&lt;br /&gt;
      And I go to a course&lt;br /&gt;
&lt;br /&gt;
This also helps to increase readability and reduce the verbosity of the tests.&lt;br /&gt;
&lt;br /&gt;
== Packages ==&lt;br /&gt;
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&#039;s dependencies, including the Moodle contexts&lt;br /&gt;
&lt;br /&gt;
== Requirements ==&lt;br /&gt;
* PHP 5.3.3&lt;br /&gt;
* PHPUnit&lt;br /&gt;
* There are other packages and PHP settings requirements, but they be checked by the composer installer&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
* Clone the Moodle features project: https://github.com/dmonllao/moodle-behat-features&lt;br /&gt;
* Follow the [https://github.com/dmonllao/moodle-behat-features/blob/master/README.md README] instructions&lt;br /&gt;
&lt;br /&gt;
== Usage ==&lt;br /&gt;
* To test a feature type &amp;quot;bin/behat features/FEATURENAME.feature&amp;quot; from the clone directory&lt;br /&gt;
* If you want to execute the feature in a Selenium Grid2 you can specify another behat profile: &amp;quot;bin/behat --profile seleniumGrid2Firefox features/FEATURENAME.feature&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== Steps ==&lt;br /&gt;
Every step is processed in a step definition, which is defined in &amp;quot;context&amp;quot; classes. The Behat project has a main context class, FeaturesContext, but it allows more contexts to be added as subcontexts, Moodle is one of this subcontexts, all the Moodle steps definitions are split in a modular way following the [[https://docs.moodle.org/dev/Frankenstyle Frankenstyle]] format, and are loaded dynamically by Moodle\Behat\Context\MoodleContext.&lt;br /&gt;
&lt;br /&gt;
A quick view of the hierarchy:&lt;br /&gt;
&lt;br /&gt;
* FeaturesContext&lt;br /&gt;
** Sanpi/Behatch/Context&lt;br /&gt;
*** Behat extension with a lot of common actions like send REST petitions, store screenshots, DOM / XPath parsing&lt;br /&gt;
** Moodle/Behat/Context&lt;br /&gt;
*** MoodleContext as a reference to the rest of the Moodle components&lt;br /&gt;
*** BaseContext abstract class with helper methods&lt;br /&gt;
**** CoreContext&lt;br /&gt;
***** contains basic steps definitions like visit($url), pressButton($button) to manage the browser &lt;br /&gt;
***** The cross-component and the most common Moodle actions like iAmLoggedAsA($roleshortname) or aUserAssignedInContextOfContextlevel($roleshortname, $instanceid, $contextlevel) to speed up the creation of scenarios&lt;br /&gt;
**** CourseContext&lt;br /&gt;
***** Course related steps definitions&lt;br /&gt;
**** ModForumContext&lt;br /&gt;
***** mod_forum related steps definitions&lt;br /&gt;
**** ...&lt;br /&gt;
&lt;br /&gt;
In a future with a lot of Moodle components, having a single shared directory could not be the best way to store the contexts, other directory hierarchies more similar to a moodle distribution can be made without changing references between components since they are currently made using the Frankenstyle component name.&lt;br /&gt;
&lt;br /&gt;
== Links == &lt;br /&gt;
[http://www.github.com/dmonllao/moodle-behat-features Moodle features project]&lt;br /&gt;
&lt;br /&gt;
[http://www.github.com/dmonllao/moodle-behat-contexts Moodle contexts repository]&lt;/div&gt;</summary>
		<author><name>Esqueeze</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/dev/index.php?title=Behat&amp;diff=35432</id>
		<title>Behat</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/dev/index.php?title=Behat&amp;diff=35432"/>
		<updated>2012-09-08T00:55:33Z</updated>

		<summary type="html">&lt;p&gt;Esqueeze: /* Example */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Work in progress}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Behat is a Behaviour Driven Development (BDD) framework, allows development and testing guided by steps to simulate users interaction.&lt;br /&gt;
* Support for multiple browsers drivers (including selenium 2) http://mink.behat.org/#different-browsers-drivers&lt;br /&gt;
* Extension to connect to Jira (linking issues to features)&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Example ==&lt;br /&gt;
The expected behaviours are specified as scenarios.&lt;br /&gt;
&lt;br /&gt;
=== Basic scenarios ===&lt;br /&gt;
&lt;br /&gt;
    Scenario: Login as an existing user&lt;br /&gt;
      Given I am on &amp;quot;login/index.php&amp;quot;&lt;br /&gt;
      When I fill in &amp;quot;username&amp;quot; with &amp;quot;admin&amp;quot;&lt;br /&gt;
      And I fill in &amp;quot;password&amp;quot; with &amp;quot;moodle&amp;quot;&lt;br /&gt;
      And I press &amp;quot;loginbtn&amp;quot;&lt;br /&gt;
      Then I should see &amp;quot;Moodle 101: Course Name&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    Scenario: Login as an unexisting user&lt;br /&gt;
      Given I am on &amp;quot;login/index.php&amp;quot;&lt;br /&gt;
      When I fill in &amp;quot;username&amp;quot; with &amp;quot;adminasdasd&amp;quot;&lt;br /&gt;
      And I fill in &amp;quot;password&amp;quot; with &amp;quot;moodlesdfasdf&amp;quot;&lt;br /&gt;
      And I press &amp;quot;loginbtn&amp;quot;&lt;br /&gt;
      Then I should see &amp;quot;Invalid login, please try again&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== Complex scenario === &lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
  Scenario: A teacher adds a discussion&lt;br /&gt;
    Given I am logged as a &amp;quot;teacher&amp;quot;&lt;br /&gt;
    And I go to a course&lt;br /&gt;
    And I create a &amp;quot;forum&amp;quot; activity&lt;br /&gt;
    And I view the &amp;quot;forum&amp;quot; activity    # The step definition class will keep a reference to the lasts steps&lt;br /&gt;
    When I add a &amp;quot;forum_discussion&amp;quot; filling the fields &amp;quot;subject,message[text]&amp;quot; with &amp;quot;I&#039;m the user subject,Dealing with \, split&amp;quot;    #     Wrapper step, it will redirect the petition to a &amp;quot;forum_discussion&amp;quot; method&lt;br /&gt;
    Then I should see &amp;quot;Discussion&amp;quot;&lt;br /&gt;
    And I should see &amp;quot;Subject&amp;quot;&lt;br /&gt;
    And I should see &amp;quot;I&#039;m the user subject&amp;quot;&lt;br /&gt;
&lt;br /&gt;
In order to be able to process the &amp;quot;logged as a $roleshortname&amp;quot; or the &amp;quot;a course&amp;quot; statements the /behat.yml file should be filled with your own installation data&lt;br /&gt;
&lt;br /&gt;
=== Input Tables ===&lt;br /&gt;
To improve readability and reduce unnecessary verbosity; complex scenarios can use input tables to group similar types of input:&lt;br /&gt;
&lt;br /&gt;
    Scenario: Add Offline text assignment&lt;br /&gt;
      Given that I add &amp;quot;assignment&amp;quot; to section &amp;quot;1&amp;quot;&lt;br /&gt;
      And I fill in the form:&lt;br /&gt;
        | field_name       | value  |&lt;br /&gt;
        | Assignment name  | Test3  |&lt;br /&gt;
        | Description      | Test3  |&lt;br /&gt;
        | Online text      | No     |&lt;br /&gt;
        | File submissions | No     |&lt;br /&gt;
      And I click &amp;quot;Save and display&amp;quot;&lt;br /&gt;
      Then the title &amp;quot;Test3&amp;quot; should be displayed&lt;br /&gt;
&lt;br /&gt;
or even:&lt;br /&gt;
&lt;br /&gt;
    Scenario: Set Submissions from date&lt;br /&gt;
      Given that I add &amp;quot;assignment&amp;quot; to section &amp;quot;1&amp;quot;&lt;br /&gt;
      And I fill in the form:&lt;br /&gt;
        | field_name             | value |&lt;br /&gt;
        | Assignment name        | Test4 |&lt;br /&gt;
        | Description            | Test4 |&lt;br /&gt;
      And I enter the dates in &amp;quot;Allow submissions from&amp;quot;:&lt;br /&gt;
        | date_unit | value     |&lt;br /&gt;
        | day       | 1         |&lt;br /&gt;
        | month     | September |&lt;br /&gt;
        | year      | 2012      |&lt;br /&gt;
        | hour      | 09        |&lt;br /&gt;
        | minute    | 05        |&lt;br /&gt;
      And I click &amp;quot;Save and display&amp;quot;&lt;br /&gt;
      Then the title &amp;quot;Test4&amp;quot; should be displayed&lt;br /&gt;
&lt;br /&gt;
=== Background Steps ===&lt;br /&gt;
&lt;br /&gt;
In a feature where certain steps are repeated in every scenario, a feature background can be defined. The feature background will be repeated just before every scenario in the feature:&lt;br /&gt;
&lt;br /&gt;
    Background:   &lt;br /&gt;
      Given I am logged in as a &amp;quot;teacher&amp;quot;&lt;br /&gt;
      And I go to a course&lt;br /&gt;
&lt;br /&gt;
This also helps to increase readability and reduce the verbosity of the tests.&lt;br /&gt;
&lt;br /&gt;
== Packages ==&lt;br /&gt;
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&#039;s dependencies, including the Moodle contexts&lt;br /&gt;
&lt;br /&gt;
== Requirements ==&lt;br /&gt;
* PHP 5.3.3&lt;br /&gt;
* PHPUnit&lt;br /&gt;
* There are other packages and PHP settings requirements, but they be checked by the composer installer&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
* Clone the Moodle features project: https://github.com/dmonllao/moodle-behat-features&lt;br /&gt;
* Follow the [https://github.com/dmonllao/moodle-behat-features/blob/master/README.md README] instructions&lt;br /&gt;
&lt;br /&gt;
== Usage ==&lt;br /&gt;
* To test a feature type &amp;quot;bin/behat features/FEATURENAME.feature&amp;quot; from the clone directory&lt;br /&gt;
* If you want to execute the feature in a Selenium Grid2 you can specify another behat profile: &amp;quot;bin/behat --profile seleniumGrid2Firefox features/FEATURENAME.feature&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== Steps ==&lt;br /&gt;
Every step is processed in a step definition, which is defined in &amp;quot;context&amp;quot; classes. The Behat project has a main context class, FeaturesContext, but it allows more contexts to be added as subcontexts, Moodle is one of this subcontexts, all the Moodle steps definitions are split in a modular way following the [[https://docs.moodle.org/dev/Frankenstyle Frankenstyle]] format, and are loaded dynamically by Moodle\Behat\Context\MoodleContext.&lt;br /&gt;
&lt;br /&gt;
A quick view of the hierarchy:&lt;br /&gt;
&lt;br /&gt;
* FeaturesContext&lt;br /&gt;
** Sanpi/Behatch/Context&lt;br /&gt;
*** Behat extension with a lot of common actions like send REST petitions, store screenshots, DOM / XPath parsing&lt;br /&gt;
** Moodle/Behat/Context&lt;br /&gt;
*** MoodleContext as a reference to the rest of the Moodle components&lt;br /&gt;
*** BaseContext abstract class with helper methods&lt;br /&gt;
**** CoreContext&lt;br /&gt;
***** contains basic steps definitions like visit($url), pressButton($button) to manage the browser &lt;br /&gt;
***** The cross-component and the most common Moodle actions like iAmLoggedAsA($roleshortname) or aUserAssignedInContextOfContextlevel($roleshortname, $instanceid, $contextlevel) to speed up the creation of scenarios&lt;br /&gt;
**** CourseContext&lt;br /&gt;
***** Course related steps definitions&lt;br /&gt;
**** ModForumContext&lt;br /&gt;
***** mod_forum related steps definitions&lt;br /&gt;
**** ...&lt;br /&gt;
&lt;br /&gt;
In a future with a lot of Moodle components, having a single shared directory could not be the best way to store the contexts, other directory hierarchies more similar to a moodle distribution can be made without changing references between components since they are currently made using the Frankenstyle component name.&lt;br /&gt;
&lt;br /&gt;
== Links == &lt;br /&gt;
[http://www.github.com/dmonllao/moodle-behat-features Moodle features project]&lt;br /&gt;
&lt;br /&gt;
[http://www.github.com/dmonllao/moodle-behat-contexts Moodle contexts repository]&lt;/div&gt;</summary>
		<author><name>Esqueeze</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/dev/index.php?title=Behat&amp;diff=35431</id>
		<title>Behat</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/dev/index.php?title=Behat&amp;diff=35431"/>
		<updated>2012-09-08T00:45:48Z</updated>

		<summary type="html">&lt;p&gt;Esqueeze: /* Example */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Work in progress}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Behat is a Behaviour Driven Development (BDD) framework, allows development and testing guided by steps to simulate users interaction.&lt;br /&gt;
* Support for multiple browsers drivers (including selenium 2) http://mink.behat.org/#different-browsers-drivers&lt;br /&gt;
* Extension to connect to Jira (linking issues to features)&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Example ==&lt;br /&gt;
The expected behaviours are specified as scenarios.&lt;br /&gt;
&lt;br /&gt;
=== Basic scenarios ===&lt;br /&gt;
&lt;br /&gt;
    Scenario: Login as an existing user&lt;br /&gt;
      Given I am on &amp;quot;login/index.php&amp;quot;&lt;br /&gt;
      When I fill in &amp;quot;username&amp;quot; with &amp;quot;admin&amp;quot;&lt;br /&gt;
      And I fill in &amp;quot;password&amp;quot; with &amp;quot;moodle&amp;quot;&lt;br /&gt;
      And I press &amp;quot;loginbtn&amp;quot;&lt;br /&gt;
      Then I should see &amp;quot;Moodle 101: Course Name&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    Scenario: Login as an unexisting user&lt;br /&gt;
      Given I am on &amp;quot;login/index.php&amp;quot;&lt;br /&gt;
      When I fill in &amp;quot;username&amp;quot; with &amp;quot;adminasdasd&amp;quot;&lt;br /&gt;
      And I fill in &amp;quot;password&amp;quot; with &amp;quot;moodlesdfasdf&amp;quot;&lt;br /&gt;
      And I press &amp;quot;loginbtn&amp;quot;&lt;br /&gt;
      Then I should see &amp;quot;Invalid login, please try again&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== Complex scenario === &lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
  Scenario: A teacher adds a discussion&lt;br /&gt;
    Given I am logged as a &amp;quot;teacher&amp;quot;&lt;br /&gt;
    And I go to a course&lt;br /&gt;
    And I create a &amp;quot;forum&amp;quot; activity&lt;br /&gt;
    And I view the &amp;quot;forum&amp;quot; activity    # The step definition class will keep a reference to the lasts steps&lt;br /&gt;
    When I add a &amp;quot;forum_discussion&amp;quot; filling the fields &amp;quot;subject,message[text]&amp;quot; with &amp;quot;I&#039;m the user subject,Dealing with \, split&amp;quot;    #     Wrapper step, it will redirect the petition to a &amp;quot;forum_discussion&amp;quot; method&lt;br /&gt;
    Then I should see &amp;quot;Discussion&amp;quot;&lt;br /&gt;
    And I should see &amp;quot;Subject&amp;quot;&lt;br /&gt;
    And I should see &amp;quot;I&#039;m the user subject&amp;quot;&lt;br /&gt;
&lt;br /&gt;
In order to be able to process the &amp;quot;logged as a $roleshortname&amp;quot; or the &amp;quot;a course&amp;quot; statements the /behat.yml file should be filled with your own installation data&lt;br /&gt;
&lt;br /&gt;
=== Input Tables ===&lt;br /&gt;
To improve readability and reduce unnecessary verbosity; complex scenarios can use input tables to group similar types of input:&lt;br /&gt;
&lt;br /&gt;
    Scenario: Add Offline text assignment&lt;br /&gt;
      Given that I add &amp;quot;assignment&amp;quot; to section &amp;quot;1&amp;quot;&lt;br /&gt;
      And I fill in the form:&lt;br /&gt;
        | field_name       | value  |&lt;br /&gt;
        | Assignment name  | Test3  |&lt;br /&gt;
        | Description      | Test3  |&lt;br /&gt;
        | Online text      | No     |&lt;br /&gt;
        | File submissions | No     |&lt;br /&gt;
      And I click &amp;quot;Save and display&amp;quot;&lt;br /&gt;
      Then the title &amp;quot;Test3&amp;quot; should be displayed&lt;br /&gt;
&lt;br /&gt;
or even:&lt;br /&gt;
&lt;br /&gt;
    Scenario: Set Submissions from date&lt;br /&gt;
      Given that I add &amp;quot;assignment&amp;quot; to section &amp;quot;1&amp;quot;&lt;br /&gt;
      And I fill in the form:&lt;br /&gt;
        | field_name             | value |&lt;br /&gt;
        | Assignment name        | Test4 |&lt;br /&gt;
        | Description            | Test4 |&lt;br /&gt;
      And I enter the dates in &amp;quot;Allow submissions from&amp;quot;:&lt;br /&gt;
        | date_unit | value     |&lt;br /&gt;
        | day       | 1         |&lt;br /&gt;
        | month     | September |&lt;br /&gt;
        | year      | 2012      |&lt;br /&gt;
        | hour      | 09        |&lt;br /&gt;
        | minute    | 05        |&lt;br /&gt;
      And I click &amp;quot;Save and display&amp;quot;&lt;br /&gt;
      Then the title &amp;quot;Test4&amp;quot; should be displayed&lt;br /&gt;
&lt;br /&gt;
== Packages ==&lt;br /&gt;
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&#039;s dependencies, including the Moodle contexts&lt;br /&gt;
&lt;br /&gt;
== Requirements ==&lt;br /&gt;
* PHP 5.3.3&lt;br /&gt;
* PHPUnit&lt;br /&gt;
* There are other packages and PHP settings requirements, but they be checked by the composer installer&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
* Clone the Moodle features project: https://github.com/dmonllao/moodle-behat-features&lt;br /&gt;
* Follow the [https://github.com/dmonllao/moodle-behat-features/blob/master/README.md README] instructions&lt;br /&gt;
&lt;br /&gt;
== Usage ==&lt;br /&gt;
* To test a feature type &amp;quot;bin/behat features/FEATURENAME.feature&amp;quot; from the clone directory&lt;br /&gt;
* If you want to execute the feature in a Selenium Grid2 you can specify another behat profile: &amp;quot;bin/behat --profile seleniumGrid2Firefox features/FEATURENAME.feature&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== Steps ==&lt;br /&gt;
Every step is processed in a step definition, which is defined in &amp;quot;context&amp;quot; classes. The Behat project has a main context class, FeaturesContext, but it allows more contexts to be added as subcontexts, Moodle is one of this subcontexts, all the Moodle steps definitions are split in a modular way following the [[https://docs.moodle.org/dev/Frankenstyle Frankenstyle]] format, and are loaded dynamically by Moodle\Behat\Context\MoodleContext.&lt;br /&gt;
&lt;br /&gt;
A quick view of the hierarchy:&lt;br /&gt;
&lt;br /&gt;
* FeaturesContext&lt;br /&gt;
** Sanpi/Behatch/Context&lt;br /&gt;
*** Behat extension with a lot of common actions like send REST petitions, store screenshots, DOM / XPath parsing&lt;br /&gt;
** Moodle/Behat/Context&lt;br /&gt;
*** MoodleContext as a reference to the rest of the Moodle components&lt;br /&gt;
*** BaseContext abstract class with helper methods&lt;br /&gt;
**** CoreContext&lt;br /&gt;
***** contains basic steps definitions like visit($url), pressButton($button) to manage the browser &lt;br /&gt;
***** The cross-component and the most common Moodle actions like iAmLoggedAsA($roleshortname) or aUserAssignedInContextOfContextlevel($roleshortname, $instanceid, $contextlevel) to speed up the creation of scenarios&lt;br /&gt;
**** CourseContext&lt;br /&gt;
***** Course related steps definitions&lt;br /&gt;
**** ModForumContext&lt;br /&gt;
***** mod_forum related steps definitions&lt;br /&gt;
**** ...&lt;br /&gt;
&lt;br /&gt;
In a future with a lot of Moodle components, having a single shared directory could not be the best way to store the contexts, other directory hierarchies more similar to a moodle distribution can be made without changing references between components since they are currently made using the Frankenstyle component name.&lt;br /&gt;
&lt;br /&gt;
== Links == &lt;br /&gt;
[http://www.github.com/dmonllao/moodle-behat-features Moodle features project]&lt;br /&gt;
&lt;br /&gt;
[http://www.github.com/dmonllao/moodle-behat-contexts Moodle contexts repository]&lt;/div&gt;</summary>
		<author><name>Esqueeze</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/dev/index.php?title=Testing_Roadmap&amp;diff=35361</id>
		<title>Testing Roadmap</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/dev/index.php?title=Testing_Roadmap&amp;diff=35361"/>
		<updated>2012-09-06T03:17:17Z</updated>

		<summary type="html">&lt;p&gt;Esqueeze: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Introduction==&lt;br /&gt;
This page documents the current work being performed as a process of continuous improvement and testing planned at Moodle. Testing fulfils multiple roles within Moodle, from actually assisting Moodle developers to create a high quality product and mitigating risks during projects, to re-enforcing user confidence in the product through reporting, feedback and visibility.&lt;br /&gt;
&lt;br /&gt;
==Areas of the Testing Process Improvement Currently Under Development==&lt;br /&gt;
Due to dependencies such as the QA test cycle, testing is aligned with Moodle&#039;s 6 monthly times release cycle. Version 2.4 of Moodle is scheduled for release in December 2012.&lt;br /&gt;
===Test Environments===&lt;br /&gt;
*[http://tracker.moodle.org/browse/MDLTEST-302 MDLTEST-302] Implement Oracle and MSSQL test databases for test automation.&lt;br /&gt;
&lt;br /&gt;
===Test Automation===&lt;br /&gt;
*[http://tracker.moodle.org/browse/MDLTEST-240 MDLTEST-240] Create the nightly build machine. A Jenkins server is required to run an automated nightly build of Moodle.&lt;br /&gt;
*[http://tracker.moodle.org/browse/MDLTEST-246 MDLTEST-246] Add performance testing comparison tool and performance tests to the nightly build.&lt;br /&gt;
*[http://tracker.moodle.org/browse/MDLTEST-274 MDLTEST-274] Implement Behat Behavioural Driven Development (BDD) framework with Selenium in PHP. We already have a suite of tests running in Selenium against core modules in Moodle on a nightly basis. This project adds usability to the tool allowing the community to implement automated tests easily using a ubiquitous, domain specific language.&lt;br /&gt;
*[http://tracker.moodle.org/browse/MDLTEST-256 MDLTEST-256] This implements our selenium tests on the nightly build machine against a Selenium 2 Grid.&lt;br /&gt;
*[http://tracker.moodle.org/browse/MDLTEST-284 MDLTEST-284] Implement Unit tests on the nightly build machine against Postgres database. The plan is to increase the coverage of tests against the different supported database drivers. We already run continuous integration against the MySQL database driver at every check-in.&lt;br /&gt;
===Test Management===&lt;br /&gt;
*[http://tracker.moodle.org/browse/MDLTEST-296 MDLTEST-296] Implement a new test management tool. Using Jira to document testing creates a large documentation overhead when adding or updating tests. Find a replacement.&lt;br /&gt;
*[http://tracker.moodle.org/browse/MDLTEST-273 MDLTEST-273] A test automation strategy document. This will define the processes and practices used when deciding what to automate and how.&lt;br /&gt;
*[http://tracker.moodle.org/browse/MDLTEST-301 MDLTEST-301] Add tests for the 2.4 QA cycle based upon the current [https://docs.moodle.org/dev/Roadmap roadmap].&lt;br /&gt;
&lt;br /&gt;
==Future Work==&lt;br /&gt;
The work here is planned for the near future and, although unlikely, may be completed or partially competed before the 2.4 release of Moodle.&lt;br /&gt;
*Implementation of a method for serving Development test environment VM&#039;s using a tool such as Vagrant and Chef. This will include the relevant templates.&lt;br /&gt;
*Increase Selenium test automation coverage.&lt;br /&gt;
*Add performance test jobs to the nightly build for MSSQL and Oracle databases.&lt;br /&gt;
*Add unit test jobs to the nightly build for MSSQL and Oracle databases.&lt;br /&gt;
*Add more browser interoperability testing to the nightly build using Selenium.&lt;br /&gt;
*Performance testing reporting improvements.&lt;/div&gt;</summary>
		<author><name>Esqueeze</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/dev/index.php?title=Testing_strategy/Test_Automation_Process&amp;diff=35145</id>
		<title>Testing strategy/Test Automation Process</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/dev/index.php?title=Testing_strategy/Test_Automation_Process&amp;diff=35145"/>
		<updated>2012-08-29T08:33:25Z</updated>

		<summary type="html">&lt;p&gt;Esqueeze: Created page with &amp;quot;=Goals= Test automation is most valuable when it is implemented as part of a clearly defined process.  =Approach=&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Goals=&lt;br /&gt;
Test automation is most valuable when it is implemented as part of a clearly defined process.&lt;br /&gt;
&lt;br /&gt;
=Approach=&lt;/div&gt;</summary>
		<author><name>Esqueeze</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/dev/index.php?title=Testing_strategy&amp;diff=35144</id>
		<title>Testing strategy</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/dev/index.php?title=Testing_strategy&amp;diff=35144"/>
		<updated>2012-08-29T08:30:17Z</updated>

		<summary type="html">&lt;p&gt;Esqueeze: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Work in progress}}&lt;br /&gt;
=Introduction=&lt;br /&gt;
==Purpose==&lt;br /&gt;
The purpose of this document is to define a high level QA strategy&lt;br /&gt;
at Moodle and communicate that process to the relevant stakeholders.&lt;br /&gt;
This document is loosely based upon the IEEE829 standard for software&lt;br /&gt;
testing documentation; adaptations have been made to this standard to&lt;br /&gt;
make the document more lightweight, suitable for use in an agile&lt;br /&gt;
process and relevant to the organization. &lt;br /&gt;
&lt;br /&gt;
This document is test centric, only explaining the development&lt;br /&gt;
process from a testing point of view. The scope of this document does&lt;br /&gt;
not cover the details of the entire development process at Moodle but&lt;br /&gt;
how testing is applied to it. This document also discusses potential&lt;br /&gt;
benefits to the organization of the processes discussed.&lt;br /&gt;
Currently the processes that are documented here are under development. Progress can be viewed via the [https://docs.moodle.org/dev/Testing_Roadmap Testing Roadmap]&lt;br /&gt;
==Scope==&lt;br /&gt;
This document encompasses all testing activities at Moodle and how they will be performed. This includes:&lt;br /&gt;
&lt;br /&gt;
* [https://docs.moodle.org/dev/Testing_strategy/Testing_Methodology_At_Moodle Testing Methodology at Moodle]&lt;br /&gt;
* [https://docs.moodle.org/dev/Testing_strategy/The_Moodle_Testing_Process The Moodle Testing Process]&lt;br /&gt;
* [https://docs.moodle.org/dev/Testing_strategy/Managing_Legacy_Items Managing legacy items]&lt;br /&gt;
* [https://docs.moodle.org/dev/Testing_strategy/Hardware_Requirements Hardware requirements]&lt;br /&gt;
* [https://docs.moodle.org/dev/Testing_strategy/Testing_Tools_and_Their_Use Testing Tools and Their Use]&lt;br /&gt;
* [https://docs.moodle.org/dev/Testing_strategy/Test_Automation_Process Test Automation Process]&lt;br /&gt;
* [https://docs.moodle.org/dev/Testing_strategy/Test_Environments Test Environments]&lt;br /&gt;
* [https://docs.moodle.org/dev/Testing_strategy/Implementation_Plan Implementation Plan]&lt;br /&gt;
* [https://docs.moodle.org/dev/Testing_strategy/Training Training]&lt;br /&gt;
* [https://docs.moodle.org/dev/Testing_strategy/Useful_Resources Useful Resources]&lt;/div&gt;</summary>
		<author><name>Esqueeze</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/dev/index.php?title=Testing_strategy&amp;diff=35143</id>
		<title>Testing strategy</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/dev/index.php?title=Testing_strategy&amp;diff=35143"/>
		<updated>2012-08-29T08:28:23Z</updated>

		<summary type="html">&lt;p&gt;Esqueeze: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Work in progress}}&lt;br /&gt;
=Introduction=&lt;br /&gt;
==Purpose==&lt;br /&gt;
The purpose of this document is to define a high level QA strategy&lt;br /&gt;
at Moodle and communicate that process to the relevant stakeholders.&lt;br /&gt;
This document is loosely based upon the IEEE829 standard for software&lt;br /&gt;
testing documentation; adaptations have been made to this standard to&lt;br /&gt;
make the document more lightweight, suitable for use in an agile&lt;br /&gt;
process and relevant to the organization. &lt;br /&gt;
&lt;br /&gt;
This document is test centric, only explaining the development&lt;br /&gt;
process from a testing point of view. The scope of this document does&lt;br /&gt;
not cover the details of the entire development process at Moodle but&lt;br /&gt;
how testing is applied to it. This document also discusses potential&lt;br /&gt;
benefits to the organization of the processes discussed.&lt;br /&gt;
Currently the processes that are documented here are under development. Progress can be viewed via the [https://docs.moodle.org/dev/Testing_Roadmap Testing Roadmap]&lt;br /&gt;
==Scope==&lt;br /&gt;
This document encompasses all testing activities at Moodle and how they will be performed. This includes:&lt;br /&gt;
&lt;br /&gt;
* [https://docs.moodle.org/dev/Testing_strategy/Testing_Methodology_At_Moodle Testing Methodology at Moodle]&lt;br /&gt;
* [https://docs.moodle.org/dev/Testing_strategy/The_Moodle_Testing_Process The Moodle Testing Process]&lt;br /&gt;
* [https://docs.moodle.org/dev/Testing_strategy/Managing_Legacy_Items Managing legacy items]&lt;br /&gt;
* [https://docs.moodle.org/dev/Testing_strategy/Hardware_Requirements Hardware requirements]&lt;br /&gt;
* [https://docs.moodle.org/dev/Testing_strategy/Testing_Tools_and_Their_Use Testing Tools and Their Use]&lt;br /&gt;
* [https://docs.moodle.org/dev/Testing_strategy/Test_Environments Test Environments]&lt;br /&gt;
* [https://docs.moodle.org/dev/Testing_strategy/Implementation_Plan Implementation Plan]&lt;br /&gt;
* [https://docs.moodle.org/dev/Testing_strategy/Training Training]&lt;br /&gt;
* [https://docs.moodle.org/dev/Testing_strategy/Useful_Resources Useful Resources]&lt;/div&gt;</summary>
		<author><name>Esqueeze</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/dev/index.php?title=Testing_strategy&amp;diff=35142</id>
		<title>Testing strategy</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/dev/index.php?title=Testing_strategy&amp;diff=35142"/>
		<updated>2012-08-29T08:26:35Z</updated>

		<summary type="html">&lt;p&gt;Esqueeze: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Work in progress}}&lt;br /&gt;
=Introduction=&lt;br /&gt;
==Purpose==&lt;br /&gt;
The purpose of this document is to define a high level QA strategy&lt;br /&gt;
at Moodle and communicate that process to the relevant stakeholders.&lt;br /&gt;
This document is loosely based upon the IEEE829 standard for software&lt;br /&gt;
testing documentation; adaptations have been made to this standard to&lt;br /&gt;
make the document more lightweight, suitable for use in an agile&lt;br /&gt;
process and relevant to the organization. &lt;br /&gt;
&lt;br /&gt;
This document is test centric, only explaining the development&lt;br /&gt;
process from a testing point of view. The scope of this document does&lt;br /&gt;
not cover the details of the entire development process at Moodle but&lt;br /&gt;
how testing is applied to it. This document also discusses potential&lt;br /&gt;
benefits to the organization of the processes discussed.&lt;br /&gt;
Currently the processes that are documented here are under development. Progress can be viewed via the [https://docs.moodle.org/dev/Testing_Roadmap Testing Roadmap]&lt;br /&gt;
==Scope==&lt;br /&gt;
This document encompasses all testing activities at Moodle and how they will be performed. This includes:&lt;br /&gt;
&lt;br /&gt;
[https://docs.moodle.org/dev/Testing_strategy/Testing_Methodology_At_Moodle Testing Methodology at Moodle]&lt;br /&gt;
[https://docs.moodle.org/dev/Testing_strategy/The_Moodle_Testing_Process The Moodle Testing Process]&lt;br /&gt;
[https://docs.moodle.org/dev/Testing_strategy/Managing_Legacy_Items Managing legacy items]&lt;br /&gt;
[https://docs.moodle.org/dev/Testing_strategy/Hardware_Requirements Hardware requirements]&lt;br /&gt;
[https://docs.moodle.org/dev/Testing_strategy/Testing_Tools_and_Their_Use Testing Tools and Their Use]&lt;br /&gt;
[https://docs.moodle.org/dev/Testing_strategy/Test_Environments Test Environments]&lt;br /&gt;
[https://docs.moodle.org/dev/Testing_strategy/Implementation_Plan Implementation Plan]&lt;br /&gt;
[https://docs.moodle.org/dev/Testing_strategy/Training Training]&lt;br /&gt;
[https://docs.moodle.org/dev/Testing_strategy/Useful_Resources Useful Resources]&lt;/div&gt;</summary>
		<author><name>Esqueeze</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/dev/index.php?title=Testing_strategy&amp;diff=35141</id>
		<title>Testing strategy</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/dev/index.php?title=Testing_strategy&amp;diff=35141"/>
		<updated>2012-08-29T08:25:09Z</updated>

		<summary type="html">&lt;p&gt;Esqueeze: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Work in progress}}&lt;br /&gt;
=Introduction=&lt;br /&gt;
==Purpose==&lt;br /&gt;
The purpose of this document is to define a high level QA strategy&lt;br /&gt;
at Moodle and communicate that process to the relevant stakeholders.&lt;br /&gt;
This document is loosely based upon the IEEE829 standard for software&lt;br /&gt;
testing documentation; adaptations have been made to this standard to&lt;br /&gt;
make the document more lightweight, suitable for use in an agile&lt;br /&gt;
process and relevant to the organization. &lt;br /&gt;
&lt;br /&gt;
This document is test centric, only explaining the development&lt;br /&gt;
process from a testing point of view. The scope of this document does&lt;br /&gt;
not cover the details of the entire development process at Moodle but&lt;br /&gt;
how testing is applied to it. This document also discusses potential&lt;br /&gt;
benefits to the organization of the processes discussed.&lt;br /&gt;
Currently the processes that are documented here are under development. Progress can be viewed via the [https://docs.moodle.org/dev/Testing_strategy/Implementation_Plan Implementation Plan]&lt;br /&gt;
==Scope==&lt;br /&gt;
This document encompasses all testing activities at Moodle and how they will be performed. This includes:&lt;br /&gt;
&lt;br /&gt;
[https://docs.moodle.org/dev/Testing_strategy/Testing_Methodology_At_Moodle Testing Methodology at Moodle]&lt;br /&gt;
[https://docs.moodle.org/dev/Testing_strategy/The_Moodle_Testing_Process The Moodle Testing Process]&lt;br /&gt;
[https://docs.moodle.org/dev/Testing_strategy/Managing_Legacy_Items Managing legacy items]&lt;br /&gt;
[https://docs.moodle.org/dev/Testing_strategy/Hardware_Requirements Hardware requirements]&lt;br /&gt;
[https://docs.moodle.org/dev/Testing_strategy/Testing_Tools_and_Their_Use Testing Tools and Their Use]&lt;br /&gt;
[https://docs.moodle.org/dev/Testing_strategy/Test_Environments Test Environments]&lt;br /&gt;
[https://docs.moodle.org/dev/Testing_strategy/Implementation_Plan Implementation Plan]&lt;br /&gt;
[https://docs.moodle.org/dev/Testing_strategy/Training Training]&lt;br /&gt;
[https://docs.moodle.org/dev/Testing_strategy/Useful_Resources Useful Resources]&lt;/div&gt;</summary>
		<author><name>Esqueeze</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/dev/index.php?title=Testing_strategy&amp;diff=35140</id>
		<title>Testing strategy</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/dev/index.php?title=Testing_strategy&amp;diff=35140"/>
		<updated>2012-08-29T08:22:39Z</updated>

		<summary type="html">&lt;p&gt;Esqueeze: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Work in progress}}&lt;br /&gt;
=Introduction=&lt;br /&gt;
==Purpose==&lt;br /&gt;
The purpose of this document is to define a high level QA strategy&lt;br /&gt;
at Moodle and communicate that process to the relevant stakeholders.&lt;br /&gt;
This document is loosely based upon the IEEE829 standard for software&lt;br /&gt;
testing documentation; adaptations have been made to this standard to&lt;br /&gt;
make the document more lightweight, suitable for use in an agile&lt;br /&gt;
process and relevant to the organization. &lt;br /&gt;
&lt;br /&gt;
This document is test centric, only explaining the development&lt;br /&gt;
process from a testing point of view. The scope of this document does&lt;br /&gt;
not cover the details of the entire development process at Moodle but&lt;br /&gt;
how testing is applied to it. This document also discusses potential&lt;br /&gt;
benefits to the organization of the processes discussed.&lt;br /&gt;
Currently the processes that are documented here are under development. Progress can be viewed via the [https://docs.moodle.org/dev/Testing_strategy/Implementation_Plan Implementation Plan]&lt;br /&gt;
==Scope==&lt;br /&gt;
&amp;lt;P STYLE=&amp;quot;margin-bottom: 0cm&amp;quot;&amp;gt;This document encompasses all testing&lt;br /&gt;
activities at Moodle and how they will be performed. This includes:&amp;lt;/P&amp;gt;&lt;br /&gt;
&amp;lt;UL&amp;gt;&lt;br /&gt;
	&amp;lt;LI&amp;gt;&amp;lt;P STYLE=&amp;quot;margin-bottom: 0cm&amp;quot;&amp;gt;[https://docs.moodle.org/dev/Testing_strategy/Testing_Methodology_At_Moodle Testing Methodology at Moodle]&amp;lt;/P&amp;gt;&lt;br /&gt;
        &amp;lt;LI&amp;gt;&amp;lt;P STYLE=&amp;quot;margin-bottom: 0cm&amp;quot;&amp;gt;[https://docs.moodle.org/dev/Testing_strategy/The_Moodle_Testing_Process The Moodle Testing Process]&amp;lt;/P&amp;gt;&lt;br /&gt;
	&amp;lt;LI&amp;gt;&amp;lt;P STYLE=&amp;quot;margin-bottom: 0cm&amp;quot;&amp;gt;[https://docs.moodle.org/dev/Testing_strategy/Managing_Legacy_Items Managing legacy items]&amp;lt;/P&amp;gt;&lt;br /&gt;
	&amp;lt;LI&amp;gt;&amp;lt;P STYLE=&amp;quot;margin-bottom: 0cm&amp;quot;&amp;gt;[https://docs.moodle.org/dev/Testing_strategy/Hardware_Requirements Hardware requirements]&amp;lt;/P&amp;gt;&lt;br /&gt;
	&amp;lt;LI&amp;gt;&amp;lt;P STYLE=&amp;quot;margin-bottom: 0cm&amp;quot;&amp;gt;[https://docs.moodle.org/dev/Testing_strategy/Testing_Tools_and_Their_Use Testing Tools and Their Use]&amp;lt;/P&amp;gt;&lt;br /&gt;
        &amp;lt;LI&amp;gt;&amp;lt;P STYLE=&amp;quot;margin-bottom: 0cm&amp;quot;&amp;gt;[https://docs.moodle.org/dev/Testing_strategy/Test_Environments Test Environments]&amp;lt;/P&amp;gt;&lt;br /&gt;
        &amp;lt;LI&amp;gt;&amp;lt;P STYLE=&amp;quot;margin-bottom: 0cm&amp;quot;&amp;gt;[https://docs.moodle.org/dev/Testing_strategy/Implementation_Plan Implementation Plan]&amp;lt;/P&amp;gt;&lt;br /&gt;
	&amp;lt;LI&amp;gt;&amp;lt;P STYLE=&amp;quot;margin-bottom: 0cm&amp;quot;&amp;gt;[https://docs.moodle.org/dev/Testing_strategy/Training Training]&amp;lt;/P&amp;gt;&lt;br /&gt;
        &amp;lt;LI&amp;gt;&amp;lt;P STYLE=&amp;quot;margin-bottom: 0cm&amp;quot;&amp;gt;[https://docs.moodle.org/dev/Testing_strategy/Useful_Resources Useful Resources]&amp;lt;/P&amp;gt;&lt;br /&gt;
&amp;lt;/UL&amp;gt;&lt;/div&gt;</summary>
		<author><name>Esqueeze</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/dev/index.php?title=Testing_strategy/The_Moodle_Testing_Process&amp;diff=35135</id>
		<title>Testing strategy/The Moodle Testing Process</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/dev/index.php?title=Testing_strategy/The_Moodle_Testing_Process&amp;diff=35135"/>
		<updated>2012-08-29T01:59:16Z</updated>

		<summary type="html">&lt;p&gt;Esqueeze: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Work in progress}}&lt;br /&gt;
&amp;lt;H1 CLASS=&amp;quot;western&amp;quot;&amp;gt;Methodologies in the Moodle Development Process&amp;lt;/H1&amp;gt;&lt;br /&gt;
&amp;lt;P&amp;gt;Moodle has an established process for developing and integrating software. This section describes relevant testing methodology within the existing process.&amp;lt;/P&amp;gt;&lt;br /&gt;
&amp;lt;P&amp;gt;The full [https://docs.moodle.org/dev/Process development]&lt;br /&gt;
life-cycle at Moodle is documented in detail [https://docs.moodle.org/dev/Releases#General_release_calendar elsewhere].&lt;br /&gt;
Moodle is currently developed using Agile methodologies including&lt;br /&gt;
Scrum. The following stages of development take place within this&lt;br /&gt;
life-cycle:&amp;lt;/P&amp;gt;&lt;br /&gt;
&amp;lt;UL&amp;gt;&lt;br /&gt;
	&amp;lt;LI&amp;gt;&amp;lt;P&amp;gt;Weekly integration cycle&amp;lt;/P&amp;gt;&lt;br /&gt;
	&amp;lt;LI&amp;gt;&amp;lt;P&amp;gt;3-weekly stable sprints&amp;lt;/P&amp;gt;&lt;br /&gt;
	&amp;lt;LI&amp;gt;&amp;lt;P&amp;gt;6-monthly major releases&amp;lt;/P&amp;gt;&lt;br /&gt;
	&amp;lt;LI&amp;gt;&amp;lt;P&amp;gt;3 minor releases between every major release&amp;lt;/P&amp;gt;&lt;br /&gt;
&amp;lt;/UL&amp;gt;&lt;br /&gt;
&amp;lt;H2 CLASS=&amp;quot;western&amp;quot;&amp;gt;Weekly (Continuous) Integration&lt;br /&gt;
Cycle&amp;lt;/H2&amp;gt;&lt;br /&gt;
&amp;lt;P&amp;gt;A manual testing phase of integration issues occurs towards&lt;br /&gt;
the end of the SDLC at Moodle during the Wednesday (AWST) testing&lt;br /&gt;
phase. This is the last possible chance Moodle gets to capture&lt;br /&gt;
regressions. Relying soley on this phase to capture regressions could result in the late discovery of regressions&lt;br /&gt;
during unguided exploratory testing and worse still the introduction&lt;br /&gt;
of regressions into Master. Discovery of issues late in the SDLC&lt;br /&gt;
prevents issues from being dealt with in a timely manner when&lt;br /&gt;
integrators, or even those writing the code, are able to resolve those issues relatively easily.&lt;br /&gt;
&amp;lt;/P&amp;gt;&lt;br /&gt;
&amp;lt;P&amp;gt;The processes described here ensure the bulk of&lt;br /&gt;
testing and the majority of responsibility for capturing regressions&lt;br /&gt;
does not lie with the Wednesday testing phase. Testing is performed as early in the SDLC as possible.&amp;lt;/P&amp;gt;&lt;br /&gt;
&amp;lt;H2 CLASS=&amp;quot;western&amp;quot;&amp;gt;New Unit Tests&amp;lt;/H2&amp;gt;&lt;br /&gt;
&amp;lt;P&amp;gt;Creating unit tests prior to coding starts&lt;br /&gt;
the whole SDLC off with a focus on quality. If code isn&#039;t&lt;br /&gt;
considered complete until unit tests pass, then the code itself will&lt;br /&gt;
be of a high quality by the time it is implemented. This also creates a&lt;br /&gt;
repository of unit regression tests in an iterative manner while not&lt;br /&gt;
requiring of a great deal of extra effort to write those tests. As&lt;br /&gt;
these tests are added, they will provide early regression testing of&lt;br /&gt;
new code.&amp;lt;/P&amp;gt;&lt;br /&gt;
&amp;lt;P&amp;gt;Unit tests in the PHPUnit framework are a requirement when submitting code to Moodle.&amp;lt;/P&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;H2 CLASS=&amp;quot;western&amp;quot;&amp;gt;Integration Steps&amp;lt;/H2&amp;gt;&lt;br /&gt;
&amp;lt;H3 CLASS=&amp;quot;western&amp;quot;&amp;gt;Step 1: GIT Pull to integration CI server&amp;lt;/H3&amp;gt;&lt;br /&gt;
When developers are ready to submit their code into the integration process, they set the status of the tracker issue to &#039;Ready for integration&#039;. This in turn triggers the Jenkins CI job &amp;quot;Pre-check remote branch&amp;quot;. This job performs the following tasks:&lt;br /&gt;
* Pull the changes to a local branch on the Integration CI Server.&lt;br /&gt;
** git reset --hard origin =&amp;gt; so it is in the same status than the official git repository&lt;br /&gt;
** git pull =&amp;gt; get the changes proposed by a developer&lt;br /&gt;
* Run checks on the code.&lt;br /&gt;
* Generate a results artefact that is sent to the developer.&lt;br /&gt;
&lt;br /&gt;
Please note; each job begins by resetting the local git repository to the original state so the pulls are never permanent. This mitigates the risk posed by &amp;quot;collisions&amp;quot; as the purpose of this step is not to test for &amp;quot;collisions&amp;quot; between conflicting patches but to verify that code meets the required standard to proceed to peer review.&lt;br /&gt;
&amp;lt;H3 CLASS=&amp;quot;western&amp;quot;&amp;gt;Step 2: Peer Review&amp;lt;/H3&amp;gt;&lt;br /&gt;
&amp;lt;P&amp;gt;Any code sent back to the developer at Peer Review, after any changes have been made, must be must pass step 1 again before re-review.&amp;lt;/P&amp;gt;&lt;br /&gt;
&amp;lt;H3 CLASS=&amp;quot;western&amp;quot;&amp;gt;Step 3: GIT Pull to integration&amp;lt;/H3&amp;gt;&lt;br /&gt;
&amp;lt;P&amp;gt;Code passing peer review can be pulled from the developers repository to integration where, among other things, the main Jenkins integration jobs run. At this stage integrators also check for &amp;quot;collisions&amp;quot; and conflicts between submitted patches.&amp;lt;/P&amp;gt;&lt;br /&gt;
&amp;lt;H3 CLASS=&amp;quot;western&amp;quot;&amp;gt;Step 4: GIT Pull to Nightly Build Machine, performance and browser driven automation suite&amp;lt;/H3&amp;gt;&lt;br /&gt;
A set of regression tests are run at 2AM AWST Daily. These tests are scheduled to run automatically from the Moodle test automation framework and run on all supported platforms e.g. all databases MySQL, Oracle, MSSQL, PostgreSQL. The following tests are performed in this order:&lt;br /&gt;
# Moodle unit tests, including those submitted by developers.&lt;br /&gt;
# PerfComp performance comparison tests.&lt;br /&gt;
# Selenium acceptance tests, automated browser tests based upon the existing Moodle QA test suite.&lt;br /&gt;
&amp;lt;H3 CLASS=&amp;quot;western&amp;quot;&amp;gt;Step 5: Issue retest&amp;lt;/H3&amp;gt;&lt;br /&gt;
&amp;lt;P&amp;gt;On Wednesday (AWST) the manual issue retesting is performed at Moodle HQ. Issue test steps must be clear and concise, allowing the issue to be recreated easily. Testing steps must go in the testing instructions field to prove that the bug is resolved. Areas of Moodle to investigate with extra exploratory testing should be entered here also.&amp;lt;/P&amp;gt;&lt;br /&gt;
&amp;lt;P&amp;gt;The format for writing test steps is:&amp;lt;/P&amp;gt;&lt;br /&gt;
&amp;lt;P&amp;gt;&#039;&#039;&#039;Pre-requisites:&#039;&#039;&#039;&amp;lt;/P&amp;gt;&lt;br /&gt;
&amp;lt;P&amp;gt;Everything required to allow the test to start. This can include, but is not limited to: issue specific data, test platform information: e.g. OS.&amp;lt;/P&amp;gt;&lt;br /&gt;
&amp;lt;P&amp;gt;&#039;&#039;&#039;Test Steps:&#039;&#039;&#039;&amp;lt;/P&amp;gt;&lt;br /&gt;
&amp;lt;P&amp;gt;A clear and concise list of test steps required to test the issue with the expected results of each step.&amp;lt;/P&amp;gt;&lt;br /&gt;
&amp;lt;P&amp;gt;&#039;&#039;&#039;Actual Result:&#039;&#039;&#039;&amp;lt;/P&amp;gt;&lt;br /&gt;
&amp;lt;P&amp;gt;The actual result of what happened when the test is complete.&amp;lt;/P&amp;gt;&lt;br /&gt;
&amp;lt;P&amp;gt;&#039;&#039;&#039;Exploratory focus:&#039;&#039;&#039;&amp;lt;/P&amp;gt;&lt;br /&gt;
&amp;lt;P&amp;gt;Areas of Moodle that may need to be investigated further to identify regressions etc.&amp;lt;/P&amp;gt;&lt;br /&gt;
&amp;lt;P&amp;gt;An issue passes when the actual result of test no longer occurs and no regressions have been created.&amp;lt;/P&amp;gt;&lt;br /&gt;
&amp;lt;H2 CLASS=&amp;quot;western&amp;quot;&amp;gt;Stable Sprints&amp;lt;/H2&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;TODO&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;H2 CLASS=&amp;quot;western&amp;quot;&amp;gt;Major Releases and New&lt;br /&gt;
Development&amp;lt;/H2&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;TODO&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;H2 CLASS=&amp;quot;western&amp;quot;&amp;gt;Point Releases&amp;lt;/H2&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;TODO&#039;&#039;&#039;&lt;/div&gt;</summary>
		<author><name>Esqueeze</name></author>
	</entry>
</feed>