Skip to content

Releases: tpierrain/SmokeMe

v3.2.0

29 Mar 21:10

Choose a tag to compare

What's new in v3.2.0

  • Environment name in smoke report (#11) — The /smoke JSON response now includes an environmentName field reflecting the hosting environment (Development, Staging, Production, etc.)
    • Reads ASPNETCORE_ENVIRONMENT first, falls back to DOTNET_ENVIRONMENT
    • Helps spot environment misconfigurations at a glance (e.g. a production frontend targeting a development backend)
    • Documented in README FAQ #12

Thanks to @TeckTn for the suggestion!

Install / Upgrade

<PackageReference Include="SmokeMe" Version="3.2.0" />
<PackageReference Include="SmokeMe.AspNetCore" Version="3.2.0" />

What was new in v3.1.0

Added a virtual CleanUp() method on the SmokeTest base class (#9).

Smoke tests can now clean up production data created during execution without polluting the Scenario() method or misusing IDisposable.

Key behaviors

  • CleanUp() runs after Scenario(), whether the scenario succeeded or failed
  • If CleanUp() throws, the test outcome is NOT affected — the error is reported separately in a CleanupError field in the JSON response
  • CleanUp() is NOT called when the test is discarded (via HasToBeDiscarded())
  • CleanUp() time is included in the total test duration

Example

public class BookingRoundTripSmokeTest : SmokeTest
{
    private readonly IBookingService _bookingService;
    private string _createdBookingId;

    public override string SmokeTestName => "Booking round-trip";
    public override string Description => "Creates a booking then deletes it.";

    public BookingRoundTripSmokeTest(IBookingService bookingService)
    {
        _bookingService = bookingService;
    }

    public override async Task<SmokeTestResult> Scenario()
    {
        _createdBookingId = await _bookingService.CreateTestBookingAsync();
        var booking = await _bookingService.GetBookingAsync(_createdBookingId);
        return new SmokeTestResult(booking != null);
    }

    public override async Task CleanUp()
    {
        if (_createdBookingId != null)
            await _bookingService.DeleteBookingAsync(_createdBookingId);
    }
}

What was new in v3.0.0

SmokeMe is now split into two NuGet packages:

Package Target Purpose
SmokeMe netstandard2.0 Core library — smoke test base class, discovery, execution. No ASP.NET dependency.
SmokeMe.AspNetCore net8.0 / net9.0 ASP.NET Core integration — AddSmokeMe() + MapSmokeEndpoint()

Breaking changes

  • Explicit registration required: builder.Services.AddSmokeMe() + app.MapSmokeEndpoint()
  • Minimal APIs endpoint replaces the MVC Controller approach
  • System.Text.Json replaces Newtonsoft.Json
  • ICheckSmoke interface removed (was deprecated since v2 — use SmokeTest abstract class)
  • Removed embedded dependencies: no more Swashbuckle or API Versioning pulled in automatically
  • New ISmokeTestConfiguration interface replaces direct IConfiguration extension methods

Improvements

  • Cross-platform runtime info: osName and nbOfProcessors fields in the /smoke response now work on macOS and Linux (previously Windows-only)

What stays the same

Your existing SmokeTest classes work as-is. Only the hosting setup changes.

Migration

See the full Migration Guide (v2 to v3) for step-by-step instructions.

Legacy support

The SmokeController is still available (marked [Obsolete]) as a temporary migration aid. It will be removed in v4.

v3.1.1 — CleanUp() support + complete release notes

29 Mar 18:45

Choose a tag to compare

Identical to v3.1.0 with complete release notes in NuGet package metadata (now includes both v3.1.0 and v3.0.0 notes).

See v3.1.0 release for full details on the CleanUp() feature.

Full Changelog: v3.1.0...v3.1.1

v3.1.0 — CleanUp() support

29 Mar 18:37

Choose a tag to compare

What's new

Added a virtual CleanUp() method on the SmokeTest base class (#9).

Smoke tests can now clean up production data created during execution without polluting the Scenario() method or misusing IDisposable.

Key behaviors

  • CleanUp() runs after Scenario(), whether the scenario succeeded or failed
  • If CleanUp() throws, the test outcome is NOT affected — the error is reported separately in a CleanupError field in the JSON response
  • CleanUp() is NOT called when the test is discarded (via HasToBeDiscarded())
  • CleanUp() time is included in the total test duration

Example

public class BookingRoundTripSmokeTest : SmokeTest
{
    private readonly IBookingService _bookingService;
    private string _createdBookingId;

    public override string SmokeTestName => "Booking round-trip";
    public override string Description => "Creates a booking then deletes it.";

    public BookingRoundTripSmokeTest(IBookingService bookingService)
    {
        _bookingService = bookingService;
    }

    public override async Task<SmokeTestResult> Scenario()
    {
        _createdBookingId = await _bookingService.CreateTestBookingAsync();
        var booking = await _bookingService.GetBookingAsync(_createdBookingId);
        return new SmokeTestResult(booking != null);
    }

    public override async Task CleanUp()
    {
        if (_createdBookingId != null)
            await _bookingService.DeleteBookingAsync(_createdBookingId);
    }
}

Full Changelog: v3.0.1...v3.1.0

SmokeMe v3.0.1

29 Mar 17:52

Choose a tag to compare

What's new in v3

SmokeMe is now split into two NuGet packages:

Package Target Purpose
SmokeMe netstandard2.0 Core library — smoke test base class, discovery, execution. No ASP.NET dependency.
SmokeMe.AspNetCore net8.0 / net9.0 ASP.NET Core integration — AddSmokeMe() + MapSmokeEndpoint()

Breaking changes (since v2)

  • Explicit registration required: builder.Services.AddSmokeMe() + app.MapSmokeEndpoint()
  • Minimal APIs endpoint replaces the MVC Controller approach
  • System.Text.Json replaces Newtonsoft.Json
  • ICheckSmoke interface removed (was deprecated since v2 — use SmokeTest abstract class)
  • Removed embedded dependencies: no more Swashbuckle or API Versioning pulled in automatically
  • New ISmokeTestConfiguration interface replaces direct IConfiguration extension methods

Fixes in 3.0.1

  • Cross-platform runtime info: osName and nbOfProcessors fields in the /smoke response now work on macOS and Linux (previously Windows-only)
  • README included in NuGet packages
  • Copyright updated to 2026
  • Repository URLs updated to tpierrain/SmokeMe

What stays the same

Your existing SmokeTest classes work as-is. Only the hosting setup changes.

Migration

See the full Migration Guide (v2 to v3) for step-by-step instructions.

Legacy support

The SmokeController is still available (marked [Obsolete]) as a temporary migration aid. It will be removed in v4.

SmokeMe v3.0.0

29 Mar 17:14

Choose a tag to compare

What's new in v3

SmokeMe is now split into two NuGet packages:

Package Target Purpose
SmokeMe netstandard2.0 Core library — smoke test base class, discovery, execution. No ASP.NET dependency.
SmokeMe.AspNetCore net8.0 / net9.0 ASP.NET Core integration — AddSmokeMe() + MapSmokeEndpoint()

Breaking changes

  • Explicit registration required: builder.Services.AddSmokeMe() + app.MapSmokeEndpoint()
  • Minimal APIs endpoint replaces the MVC Controller approach
  • System.Text.Json replaces Newtonsoft.Json
  • ICheckSmoke interface removed (was deprecated since v2 — use SmokeTest abstract class)
  • Removed embedded dependencies: no more Swashbuckle or API Versioning pulled in automatically
  • New ISmokeTestConfiguration interface replaces direct IConfiguration extension methods

Improvements

  • Cross-platform runtime info: osName and nbOfProcessors fields in the /smoke response now work on macOS and Linux (previously Windows-only)

What stays the same

Your existing SmokeTest classes work as-is. Only the hosting setup changes.

Migration

See the full Migration Guide (v2 to v3) for step-by-step instructions.

Legacy support

The SmokeController is still available (marked [Obsolete]) as a temporary migration aid. It will be removed in v4.