• Home
  • Blog
  • Codeception – PHP Testing Framework

TECHNOLOGIES

Codeception – PHP Testing Framework

15.04.2016 - Read in 3 min.

Codeception is a framework designed for creating unit tests, functional tests, and acceptance tests. In this article, I’ll focus on the process of creating an automated acceptance test, locating objects, and reporting results.

Codeception php testing RST Software Masters

Codeception in practice

Codeception is a framework designed for creating unit tests, functional tests, and acceptance tests. In this article, I’ll focus on the process of creating an automated acceptance test, locating objects, and reporting results.

 

Installation

The installation process is very easy. The only requirement is to have a PHP interpreter installed, and optionally a Composer. Next, you can install Codeception using composer require “codeception/codeception”. To create a test environment, run the php codecept.phar bootstrap command.

 

Creating a test

Files for the initial test are created by running a Cept generator: codecept generate:cept acceptance logowanie

Sample test:

[code_highlight language=”php”]

<?php

$I->new AcceptanceTester($scenario);

$I->wantTo(“Login as a regular user”);

$I->amOnPage(“https://system.trans.eu”);

$I->see(“login”);

$I->fillField(“login”, “ja”);

$I->fillField(“password”, “haslo”);

$I->click(“submit”);

[/code_highlight]

The idea of Codeception is to create instances of testers and use scenarios to be executed by them. In this case, the first line creates an acceptance tester and passes a default scenario to it. The tester informs what type of operation it will attempt to execute (wantTo), proceeds to the login page (amOnPage), and performs an initial assertion. The ‘see’ method is an assertion that checks whether there is an element matching the ‘login’ pattern on the downloaded page. Comparison is done by matching object IDs, class names, attributes, etc. Two subsequent fillField methods fill the input fields with IDs: ‘login’ and ‘password’. A click results in the selection of an element matching the ‘submit’ string, and submits the form.

The above test is the very essence of Codeception – it uses the basic components of the framework.

 

Configuration

Codeception is configured with the use of .yml files. They are available globally as well as separately for each type of tests. Configuration file for acceptance tests is called: acceptance.suite.yml

To use the WebDriver protocol and this driver, activate the appropriate module using the ‘enabled’ option and the host and port data. Sample section of the file:

[code_highlight language=”xml”]

class_name: AcceptanceTester

modules:

enabled:

– WebDriver:

browser: firefox

window_size: 1280×800

wait: 10

[/code_highlight]

 

Running

The basic run is initiated by executing the codecept run command.

Useful execution option is -d  for running in debug mode, displaying details of test execution as well as additional values that the developer might want to view in the console.

 

Test result PASSED

^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

Acceptance Tests (1) ———————–

Modules: WebDriver, \Helper\Acceptance

>Functional Tests (0) ————————

Modules: \Helper\Functional

———————————————

———————————————

Unit Tests (0) ——————————

Modules: Asserts, \Helper\Unit

———————————————

———————————————

Time: 0.18 minutes, Memory: 7.50Mb

OK (1 test, 1 assertions)

The information above inform us about the execution of a single test with one assertion. The test was successful.

 

Page object pattern

Codeception supports the Page Object pattern. Built-in generators create classes for selected pages of tested application:

codecept generate:pageobject Login

Next, object definitions along with their locators and methods for controlling the flow of data and actions on a given page are put in the class.

 

Locating elements

Matching can be done based on strict locators:

[code_highlight language=”php”]

[‘id’=>’object_id’]

[‘name’=>’objectName’]

[‘xpath’=>’//div[@class=”search-button”]’]

[‘link’=>’Click this link!’]

[‘css’=>'[role=dialog]’]

[/code_highlight]

You can also leave the Codeception matching and use fuzzy locators, as presented in previous examples ($I->see(“login”) )

 

Retrieving text from an object

A set of commands called grabbers allows you to read texts from div elements or inputs and use it e.g. in assertion or print it to the console: $I->grabTextFrom(‘#div’)

 

Environments

Codeception uses numerous config files that can help you run tests for different testing environments.

The ‘env’ section of the file contains definitions specific to a given environment, such as the URL, driver used, etc. An environment (or many environments) is selected at execution, using the -env option of the framework, e.g. codecept run -d –env prod

 

Screenshots

Codeception automatically makes screenshots (and downloads HTML code) for any errors found, but you can also perform manual download at any stage of the script. This can be done with the use of the makeScreenshot command.

Example:

$I->makeScreenshot($scenario->current(‘name’).’_screenshot.png’);

 

Reporting

By default, Codeception prints a test result to the system console and makes screenshots of any error found. In addition, numerous formats can be used. It is possible thanks to the –xml and –html options. The former generates a JUnit XML output, and the latter creates an HTML report.

Article notes

Udostępnij

Przemysław Dąbrowski-RST Software

Przemysław Dąbrowski

Senior Software Tester

Tester with fondness for product development, creating a proper testing process, and automating all repetitive tests. Privately, composes music and plays the guitar.

Newsletter

Newsletter

Thank you!
Your email has been sent.

Our website uses cookies to work correctly. Using this website with current settings means that cookies will be stored in the browser’s memory. Cookies settings can be changed in the browser’s options. For more information please visit Cookies policy.