diff --git a/dubbo-samples-cache/case-versions.conf b/dubbo-samples-cache/case-versions.conf
index 581882b..0e26c8b 100644
--- a/dubbo-samples-cache/case-versions.conf
+++ b/dubbo-samples-cache/case-versions.conf
@@ -20,5 +20,5 @@
 # Supported component versions of the test case
 
 # Spring app
-dubbo.version=2.7*
+dubbo.version=2.7*, 3.*
 spring.version=4.*, 5.*
diff --git a/dubbo-samples-configcenter/dubbo-samples-configcenter-xml/case-versions.conf b/dubbo-samples-configcenter/dubbo-samples-configcenter-xml/case-versions.conf
index 581882b..0e26c8b 100644
--- a/dubbo-samples-configcenter/dubbo-samples-configcenter-xml/case-versions.conf
+++ b/dubbo-samples-configcenter/dubbo-samples-configcenter-xml/case-versions.conf
@@ -20,5 +20,5 @@
 # Supported component versions of the test case
 
 # Spring app
-dubbo.version=2.7*
+dubbo.version=2.7*, 3.*
 spring.version=4.*, 5.*
diff --git a/dubbo-samples-generic/dubbo-samples-generic-impl/case-versions.conf b/dubbo-samples-generic/dubbo-samples-generic-impl/case-versions.conf
index 581882b..0e26c8b 100644
--- a/dubbo-samples-generic/dubbo-samples-generic-impl/case-versions.conf
+++ b/dubbo-samples-generic/dubbo-samples-generic-impl/case-versions.conf
@@ -20,5 +20,5 @@
 # Supported component versions of the test case
 
 # Spring app
-dubbo.version=2.7*
+dubbo.version=2.7*, 3.*
 spring.version=4.*, 5.*
diff --git a/dubbo-samples-governance/dubbo-samples-applevel-override/case-versions.conf b/dubbo-samples-governance/dubbo-samples-applevel-override/case-versions.conf
index 581882b..0e26c8b 100644
--- a/dubbo-samples-governance/dubbo-samples-applevel-override/case-versions.conf
+++ b/dubbo-samples-governance/dubbo-samples-applevel-override/case-versions.conf
@@ -20,5 +20,5 @@
 # Supported component versions of the test case
 
 # Spring app
-dubbo.version=2.7*
+dubbo.version=2.7*, 3.*
 spring.version=4.*, 5.*
diff --git a/dubbo-samples-governance/dubbo-samples-applevel-override/src/test/java/org/apache/dubbo/samples/governance/DemoServiceIT.java b/dubbo-samples-governance/dubbo-samples-applevel-override/src/test/java/org/apache/dubbo/samples/governance/DemoServiceIT.java
index 5af6618..e7c0549 100644
--- a/dubbo-samples-governance/dubbo-samples-applevel-override/src/test/java/org/apache/dubbo/samples/governance/DemoServiceIT.java
+++ b/dubbo-samples-governance/dubbo-samples-applevel-override/src/test/java/org/apache/dubbo/samples/governance/DemoServiceIT.java
@@ -17,6 +17,9 @@
 
 package org.apache.dubbo.samples.governance;
 
+import org.apache.dubbo.config.ReferenceConfig;
+import org.apache.dubbo.registry.support.AbstractRegistryFactory;
+import org.apache.dubbo.rpc.model.ApplicationModel;
 import org.apache.dubbo.samples.governance.api.DemoService;
 
 import org.junit.Assert;
@@ -41,7 +44,7 @@
     @Test
     public void test20880() throws Exception {
         ZKTools.generateAppLevelOverride(100, 0);
-        Thread.sleep(5000);
+        Thread.sleep(10000);
         for (int i = 0; i < 10; i++) {
             String result = demoService.sayHello("world");
             System.out.println(result);
@@ -52,7 +55,7 @@
     @Test
     public void test20881() throws Exception {
         ZKTools.generateAppLevelOverride(0, 100);
-        Thread.sleep(5000);
+        Thread.sleep(10000);
         for (int i = 0; i < 10; i++) {
             String result = demoService.sayHello("world");
             System.out.println(result);
diff --git a/dubbo-samples-merge/case-versions.conf b/dubbo-samples-merge/case-versions.conf
index 581882b..0e26c8b 100644
--- a/dubbo-samples-merge/case-versions.conf
+++ b/dubbo-samples-merge/case-versions.conf
@@ -20,5 +20,5 @@
 # Supported component versions of the test case
 
 # Spring app
-dubbo.version=2.7*
+dubbo.version=2.7*, 3.*
 spring.version=4.*, 5.*
diff --git a/dubbo-samples-monitor/case-versions.conf b/dubbo-samples-monitor/case-versions.conf
index 581882b..6eb2dd0 100644
--- a/dubbo-samples-monitor/case-versions.conf
+++ b/dubbo-samples-monitor/case-versions.conf
@@ -20,5 +20,5 @@
 # Supported component versions of the test case
 
 # Spring app
-dubbo.version=2.7*
+dubbo.version=2.7*,3.*
 spring.version=4.*, 5.*
diff --git a/dubbo-samples-monitor/src/test/java/org/apache/dubbo/samples/monitor/MonitorServiceIT.java b/dubbo-samples-monitor/src/test/java/org/apache/dubbo/samples/monitor/MonitorServiceIT.java
index de1c3a4..db6f1cd 100644
--- a/dubbo-samples-monitor/src/test/java/org/apache/dubbo/samples/monitor/MonitorServiceIT.java
+++ b/dubbo-samples-monitor/src/test/java/org/apache/dubbo/samples/monitor/MonitorServiceIT.java
@@ -19,16 +19,12 @@
 
 import org.apache.dubbo.common.URL;
 import org.apache.dubbo.config.ApplicationConfig;
-import org.apache.dubbo.config.MonitorConfig;
 import org.apache.dubbo.config.ReferenceConfig;
 import org.apache.dubbo.config.RegistryConfig;
-import org.apache.dubbo.config.ServiceConfig;
 import org.apache.dubbo.monitor.MonitorService;
 import org.apache.dubbo.samples.monitor.api.DemoService;
 
 import org.junit.Assert;
-import org.junit.Before;
-import org.junit.BeforeClass;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -48,25 +44,35 @@
 
     @Test
     public void test() throws Exception {
-        for (int i = 0; i < 5; i++) {
-            demoService.sayHello("world");
-            Thread.sleep(500);
-        }
-
-        //wait for monitor data post
-        Thread.sleep(1000);
-
         ReferenceConfig<MonitorService> reference = new ReferenceConfig<>();
         reference.setApplication(new ApplicationConfig("demo-monitor"));
         reference.setRegistry(new RegistryConfig("zookeeper://" + zookeeperHost + ":2181"));
         reference.setInterface(MonitorService.class);
         reference.setFilter("-monitor");
         MonitorService service = reference.get();
+
+        for (int i = 0; i < 10; i++) {
+            for (int j = 0; j < 5; j++) {
+                demoService.sayHello("world");
+                Thread.sleep(500);
+            }
+
+            //wait for monitor data post
+            Thread.sleep(1000);
+
+            if (check(service)) {
+                return;
+            }
+        }
+        Assert.fail();
+    }
+
+    private boolean check(MonitorService service) {
         List<URL> stats = service.lookup(null);
 
         boolean countProvider = false;
         boolean countConsumer = false;
-        System.out.println("monitor stats: "+stats.size());
+        System.out.println("monitor stats: " + stats.size());
         for (URL stat : stats) {
             Assert.assertEquals("count", stat.getProtocol());
             Assert.assertEquals("org.apache.dubbo.samples.monitor.api.DemoService/sayHello", stat.getPath());
@@ -78,6 +84,6 @@
             }
             System.out.println(stat);
         }
-        Assert.assertTrue(countConsumer && countProvider);
+        return countConsumer && countProvider;
     }
 }
diff --git a/dubbo-samples-validation/case-versions.conf b/dubbo-samples-validation/case-versions.conf
index 581882b..0e26c8b 100644
--- a/dubbo-samples-validation/case-versions.conf
+++ b/dubbo-samples-validation/case-versions.conf
@@ -20,5 +20,5 @@
 # Supported component versions of the test case
 
 # Spring app
-dubbo.version=2.7*
+dubbo.version=2.7*, 3.*
 spring.version=4.*, 5.*
