diff --git a/tests/system-ovn-kmod.at b/tests/system-ovn-kmod.at
index 981cc598c..e54b458fb 100644
--- a/tests/system-ovn-kmod.at
+++ b/tests/system-ovn-kmod.at
@@ -332,14 +332,14 @@ OVS_WAIT_UNTIL([ovs-ofctl -O OpenFlow13 dump-groups br-int | \
 grep 'nat(dst=192.168.2.2:80)'])
 
 dnl Should work with the virtual IP address through NAT
-for i in $(seq 1 15); do
-    echo Request $i
-    NS_CHECK_EXEC([alice1], [nc -z 172.16.1.100 8080])
-done
-
-dnl Each server should have at least one connection.
-AT_CHECK([ovs-appctl dpctl/dump-conntrack | FORMAT_CT(172.16.1.100) |
-sed -e 's/zone=[[0-9]]*/zone=<cleared>/'], [0], [dnl
+OVS_WAIT_FOR_OUTPUT([
+    for i in $(seq 1 5); do
+        NS_EXEC([alice1], [nc -z 172.16.1.100 8080])
+    done
+
+    dnl Each server should have at least one connection.
+    ovs-appctl dpctl/dump-conntrack | FORMAT_CT(172.16.1.100) | \
+      sed -e 's/zone=[[0-9]]*/zone=<cleared>/'], [0], [dnl
 tcp,orig=(src=172.16.1.2,dst=172.16.1.100,sport=<cleared>,dport=<cleared>),reply=(src=192.168.1.2,dst=172.16.1.2,sport=<cleared>,dport=<cleared>),zone=<cleared>,mark=2,protoinfo=(state=<cleared>)
 tcp,orig=(src=172.16.1.2,dst=172.16.1.100,sport=<cleared>,dport=<cleared>),reply=(src=192.168.2.2,dst=172.16.1.2,sport=<cleared>,dport=<cleared>),zone=<cleared>,mark=2,protoinfo=(state=<cleared>)
 ])
@@ -390,15 +390,15 @@ ovn-nbctl lr-lb-add R2 lb1-no-aff
 ovn-nbctl lr-lb-add R2 lb11-no-aff
 
 # check we use both backends
-for i in $(seq 1 15); do
-    echo Request $i
-    NS_CHECK_EXEC([alice1], [nc -z 172.16.1.101 8080])
-    ovs-ofctl del-flows br-int table=78
-done
-
-dnl Each server should have at least one connection.
-AT_CHECK([ovs-appctl dpctl/dump-conntrack | FORMAT_CT(172.16.1.101) |
-sed -e 's/zone=[[0-9]]*/zone=<cleared>/'], [0], [dnl
+OVS_WAIT_FOR_OUTPUT([
+    for i in $(seq 1 5); do
+        NS_EXEC([alice1], [nc -z 172.16.1.101 8080])
+        ovs-ofctl del-flows br-int table=78
+    done
+
+    dnl Each server should have at least one connection.
+    ovs-appctl dpctl/dump-conntrack | FORMAT_CT(172.16.1.101) | \
+      sed -e 's/zone=[[0-9]]*/zone=<cleared>/'], [0], [dnl
 tcp,orig=(src=172.16.1.2,dst=172.16.1.101,sport=<cleared>,dport=<cleared>),reply=(src=192.168.1.2,dst=172.16.1.2,sport=<cleared>,dport=<cleared>),zone=<cleared>,mark=2,protoinfo=(state=<cleared>)
 tcp,orig=(src=172.16.1.2,dst=172.16.1.101,sport=<cleared>,dport=<cleared>),reply=(src=192.168.2.2,dst=172.16.1.2,sport=<cleared>,dport=<cleared>),zone=<cleared>,mark=2,protoinfo=(state=<cleared>)
 ])
@@ -447,15 +447,15 @@ ovn-nbctl ls-lb-add foo lb30-no-aff
 # Flush conntrack entries for easier output parsing of next test.
 AT_CHECK([ovs-appctl dpctl/flush-conntrack])
 
-for i in $(seq 1 15); do
-    echo Request $i
-    NS_CHECK_EXEC([foo1], [nc -z 192.168.2.101 8080])
-    ovs-ofctl del-flows br-int table=78
-done
+OVS_WAIT_FOR_OUTPUT([
+    for i in $(seq 1 5); do
+        NS_EXEC([foo1], [nc -z 192.168.2.101 8080])
+        ovs-ofctl del-flows br-int table=78
+    done
 
-dnl Each server should have at least one connection.
-AT_CHECK([ovs-appctl dpctl/dump-conntrack | FORMAT_CT(192.168.2.101) |
-sed -e 's/zone=[[0-9]]*/zone=<cleared>/'], [0], [dnl
+    dnl Each server should have at least one connection.
+    ovs-appctl dpctl/dump-conntrack | FORMAT_CT(192.168.2.101) | \
+      sed -e 's/zone=[[0-9]]*/zone=<cleared>/'], [0], [dnl
 tcp,orig=(src=192.168.1.2,dst=192.168.2.101,sport=<cleared>,dport=<cleared>),reply=(src=192.168.2.2,dst=192.168.1.2,sport=<cleared>,dport=<cleared>),zone=<cleared>,mark=2,protoinfo=(state=<cleared>)
 tcp,orig=(src=192.168.1.2,dst=192.168.2.101,sport=<cleared>,dport=<cleared>),reply=(src=192.168.2.3,dst=192.168.1.2,sport=<cleared>,dport=<cleared>),zone=<cleared>,mark=2,protoinfo=(state=<cleared>)
 ])
@@ -631,14 +631,14 @@ NETNS_DAEMONIZE([foo1], [nc -l -k fd11::2 80], [nc-foo1.pid])
 NETNS_DAEMONIZE([bar1], [nc -l -k fd12::2 80], [nc-bar1.pid])
 
 dnl Should work with the virtual IP address through NAT
-for i in $(seq 1 15); do
-    echo Request $i
-    NS_CHECK_EXEC([alice1], [nc -z fd30::1 8080])
-done
-
-dnl Each server should have at least one connection.
-AT_CHECK([ovs-appctl dpctl/dump-conntrack | FORMAT_CT(fd30::1) | grep -v fe80 |
-sed -e 's/zone=[[0-9]]*/zone=<cleared>/'], [0], [dnl
+OVS_WAIT_FOR_OUTPUT([
+    for i in $(seq 1 5); do
+        NS_EXEC([alice1], [nc -z fd30::1 8080])
+    done
+
+    dnl Each server should have at least one connection.
+    ovs-appctl dpctl/dump-conntrack | FORMAT_CT(fd30::1) | grep -v fe80 | \
+      sed -e 's/zone=[[0-9]]*/zone=<cleared>/'], [0], [dnl
 tcp,orig=(src=fd72::2,dst=fd30::1,sport=<cleared>,dport=<cleared>),reply=(src=fd11::2,dst=fd72::2,sport=<cleared>,dport=<cleared>),zone=<cleared>,mark=2,protoinfo=(state=<cleared>)
 tcp,orig=(src=fd72::2,dst=fd30::1,sport=<cleared>,dport=<cleared>),reply=(src=fd12::2,dst=fd72::2,sport=<cleared>,dport=<cleared>),zone=<cleared>,mark=2,protoinfo=(state=<cleared>)
 ])
@@ -690,15 +690,15 @@ ovn-nbctl lr-lb-add R2 lb1-no-aff
 ovn-nbctl lr-lb-add R2 lb11-no-aff
 
 # check we use both backends
-for i in $(seq 1 15); do
-    echo Request $i
-    NS_CHECK_EXEC([alice1], [nc -z fd30::2 8080])
-    ovs-ofctl del-flows br-int table=78
-done
-
-dnl Each server should have at least one connection.
-AT_CHECK([ovs-appctl dpctl/dump-conntrack | FORMAT_CT(fd30::2) | grep -v fe80 |
-sed -e 's/zone=[[0-9]]*/zone=<cleared>/'], [0], [dnl
+OVS_WAIT_FOR_OUTPUT([
+    for i in $(seq 1 5); do
+        NS_EXEC([alice1], [nc -z fd30::2 8080])
+        ovs-ofctl del-flows br-int table=78
+    done
+
+    dnl Each server should have at least one connection.
+    ovs-appctl dpctl/dump-conntrack | FORMAT_CT(fd30::2) | grep -v fe80 | \
+      sed -e 's/zone=[[0-9]]*/zone=<cleared>/'], [0], [dnl
 tcp,orig=(src=fd72::2,dst=fd30::2,sport=<cleared>,dport=<cleared>),reply=(src=fd11::2,dst=fd72::2,sport=<cleared>,dport=<cleared>),zone=<cleared>,mark=2,protoinfo=(state=<cleared>)
 tcp,orig=(src=fd72::2,dst=fd30::2,sport=<cleared>,dport=<cleared>),reply=(src=fd12::2,dst=fd72::2,sport=<cleared>,dport=<cleared>),zone=<cleared>,mark=2,protoinfo=(state=<cleared>)
 ])
@@ -745,14 +745,14 @@ ovn-nbctl ls-lb-add foo lb30
 ovn-nbctl ls-lb-add foo lb3-no-aff
 ovn-nbctl ls-lb-add foo lb30-no-aff
 
-for i in $(seq 1 15); do
-    echo Request $i
-    NS_CHECK_EXEC([foo1], [nc -z fd12::b 8080])
-    ovs-ofctl del-flows br-int table=78
-done
+OVS_WAIT_FOR_OUTPUT([
+    for i in $(seq 1 5); do
+        NS_EXEC([foo1], [nc -z fd12::b 8080])
+        ovs-ofctl del-flows br-int table=78
+    done
 
-AT_CHECK([ovs-appctl dpctl/dump-conntrack | FORMAT_CT(fd12::b) | grep -v fe80 |
-sed -e 's/zone=[[0-9]]*/zone=<cleared>/'], [0], [dnl
+    ovs-appctl dpctl/dump-conntrack | FORMAT_CT(fd12::b) | grep -v fe80 | \
+      sed -e 's/zone=[[0-9]]*/zone=<cleared>/'], [0], [dnl
 tcp,orig=(src=fd11::2,dst=fd12::b,sport=<cleared>,dport=<cleared>),reply=(src=fd12::2,dst=fd11::2,sport=<cleared>,dport=<cleared>),zone=<cleared>,mark=2,protoinfo=(state=<cleared>)
 tcp,orig=(src=fd11::2,dst=fd12::b,sport=<cleared>,dport=<cleared>),reply=(src=fd12::3,dst=fd11::2,sport=<cleared>,dport=<cleared>),zone=<cleared>,mark=2,protoinfo=(state=<cleared>)
 ])
@@ -777,14 +777,14 @@ ovn-nbctl lr-lb-add R1 lb40-no-aff
 # Flush conntrack entries for easier output parsing of next test.
 AT_CHECK([ovs-appctl dpctl/flush-conntrack])
 
-for i in $(seq 1 15); do
-    echo Request $i
-    NS_CHECK_EXEC([foo1], [nc -z fd11::a 8080])
-done
+OVS_WAIT_FOR_OUTPUT([
+    for i in $(seq 1 5); do
+        NS_EXEC([foo1], [nc -z fd11::a 8080])
+    done
 
-dnl Each server should have at least one connection.
-AT_CHECK([ovs-appctl dpctl/dump-conntrack | FORMAT_CT(fd11::2) | grep -v fe80 |
-sed -e 's/zone=[[0-9]]*/zone=<cleared>/'], [0], [dnl
+    dnl Each server should have at least one connection.
+    ovs-appctl dpctl/dump-conntrack | FORMAT_CT(fd11::2) | grep -v fe80 | \
+      sed -e 's/zone=[[0-9]]*/zone=<cleared>/'], [0], [dnl
 tcp,orig=(src=fd11::2,dst=fd11::2,sport=<cleared>,dport=<cleared>),reply=(src=fd11::2,dst=fd11::b,sport=<cleared>,dport=<cleared>),zone=<cleared>,protoinfo=(state=<cleared>)
 tcp,orig=(src=fd11::2,dst=fd11::a,sport=<cleared>,dport=<cleared>),reply=(src=fd11::2,dst=fd11::2,sport=<cleared>,dport=<cleared>),zone=<cleared>,mark=2,protoinfo=(state=<cleared>)
 tcp,orig=(src=fd11::b,dst=fd11::2,sport=<cleared>,dport=<cleared>),reply=(src=fd11::2,dst=fd11::b,sport=<cleared>,dport=<cleared>),zone=<cleared>,protoinfo=(state=<cleared>)
