Weave Code
Weaver
Helps Laravel developers discover, compare, and choose open-source packages. See popularity, security, maintainers, and scores at a glance to make better decisions.
Feedback
Share your thoughts, report bugs, or suggest improvements.
Subject
Message

Behat Command Runner Extension Laravel Package

adamquaile/behat-command-runner-extension

Behat extension that runs shell commands as part of your test flow, letting you trigger database migrations, fixture loading, and other setup or teardown tasks automatically before and after scenarios via configurable hooks and a command runner service.

Deep Wiki
Context7

Product Decisions This Supports

  • Build vs. buy for test-environment orchestration. The package answers a narrow question: "do we write our own lifecycle command hooks, or adopt a small community extension?" At 14 stars and a low health score, the honest answer is usually "write 15 lines in a FeatureContext" — but the package is a useful reference design for what those hooks should look like (before suite, before/after scenario, before/after step).
  • CI reliability and flake reduction. The underlying product value is deterministic test environments: resetting a database, seeding fixtures, clearing caches, or bringing up containers at defined points in the run. Every flaky test that costs an engineer 20 minutes of triage is a real line item; anything that standardizes environment setup attacks that cost.
  • Feedback-loop velocity as a roadmap input. If your team ships on a PHP/Behat stack, hook-driven setup shortens the loop between commit and trustworthy green/red. That is a lever on release cadence, which is a roadmap commitment — worth naming explicitly rather than treating as incidental tooling.
  • Scope discipline on QA tooling investment. This package is a forcing function for a decision: is test-lifecycle automation a platform concern we own, or a per-team convenience? Adopting an unmaintained dependency signals "convenience"; forking it into an internal helper signals "platform."
  • Use cases worth prototyping: ephemeral database per scenario for destructive tests, cache/queue resets between scenarios, screenshot or log capture on failure, and smoke-testing a staging environment as part of a BDD suite.
  • What it does not support: no product feature decisions, no customer-facing behavior, no measurable end-user outcome. It is pure developer-productivity infrastructure and should be budgeted as such.

When to Consider This Package

Adopt (or, more likely, borrow from) it when all of the following hold:

  • Behat is already the team's BDD runner and will remain so for the planning horizon — this extension is Behat-specific and does nothing for PHPUnit, Pest, or Dusk suites.
  • You have repeated, order-sensitive setup/teardown commands that currently live in shell scripts, Makefiles, or copy-pasted CI YAML, and you want them co-located with the test suite.
  • You need hook granularity beyond what Behat's built-in @BeforeScenario-style annotations comfortably express, or you want that wiring in configuration rather than code.
  • The team accepts the maintenance profile: single maintainer, minimal release activity, no security surface to speak of (it shells out, so the risk is behavioral, not exploitable), and a willingness to fork or vendor it if it breaks against a Behat major version.

Look elsewhere when:

  • The stack is Laravel-first. In practice you will reach for Pest/PHPUnit with RefreshDatabase, DatabaseTransactions, and Artisan calls in setUp()/tearDown(). Behat is a minority choice in the Laravel ecosystem, and pulling it in to justify this extension is a stack decision disguised as a tooling decision — do not let it happen quietly.
  • You need maintained dependencies. With ~14 stars and no visible release cadence, treat this as source code you are adopting, not a dependency you are consuming. If your org requires active maintenance or an SLA, it fails that bar.
  • Your orchestration is already solved by Docker Compose healthchecks, Testcontainers, or CI-level setup steps. Duplicating that logic inside test hooks creates two sources of truth.
  • Cross-language or multi-framework coverage is on the roadmap. A Behat-only hook runner will not generalize; a small internal script invoked from any runner will.

How to Pitch It (Stakeholders)

For executives (one paragraph): This is a small, free extension for our PHP behavior-driven test suite that runs setup and cleanup commands automatically at defined points in a test run — resetting databases, clearing caches, capturing logs on failure. Its business value is indirect but real: more reliable test results mean faster, safer releases and less engineer time lost to flaky failures. It carries no licensing cost and no security exposure, but it is a low-activity community project with a single maintainer, so we should treat it as a short piece of code we own rather than a vendor dependency. Recommendation: prototype it in one team's suite, with a fallback of a ~20-line internal helper that does the same thing.

For engineering (the actual ask): The capability we want is lifecycle-invoked commands — before suite, before/after scenario, before/after step. That capability is genuinely useful and worth standardizing. The package itself is one implementation at roughly 14 stars with unclear maintenance; the equivalent logic is a FeatureContext with @BeforeSuite/@AfterScenario hooks calling a process helper, which we can own outright. So: spike the package for a day to borrow its hook model and configuration shape, then decide between vendoring it, forking it internally, or writing the helper ourselves. Do not add it to a shared composer.json without pinning and an owner. Separately, flag whether Behat is still the right runner for us — if the answer is "we're mostly Laravel," this whole evaluation is moot and we should be investing in Pest and Dusk instead.

Weaver

How can I help you explore Laravel packages today?

Conversation history is not saved when not logged in.
Prompt
Add packages to context
No packages found.
uni-method/symfony-lib
tacticmedia/scim-server-bundle
neika-ai/symfony-bundle
mattleads/agent-publishing-bundle
glavweb/framework-bundle
glavweb/extra-bundle
glavweb/api-bundle
glavweb/admin-bundle
adachsoft/api-version-bundle
elsayed85/laravel-api-exceptions
ouhssini/laravel-demo-mode
daworks/ncloud-outbound-mailer-driver
gp247/cms
ignibyte/aic-gates
nexa-merchant/blog
novasa/laravel-language-center
opencage/geocode
adolfoholzer/parameters
livenetworks/ln-starter
cgv/localized-resource