PHPackages                             qase/pest-reporter - 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. [Testing &amp; Quality](/categories/testing)
4. /
5. qase/pest-reporter

ActiveLibrary[Testing &amp; Quality](/categories/testing)

qase/pest-reporter
==================

Qase TMS reporter for Pest PHP testing framework

1.0.1(2mo ago)0139↓100%1Apache-2.0PHPPHP ^8.2CI passing

Since Feb 5Pushed 2mo agoCompare

[ Source](https://github.com/qase-tms/qase-pest)[ Packagist](https://packagist.org/packages/qase/pest-reporter)[ Docs](https://qase.io)[ RSS](/packages/qase-pest-reporter/feed)WikiDiscussions main Synced 1mo ago

READMEChangelogDependencies (3)Versions (4)Used By (0)

Qase TMS Pest Reporter
======================

[](#qase-tms-pest-reporter)

[![License](https://camo.githubusercontent.com/5b60841bea9e11d9d0b0950d690c9bc554e06385634056a7d5d62a15d1a4eabe/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f4c6963656e73652d4170616368655f322e302d626c75652e737667)](https://opensource.org/licenses/Apache-2.0)

A [Qase TMS](https://qase.io) reporter for [Pest PHP](https://pestphp.com/) testing framework.

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

[](#installation)

```
composer require --dev qase/pest-reporter
```

Configuration
-------------

[](#configuration)

### 1. Add PHPUnit Extension

[](#1-add-phpunit-extension)

Add the Qase extension to your `phpunit.xml`:

```

```

### 2. Create Configuration File

[](#2-create-configuration-file)

Create `qase.config.json` in your project root:

```
{
  "mode": "testops",
  "fallback": "report",
  "testops": {
    "api": {
      "token": "YOUR_QASE_API_TOKEN",
      "host": "qase.io"
    },
    "project": "YOUR_PROJECT_CODE",
    "run": {
      "title": "Pest Test Run",
      "complete": true
    }
  },
  "report": {
    "driver": "local",
    "connection": {
      "path": "./build/qase-report"
    }
  }
}
```

Or use environment variables:

```
QASE_MODE=testops
QASE_TESTOPS_API_TOKEN=your_token
QASE_TESTOPS_PROJECT=PROJECT_CODE
```

Usage
-----

[](#usage)

### Fluent API (Recommended)

[](#fluent-api-recommended)

```
use function Qase\PestReporter\qase;

it('logs in successfully', function () {
    qase()
        ->caseId(123)
        ->title('Login Test')
        ->suite('Auth', 'Login')
        ->field('priority', 'high')
        ->parameter('browser', 'chrome')
        ->step('Open login page')
        ->step('Submit credentials', function () {
            expect(true)->toBeTrue();
        })
        ->comment('Testing login functionality')
        ->attach('/path/to/screenshot.png');
});
```

### Static Facade

[](#static-facade)

```
use Qase\PestReporter\Qase;

it('logs in successfully', function () {
    Qase::caseId(123);
    Qase::title('Login Test');
    Qase::comment('Testing login');

    expect(true)->toBeTrue();
});
```

API Reference
-------------

[](#api-reference)

### Fluent API Methods

[](#fluent-api-methods)

MethodDescription`caseId(int ...$ids)`Link test to Qase test case(s)`title(string $title)`Set custom test title`suite(string ...$suites)`Set suite hierarchy`field(string $name, string $value)`Set custom field`parameter(string $name, string $value)`Set test parameter`comment(string $message)`Add comment`attach(mixed $input)`Add attachment`step(string $action, ?callable $callback, ?string $expectedResult)`Add test step### Static Facade Methods

[](#static-facade-methods)

MethodDescription`Qase::caseId(int ...$ids)`Link test to Qase test case(s)`Qase::title(string $title)`Set custom test title`Qase::suite(string ...$suites)`Set suite hierarchy`Qase::field(string $name, string $value)`Set custom field`Qase::parameter(string $name, string $value)`Set test parameter`Qase::comment(string $message)`Add comment`Qase::attach(mixed $input)`Add attachment`Qase::step(string $action, ?callable $callback, ?string $expectedResult)`Add test stepAttachments
-----------

[](#attachments)

### File Attachment

[](#file-attachment)

```
qase()->attach('/path/to/file.png');
```

### Multiple Files

[](#multiple-files)

```
qase()->attach(['/path/to/file1.png', '/path/to/file2.log']);
```

### Content Attachment

[](#content-attachment)

```
qase()->attach((object)[
    'title' => 'response.json',
    'content' => json_encode($response),
    'mime' => 'application/json'
]);
```

Steps
-----

[](#steps)

Add test steps to structure your test execution in Qase TMS.

### Simple Step Markers

[](#simple-step-markers)

```
qase()->step('Open login page');
qase()->step('Enter credentials');
qase()->step('Click submit');
```

### Steps with Callbacks

[](#steps-with-callbacks)

Callbacks provide automatic timing and status tracking (passed/failed):

```
qase()->step('Fill login form', function () {
    // step body — auto-timed, status set to passed/failed
    expect(true)->toBeTrue();
});
```

### Nested Steps

[](#nested-steps)

```
qase()->step('Login flow', function () {
    qase()->step('Enter credentials', function () {
        // nested step
    });
    qase()->step('Click submit');
});
```

### Steps with Expected Result

[](#steps-with-expected-result)

```
qase()->step('Click login', expectedResult: 'Dashboard page loads');
```

### Static Facade Steps

[](#static-facade-steps)

```
use Qase\PestReporter\Qase;

Qase::step('Open page', function () { /* ... */ });
Qase::step('Verify footer', expectedResult: 'Footer is visible');
```

### Steps in Fluent Chain

[](#steps-in-fluent-chain)

```
qase()
    ->caseId(123)
    ->step('Open page')
    ->step('Fill form', function () { /* ... */ })
    ->step('Submit', expectedResult: 'Success message shown')
    ->comment('All steps passed');
```

Data Providers
--------------

[](#data-providers)

The reporter automatically extracts parameters from Pest's data providers:

```
it('adds numbers', function (int $a, int $b, int $expected) {
    qase()->caseId(100);
    expect($a + $b)->toBe($expected);
})->with([
    'one plus one' => [1, 1, 2],
    'two plus two' => [2, 2, 4],
]);
```

Suite Hierarchy
---------------

[](#suite-hierarchy)

Use `describe()` blocks for automatic suite hierarchy, or set manually:

```
describe('Authentication', function () {
    describe('Login', function () {
        it('logs in with valid credentials', function () {
            qase()->caseId(1)->comment('Testing login');
            expect(true)->toBeTrue();
        });
    });
});

// Or set manually:
it('test with custom suite', function () {
    qase()->suite('API', 'Users', 'Create');
    expect(true)->toBeTrue();
});
```

Running Tests
-------------

[](#running-tests)

```
# With local report
./vendor/bin/pest

# With Qase TMS integration
QASE_MODE=testops ./vendor/bin/pest
```

Requirements
------------

[](#requirements)

- PHP 8.2+
- Pest 2.0+ or 3.0+
- PHPUnit 10, 11, or 12

License
-------

[](#license)

Apache License 2.0

Links
-----

[](#links)

- [Qase TMS](https://qase.io)
- [Pest PHP](https://pestphp.com)
- [Documentation](https://docs.qase.io)

###  Health Score

41

—

FairBetter than 89% of packages

Maintenance84

Actively maintained with recent releases

Popularity16

Limited adoption so far

Community7

Small or concentrated contributor base

Maturity48

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 ~13 days

Total

2

Last Release

82d ago

### Community

Maintainers

![](https://www.gravatar.com/avatar/f9f1a283d3d2006e510da5e8859b4f5c174b3fb1ea67527857ab6d9bbd3ee599?d=identicon)[qase](/maintainers/qase)

---

Top Contributors

[![gibiw](https://avatars.githubusercontent.com/u/17822447?v=4)](https://github.com/gibiw "gibiw (19 commits)")

---

Tags

phptestingpestreportertmsqase

###  Code Quality

TestsPest

### Embed Badge

![Health badge](/badges/qase-pest-reporter/health.svg)

```
[![Health](https://phpackages.com/badges/qase-pest-reporter/health.svg)](https://phpackages.com/packages/qase-pest-reporter)
```

###  Alternatives

[pestphp/pest

The elegant PHP Testing Framework.

11.4k59.5M14.2k](/packages/pestphp-pest)[robiningelbrecht/phpunit-pretty-print

Prettify PHPUnit output

76460.0k15](/packages/robiningelbrecht-phpunit-pretty-print)[juampi92/test-seo

Easy way to test your SEO

26341.0k](/packages/juampi92-test-seo)[robiningelbrecht/phpunit-coverage-tools

PHPUnit coverage tools

1783.0k34](/packages/robiningelbrecht-phpunit-coverage-tools)

PHPackages © 2026

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