PHP is one of the most popular scripting languages used for server-side web development. It is used by multiple organizations, especially for content management sites like WordPress. If you are thinking about developing a web application using PHP, you will also need one of the best PHP frameworks in 2019 for testing your application. You can perform visual and usability testing manually but for functionality, acceptance and unit testing, cross browser testing, an automated PHP framework will help pace the test cycles drastically. In this article, we will compare the best 9 PHP frameworks in 2019 for test automation that eases the job of a tester and ensures faster deployment of your application.
PHPUnit is considered one of the best PHP frameworks in 2019 for test automation, meant for unit testing of an application developed using PHP language. Just like JUnit, it is an instance of xUnit and works almost in a similar manner. Sebastian Bergmann created the framework with the aim of assisting developers to detect mistakes in their coding.
Apart from a proper understanding and development experience using PHP, you will need
- The latest version of PHP installed in your system.
- JSON and DOM extensions, which are by default enabled.
- You will also require spl, reflection and pcre extensions. There are some extensions which are by default enabled.
- Xdebug and tokenizer are required for code coverage. If you want to generate XML reports, xmlwriter is another extension that you need.
Just like other test automation frameworks meant for unit testing, PHPUnit helps you in developing a code that performs well and is easy to maintain.
- It also helps you to identify defects that may arise before the code is pushed to further testing phases.
- Issues are detected early during development phase since the testing is carried out by developers only.
- Unit testing helps in detecting issues and fixing the code at a certain fragment of the application, thereby leaving other fragments intact and without any chance of breakage.
- Debugging process is made simpler. Debugging is required only when a certain unit test fails.
The only disadvantage of PHPUnit is that, for testing multiple functions, the developer is required to add cover annotations. By any chance, if you change the name of the method or function without updating the @covers annotation , testing is skipped for that certain method or function.
In the earlier days when test automation frameworks were not so much in use, PHPUnit, being the only player in the field was obviously the best and only choice for automated unit testing in PHP. But after the introduction of Codeception, opinions have changed. Codeception does unit testing in a relatively faster manner and using fewer resources.
Want to run your first automation script for PHPUnit? Here is a step-by-step guide for running an automation script on PHPUnit with Selenium.
Codeception is an automation testing framework having multiple features apart from only Unit testing. The framework is derived from PHPUnit and has the ability to manage Functional, Unit as well as Acceptance testing of a web application. All these 3 are the main suites of Codeception and for additional testing, like API Testing, you can add API suite as well.
You will need all the requirements for installing PHPUnit. Apart from that, you will be required to install a Composer to the root of your project.
There are many reasons which will compel you to try codeception.
- First of all, you will get the best way to write test cases in PHP language. Syntax highlighting also eliminates the chance of mistakes in syntax.
- Writing the test cases are very simple.
- You can do not only unit testing but also others like Acceptance or functional testing just by adding suites.
- Supports multiple frameworks without any need of extension or changing the code. If your project is migrating, your old test cases written using Codeception will work just the same way.
- The Db module of Codeception helps the tester to fetch whatever you need from the database and clean up the data from your test module. Isolating the tests thus becomes much easier.
- You can run complex test cases by using XPath locators or CSS selectors. REST and SOAP web services can also be tested simply using Codeception.
- The tests are simple and readable enough to be clearly understood by a person coming from a nontechnical background.
The only few disadvantages are
- Since the framework emulates a browser, chances of getting false-positive result increases.
- Requires a framework to start testing.
As discussed in the previous section, when it comes to comparing unit testing framework, Codeception is much better than PHPUnit since it offers the option to perform acceptance testing as well as functional testing. However, if you look for acceptance testing only, then Behat is a much preferred option than Codeception.
Wish to get started with Codeception? Here is a guide to help you run your first Selenium script on Codeception.
3. Laravel Dusk
Laravel task is a browser-based test automation tool for testing PHP based web applications. This tool also helps you to automate tasks that are repetitive. Using this framework, you can either test the applications you developed or any other published website using Google Chrome.
Installation and usage of Laravel Dusk are quite simple when compared to other test automation frameworks.
- First of all, in the project you are developing, add a composer dependency
- After the Dusk package is installed, run the command
- By default, you can use Dusk only on Chrome. In order to test your application on other browsers, you will need to start a Selenium server.
For an application developed using PHP, testing it using Laravel Dusk is highly advantageous.
- You can develop the best authentication and authorization script.
- Presentation view like HTML and business logic like SQL queries can be easily separated.
- The migration feature of Laravel allows you to create database tables of standard format.
- For developers, Laravel can be used with Angular JS for developing large single page web applications.
- The tool can also be used to create dynamic HTML elements since it supports vue js as well.
- Asset compilation can also be done with elixir or gulp that minifies js and CSS files, resulting in the faster performance of the application.
The only disadvantage of Laravel is that it cannot be used on other browsers except Chrome. Nowadays when customers demand a website that is cross-browser compatible, this is certainly a drawback.
The most important advantage of Laravel is that, apart from testing, it can also be used to develop web applications following the MVC pattern. However, if you are only looking at the testing perspective, Selenium is obviously the best choice for testing web applications, because of its ability to support multiple languages as well as its platform and browser compatibility.
Here is a complete document to help you perform automation testing with Laravel and Selenium.
Behat is a behavior driven testing tool for applications developed using PHP. The aim of the tool is to aid the nonverbal communication between stakeholders, management, and developers during the software development life cycle. It helps in documenting behavior examples of software when testing is carried out and how it matches the intended behavior.
There are 2 ways of installing Behat
- The easiest way is by downloading the latest version of behat.phar. You have to just place it in the project folder. Run the command $ php behat. phar -V and It will show you whether Behat has been installed correctly.
- The recommended way is to use Composer, just like other test frameworks.
Let’s list down the advantages first.
- Test cases are written in a human-readable manner, the features describe the specs of individual sites and the test suite provides very clear documentation consisting of the web application’s features.
- Helps in maintaining an application having a stable deployment cycle. All you need to do is run the tests, detect and fix the bugs and repeat the process until the project passes all the test cases, resulting in a stable application.
- The acceptance criteria being easy to understand, developers get clarity regarding what the customer wants. Without any blockage, they can start developing and add new functionality. Once the functionality successfully passes the test cases, it gets ready for deployment.
- It helps you to work closely with the customer until you two mutually agree on how a product should work. Thereby, forcing you to follow the standard protocols of behavior driven development.
In spite of all these advantages, there are certain drawbacks as well.
- Behat takes quite some time for implementation.
- You will also have to rethink and restructure the entire development process.
- Discussion with stakeholders and developers may extend a lot until you come to a mutual understanding of how a feature will be developed.
Although behavior driven test scenarios can also be generated using Codeception, however, it does not satisfy all the requirements of software developed using BDD environment. Since Behat is solely dedicated to BDD testing, there is obviously no other replacement for Behat other than PHPspec if you are developing a PHP based application.
Follow our guide for getting started with automation testing using Behat and Selenium.
BDD is a development technique that allows a project to commence at specification and story level. PHPSpec is a popular BDD tool which helps you to write clean code using PHP. The development works by first describing how the object behaves. Once that is approved by the stakeholders, the next phase is to start coding.
PHPSpec can be installed via 2 methods
- Composer method
- Using the Composer config file
Before starting the installation, make sure you have at least PHP 5.6 installed in your system.
Among the many advantages of PHPSpec, the ones that I found most useful are
- While starting test case execution, PHPSpec generates skeletons of classes or methods based on the usage of the methods inside the test cases. Any additional edge that you face can be covered by writing an additional test case.
- By refactoring, you can restructure the entire code without changing how it behaves externally.
- You can also use PHPSpec to test applications developed using Laravel.
- PHPSpec has a mocking framework known as prophecy. Prophecy ensures that for every test, the required class’s mock instance is passed to the constructor.
Apart from the advantages, there are certain disadvantages as well.
- Testing private methods is a limitation.
- Let’s suppose your public method returns a value. It is not a part of your object API. You cannot test that.
- Integration testing cannot be performed using PHPSpec.
- No Matter how much useful Prophecy is, it cannot mock abstract methods.
PHPSpec is mostly meant for designing classes. Without any need to get much involved in the infrastructure, you can design an isolated domain model. However, if you are looking for a tool that validates whether your application satisfies the requirement of the stakeholders, Behat is the first choice for testers and developers. Behat’s code is much easier to understand than PHPSpec, especially for people who are coming from a nontechnical background.
Atoum is an automated framework meant for unit testing of an application that is developed using PHP language. Although it behaves a bit like PHPUnit, it is much more modern, simple and a standalone framework. Unlike PHPUnit, the test cases written using Atoum are easily readable and much simplified. Also, the asserters of Atoum enables you to write less code and test more functionalities.
You can get the latest version of Atoum from their officialwebsite. There are several ways to install Atoum.
- By usage of Composer
- Cloning the repository at GitHub
- You can download the PHAR archive from their official website
- Atoum can also be used by integrating with other frameworks.
There are many advantages of Atoum which are not found in other PHP based unit testing frameworks.
- It has a flexible structure. It allows you to rename directory, test cases or suites and whatever you like.
- There are 3 engines for executing the test cases. For a single test case, you can define a specific engine apart from the engine provided by default.
- You can write a test case in multiple ways. Either by using the classic way, by an academic way using empty asserters or a much better and smarter way by using the asserters of Atoum.
- Test cases are readable and easier to understand since Atoum provides a set of natural assertions.
- You are no longer required to manipulate real directories. While running the test cases, Atoum allows you to create a virtual file system consisting of fake directories, reducing the risk of mishandling real project files.
- Class constructors can be mocked. Whenever a method is called, you can control the computational value.
- The best feature is, Atoum can easily integrate with continuous integration tools like Gitlab, Jenkins, PHPCI, Travis CI, etc. It can also be used with multiple IDEs like Atom, Netbeans, Sublime Text, etc.
When it comes to disadvantages, I haven’t found any which cannot be resolved or creates a roadblock.
The answer to this question is definitely yes. It is much better and flexible than PHPUnit or Codeception. Although it cannot perform functional or acceptance testing like Codeception, still when it comes to only executing unit test cases, Flexibility, multiple platform support and use of smart assertions make Atoum the best unit testing framework.
Just like Behat or PHPSpec, Kahlan is another behavior driven test framework. What makes it different is that, it takes BDD testing on PHP a step ahead by use of
You will need a stable and latest version of PHP (at least version 5.5) installed in your system. After that, Kahlan can be installed in 2 ways
- From a Git Repository. But for that, you need to have Composer and Git installed.
- As a dev dependency, you can also install Kahlan from the composer package.
Among the many advantages of Kahlan, the ones that I found useful are
- Inclusion of JSpec, RSpec syntax
- A much better code coverage metrics
- You can check whether a specific method is called on your class.
- Stubbing system is much more flexible. Prophecy or Mockery is no longer required.
- You can replace the core classes and functions easily by monkey patching.
- Icov and Istanbul are built in reporters that allow easy HTML or terminal reporting.
- Coveralls, Clobber, Climate are some built in exporters that allow you to easily push the code.
The only disadvantage is that, Kahlan does not have the ability of Storytelling or developing scenario based BDD.
Kahlan is no doubt a pretty useful BDD tool, but when we compare it with Behat, Behat is much more. A person who is not from a technical background, maybe a stakeholder or a business analyst can easily understand what a code written in Behat means. But for Kahlan, one needs to have basic understanding of PHP. If the project is in Agile, then also, Behat is a better choice.
Peridot is a highly reliable, extensible PHP framework that supports testing of an application developed under behavior driven environment. The framework is lightweight and faster than PHPSpec or other frameworks. Also, the fact that it is event-driven makes it popular since developing plugins are much easier when you are using Peridot.
For installation, you will need the latest version of PHP installed in your system. After that, Peridot can be installed by 3 procedures
- Manually by downloading the latest Phar
- Manually using the command prompt.
- Using the composer like other frameworks.
Peridot has several advantages.
- Just like Kahlan, it also uses describe-it syntax to write natural and human readable test cases. Test cases written using Peridot can be easily understood by someone belonging to a nontechnical background.
- Provides a painless experience of writing ad hocs since it is event-driven.
- You can also add custom reporters, helpers and plugins easily.
- If your test cases are bulky, Peridot can run them concurrently since it is lightweight and faster than other frameworks.
I did not find any such disadvantages while using Peridot. The only drawback is that it is not suitable to be used in an Agile application since its features are not vast like Behat.
Among the 3 BDD frameworks we discussed here, Behat is obviously the best choice. As mentioned earlier, the features of Behat helps the team during deployment as well as during acceptance testing. Although Peridot is faster and easier to understand, lack of supporting the application in deployment stages is kind of a drawback.
Selenium is the best automation framework for automated cross browser testing of a web application. For an application developed using PHP, you can use PHP bindings for developer browser-based automation test cases. The framework is flexible and the latest version of Selenium web driver runs flawlessly across all the major browsers.
Selenium does not have any dependencies. However, if you want to use it with PHP, you will need a stable latest version of PHP installed in your system. You will also need a composer for providing the required dependencies.
There are countless advantages of using Selenium to test a PHP framework.
- First of all the framework is open source. Anyone can download the source code and modify it according to project requirements.
- It supports multiple programming languages. Even if your project someday migrates from PHP to any other technology, you can still use Selenium for executing the test cases.
- Selenium can be used on any operating system and it supports all the major browsers like Chrome, IE, Opera, Safari or Firefox.
- By using very less hardware resource, you can execute multiple test cases parallely using Selenium.
There are certain disadvantages as well.
- The framework is a bit difficult and test case creation takes a bit of time. The learning curve is also a bit steep since the framework is evolving day by day.
- Since the software is open source, there is no reliable support if you face any complication.
- Setting up the test environment is also complicated and also, it does not have any support for integration with test management tools in case you wish to report bugs.
- You can only perform browser compatibility testing on the browsers available in your local machine.
LambdaTest went live with an on-cloud Selenium Grid to make automation testing easier for the tester community.
- With LambdaTest Selenium Grid, you can perform Selenium based testing on more than 2000+ real browsers and browser versions.
- LambdaTest offers integrations with numerous third-party tools to facilitate better bug-logging, continuous integration and continuous deployment pipeline.
- LambdaTest provides their DesiredCapabilities Generator that would help to generate the desiredcapabilities class based on your selections via click operations.
- LambdaTest offers 24×7 customer support through chat. You can also drop a mail to firstname.lastname@example.org for addressing any of your concern.
- LambdaTest also launched API for Selenium, so you could extract custom and powerful reports of your Selenium script execution from LambdaTest platform.
- Parallel testing lets you run numerous tests simultaneously, for trimming down your test execution even further.
If you are only thinking about testing a PHP based web application on the browser, Laravel Dusk is much more useful. However, if you are thinking about the bigger picture and want an open source automation framework that can perform cross-browser testing of a web application, there is no better choice than Selenium. Plus doing it on-cloud with LambdaTest you can hasten your test cycles as much as you want.
The frameworks mentioned above are not only for testers but for developers as well. Since, in the current age of DevOps and Agile, the traditional rule no longer prevails that testers will only do testing and developers will only do development. An exceptional tester or developer must have partial knowledge of the other domain as well. If you are a developer, the industry won’t expect you to be an expert in testing but you should have some basic knowledge of writing unit test cases to your code or understanding what the tester is explaining. The 9 tools mentioned above will help you a lot to progress if you are a PHP developer or tester. Even if you are a fresher, learning the popular unit testing or BDD tools among the ones listed above will also propel your career in the industry.