PHPackages                             drewlabs/htr - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [HTTP &amp; Networking](/categories/http)
4. /
5. drewlabs/htr

ActiveLibrary[HTTP &amp; Networking](/categories/http)

drewlabs/htr
============

HTTP Web Service Test runner implementation using PHP Programming language and configuration files written in YAML or JSON format

v0.2.71(2mo ago)11011MITPHP

Since Apr 22Pushed 2mo ago1 watchersCompare

[ Source](https://github.com/azandrew-sidoine/php-htr)[ Packagist](https://packagist.org/packages/drewlabs/htr)[ RSS](/packages/drewlabs-htr/feed)WikiDiscussions master Synced 1mo ago

READMEChangelogDependencies (2)Versions (24)Used By (1)

HTr (HTTP Service Test Runner)
==============================

[](#htr-http-service-test-runner)

`HTr` is a PHP based utility library that allow application (espacially HTTP REST services) developper to easily test their RESTful service using a a single configuration file writtern in `YAML` or `JSON`.

- Why `YAML` or `JSON`In modern web standard, `JSON` and `YAML` entity definition languages have become the defacto standard for modeling configuration that are easily portable between programming tools and languages. Therefore instead of creating a new language, we leverage existing ones that are known amoung developper community.

Installation
------------

[](#installation)

The library is a PHP based library therefore a `PHP` binary is required along side the powerful `PHP` libraries package manager `composer`.

To install the library simply run the command below:

```
> composer require drewlabs/htr
```

Usage
-----

[](#usage)

### Configuration

[](#configuration)

`HTr` client application works with configuration files written in either `JSON (Javascript Object Notation)` format or `YAML` format. Below is a sample configuration file:

```
version: 0.1.0
# $schema: http://json-schema.org/id/
name: My Test API

# Environment definitions
# Note: Environemnts are used by the runner to customize requests
env:
  _host: http://127.0.0.1:12300
  _apiVersion: "api"
  _postId: 2
  _commentId: 2

components:
  # The part below defines a request group or directory
  - name: "posts"
    description: Defines post management REST interfaces"
    items:
      - url: "[_host]/[_apiVersion]/posts"
        method: "GET"
        authorization:
          name: "bearer"
          value: "[_bearerToken]"
        body:
        params:
          page: 1
          per_page: 50
        tests:
          - "[status] eq 200" # Asser that request response status code == 200
      - url: "[_host]/[_apiVersion]/post"
        method: "POST"
        authorization:
          name: "bearer"
          value: "[_bearerToken]"
        body:
          title: "Environments"
          content: "This is an environment post"
        tests:
          - "[body].title eq Environment" #  Assert that request response body is has title field == Environments
          - "[status] eq 200" # Assert that request must be completed with status code 200
      - url: "[_host]/[_apiVersion]/post/:[_postId]"
        method: "PUT"
        authorization:
          name: "bearer"
          value: "[_bearerToken]"
        body:
        # Pass request body
        tests:
          - "[status] eq 422" # Assert that request response status code is 422

  # Comments requests directory
  - name: "comments"
    description: "Defines comments management REST interfaces"
    items:
      # Here we difines a request configuration that sends a POST request to http://127.0.0.1:12300/api/comments
      - url: "[_host]/[_apiVersion]/posts"
        method: "GET"
        authorization:
          name: "bearer"
          value: "[_bearerToken]"
        # body:
        params:
          page: 1
          per_page: 50
        tests:
          - "[status] eq 200" # Assert that request response status code == 200
      - url: "[_host]/[_apiVersion]/comments"
        method: "POST"
        authorization:
          name: "bearer"
          value: "[_bearerToken]"
        body:
          post_id: "[_postId]"
          content: "My Comment"
        tests:
          - "[status] eq 200" # Assert that request must be completed with status code 200
      - url: "[_host]/[_apiVersion]/post/:[_commentId]"
        method: "PUT"
        authorization:
          name: "bearer"
          value: "[_bearerToken]"
        body:
        # Pass request body
        tests:
          - "[status] eq 422" # Assert that request response status code is 422
```

**Note** Based on the configuration above requests can be customized using environment variables. Environment variables must be enclosed in `[variable]`.

### Testing

[](#testing)

Test assertion use a natural language to make it easy to write test. Below is the syntax to write test:

- `left op right` -&gt; For simple assertions
- `left op righ and condition_2_left and condition_2_right` -&gt; For composed assertions

Suported operator for testing are:

- Logical operators
    - `and` : For joining 2 or more conditions and return `true` only if all conditions return `true`
    - `or` : For joining 2 o more condition and return `true` if one of the condittions is `true`
- Comparison operations
    - `lt` or `>` : Stand for value `less than`
    - `lte` or `` : For `greater than comparison`
    - `gte` or `>=` : For `greater than or equals to comparison`
    - `eq` or `ne` : Respectively `equals` or `not equals`
    - `has` : Check if an array has a given key or attribute
    - `in` : Checks if a value exists in a list of value. Ex: `mango in banana,orange,pinneaple`

We use `[]` to denote properties of the response object:

- `[status]` denote response status code
- `[body]` denote response body
- `[headers]` denote response headers.

To Access properties of response body, we use \[body\] concatenated with the property name using `.` symbol as follow;

- `[body].title` -&gt; To access the title property of the response body
- `[body].address.email` -&gt; Can be used for instance to access inner property of responser body object

### Command Line

[](#command-line)

The library provides a command line interface for testing your HTTP REST Service based on a configuration file. Below is the command to run a basic test command using a configuration file located in the root of your project:

```
> ./vendor/bin/htr test --input=$(pwd)/htr.yml
```

The command above assune you have a file named `htr.yml` in the root of your project that contains a valid `HTr` test configuration.

- Debug By default the `cli` script will run tests in silent mode and write output to a uniquely generated file at the root of your project. To run the `HTr cli` in debug mode, execute the command below:

    ```
    > ./vendor/bin/htr test --input=$(pwd)/htr.yml --verbose
    ```

    Running the client application in debug mode allow developper ro see live running request with each request parameters output to the terminal.
- Command output To override the output file name path were command logs are written simple use the `--output` flag as below:

    ```
    > ./vendor/bin/htr test --input=$(pwd)/htr.yml --output="$(pwd)/htr.log"
    ```
- Request filtering

    Sometimes developper might want to execute specific requests or specific request directory components. For such cases, `HTr` provides developpers with `--request` or `--req` for filtering by request name or id.

    ```
    > ./vendor/bin/htr test --input=$(pwd)/htr.yml -req="request-name"
    // For running single request
    // or
    > ../vendor/bin/htr test --input=$(pwd)/htr.yml -req="request1" --req="request2"
    // For running multiple request matching the provided name
    ```

    Similary, to execute specific request directories, you can use `-d` or `-directory` flag. The `HTr` client will only execute tests for requests in specified directory

```
>./vendor/bin/htr test --input=$(pwd)/htr.yml -d="directory name"
// For running tests in a single directory
// or
> ./vendor/bin/htr test --input=$(pwd)/htr.yml -d="directory1" -d="directory2"

For running tests in multiple directories
```

- Overriding environment variables

    When running tests using HTr client, `--input` argument usually contains an `env` field that is that are applied when running tests. To override the environment variable with command line variables, simple use `--env` switch as follow:

    > ./vendor/bin/htr test --env=MyVar:MyVarValue --input=$(pwd)/htr.yml
- Json By default the `HTr` client support `YAML` based configuration files. In order to use `JSON` configuration file instead, simply use the `--json` flag as follow:

```
  > ./vendor/bin/htr test --input=$(pwd)/htr.json --json

```

###  Health Score

39

—

LowBetter than 86% of packages

Maintenance83

Actively maintained with recent releases

Popularity11

Limited adoption so far

Community9

Small or concentrated contributor base

Maturity44

Maturing project, gaining track record

 Bus Factor1

Top contributor holds 100% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Every ~47 days

Recently: every ~167 days

Total

23

Last Release

87d ago

### Community

Maintainers

![](https://www.gravatar.com/avatar/48c4973d500c7f4233d5ceacab51a57208d5fb60b0f95ae60264cf92380d0534?d=identicon)[azandrew-sidoine](/maintainers/azandrew-sidoine)

---

Top Contributors

[![azandrew-sidoine](https://avatars.githubusercontent.com/u/23530515?v=4)](https://github.com/azandrew-sidoine "azandrew-sidoine (41 commits)")

---

Tags

httpjsonyamltest runner

### Embed Badge

![Health badge](/badges/drewlabs-htr/health.svg)

```
[![Health](https://phpackages.com/badges/drewlabs-htr/health.svg)](https://phpackages.com/packages/drewlabs-htr)
```

###  Alternatives

[jacwright/restserver

php rest server for very light-weight REST APIs

51070.0k3](/packages/jacwright-restserver)[jsor/hal-client

A lightweight client for consuming and manipulating Hypertext Application Language (HAL) resources.

2425.9k1](/packages/jsor-hal-client)[rap2hpoutre/jacky

Opinionated REST JSON HTTP API client for laravel

174.4k](/packages/rap2hpoutre-jacky)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
