Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
# Changelog
## Unreleased
- **Breaking:** Remove the `pytest-pants` runner. It had zero real usage over the last 3 months. Use the `custom` runner instead, which now supports selector-based test splitting (see `--selector-splitting` in 2.9.0).
- **Breaking:** Remove the `nunit` runner. It saw almost no real usage, and had known issues splitting tests by file (result path handling, and class name collisions across namespaces).

## 2.9.0 - 2026-07-06
- Add experimental selector-based test splitting for supported non-file runners (RSpec, custom runner, Go) via `--selector-splitting` and `--selector-file` (env: `BUILDKITE_TEST_ENGINE_SELECTOR_FILE`), splitting by runnable selector rather than by file. `--selector-file` must be used alongside `--selector-splitting`.
Expand Down
19 changes: 9 additions & 10 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,15 +6,15 @@ bktec supports multiple test runners and offers various features to enhance your

<!-- DO NOT MANUALLY EDIT THE TABLE BELOW. The contents can be generate with `go run util/supported_features/main.go` -->

| Feature | RSpec | Jest | Playwright | Cypress | pytest | gotest | Cucumber | NUnit | Custom test runner |
| --- | :---: | :---: | :---: | :---: | :---: | :---: | :---: | :---: | :---: |
| Split tests by file[^1] | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ |
| [Split slow files by individual test example](https://github.com/buildkite/test-engine-client/blob/main/docs/rspec.md#split-slow-files-by-individual-test-example) | ✅ | ❌ | ✅ | ❌ | ✅ | ❌ | ✅ | ❌ | ❌ |
| Filter test files | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ |
| Filter tests by tag | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ |
| Automatically retry failed test | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | ❌ |
| Mute tests (ignore test failures) | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ |
| Skip tests | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | ❌ |
| Feature | RSpec | Jest | Playwright | Cypress | pytest | gotest | Cucumber | Custom test runner |
| --- | :---: | :---: | :---: | :---: | :---: | :---: | :---: | :---: |
| Split tests by file[^1] | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ |
| [Split slow files by individual test example](https://github.com/buildkite/test-engine-client/blob/main/docs/rspec.md#split-slow-files-by-individual-test-example) | ✅ | ❌ | ✅ | ❌ | ✅ | ❌ | ✅ | ❌ |
| Filter test files | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ |
| Filter tests by tag | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | ❌ | ❌ |
| Automatically retry failed test | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ❌ |
| Mute tests (ignore test failures) | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ |
| Skip tests | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ |

## Installation
The latest version of bktec can be downloaded from https://github.com/buildkite/test-engine-client/releases
Expand Down Expand Up @@ -254,7 +254,6 @@ To configure the test runner for bktec, please refer to the detailed guides prov
- [go test](./docs/gotest.md)
- [RSpec](./docs/rspec.md)
- [Cucumber](./docs/cucumber.md)
- [NUnit](./docs/nunit.md)
- [Custom Test Runner](./docs/custom-test-runner.md)


Expand Down
92 changes: 0 additions & 92 deletions docs/nunit.md

This file was deleted.

1 change: 0 additions & 1 deletion internal/config/validate.go
Original file line number Diff line number Diff line change
Expand Up @@ -119,7 +119,6 @@ func (c *Config) ValidateForRun() error {
"playwright": true,
"gotest": true,
"cucumber": true,
"nunit": true,
}
if c.ResultPath == "" && runnersWithResultPath[c.TestRunner] {
c.errs.appendFieldError("BUILDKITE_TEST_ENGINE_RESULT_PATH", "must not be blank")
Expand Down
4 changes: 1 addition & 3 deletions internal/runner/detector.go
Original file line number Diff line number Diff line change
Expand Up @@ -37,12 +37,10 @@ func DetectRunner(cfg *config.Config) (TestRunner, error) {
return NewGoTest(runnerConfig), nil
case "cucumber":
return NewCucumber(runnerConfig), nil
case "nunit":
return NewNUnit(runnerConfig), nil
case "custom":
return NewCustom(runnerConfig)
default:
// Update the error message to include the new runner
return nil, fmt.Errorf("runner value %q is invalid, possible values are 'rspec', 'jest', 'cypress', 'playwright', 'pytest', 'gotest', 'cucumber', 'nunit', or 'custom'", testRunner)
return nil, fmt.Errorf("runner value %q is invalid, possible values are 'rspec', 'jest', 'cypress', 'playwright', 'pytest', 'gotest', 'cucumber', or 'custom'", testRunner)
}
}
2 changes: 1 addition & 1 deletion internal/runner/doc.go
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
// Package runner provides the test runners that run sets of test cases.
// Supported runners: rspec, jest, cypress, playwright, pytest, gotest, cucumber, nunit.
// Supported runners: rspec, jest, cypress, playwright, pytest, gotest, cucumber.
package runner
157 changes: 0 additions & 157 deletions internal/runner/nunit.go

This file was deleted.

Loading