News Archive
PhpRiot Newsletter
Your Email Address:

More information

Behat + FuelPHP = RESTful Testing Happiness

Note: This article was originally published at Planet PHP on 29 March 2012.
Planet PHP

If you've been following my recent posts, you know I've been working more lately with Behat for resting some REST services. In this post I showed you how to get things set up for some testing. In this post, I'll show you how to use a custom class that I've put together to make a reusable system for testing REST.

For those that want to cut to the chase, I've posted some example code to github showing the code for the two different sides of the equation - the Behat testing and the PHP framework side (I went with FuelPHP because I was already familiar with it and it makes RESTful interfaces dead simple). The key is in the FeatureContextRest.php file that uses the Guzzle client to make the HTTP requests over to the framework. It provides some handy contexts that make it easy to create Scenarios.

So, still with me? Good - I'll show you how to get my sample scripts installed so you can see my example in action. In the repository you'll find two different directories - aofuela and aobehata. In each you'll find some files:


  • features/index.features:
    An example set of Scenarios that use the REST testing contexts to create, find and deleting a aoUsera from the system
  • features/bootstrap/FeaturesContextRest.php:
    The key to the puzzle, the implementation of some context methods for use in Behat


  • fuelphp/classes:
    These are the example models and controllers you can drop into your Fuel install to have them aomagicallya work (with any recent version of the framework).

This is assuming you already have Behat installed and working and have set up FuelPHP on a host somwhere. For our example, we'll just use aohttp://behat-test.localhost:8080a Here's what to do:

  1. Start by copying over the FeaturesContextRest.php file to the aofeatures/bootstrapa directory of your Behat installation alongside the default FeaturesContext.php.
  2. Copy over the behat.yml configuration file into your testing root (the same level as the aofeaturesa directory) and update the base_url value for your hostname.
  3. Take the aoclassesa directory and copy over its contents to the location of your FuelPHP installation - if you're familiar with the structure of the framework, this is simpleait just goes in aoapp/classesa.
  4. You'll need a database to get this working, so you'll need to get the FuelPHP ORM stuff configured and working in your install. Be sure to update your config.php to automatically load the aoorma module.
  5. Make a database for the project and use the init.sql to create the aousersa table.
  6. To test and be sure our models/controllers are working right, hit your host in a browser, calling the aoUsera action like: aohttp://behat-test.localhost:8080/usera. This should call what's in Controller_User::get_index(). It'll probably just return an empty result though, since there's nothing for it to pull.
  7. To use the FeaturesContextRest.php, be sure that you include that file into your default FeaturesContext.php file and that your class aoextends FeaturesContextResta.

So, if all has gone well, you have all the pieces in place to get started. Let's start with a sample Scenario to show you how it all works:

Scenario: Creating a new User Given that I want to make a new "User" And that its "name" is "Chris" When I request "/user/index.json" Then the response is JSON And the response has a "userId" property And the type of the "userId" property is numeric Then the response status code should be 200

If you've used Mink in the past, so of this will seem familiar. This doesn't use Mink, however, and I've opted to use Guzzle as the client for the backend to replace some of the browser interactions. Really, we don't need all of the fancy interface interaction Mink gives, so this streamlined inte

Truncated by Planet PHP, read more at the original (another 1012 bytes)