Releases: tpierrain/SmokeMe
v3.2.0
What's new in v3.2.0
- Environment name in smoke report (#11) — The
/smokeJSON response now includes anenvironmentNamefield reflecting the hosting environment (Development,Staging,Production, etc.)- Reads
ASPNETCORE_ENVIRONMENTfirst, falls back toDOTNET_ENVIRONMENT - Helps spot environment misconfigurations at a glance (e.g. a production frontend targeting a development backend)
- Documented in README FAQ #12
- Reads
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 afterScenario(), whether the scenario succeeded or failed- If
CleanUp()throws, the test outcome is NOT affected — the error is reported separately in aCleanupErrorfield in the JSON response CleanUp()is NOT called when the test is discarded (viaHasToBeDiscarded())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
ICheckSmokeinterface removed (was deprecated since v2 — useSmokeTestabstract class)- Removed embedded dependencies: no more Swashbuckle or API Versioning pulled in automatically
- New
ISmokeTestConfigurationinterface replaces directIConfigurationextension methods
Improvements
- Cross-platform runtime info:
osNameandnbOfProcessorsfields in the/smokeresponse 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
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
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 afterScenario(), whether the scenario succeeded or failed- If
CleanUp()throws, the test outcome is NOT affected — the error is reported separately in aCleanupErrorfield in the JSON response CleanUp()is NOT called when the test is discarded (viaHasToBeDiscarded())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
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
ICheckSmokeinterface removed (was deprecated since v2 — useSmokeTestabstract class)- Removed embedded dependencies: no more Swashbuckle or API Versioning pulled in automatically
- New
ISmokeTestConfigurationinterface replaces directIConfigurationextension methods
Fixes in 3.0.1
- Cross-platform runtime info:
osNameandnbOfProcessorsfields in the/smokeresponse 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
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
ICheckSmokeinterface removed (was deprecated since v2 — useSmokeTestabstract class)- Removed embedded dependencies: no more Swashbuckle or API Versioning pulled in automatically
- New
ISmokeTestConfigurationinterface replaces directIConfigurationextension methods
Improvements
- Cross-platform runtime info:
osNameandnbOfProcessorsfields in the/smokeresponse 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.