SlideShare a Scribd company logo
CodeCeption
introduction and use in Yii
Yii London Meetup - 15 April 2014
by Matteo ‘Peach’ Pescarin - @ilPeach
CodeCeption introduction and use in Yii
The current situation
(Potentially) fiddly system configuration
unless
the framework ships a testing environment
e.g.
db connection,
access to magic functions,
autoloading functionality,
...
CodeCeption introduction and use in Yii
Yet another tool?
NOPE
It’s been designed to ease the testing process.
It’s meant to be extensible and modular.
Creates uniformity across different test suites.
Works on top of other well known technologies,
e.g. PHPUnit, PHPBrowser, Selenium, etc...
CodeCeption introduction and use in Yii
Should you bother writing tests?
YES
CodeCeption introduction and use in Yii
Should you bother writing tests?
Yes, you really should.
And no, you don’t need to test everything.
You need a QA strategy,
which comes with proper planning
and a desire to avoid spending the weekend fixing bugs.
Unless you’re a maniac
who loves to deliver buggier code in production.
CodeCeption introduction and use in Yii
What kind of tests?
Acceptance High-level tests, can have no knowledge of the technologies used.
Testing done from the non-technical person PoV (called WebGuy):
“uses the browser to test the website works correctly.”
Can be plugged into different testing suites: e.g. PHPBrowser, Selenium, Sahi,..
CodeCeption introduction and use in Yii
What kind of tests?
Acceptance High-level tests, can have no knowledge of the technologies used.
Testing done from the non-technical person PoV (called WebGuy):
“uses the browser to test the website works correctly.”
Can be plugged into different testing suites: e.g. PHPBrowser, Selenium, Sahi,..
Functional Mid-level tests. Covers functionality from the server perspective.
The person testing (called TestGuy) knows how the application works, passes
different $_GET, $_POST and $_REQUEST variables to ensure the functionality
covers all known and corner cases.
Simpler than Acceptance, does not need a webserver, uses PHPBrowser.
CodeCeption introduction and use in Yii
What kind of tests?
Acceptance High-level tests, can have no knowledge of the technologies used.
Testing done from the non-technical person PoV (called WebGuy):
“uses the browser to test the website works correctly.”
Can be plugged into different testing suites: e.g. PHPBrowser, Selenium, Sahi,..
Functional
Unit
Mid-level tests. Covers functionality from the server perspective.
The person testing (called TestGuy) knows how the application works, passes
different $_GET, $_POST and $_REQUEST variables to ensure the functionality
covers all known and corner cases.
Simpler than Acceptance, does not need a webserver, uses PHPBrowser.
Low-level tests. Single isolated tests.
The person testing, CodeGuy, knows the internals of the application and tests
database operations and anything else that might need proof of concept.
Packages PHPUnit and provides a further abstraction over it to simplify its use.
CodeCeption introduction and use in Yii
Preliminary steps in Yii2
using the Yii2-app-base, read /tests/README.md first:
$ composer require --dev "codeception/codeception: 1.8.*@dev" 
"codeception/specify: *" 
"codeception/verify: *"
Then run the build script in order to populate the missing bits
$ vendor/bin/codecept build
Building Guy classes for suites: functional, acceptance, unit
TestGuy includes modules: Filesystem, TestHelper, Yii2
TestGuy.php generated successfully. 53 methods added
WebGuy includes modules: WebHelper, PhpBrowser
WebGuy.php generated successfully. 48 methods added
CodeGuy includes modules: CodeHelper
CodeGuy.php generated successfully. 1 methods added
CodeCeption introduction and use in Yii
Configure your entry URLs
configure the TEST_ENTRY_URL variable in tests/_boostrap.php
$ grep TEST_ENTRY_URL tests/_bootstrap.php
defined('TEST_ENTRY_URL') or define('TEST_ENTRY_URL', '/web/index-test.php');
$_SERVER['SCRIPT_NAME'] = TEST_ENTRY_URL;
Set the URL for the acceptance tests (based on the module you want to use)
$ grep -B1 url tests/acceptance.suite.yml
PhpBrowser:
url: 'http://sandbox/yii2-test/'
# WebDriver:
# url: 'http://localhost'
CodeCeption introduction and use in Yii
Implement and run the tests
Generate and implement the tests in the template given:
$ vendor/bin/codecept generate:cept acceptance Homepage
Test was created in HomepageCept.php
$ vim tests/acceptance/HomepageCept.php
Run the tests!
$ vendor/bin/codecept run
[snip]
OK (13 tests, 63 assertions)
$
CodeCeption introduction and use in Yii
Acceptance tests using PHPBrowser
BDD scenarios can be easily translated into acceptance tests, e.g.:
“As an account holder
I want to be able to login
so I can check my dashboard”
CodeCeption introduction and use in Yii
A “practical” example
<?php
$I = new WebGuy($scenario);
$I->wantTo(‘login to check the
dashboard’);
$I->amOnPage(‘/’);
$I->see(‘Yii2 test’);
$I->seeLink(‘login’, ‘site/login’);
$I->click(‘login’);
$I->see(‘Login’, ‘h1’);
// fillField() on the form
$I->click(‘login-button’);
$I->seeLink(‘Logout (admin)’);
$I->see(‘Admin dashboard’);
“As an account holder
I want to be able to login
so I can check my dashboard”
CodeCeption introduction and use in Yii
Very similar to each other in terms of commands, but...
Acceptance tests can run cross-browser compatibility
checks using Selenium Webdriver, ZombieJS, etc
Functional are simpler and more straight forward to
implement.
Functional are good for testing APIs and REST interfaces.
The Goutte engine in functional does not know how to JS!
Acceptance vs Functional tests
CodeCeption introduction and use in Yii
So what about Yii1?
❖ Functional tests using Selenium RC.
❖ Unit tests using PHPUnit (via PEAR).
Since PHPUnit >= 3.6 and the Composer Revolution,
things started to go awry.
Yii’s autoloaders and the new PHPUnit’s don’t fit together.
Cannot take full advantage of newest Selenium Webdriver.
CodeCeption introduction and use in Yii
Using CodeCeption in Yii1
follow the CodeCeption quickstart guide (http://codeception.com/quickstart)
$ mkdir protected/vendor/bin && cd protected/vendor/bin
$ wget http://codeception.com/codecept.phar && chmod a+x codecept.phar
Initialise the directory structure
$ cd protected/ && vendor/bin/codecept.phar bootstrap
Initializing Codeception in /mnt/workspace/yii1-test/protected
[snip]
Bootstrap is done. Check out /mnt/workspace/yii1-test/protected/tests directory
$
CodeCeption introduction and use in Yii
Additional modules and configuration
install the Yii1 CodeCeption Bridge (https://github.com/Codeception/YiiBridge)
$ git clone git@github.com:Codeception/YiiBridge.git tests/_data/YiiBridge
$ echo "require_once __DIR__.'/_data/YiiBridge/yiit.php';" >> tests/_bootstrap.php
Configure your tests/<type>.suite.yaml file(s) and add Yii1, configuring it:
class_name: MyGuy
modules:
enabled: [Yii1, Filesystem, MyHelper]
config:
Yii1:
appPath: '/mnt/workspace/yii1-test/index-test.php'
url: 'http://sandbox/yii1-test/index-test.php'
CodeCeption introduction and use in Yii
$ vendor/bin/codecept.phar build
Building Guy classes for suites: functional, acceptance, unit
Build and run
Re-run the build script now that Yii1 has been setup.
This is needed for any change made on the yaml files.
Create and implement your tests and run the suite(s)
$ vendor/bin/codecept.phar generate:cept functional Homepage
Test was created in HomepageCept.php
$ vim tests/functional/HomepageCept.php
$ vendor/bin/codecept.phar run functional
CodeCeption introduction and use in Yii
Few notes on Unit tests
CodeCeption unit tests won’t be available, but PHPUnit:
$ vendor/bin/codecept.phar generate:phpunit unit LoginForm
Test was created in /mnt/workspace/yii1-test/protected/tests/unit/LoginFormTest.php
When creating the tests you need to adjust the extended class to be:
class LoginFormTest extends CTestCase # or CDbTestCase
{
If using CDbTestCase, remember to call the parent classes’ in the setUp() and
tearDown() methods to make fixtures work as expected.
CodeCeption introduction and use in Yii
Other cool stuff
❖ Interactive console
❖ Grouping
❖ Dependencies
❖ Cest classes
❖ PageObjects
❖ StepObjects
❖ Environments
CodeCeption introduction and use in Yii
Some live examples and Q&A
CodeCeption introduction and use in Yii
Now, go and test stuff!
and when in doubt:
read the generated code (e.g. Guys, Pages, etc...)
check the documentation of CodeCeption:
http://codeception.com
and its integration into Yii2:
http://www.yiiframework.com/doc-2.0/ext-codeception-index.html
Thank you for listening!
Yii London Meetup - 15 April 2014
Matteo ‘Peach’ Pescarin
@ilPeach
http://peach.smartart.it

More Related Content

PDF
Codeception presentation
PDF
PHP Unit Testing in Yii
PPTX
Unit 1 - TypeScript & Introduction to Angular CLI.pptx
PDF
Introduction to Selenium Automation
PDF
Android Security Internals
PDF
Spring Security
PDF
Pki (Public Key Infrastructure) 에 대한 쉬운 설명
PDF
A story of the passive aggressive sysadmin of AEM
Codeception presentation
PHP Unit Testing in Yii
Unit 1 - TypeScript & Introduction to Angular CLI.pptx
Introduction to Selenium Automation
Android Security Internals
Spring Security
Pki (Public Key Infrastructure) 에 대한 쉬운 설명
A story of the passive aggressive sysadmin of AEM

What's hot (7)

PDF
Connecting Connect with Spring Boot
KEY
Groovy DSLs, from Beginner to Expert - Guillaume Laforge and Paul King - Spri...
PPTX
Introducción a Javascript I
PDF
Going realtime with Socket.IO
PPT
Selenium
PDF
Jwt == insecurity?
PPTX
Spring security
Connecting Connect with Spring Boot
Groovy DSLs, from Beginner to Expert - Guillaume Laforge and Paul King - Spri...
Introducción a Javascript I
Going realtime with Socket.IO
Selenium
Jwt == insecurity?
Spring security
Ad

Viewers also liked (7)

PDF
Testing with Codeception
PDF
Acceptance & Functional Testing with Codeception - Devspace 2015
PDF
Testování prakticky
PPSX
Yii framework
PDF
Acceptance & Functional Testing with Codeception - SunshinePHP 2016
PDF
X-Debug in Php Storm
PPT
Yii framework
Testing with Codeception
Acceptance & Functional Testing with Codeception - Devspace 2015
Testování prakticky
Yii framework
Acceptance & Functional Testing with Codeception - SunshinePHP 2016
X-Debug in Php Storm
Yii framework
Ad

Similar to Codeception introduction and use in Yii (20)

PPTX
Autotests introduction - Codeception + PHP Basics
PPT
Behavior Driven Development by Example
PDF
Testing in Craft CMS
PPTX
Codeception
PPTX
Getting Started with Test-Driven Development at Longhorn PHP 2023
PDF
Getting started with appium
ODP
Behat Workshop at WeLovePHP
ODP
Testing In Java4278
ODP
Testing In Java
PPT
Stopping the Rot - Putting Legacy C++ Under Test
PPTX
Automated Web Testing With Selenium
DOC
Mayur_Resume (2) (1)
PPTX
Continuous feature-development
PPT
Selenium-Webdriver With PHPUnit Automation test for Joomla CMS!
PPTX
Bridging the communication Gap & Continuous Delivery
PPTX
Joomla! Testing - J!DD Germany 2016
PPT
How to Build and Maintain Quality Drupal Sites with Automated Testing
PDF
Getting Started with Selenium
PDF
Behavior & Specification Driven Development in PHP - #OpenWest
PDF
Code Coverage for Total Security in Application Migrations
Autotests introduction - Codeception + PHP Basics
Behavior Driven Development by Example
Testing in Craft CMS
Codeception
Getting Started with Test-Driven Development at Longhorn PHP 2023
Getting started with appium
Behat Workshop at WeLovePHP
Testing In Java4278
Testing In Java
Stopping the Rot - Putting Legacy C++ Under Test
Automated Web Testing With Selenium
Mayur_Resume (2) (1)
Continuous feature-development
Selenium-Webdriver With PHPUnit Automation test for Joomla CMS!
Bridging the communication Gap & Continuous Delivery
Joomla! Testing - J!DD Germany 2016
How to Build and Maintain Quality Drupal Sites with Automated Testing
Getting Started with Selenium
Behavior & Specification Driven Development in PHP - #OpenWest
Code Coverage for Total Security in Application Migrations

Recently uploaded (20)

PDF
Understanding Forklifts - TECH EHS Solution
PDF
Addressing The Cult of Project Management Tools-Why Disconnected Work is Hold...
PPTX
Introduction to Artificial Intelligence
PPTX
Online Work Permit System for Fast Permit Processing
PDF
System and Network Administraation Chapter 3
PDF
Why TechBuilder is the Future of Pickup and Delivery App Development (1).pdf
PPTX
Lecture 3: Operating Systems Introduction to Computer Hardware Systems
PPTX
CHAPTER 2 - PM Management and IT Context
PDF
Raksha Bandhan Grocery Pricing Trends in India 2025.pdf
PPT
Introduction Database Management System for Course Database
PDF
Adobe Illustrator 28.6 Crack My Vision of Vector Design
PDF
Wondershare Filmora 15 Crack With Activation Key [2025
PDF
AI in Product Development-omnex systems
PDF
Odoo Companies in India – Driving Business Transformation.pdf
PPTX
Agentic AI Use Case- Contract Lifecycle Management (CLM).pptx
PDF
Which alternative to Crystal Reports is best for small or large businesses.pdf
PDF
Internet Downloader Manager (IDM) Crack 6.42 Build 41
PDF
Claude Code: Everyone is a 10x Developer - A Comprehensive AI-Powered CLI Tool
PDF
How to Choose the Right IT Partner for Your Business in Malaysia
PDF
Nekopoi APK 2025 free lastest update
Understanding Forklifts - TECH EHS Solution
Addressing The Cult of Project Management Tools-Why Disconnected Work is Hold...
Introduction to Artificial Intelligence
Online Work Permit System for Fast Permit Processing
System and Network Administraation Chapter 3
Why TechBuilder is the Future of Pickup and Delivery App Development (1).pdf
Lecture 3: Operating Systems Introduction to Computer Hardware Systems
CHAPTER 2 - PM Management and IT Context
Raksha Bandhan Grocery Pricing Trends in India 2025.pdf
Introduction Database Management System for Course Database
Adobe Illustrator 28.6 Crack My Vision of Vector Design
Wondershare Filmora 15 Crack With Activation Key [2025
AI in Product Development-omnex systems
Odoo Companies in India – Driving Business Transformation.pdf
Agentic AI Use Case- Contract Lifecycle Management (CLM).pptx
Which alternative to Crystal Reports is best for small or large businesses.pdf
Internet Downloader Manager (IDM) Crack 6.42 Build 41
Claude Code: Everyone is a 10x Developer - A Comprehensive AI-Powered CLI Tool
How to Choose the Right IT Partner for Your Business in Malaysia
Nekopoi APK 2025 free lastest update

Codeception introduction and use in Yii

  • 1. CodeCeption introduction and use in Yii Yii London Meetup - 15 April 2014 by Matteo ‘Peach’ Pescarin - @ilPeach
  • 2. CodeCeption introduction and use in Yii The current situation (Potentially) fiddly system configuration unless the framework ships a testing environment e.g. db connection, access to magic functions, autoloading functionality, ...
  • 3. CodeCeption introduction and use in Yii Yet another tool? NOPE It’s been designed to ease the testing process. It’s meant to be extensible and modular. Creates uniformity across different test suites. Works on top of other well known technologies, e.g. PHPUnit, PHPBrowser, Selenium, etc...
  • 4. CodeCeption introduction and use in Yii Should you bother writing tests? YES
  • 5. CodeCeption introduction and use in Yii Should you bother writing tests? Yes, you really should. And no, you don’t need to test everything. You need a QA strategy, which comes with proper planning and a desire to avoid spending the weekend fixing bugs. Unless you’re a maniac who loves to deliver buggier code in production.
  • 6. CodeCeption introduction and use in Yii What kind of tests? Acceptance High-level tests, can have no knowledge of the technologies used. Testing done from the non-technical person PoV (called WebGuy): “uses the browser to test the website works correctly.” Can be plugged into different testing suites: e.g. PHPBrowser, Selenium, Sahi,..
  • 7. CodeCeption introduction and use in Yii What kind of tests? Acceptance High-level tests, can have no knowledge of the technologies used. Testing done from the non-technical person PoV (called WebGuy): “uses the browser to test the website works correctly.” Can be plugged into different testing suites: e.g. PHPBrowser, Selenium, Sahi,.. Functional Mid-level tests. Covers functionality from the server perspective. The person testing (called TestGuy) knows how the application works, passes different $_GET, $_POST and $_REQUEST variables to ensure the functionality covers all known and corner cases. Simpler than Acceptance, does not need a webserver, uses PHPBrowser.
  • 8. CodeCeption introduction and use in Yii What kind of tests? Acceptance High-level tests, can have no knowledge of the technologies used. Testing done from the non-technical person PoV (called WebGuy): “uses the browser to test the website works correctly.” Can be plugged into different testing suites: e.g. PHPBrowser, Selenium, Sahi,.. Functional Unit Mid-level tests. Covers functionality from the server perspective. The person testing (called TestGuy) knows how the application works, passes different $_GET, $_POST and $_REQUEST variables to ensure the functionality covers all known and corner cases. Simpler than Acceptance, does not need a webserver, uses PHPBrowser. Low-level tests. Single isolated tests. The person testing, CodeGuy, knows the internals of the application and tests database operations and anything else that might need proof of concept. Packages PHPUnit and provides a further abstraction over it to simplify its use.
  • 9. CodeCeption introduction and use in Yii Preliminary steps in Yii2 using the Yii2-app-base, read /tests/README.md first: $ composer require --dev "codeception/codeception: 1.8.*@dev" "codeception/specify: *" "codeception/verify: *" Then run the build script in order to populate the missing bits $ vendor/bin/codecept build Building Guy classes for suites: functional, acceptance, unit TestGuy includes modules: Filesystem, TestHelper, Yii2 TestGuy.php generated successfully. 53 methods added WebGuy includes modules: WebHelper, PhpBrowser WebGuy.php generated successfully. 48 methods added CodeGuy includes modules: CodeHelper CodeGuy.php generated successfully. 1 methods added
  • 10. CodeCeption introduction and use in Yii Configure your entry URLs configure the TEST_ENTRY_URL variable in tests/_boostrap.php $ grep TEST_ENTRY_URL tests/_bootstrap.php defined('TEST_ENTRY_URL') or define('TEST_ENTRY_URL', '/web/index-test.php'); $_SERVER['SCRIPT_NAME'] = TEST_ENTRY_URL; Set the URL for the acceptance tests (based on the module you want to use) $ grep -B1 url tests/acceptance.suite.yml PhpBrowser: url: 'http://sandbox/yii2-test/' # WebDriver: # url: 'http://localhost'
  • 11. CodeCeption introduction and use in Yii Implement and run the tests Generate and implement the tests in the template given: $ vendor/bin/codecept generate:cept acceptance Homepage Test was created in HomepageCept.php $ vim tests/acceptance/HomepageCept.php Run the tests! $ vendor/bin/codecept run [snip] OK (13 tests, 63 assertions) $
  • 12. CodeCeption introduction and use in Yii Acceptance tests using PHPBrowser BDD scenarios can be easily translated into acceptance tests, e.g.: “As an account holder I want to be able to login so I can check my dashboard”
  • 13. CodeCeption introduction and use in Yii A “practical” example <?php $I = new WebGuy($scenario); $I->wantTo(‘login to check the dashboard’); $I->amOnPage(‘/’); $I->see(‘Yii2 test’); $I->seeLink(‘login’, ‘site/login’); $I->click(‘login’); $I->see(‘Login’, ‘h1’); // fillField() on the form $I->click(‘login-button’); $I->seeLink(‘Logout (admin)’); $I->see(‘Admin dashboard’); “As an account holder I want to be able to login so I can check my dashboard”
  • 14. CodeCeption introduction and use in Yii Very similar to each other in terms of commands, but... Acceptance tests can run cross-browser compatibility checks using Selenium Webdriver, ZombieJS, etc Functional are simpler and more straight forward to implement. Functional are good for testing APIs and REST interfaces. The Goutte engine in functional does not know how to JS! Acceptance vs Functional tests
  • 15. CodeCeption introduction and use in Yii So what about Yii1? ❖ Functional tests using Selenium RC. ❖ Unit tests using PHPUnit (via PEAR). Since PHPUnit >= 3.6 and the Composer Revolution, things started to go awry. Yii’s autoloaders and the new PHPUnit’s don’t fit together. Cannot take full advantage of newest Selenium Webdriver.
  • 16. CodeCeption introduction and use in Yii Using CodeCeption in Yii1 follow the CodeCeption quickstart guide (http://codeception.com/quickstart) $ mkdir protected/vendor/bin && cd protected/vendor/bin $ wget http://codeception.com/codecept.phar && chmod a+x codecept.phar Initialise the directory structure $ cd protected/ && vendor/bin/codecept.phar bootstrap Initializing Codeception in /mnt/workspace/yii1-test/protected [snip] Bootstrap is done. Check out /mnt/workspace/yii1-test/protected/tests directory $
  • 17. CodeCeption introduction and use in Yii Additional modules and configuration install the Yii1 CodeCeption Bridge (https://github.com/Codeception/YiiBridge) $ git clone git@github.com:Codeception/YiiBridge.git tests/_data/YiiBridge $ echo "require_once __DIR__.'/_data/YiiBridge/yiit.php';" >> tests/_bootstrap.php Configure your tests/<type>.suite.yaml file(s) and add Yii1, configuring it: class_name: MyGuy modules: enabled: [Yii1, Filesystem, MyHelper] config: Yii1: appPath: '/mnt/workspace/yii1-test/index-test.php' url: 'http://sandbox/yii1-test/index-test.php'
  • 18. CodeCeption introduction and use in Yii $ vendor/bin/codecept.phar build Building Guy classes for suites: functional, acceptance, unit Build and run Re-run the build script now that Yii1 has been setup. This is needed for any change made on the yaml files. Create and implement your tests and run the suite(s) $ vendor/bin/codecept.phar generate:cept functional Homepage Test was created in HomepageCept.php $ vim tests/functional/HomepageCept.php $ vendor/bin/codecept.phar run functional
  • 19. CodeCeption introduction and use in Yii Few notes on Unit tests CodeCeption unit tests won’t be available, but PHPUnit: $ vendor/bin/codecept.phar generate:phpunit unit LoginForm Test was created in /mnt/workspace/yii1-test/protected/tests/unit/LoginFormTest.php When creating the tests you need to adjust the extended class to be: class LoginFormTest extends CTestCase # or CDbTestCase { If using CDbTestCase, remember to call the parent classes’ in the setUp() and tearDown() methods to make fixtures work as expected.
  • 20. CodeCeption introduction and use in Yii Other cool stuff ❖ Interactive console ❖ Grouping ❖ Dependencies ❖ Cest classes ❖ PageObjects ❖ StepObjects ❖ Environments
  • 21. CodeCeption introduction and use in Yii Some live examples and Q&A
  • 22. CodeCeption introduction and use in Yii Now, go and test stuff! and when in doubt: read the generated code (e.g. Guys, Pages, etc...) check the documentation of CodeCeption: http://codeception.com and its integration into Yii2: http://www.yiiframework.com/doc-2.0/ext-codeception-index.html
  • 23. Thank you for listening! Yii London Meetup - 15 April 2014 Matteo ‘Peach’ Pescarin @ilPeach http://peach.smartart.it