<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Testing on JVQ.net</title>
    <link>https://jvq.net/tags/testing/</link>
    <description>Recent content in Testing on JVQ.net</description>
    <generator>Hugo</generator>
    <language>en-us</language>
    <lastBuildDate>Wed, 04 Nov 2026 00:00:00 +0000</lastBuildDate>
    <atom:link href="https://jvq.net/tags/testing/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>jvq Flaky Now Takes Three Lines of YAML and Shows the Tests a Crash Skipped</title>
      <link>https://jvq.net/jvq-flaky-now-takes-three-lines-of-yaml-and-shows-the-tests-a-crash-skipped/</link>
      <pubDate>Wed, 04 Nov 2026 00:00:00 +0000</pubDate>
      <guid>https://jvq.net/jvq-flaky-now-takes-three-lines-of-yaml-and-shows-the-tests-a-crash-skipped/</guid>
      <description>&lt;p&gt;The flaky test gate in 0.7 worked, but setting it up in GitHub Actions meant copying fifteen lines of YAML: restore a cache, pick the right flag for pull requests, run the gate, save the cache, but only on the main branch. Most people who&amp;rsquo;d want it would read that block and decide to do it later.&lt;/p&gt;&#xA;&lt;p&gt;Version 0.8.0 puts all of that in the action:&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-yaml&#34; data-lang=&#34;yaml&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      - &lt;span style=&#34;color:#f92672&#34;&gt;run&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;go test -json ./... &amp;gt; go-test.json || true&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      - &lt;span style=&#34;color:#f92672&#34;&gt;uses&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;just-very-quickly/jvq@v0.8.0&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#f92672&#34;&gt;with&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;          &lt;span style=&#34;color:#f92672&#34;&gt;flaky&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;go-test.json&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;The action installs jvq and keeps the test history in the Actions cache. Pushes to your default branch add to it, and so do manual and scheduled runs there. Pull requests are judged against it without writing, so a branch full of half-finished work can&amp;rsquo;t teach the gate that a broken test is flaky. Each job of a matrix keeps its own history, because a test that fails on one Go version and passes on another isn&amp;rsquo;t flaky, it&amp;rsquo;s broken on one of them.&lt;/p&gt;</description>
    </item>
    <item>
      <title>jvq Shrinks Its Flaky Test History 80 Times and Lets You Pin Tests In or Out of Quarantine</title>
      <link>https://jvq.net/jvq-shrinks-its-flaky-test-history-80-times-and-lets-you-pin-tests-in-or-out-of-quarantine/</link>
      <pubDate>Wed, 04 Nov 2026 00:00:00 +0000</pubDate>
      <guid>https://jvq.net/jvq-shrinks-its-flaky-test-history-80-times-and-lets-you-pin-tests-in-or-out-of-quarantine/</guid>
      <description>&lt;p&gt;The flaky test gate keeps one line per CI run, and through 0.8 that line spelled out every test&amp;rsquo;s name. Fine for a few hundred tests. For a suite of 2000 Go tests with long package paths, 200 runs came to 26.8 MB, and that file goes in and out of the Actions cache on every job.&lt;/p&gt;&#xA;&lt;p&gt;Version 0.9.0 writes each name once. The file starts and ends with the list of test names, and a run&amp;rsquo;s line says which numbers passed, failed or were skipped:&lt;/p&gt;</description>
    </item>
    <item>
      <title>How to Set Up jvq Flaky With GitHub Actions and Retries in pytest and Go</title>
      <link>https://jvq.net/how-to-set-up-jvq-flaky-with-github-actions-and-retries-in-pytest-and-go/</link>
      <pubDate>Sat, 31 Oct 2026 00:00:00 +0000</pubDate>
      <guid>https://jvq.net/how-to-set-up-jvq-flaky-with-github-actions-and-retries-in-pytest-and-go/</guid>
      <description>&lt;p&gt;&lt;code&gt;jvq flaky&lt;/code&gt; needs two things from your CI: test results it can read, and a history file that survives from one run to the next. Everything else is optional. These are the setups we&amp;rsquo;d start with, each one run for real before it went on this page.&lt;/p&gt;&#xA;&lt;p&gt;They were tested with the released 0.7.0 binary on a small demo project: a pytest suite of four tests, one of which fails about one try in three, and a Go package with the same kind of test. That test fails at random, the way a test does that waits on a slow service. The outputs below are copied from those runs, and the script that made them is in &lt;a href=&#34;https://github.com/just-very-quickly/jvq/tree/main/test/results/case-studies/flaky/recipes&#34;&gt;test/results/case-studies/flaky/recipes&lt;/a&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>jvq Quarantines Flaky Tests So They Stop Blocking Merges</title>
      <link>https://jvq.net/jvq-quarantines-flaky-tests-so-they-stop-blocking-merges/</link>
      <pubDate>Sat, 31 Oct 2026 00:00:00 +0000</pubDate>
      <guid>https://jvq.net/jvq-quarantines-flaky-tests-so-they-stop-blocking-merges/</guid>
      <description>&lt;p&gt;Every team has a test like this. It checks out a cart, or uploads a file, or waits on a socket, and about one run in ten it fails for no reason anyone can find. The pull request goes red. Somebody clicks &amp;ldquo;re-run&amp;rdquo; and it goes green. After a few weeks everyone clicks re-run without reading the failure, and one day the failure is real.&lt;/p&gt;&#xA;&lt;p&gt;Version 0.7.0 adds a second gate to jvq for this. &lt;code&gt;jvq flaky&lt;/code&gt; reads your test results, keeps a small history across CI runs, and tells two kinds of failure apart: a test that fails on code that also passed it, and a test that fails because the code broke.&lt;/p&gt;</description>
    </item>
    <item>
      <title>jvq Replays 26 of Its Own CI Runs and Blocks a Windows Test Bug Four Pushes in a Row</title>
      <link>https://jvq.net/jvq-replays-26-of-its-own-ci-runs-and-blocks-a-windows-test-bug-four-pushes-in-a-row/</link>
      <pubDate>Sat, 31 Oct 2026 00:00:00 +0000</pubDate>
      <guid>https://jvq.net/jvq-replays-26-of-its-own-ci-runs-and-blocks-a-windows-test-bug-four-pushes-in-a-row/</guid>
      <description>&lt;p&gt;The fastest way to find out what a flaky test gate does with real failures is to give it some. jvq has its own CI history on GitHub: 26 pushes to main between October 18 and October 31, 2026, each tested on Linux, macOS and Windows, with a second run under the race detector on Linux. Eight of those 26 runs went red.&lt;/p&gt;&#xA;&lt;p&gt;So we fed that history to &lt;code&gt;jvq flaky&lt;/code&gt; 0.7.0, run by run, in the order it happened, with each run&amp;rsquo;s real commit. One history per platform and test step, as the reference asks. A test that fails on Windows and passes on Linux has a Windows problem, and mixing the two would hide it.&lt;/p&gt;</description>
    </item>
    <item>
      <title>How jvq Holds Up Beside a Noisy Neighbour, on a Drifting Machine and With Python Scripts</title>
      <link>https://jvq.net/how-jvq-holds-up-beside-a-noisy-neighbour-on-a-drifting-machine-and-with-python-scripts/</link>
      <pubDate>Mon, 19 Oct 2026 00:00:00 +0000</pubDate>
      <guid>https://jvq.net/how-jvq-holds-up-beside-a-noisy-neighbour-on-a-drifting-machine-and-with-python-scripts/</guid>
      <description>&lt;p&gt;The &lt;a href=&#34;https://jvq.net/how-jvq-was-tested-with-hundreds-of-runs-where-the-right-answer-was-known/&#34;&gt;first round of tests&lt;/a&gt; ran jvq hundreds of times on a Go benchmark whose cost we set by hand. That showed how often it raises a false alarm and how often it catches a real slowdown on an ordinary machine. CI machines aren&amp;rsquo;t always ordinary, though. Version 0.2 adds three harder settings, each with a known right answer, recorded on a shared two-core cloud VM and on a four-core GitHub-hosted runner.&lt;/p&gt;</description>
    </item>
    <item>
      <title>How jvq Was Tested With Hundreds of Runs Where the Right Answer Was Known</title>
      <link>https://jvq.net/how-jvq-was-tested-with-hundreds-of-runs-where-the-right-answer-was-known/</link>
      <pubDate>Sun, 18 Oct 2026 00:00:00 +0000</pubDate>
      <guid>https://jvq.net/how-jvq-was-tested-with-hundreds-of-runs-where-the-right-answer-was-known/</guid>
      <description>&lt;p&gt;A gate that blocks merges has two ways to fail. It can cry wolf, flagging changes that did nothing, until people stop trusting it. Or it can sleep through a real slowdown. The only way to know how often jvq does either is to run it many times on changes where you already know the answer, and count.&lt;/p&gt;&#xA;&lt;p&gt;So that&amp;rsquo;s what its test suite does. A fixture benchmark runs a CPU loop whose length is set by a constant. One commit uses the base length. The next adds a set amount of work, 2% more, 10% more, 50% more, or changes only a comment. Then the real jvq binary runs on that repository, start to finish, with its default settings: two git worktrees, a build for each side, a warm-up, 10 rounds taking turns, more rounds while undecided, and the 5% budget.&lt;/p&gt;</description>
    </item>
  </channel>
</rss>
