Adding Smoke Testing to My Blog with Claude Code

For the longest time, my personal blog didn’t have any smoke tests. 🫢 Like many side projects, it was always on the “I’ll get to it eventually” list… and never quite made it to the top.

That changed when I decided to see what would happen if I let AI handle it for me.

With just a few instructions, Claude Code installed xUnit, created smoke tests for my core pages (Home, Blog List, Blog Detail, About, and Speaking), added a GitHub Action to run them after deployments, committed everything, and even opened a pull request. All of this happened in minutes. ⚡

Now, every deployment runs smoke tests automatically, giving me confidence that the most important parts of my site are working without me having to think about it.

Why Smoke Testing?

Smoke tests are quick, lightweight checks that confirm a site is basically working. They don’t replace full end-to-end or regression testing, but they answer the simple question:

“After deployment, are the critical pages alive and loading?” 🤔

For a content-driven site like my blog, that means making sure:

  • The homepage loads.
  • Blog list and detail pages display.
  • Key navigation is present.
  • Core content (titles, headings, etc.) renders.

Example Test

Here’s one of the tests it generated for my homepage:

[Fact]
public async Task HomePage_LoadsSuccessfully()
{
	// Arrange & Act
	var response = await Page!.GotoAsync(BaseUrl);

	// Assert
	Assert.NotNull(response);
	Assert.True(response.Ok, $"Expected 200 status, got {response.Status}");
}

It’s simple, but that’s the point. Each test confirms that a page loads and displays the essentials. If something breaks, I’ll know right after deployment.

GitHub Action

The automation runs through GitHub Actions, triggering after a successful deployment to production.

The workflow installs Playwright browsers as part of the setup, so the tests run exactly as they would in a real browser.

name: E2E Tests (Post-Deployment)

on:
  workflow_run:
    workflows: ["Build & Deploy (Publish Profile)"]
    types:
      - completed
    branches: [main]

permissions:
  contents: read

jobs:
  e2e-tests:
    runs-on: ubuntu-latest
    # Only run if deployment succeeded
    if: ${{ github.event.workflow_run.conclusion == 'success' }}
    env:
      DOTNET_SKIP_FIRST_TIME_EXPERIENCE: 1
      DOTNET_CLI_TELEMETRY_OPTOUT: 1

    steps:
      - name: Checkout code
        uses: actions/checkout@v4

      - name: Setup .NET from global.json
        uses: actions/setup-dotnet@v4
        with:
          global-json-file: global.json

      - name: Restore
        run: dotnet restore

      - name: Build test project
        run: dotnet build tests/Goldfinch.Tests.E2E/Goldfinch.Tests.E2E.csproj --configuration Release

      - name: Install Playwright browsers
        working-directory: tests/Goldfinch.Tests.E2E
        run: pwsh bin/Release/net9.0/playwright.ps1 install chromium

      - name: Wait for deployment to stabilize
        run: sleep 60

      - name: Run E2E smoke tests against production
        run: dotnet test tests/Goldfinch.Tests.E2E/Goldfinch.Tests.E2E.csproj --configuration Release --no-build --filter "Category=Smoke" --logger "trx;LogFileName=test-results.trx" --logger "console;verbosity=detailed"
        env:
          BASE_URL: 'https://www.goldfinch.me'

      - name: Upload test results
        if: always()
        uses: actions/upload-artifact@v4
        with:
          name: e2e-test-results
          path: tests/Goldfinch.Tests.E2E/TestResults/*.trx

So whenever my blog deploys successfully, the smoke tests kick in automatically.

The Pull Request

Claude even opened a PR for me: View it here.

I still reviewed the code (AI isn’t a replacement for developer judgment), but it saved me the repetitive setup.

Why This Matters

✅ Peace of mind after deployments
✅ Automated quality checks without manual effort
✅ A real-world example of AI accelerating developer workflows
✅ Shows how easily this can be applied to Xperience by Kentico projects (or any .NET site)

Takeaways

This was a small win, but one that adds real value. By letting AI handle the repetitive setup, I got a feature I’d been putting off for months, in less than an hour.

For me, this was a reminder that AI doesn’t just write code: it can take care of the infrastructure around coding that makes projects more robust.

The result? My blog now has automated smoke testing on every deployment 😎

You might also be interested in