Update Testcontainers to v4 and migrate to ICollectionFixture#8350
Update Testcontainers to v4 and migrate to ICollectionFixture#8350
Conversation
BenchmarksBenchmark execution time: 2026-03-24 19:59:20 Comparing candidate commit 31eb9a6 in PR branch Found 7 performance improvements and 10 performance regressions! Performance is the same for 260 metrics, 11 unstable metrics.
|
Execution-Time Benchmarks Report ⏱️Execution-time results for samples comparing This PR (8350) and master. ✅ No regressions detected - check the details below Full Metrics ComparisonFakeDbCommand
HttpMessageHandler
Comparison explanationExecution-time benchmarks measure the whole time it takes to execute a program, and are intended to measure the one-off costs. Cases where the execution time results for the PR are worse than latest master results are highlighted in **red**. The following thresholds were used for comparing the execution times:
Note that these results are based on a single point-in-time result for each branch. For full results, see the dashboard. Graphs show the p99 interval based on the mean and StdDev of the test run, as well as the mean value of the run (shown as a diamond below the graph). Duration chartsFakeDbCommand (.NET Framework 4.8)gantt
title Execution time (ms) FakeDbCommand (.NET Framework 4.8)
dateFormat x
axisFormat %Q
todayMarker off
section Baseline
This PR (8350) - mean (69ms) : 67, 71
master - mean (70ms) : 66, 73
section Bailout
This PR (8350) - mean (73ms) : 71, 75
master - mean (73ms) : 72, 74
section CallTarget+Inlining+NGEN
This PR (8350) - mean (1,055ms) : 987, 1123
master - mean (1,051ms) : 995, 1106
FakeDbCommand (.NET Core 3.1)gantt
title Execution time (ms) FakeDbCommand (.NET Core 3.1)
dateFormat x
axisFormat %Q
todayMarker off
section Baseline
This PR (8350) - mean (108ms) : 105, 111
master - mean (107ms) : 104, 111
section Bailout
This PR (8350) - mean (109ms) : 106, 111
master - mean (109ms) : 107, 110
section CallTarget+Inlining+NGEN
This PR (8350) - mean (725ms) : 701, 748
master - mean (730ms) : 711, 750
FakeDbCommand (.NET 6)gantt
title Execution time (ms) FakeDbCommand (.NET 6)
dateFormat x
axisFormat %Q
todayMarker off
section Baseline
This PR (8350) - mean (95ms) : 93, 98
master - mean (96ms) : 93, 99
section Bailout
This PR (8350) - mean (96ms) : 95, 98
master - mean (96ms) : 94, 98
section CallTarget+Inlining+NGEN
This PR (8350) - mean (705ms) : 660, 749
master - mean (709ms) : 668, 751
FakeDbCommand (.NET 8)gantt
title Execution time (ms) FakeDbCommand (.NET 8)
dateFormat x
axisFormat %Q
todayMarker off
section Baseline
This PR (8350) - mean (95ms) : 92, 98
master - mean (94ms) : 92, 97
section Bailout
This PR (8350) - mean (95ms) : 93, 97
master - mean (95ms) : 93, 97
section CallTarget+Inlining+NGEN
This PR (8350) - mean (639ms) : 611, 666
master - mean (641ms) : 615, 667
HttpMessageHandler (.NET Framework 4.8)gantt
title Execution time (ms) HttpMessageHandler (.NET Framework 4.8)
dateFormat x
axisFormat %Q
todayMarker off
section Baseline
This PR (8350) - mean (195ms) : 189, 201
master - mean (196ms) : 191, 201
section Bailout
This PR (8350) - mean (202ms) : 195, 210
master - mean (198ms) : 194, 201
section CallTarget+Inlining+NGEN
This PR (8350) - mean (1,178ms) : 1109, 1248
master - mean (1,148ms) : 1097, 1199
HttpMessageHandler (.NET Core 3.1)gantt
title Execution time (ms) HttpMessageHandler (.NET Core 3.1)
dateFormat x
axisFormat %Q
todayMarker off
section Baseline
This PR (8350) - mean (282ms) : 274, 290
master - mean (277ms) : 273, 282
section Bailout
This PR (8350) - mean (286ms) : 275, 297
master - mean (279ms) : 274, 284
section CallTarget+Inlining+NGEN
This PR (8350) - mean (913ms) : 880, 946
master - mean (903ms) : 876, 929
HttpMessageHandler (.NET 6)gantt
title Execution time (ms) HttpMessageHandler (.NET 6)
dateFormat x
axisFormat %Q
todayMarker off
section Baseline
This PR (8350) - mean (272ms) : 267, 277
master - mean (272ms) : 266, 277
section Bailout
This PR (8350) - mean (273ms) : 268, 277
master - mean (271ms) : 267, 275
section CallTarget+Inlining+NGEN
This PR (8350) - mean (939ms) : 910, 968
master - mean (936ms) : 909, 963
HttpMessageHandler (.NET 8)gantt
title Execution time (ms) HttpMessageHandler (.NET 8)
dateFormat x
axisFormat %Q
todayMarker off
section Baseline
This PR (8350) - mean (271ms) : 265, 278
master - mean (271ms) : 263, 278
section Bailout
This PR (8350) - mean (271ms) : 267, 275
master - mean (271ms) : 266, 275
section CallTarget+Inlining+NGEN
This PR (8350) - mean (845ms) : 817, 874
master - mean (835ms) : 814, 855
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
0e15422 to
31eb9a6
Compare
Summary of changes
This upgrades
Testcontainersto v4 in preparation for more migration of integration tests to use this over normal docker compose files.This also removes the
ContainersRegistryand instead just uses xUnit'sICollectionFixtureas previously the actual containers were not being disposed of (in CI they do get cleaned up after the job ends from my understanding) but locally the container would just stay running.Reason for change
I find it tedious to have to do a
docker compose up.... every time that I want to run integration tests locally I would much rather just get to a point where we just can run the test and let the infrastructure handle everything else. This sets us up to start doing that.Implementation details
Testcontainersversion, fixed build errors / API changesNewtonsoft.Jsonreference toTestHelpers.AutoInstrumentationas it was complaining that it wasn't thereAerospikeTeststo be the new wayTest coverage
Ran locally before/after there are no differences (outside of the fact that the container is properly disposed now)
Other details
I'll be plugging away at the other integrations