You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@skywalking.apache.org by wu...@apache.org on 2023/02/13 10:54:48 UTC

[skywalking] branch master updated: Migrate tests from junit 4 to junit 5 (#10382)

This is an automated email from the ASF dual-hosted git repository.

wusheng pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/skywalking.git


The following commit(s) were added to refs/heads/master by this push:
     new 383a5bbf7b Migrate tests from junit 4 to junit 5 (#10382)
383a5bbf7b is described below

commit 383a5bbf7b34ab66657be9848a5b8acdfb5aa99b
Author: kezhenxu94 <ke...@apache.org>
AuthorDate: Mon Feb 13 18:54:32 2023 +0800

    Migrate tests from junit 4 to junit 5 (#10382)
---
 .github/workflows/skywalking.yaml                  |   4 +-
 .licenserc.yaml                                    |   4 +
 .../network/trace/proto/GRPCNoServerTest.java      |   5 +-
 dist-material/release-docs/LICENSE                 |  45 +----
 docs/en/changes/changes.md                         |   1 +
 oap-server-bom/pom.xml                             |  14 +-
 .../provider/meter/process/MeterProcessorTest.java |  22 +--
 .../trace/TraceSamplingPolicyWatcherTest.java      | 115 +++++------
 .../trace/UninstrumentedGatewaysConfigTest.java    |   6 +-
 .../strategy/SegmentStatusAnalyzerTest.java        |  34 ++--
 .../vservice/VirtualCacheProcessorTest.java        |  82 ++++----
 .../vservice/VirtualDatabaseProcessorTest.java     |  42 ++--
 .../sampling/SamplingPolicySettingsReaderTest.java |  19 +-
 .../oap/log/analyzer/dsl/DSLSecurityTest.java      |  45 ++---
 .../skywalking/oap/log/analyzer/dsl/DSLTest.java   |  29 ++-
 .../org.mockito.plugins.MockMaker                  |   1 +
 .../oap/meter/analyzer/MetricConvertTest.java      |  77 ++++----
 .../oap/meter/analyzer/dsl/AggregationTest.java    |  39 ++--
 .../oap/meter/analyzer/dsl/AnalyzerTest.java       |  79 ++++----
 .../oap/meter/analyzer/dsl/ArithmeticTest.java     |  39 ++--
 .../oap/meter/analyzer/dsl/BasicTest.java          |  41 ++--
 .../meter/analyzer/dsl/ExpressionParsingTest.java  |  35 ++--
 .../oap/meter/analyzer/dsl/FilterTest.java         |  41 ++--
 .../oap/meter/analyzer/dsl/FunctionTest.java       |  39 ++--
 .../oap/meter/analyzer/dsl/IncreaseTest.java       |  39 ++--
 .../oap/meter/analyzer/dsl/K8sTagTest.java         |  90 ++++-----
 .../oap/meter/analyzer/dsl/ScopeTest.java          |  60 +++---
 .../oap/meter/analyzer/dsl/TagFilterTest.java      |  39 ++--
 .../oap/meter/analyzer/dsl/ValueFilterTest.java    |  44 ++---
 .../analyzer/dsl/counter/CounterWindowTest.java    |  13 +-
 .../analyzer/dsl/rule/RuleLoaderFailTest.java      |  21 +-
 .../meter/analyzer/dsl/rule/RuleLoaderTest.java    |  24 +--
 .../analyzer/dsl/rule/RuleLoaderYAMLFailTest.java  |  25 +--
 .../org.mockito.plugins.MockMaker                  |   1 +
 .../provider/grpc/GRPCExporterProviderTest.java    |  23 +--
 .../exporter/provider/grpc/GRPCExporterTest.java   |  65 ++++--
 oap-server/microbench/pom.xml                      |   5 +-
 .../microbench/base/AbstractMicrobenchmark.java    |   2 +-
 .../common/AtomicRangeIntegerBenchmark.java        |  18 +-
 .../library/util/StringFormatGroupBenchmark.java   |  15 +-
 .../skywalking/oal/rt/parser/DeepAnalysisTest.java |  61 +++---
 .../skywalking/oal/rt/parser/ScriptParserTest.java | 207 +++++++++----------
 oap-server/pom.xml                                 |   6 +
 oap-server/server-alarm-plugin/pom.xml             |   2 +-
 .../server/core/alarm/provider/AlarmCoreTest.java  |  33 ++--
 .../alarm/provider/AlarmMessageFormatterTest.java  |   8 +-
 .../alarm/provider/AlarmModuleProviderTest.java    |  14 +-
 .../core/alarm/provider/AlarmRulesWatcherTest.java |  42 ++--
 .../alarm/provider/CompositeRuleEvaluatorTest.java |  75 ++++---
 .../core/alarm/provider/EventHookCallbackTest.java |   4 +-
 .../core/alarm/provider/NotifyHandlerTest.java     | 106 ++++------
 .../oap/server/core/alarm/provider/OPTest.java     |   6 +-
 .../core/alarm/provider/RulesReaderTest.java       |  76 ++++---
 .../core/alarm/provider/RunningRuleTest.java       |  73 +++----
 .../server/core/alarm/provider/ThresholdTest.java  |   8 +-
 .../core/alarm/provider/WebhookCallbackTest.java   |  25 +--
 .../dingtalk/DingtalkHookCallbackTest.java         |  45 ++---
 .../provider/expression/ExpressionContextTest.java |  11 +-
 .../alarm/provider/expression/ExpressionTest.java  |  34 ++--
 .../provider/feishu/FeishuHookCallbackTest.java    |  51 ++---
 .../alarm/provider/grpc/GRPChookCallbackTest.java  |   6 +-
 .../pagerduty/PagerDutyHookCallbackTest.java       |   8 +-
 .../provider/wechat/WechatHookCallbackTest.java    |  35 ++--
 .../provider/welink/WeLinkHookCallbackTest.java    |  43 ++--
 .../consul/ClusterModuleConsulProviderTest.java    |  92 ++++-----
 .../plugin/consul/ConsulCoordinatorTest.java       |  21 +-
 ...TClusterModuleConsulProviderFunctionalTest.java |  40 ++--
 .../plugin/etcd/ITClusterEtcdPluginTest.java       |  26 +--
 .../ITClusterModuleEtcdProviderFunctionalTest.java |  32 +--
 .../cluster-kubernetes-plugin/pom.xml              |  12 +-
 .../ClusterModuleKubernetesProviderTest.java       |  25 +--
 .../kubernetes/KubernetesCoordinatorTest.java      | 195 ++++++++++--------
 ...ITClusterModuleNacosProviderFunctionalTest.java |  40 ++--
 .../cluster/plugin/nacos/NacosCoordinatorTest.java |  19 +-
 .../plugin/standalone/StandaloneManagerTest.java   |   8 +-
 ...usterModuleZookeeperProviderFunctionalTest.java |  36 ++--
 .../plugin/zookeeper/NodeNameBuilderTest.java      |   6 +-
 .../plugin/zookeeper/ZookeeperCoordinatorTest.java |  12 +-
 .../configuration/api/ConfigWatcherRegister.java   |  11 +-
 .../api/ConfigWatcherRegisterTest.java             |  32 +--
 .../apollo/ITApolloConfigurationTest.java          |  47 +++--
 .../consul/ConsulConfigurationProviderTest.java    |  18 +-
 .../ConsulConfigurationWatcherRegisterTest.java    | 127 ++++++------
 .../consul/ITConsulConfigurationTest.java          |  41 ++--
 .../org.mockito.plugins.MockMaker                  |   1 +
 .../etcd/ITEtcdConfigurationTest.java              |  45 +++--
 .../ConfigmapConfigWatcherRegisterTest.java        |  93 +++++----
 .../configuration-nacos/pom.xml                    |  10 +
 .../nacos/ITNacosConfigurationTest.java            |  43 ++--
 .../nacos/NacosConfigWatcherRegisterTest.java      |   9 +-
 .../zookeeper/it/ITZookeeperConfigurationTest.java |  41 ++--
 .../ut/ZookeeperConfigWatcherRegisterTestCase.java |   4 +-
 .../configuration/grpc/GRPCConfigurationTest.java  |  85 +++++---
 oap-server/server-configuration/pom.xml            |   8 +
 .../oap/server/core/CoreModuleConfigTest.java      |  17 +-
 .../skywalking/oap/server/core/CoreModuleTest.java |   6 +-
 .../skywalking/oap/server/core/WorkPathTest.java   |   6 +-
 .../core/analysis/ApdexThresholdConfigTest.java    |  34 ++--
 .../oap/server/core/analysis/IDManagerTest.java    |   8 +-
 .../oap/server/core/analysis/TimeBucketTest.java   |  22 +--
 .../analysis/data/LimitedSizeBufferedDataTest.java |   9 +-
 .../manual/endpoint/EndpointTrafficTest.java       |   8 +-
 .../endpoint/EndpointCallRelationTest.java         |   8 +-
 .../instance/ServiceInstanceRelationTest.java      |  12 +-
 .../relation/service/ServiceRelationTest.java      |  12 +-
 .../core/analysis/manual/searchtag/TagTest.java    |  10 +-
 .../manual/service/ServiceTrafficTest.java         |  11 +-
 .../core/analysis/meter/MeterSystemTest.java       |  22 +--
 .../meter/function/HistogramFunctionTest.java      |  82 ++++----
 .../meter/function/PercentileFunctionTest.java     | 103 +++++-----
 .../function/avg/AvgHistogramFunctionTest.java     |  35 ++--
 .../avg/AvgHistogramPercentileFunctionTest.java    |  19 +-
 .../meter/function/avg/AvgLabeledFunctionTest.java |  44 ++---
 .../meter/function/latest/LatestFunctionTest.java  |  34 ++--
 .../sum/SumHistogramPercentileFunctionTest.java    |  18 +-
 .../function/sumpermin/SumPerMinFunctionTest.java  |  39 ++--
 .../sumpermin/SumPerMinLabeledFunctionTest.java    |  39 ++--
 .../core/analysis/metrics/ApdexMetricsTest.java    |  27 ++-
 .../core/analysis/metrics/CountMetricsTest.java    |   8 +-
 .../core/analysis/metrics/DataTableTestCase.java   |  23 +--
 .../core/analysis/metrics/HeatMapMetricsTest.java  |  24 +--
 .../core/analysis/metrics/LongAvgMetricsTest.java  |   8 +-
 .../core/analysis/metrics/MaxLongMetricsTest.java  |   8 +-
 .../server/core/analysis/metrics/MetricsTest.java  |  16 +-
 .../core/analysis/metrics/MinLongMetricsTest.java  |  10 +-
 .../core/analysis/metrics/PercentMetricsTest.java  |  10 +-
 .../analysis/metrics/PercentileMetricsTest.java    |  12 +-
 .../metrics/expression/ContainMatchTest.java       |  15 +-
 .../analysis/metrics/expression/InMatchTest.java   |  20 +-
 .../analysis/metrics/expression/LikeMatchTest.java |   6 +-
 .../metrics/expression/NotContainMatchTest.java    |  15 +-
 .../metrics/expression/NumberMatchTest.java        |   8 +-
 .../metrics/expression/StringMatchTest.java        |   8 +-
 .../server/core/cluster/OAPNodeCheckerTest.java    |  28 +--
 .../config/ComponentLibraryCatalogFileTest.java    |  28 +--
 .../group/EndpointGroupingRuleReaderTest.java      |  12 +-
 .../group/EndpointNameGroupingRuleWatcherTest.java |  13 +-
 .../EndpointGroupingRuleReader4OpenapiTest.java    |  43 ++--
 ...ndpointNameGroupingRule4OpenapiWatcherTest.java |  17 +-
 .../management/ui/template/UITemplateTest.java     |   8 +-
 .../ebpf/analyze/EBPFProfilingAnalyzeContext.java  |  16 +-
 .../ebpf/analyze/EBPFProfilingAnalyzerTest.java    |   4 +-
 .../trace/analyze/ProfileAnalyzerTest.java         |   2 +-
 .../trace/analyze/ProfileStackAnalyze.java         |   4 +-
 .../trace/analyze/ProfileStackElementMatcher.java  |  15 +-
 .../oap/server/core/query/DurationTest.java        |  45 ++---
 .../oap/server/core/remote/HTTPServerTest.java     |  29 +--
 .../core/remote/RemoteServiceHandlerTestCase.java  |  82 +++++---
 .../remote/client/GRPCRemoteClientRealClient.java  |   7 +-
 .../remote/client/GRPCRemoteClientTestCase.java    |  69 +++++--
 .../remote/client/RemoteClientManagerTestCase.java |  69 +++----
 .../server/core/storage/PersistenceTimerTest.java  |  19 +-
 .../oap/server/core/storage/StorageIDTest.java     |   8 +-
 .../server/core/storage/model/ModelColumnTest.java |  66 ++++---
 .../storage/model/SQLDatabaseExtensionTest.java    |  20 +-
 .../core/storage/model/StorageModelsTest.java      |  58 +++---
 .../core/storage/query/MetricsQueryUtilTest.java   |  47 ++---
 .../org.mockito.plugins.MockMaker                  |   1 +
 .../provider/handler/AbstractKafkaHandlerTest.java |   4 +-
 .../provider/handler/JVMMetricsHandlerTest.java    |  43 ++--
 .../kafka/provider/handler/LogHandlerTest.java     |  14 +-
 .../handler/ServiceManagementHandlerTest.java      |  27 +--
 .../kafka/provider/handler/SourceReceiverRule.java |  13 +-
 .../elasticsearch/bulk/ITElasticSearch.java        | 219 ++++++++++++++-------
 .../library-datacarrier-queue/pom.xml              |   8 +
 .../library/datacarrier/DataCarrierTest.java       |  84 ++++----
 .../server/library/datacarrier/EnvUtilTest.java    |  36 ++--
 .../datacarrier/consumer/ConsumeDriverTest.java    |  26 ++-
 .../consumer/ConsumerPoolFactoryTest.java          |  14 +-
 .../library/datacarrier/consumer/ConsumerTest.java |  40 ++--
 .../partition/ProducerThreadPartitionerTest.java   |  11 +-
 .../partition/SimpleRollingPartitionerTest.java    |  11 +-
 .../library-elasticsearch-client/pom.xml           |   5 +
 .../library/elasticsearch/TCITElasticSearch.java   | 138 ++++++++-----
 .../requests/search/SearchBuilderTest.java         |  29 +--
 .../module/ApplicationConfigurationTest.java       |  13 +-
 .../server/library/module/ModuleManagerTest.java   |  54 ++---
 oap-server/server-library/library-util/pom.xml     |  12 +-
 .../oap/server/library/util/BooleanUtilsTest.java  |  15 +-
 .../server/library/util/CollectionUtilsTest.java   |   9 +-
 .../server/library/util/ConnectUtilTestCase.java   |  71 +++----
 .../util/MultipleFilesChangeMonitorTest.java       |  54 +++--
 .../util/PropertyPlaceholderHelperTest.java        |  51 +++--
 .../oap/server/library/util/ResourceUtilsTest.java |  23 ++-
 .../util/RunnableWithExceptionProtectionTest.java  |  20 +-
 .../oap/server/library/util/StringUtilTest.java    |  50 ++---
 .../util/prometheus/parser/TextParserTest.java     |  28 +--
 .../org.mockito.plugins.MockMaker                  |   1 +
 .../query/graphql/resolver/LogTestQueryTest.java   |  22 ++-
 .../aws/firehose/OtelMetricsConvertorTest.java     |  17 +-
 .../discovery/AgentConfigurationsReaderTest.java   |  26 +--
 .../discovery/AgentConfigurationsWatcherTest.java  |  47 ++---
 .../envoy/ClusterManagerMetricsAdapterTest.java    |  42 ++--
 .../als/k8s/K8SALSServiceMeshHTTPAnalysisTest.java |  50 ++---
 .../envoy/als/k8s/ServiceNameFormatterTest.java    |  20 +-
 .../receiver/envoy/als/mx/FieldsHelperTest.java    |  31 +--
 .../meter/module/MeterReceiverModuleTest.java      |   8 +-
 .../receiver/telegraf/TelegrafMetricsTest.java     | 113 +++++------
 ...ointDepFromCrossThreadAnalysisListenerTest.java |  48 ++---
 .../parser/listener/RPCAnalysisListenerTest.java   | 144 +++++++-------
 .../listener/segment/ProtoBufJsonUtilsTest.java    |  12 +-
 .../receiver/zabbix/provider/ZabbixBaseTest.java   |  64 +++---
 .../zabbix/provider/ZabbixMetricsTest.java         |  45 +++--
 .../protocol/ZabbixProtocolHandlerTest.java        |  19 +-
 .../oap/server/starter/UITemplateCheckerTest.java  |  16 +-
 .../config/ApplicationConfigLoaderTestCase.java    |  18 +-
 .../storage/plugin/banyandb/util/ByteUtilTest.java |  16 +-
 .../elasticsearch/base/AnalyzerSettingTest.java    |  17 +-
 .../ElasticSearchColumnTypeMappingTestCase.java    |  29 +--
 .../elasticsearch/base/IndexStructuresTest.java    |  49 ++---
 .../elasticsearch/base/MockEsInstallTest.java      |  93 ++++-----
 .../elasticsearch/base/TimeSeriesUtilsTest.java    |  42 ++--
 .../base/TimeSeriesUtilsTestCase.java              |  18 +-
 .../PreventRedistributionMySQLDriverTest.java      |   8 +-
 .../jdbc/shardingsphere/DurationWithinTTLTest.java |  54 ++---
 .../jdbc/shardingsphere/ShardingRulesTest.java     |  17 +-
 .../jdbc/shardingsphere/TCITShardingSphere.java    | 139 ++++++-------
 .../src/main/java/org/junit/rules/TestRule.java}   |  12 +-
 .../java/org/junit/runners/model/Statement.java}   |  12 +-
 .../testing/module/ModuleManagerTestCase.java      |   9 +-
 .../skywalking/generator/IntGeneratorTest.java     |   4 +-
 .../generator/SequenceGeneratorTest.java           |   6 +-
 .../exporter/test/ProfileSnapshotExporterTest.java |  39 ++--
 pom.xml                                            |  70 ++++---
 224 files changed, 3832 insertions(+), 3693 deletions(-)

diff --git a/.github/workflows/skywalking.yaml b/.github/workflows/skywalking.yaml
index e0828e91c9..b84cb4e8e4 100644
--- a/.github/workflows/skywalking.yaml
+++ b/.github/workflows/skywalking.yaml
@@ -41,7 +41,7 @@ jobs:
         with:
           submodules: true
       - name: Check license header
-        uses: apache/skywalking-eyes@442d4621d10ae9e92a859d873e6e63664622a50d
+        uses: apache/skywalking-eyes@bd8d2db65f2fea938b74401ae72b0365733bdfdc
 
   code-style:
     if: (github.event_name == 'schedule' && github.repository == 'apache/skywalking') || (github.event_name != 'schedule')
@@ -78,7 +78,7 @@ jobs:
           go-version: "1.16"
       - name: Check Dependencies Licenses
         run: |
-          go install github.com/apache/skywalking-eyes/cmd/license-eye@442d462
+          go install github.com/apache/skywalking-eyes/cmd/license-eye@bd8d2db65f2fea938b74401ae72b0365733bdfdc
           license-eye dependency resolve --summary ./dist-material/release-docs/LICENSE.tpl || exit 1
           if [ ! -z "$(git diff -U0 ./dist-material/release-docs/LICENSE)" ]; then
             echo "LICENSE file is not updated correctly"
diff --git a/.licenserc.yaml b/.licenserc.yaml
index ec5b7f5184..128748ef9c 100644
--- a/.licenserc.yaml
+++ b/.licenserc.yaml
@@ -42,6 +42,7 @@ header:
     - '**/*.ini'
     - '**/*.crt'
     - '**/*.pem'
+    - '**/*.txt'
     - 'LICENSE'
     - 'NOTICE'
     - 'skywalking-ui/dist'
@@ -65,6 +66,7 @@ header:
     - '**/src/main/proto/opencensus/**'
     - '**/src/main/proto/opentelemetry/**'
     - 'oap-server/server-starter/src/main/resources/version.properties'
+    - '**/mockito-extensions/**'
 
   comment: on-failure
 
@@ -76,6 +78,8 @@ dependency:
     - name: org.openjdk.jmh:jmh-core # We don't distribute the dependencies, they are just for the build process
       recursive: true
     - name: org.apache.skywalking:* # Exclude self dependencies
+    - name: org.apache.skywalking:microbench
+      recursive: true
   licenses:
     - name: org.slf4j:slf4j-api
       version: 1.7.30,1.7.32
diff --git a/apm-protocol/apm-network/src/test/java/org/apache/skywalking/oap/server/network/trace/proto/GRPCNoServerTest.java b/apm-protocol/apm-network/src/test/java/org/apache/skywalking/oap/server/network/trace/proto/GRPCNoServerTest.java
index 0ac076a2a2..5ec729103a 100644
--- a/apm-protocol/apm-network/src/test/java/org/apache/skywalking/oap/server/network/trace/proto/GRPCNoServerTest.java
+++ b/apm-protocol/apm-network/src/test/java/org/apache/skywalking/oap/server/network/trace/proto/GRPCNoServerTest.java
@@ -28,7 +28,8 @@ import io.grpc.stub.StreamObserver;
 import org.apache.skywalking.apm.network.common.v3.Commands;
 import org.apache.skywalking.apm.network.language.agent.v3.SegmentObject;
 import org.apache.skywalking.apm.network.language.agent.v3.TraceSegmentReportServiceGrpc;
-import org.junit.Assert;
+
+import static org.assertj.core.api.AssertionsForClassTypes.assertThat;
 
 public class GRPCNoServerTest {
     public static void main(String[] args) throws InterruptedException {
@@ -61,6 +62,6 @@ public class GRPCNoServerTest {
 
         Thread.sleep(2 * 1000);
 
-        Assert.assertEquals(status[0].getCode(), Status.UNAVAILABLE.getCode());
+        assertThat(status[0].getCode()).isEqualTo(Status.UNAVAILABLE.getCode());
     }
 }
diff --git a/dist-material/release-docs/LICENSE b/dist-material/release-docs/LICENSE
index a536ad7c0b..f3cdcb31e0 100644
--- a/dist-material/release-docs/LICENSE
+++ b/dist-material/release-docs/LICENSE
@@ -220,25 +220,16 @@ The text of each license is the standard Apache 2.0 license.
     https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-core/2.14.1 Apache-2.0
     https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-databind/2.14.1 Apache-2.0
     https://mvnrepository.com/artifact/com.fasterxml.jackson.datatype/jackson-datatype-guava/2.12.0 Apache-2.0
-    https://mvnrepository.com/artifact/com.fasterxml.jackson.datatype/jackson-datatype-guava/2.9.5 Apache-2.0
     https://mvnrepository.com/artifact/com.fasterxml.jackson.datatype/jackson-datatype-jdk8/2.14.1 Apache-2.0
-    https://mvnrepository.com/artifact/com.fasterxml.jackson.datatype/jackson-datatype-jdk8/2.12.0 Apache-2.0
-    https://mvnrepository.com/artifact/com.fasterxml.jackson.datatype/jackson-datatype-jdk8/2.10.0 Apache-2.0
-    https://mvnrepository.com/artifact/com.fasterxml.jackson.datatype/jackson-datatype-jdk8/2.13.4 Apache-2.0
-    https://mvnrepository.com/artifact/com.fasterxml.jackson.datatype/jackson-datatype-jdk8/2.9.5 Apache-2.0
     https://mvnrepository.com/artifact/com.fasterxml.jackson.datatype/jackson-datatype-jsr310/2.14.1 Apache-2.0
     https://mvnrepository.com/artifact/com.fasterxml.jackson.module/jackson-module-kotlin/2.13.4 Apache-2.0
     https://mvnrepository.com/artifact/com.fasterxml/classmate/1.5.1 Apache-2.0
-    https://mvnrepository.com/artifact/com.google.android/annotations/4.1.1.4 Apache-2.0
     https://mvnrepository.com/artifact/com.google.api.grpc/proto-google-common-protos/2.9.0 Apache-2.0
     https://mvnrepository.com/artifact/com.google.code.findbugs/jsr305/3.0.2 Apache-2.0
-    https://mvnrepository.com/artifact/com.google.code.findbugs/jsr305/1.3.9 Apache-2.0
     https://mvnrepository.com/artifact/com.google.code.gson/gson/2.9.0 Apache-2.0
-    https://mvnrepository.com/artifact/com.google.errorprone/error_prone_annotations/2.14.0 Apache-2.0
     https://mvnrepository.com/artifact/com.google.errorprone/error_prone_annotations/2.11.0 Apache-2.0
     https://mvnrepository.com/artifact/com.google.flatbuffers/flatbuffers-java/1.12.0 Apache-2.0
     https://mvnrepository.com/artifact/com.google.guava/failureaccess/1.0.1 Apache-2.0
-    https://mvnrepository.com/artifact/com.google.guava/guava/31.1-android Apache-2.0
     https://mvnrepository.com/artifact/com.google.guava/guava/31.1-jre Apache-2.0
     https://mvnrepository.com/artifact/com.google.guava/listenablefuture/9999.0-empty-to-avoid-conflict-with-guava Apache-2.0
     https://mvnrepository.com/artifact/com.google.inject/guice/4.1.0 Apache-2.0
@@ -249,19 +240,13 @@ The text of each license is the standard Apache 2.0 license.
     https://mvnrepository.com/artifact/com.linecorp.armeria/armeria-graphql-protocol/1.21.0 Apache-2.0
     https://mvnrepository.com/artifact/com.linecorp.armeria/armeria-protobuf/1.21.0 Apache-2.0
     https://mvnrepository.com/artifact/com.orbitz.consul/consul-client/1.5.3 Apache-2.0
-    https://mvnrepository.com/artifact/com.orbitz.consul/consul-client/1.2.6 Apache-2.0
     https://mvnrepository.com/artifact/com.squareup.okhttp3/logging-interceptor/4.9.2 Apache-2.0
-    https://mvnrepository.com/artifact/com.squareup.okhttp3/okhttp/3.14.9 Apache-2.0
     https://mvnrepository.com/artifact/com.squareup.okhttp3/okhttp/4.9.0 Apache-2.0
-    https://mvnrepository.com/artifact/com.squareup.okio/okio/1.17.2 Apache-2.0
     https://mvnrepository.com/artifact/com.squareup.okio/okio/2.8.0 Apache-2.0
     https://mvnrepository.com/artifact/com.squareup.retrofit2/converter-jackson/2.9.0 Apache-2.0
-    https://mvnrepository.com/artifact/com.squareup.retrofit2/converter-jackson/2.3.0 Apache-2.0
     https://mvnrepository.com/artifact/com.squareup.retrofit2/retrofit/2.9.0 Apache-2.0
-    https://mvnrepository.com/artifact/com.squareup.retrofit2/retrofit/2.3.0 Apache-2.0
     https://mvnrepository.com/artifact/com.zaxxer/HikariCP/3.1.0 Apache-2.0
     https://mvnrepository.com/artifact/commons-beanutils/commons-beanutils/1.9.4 Apache-2.0
-    https://mvnrepository.com/artifact/commons-codec/commons-codec/1.11 Apache-2.0
     https://mvnrepository.com/artifact/commons-codec/commons-codec/1.15 Apache-2.0
     https://mvnrepository.com/artifact/commons-io/commons-io/2.7 Apache-2.0
     https://mvnrepository.com/artifact/commons-logging/commons-logging/1.2 Apache-2.0
@@ -286,43 +271,31 @@ The text of each license is the standard Apache 2.0 license.
     https://mvnrepository.com/artifact/io.micrometer/micrometer-commons/1.10.2 Apache-2.0
     https://mvnrepository.com/artifact/io.micrometer/micrometer-core/1.10.2 Apache-2.0
     https://mvnrepository.com/artifact/io.micrometer/micrometer-observation/1.10.2 Apache-2.0
-    https://mvnrepository.com/artifact/io.netty/netty-buffer/4.1.77.Final Apache-2.0
     https://mvnrepository.com/artifact/io.netty/netty-buffer/4.1.86.Final Apache-2.0
-    https://mvnrepository.com/artifact/io.netty/netty-codec/4.1.77.Final Apache-2.0
     https://mvnrepository.com/artifact/io.netty/netty-codec/4.1.86.Final Apache-2.0
     https://mvnrepository.com/artifact/io.netty/netty-codec-dns/4.1.86.Final Apache-2.0
     https://mvnrepository.com/artifact/io.netty/netty-codec-haproxy/4.1.86.Final Apache-2.0
-    https://mvnrepository.com/artifact/io.netty/netty-codec-http/4.1.77.Final Apache-2.0
     https://mvnrepository.com/artifact/io.netty/netty-codec-http/4.1.86.Final Apache-2.0
-    https://mvnrepository.com/artifact/io.netty/netty-codec-http2/4.1.77.Final Apache-2.0
     https://mvnrepository.com/artifact/io.netty/netty-codec-http2/4.1.86.Final Apache-2.0
-    https://mvnrepository.com/artifact/io.netty/netty-codec-socks/4.1.77.Final Apache-2.0
     https://mvnrepository.com/artifact/io.netty/netty-codec-socks/4.1.86.Final Apache-2.0
-    https://mvnrepository.com/artifact/io.netty/netty-common/4.1.77.Final Apache-2.0
     https://mvnrepository.com/artifact/io.netty/netty-common/4.1.86.Final Apache-2.0
-    https://mvnrepository.com/artifact/io.netty/netty-handler/4.1.77.Final Apache-2.0
     https://mvnrepository.com/artifact/io.netty/netty-handler/4.1.86.Final Apache-2.0
-    https://mvnrepository.com/artifact/io.netty/netty-handler-proxy/4.1.77.Final Apache-2.0
     https://mvnrepository.com/artifact/io.netty/netty-handler-proxy/4.1.86.Final Apache-2.0
-    https://mvnrepository.com/artifact/io.netty/netty-resolver/4.1.77.Final Apache-2.0
     https://mvnrepository.com/artifact/io.netty/netty-resolver/4.1.86.Final Apache-2.0
     https://mvnrepository.com/artifact/io.netty/netty-resolver-dns/4.1.86.Final Apache-2.0
     https://mvnrepository.com/artifact/io.netty/netty-resolver-dns-classes-macos/4.1.86.Final Apache-2.0
     https://mvnrepository.com/artifact/io.netty/netty-resolver-dns-native-macos/4.1.86.Final Apache-2.0
     https://mvnrepository.com/artifact/io.netty/netty-tcnative-boringssl-static/2.0.52.Final Apache-2.0
     https://mvnrepository.com/artifact/io.netty/netty-tcnative-boringssl-static/2.0.54.Final Apache-2.0
-    https://mvnrepository.com/artifact/io.netty/netty-tcnative-classes/2.0.52.Final Apache-2.0
     https://mvnrepository.com/artifact/io.netty/netty-tcnative-classes/2.0.54.Final Apache-2.0
-    https://mvnrepository.com/artifact/io.netty/netty-transport/4.1.77.Final Apache-2.0
     https://mvnrepository.com/artifact/io.netty/netty-transport/4.1.86.Final Apache-2.0
     https://mvnrepository.com/artifact/io.netty/netty-transport-classes-epoll/4.1.86.Final Apache-2.0
-    https://mvnrepository.com/artifact/io.netty/netty-transport-native-epoll/4.1.86.Final Apache-2.0
     https://mvnrepository.com/artifact/io.netty/netty-transport-native-epoll/4.1.45.Final Apache-2.0
+    https://mvnrepository.com/artifact/io.netty/netty-transport-native-epoll/4.1.86.Final Apache-2.0
     https://mvnrepository.com/artifact/io.netty/netty-transport-native-unix-common/4.1.77.Final Apache-2.0
     https://mvnrepository.com/artifact/io.netty/netty-transport-native-unix-common/4.1.86.Final Apache-2.0
     https://mvnrepository.com/artifact/io.perfmark/perfmark-api/0.25.0 Apache-2.0
     https://mvnrepository.com/artifact/io.prometheus/simpleclient/0.6.0 Apache-2.0
-    https://mvnrepository.com/artifact/io.prometheus/simpleclient_common/0.15.0 Apache-2.0
     https://mvnrepository.com/artifact/io.prometheus/simpleclient_common/0.6.0 Apache-2.0
     https://mvnrepository.com/artifact/io.prometheus/simpleclient_hotspot/0.6.0 Apache-2.0
     https://mvnrepository.com/artifact/io.prometheus/simpleclient_httpserver/0.15.0 Apache-2.0
@@ -357,13 +330,9 @@ The text of each license is the standard Apache 2.0 license.
     https://mvnrepository.com/artifact/org.codehaus.groovy/groovy/3.0.8 Apache-2.0
     https://mvnrepository.com/artifact/org.freemarker/freemarker/2.3.31 Apache-2.0
     https://mvnrepository.com/artifact/org.jetbrains.kotlin/kotlin-reflect/1.7.10 Apache-2.0
-    https://mvnrepository.com/artifact/org.jetbrains.kotlin/kotlin-stdlib/1.4.10 Apache-2.0
     https://mvnrepository.com/artifact/org.jetbrains.kotlin/kotlin-stdlib/1.7.10 Apache-2.0
-    https://mvnrepository.com/artifact/org.jetbrains.kotlin/kotlin-stdlib-common/1.4.10 Apache-2.0
     https://mvnrepository.com/artifact/org.jetbrains.kotlin/kotlin-stdlib-common/1.7.10 Apache-2.0
-    https://mvnrepository.com/artifact/org.jetbrains.kotlin/kotlin-stdlib-jdk7/1.4.10 Apache-2.0
     https://mvnrepository.com/artifact/org.jetbrains.kotlin/kotlin-stdlib-jdk7/1.6.21 Apache-2.0
-    https://mvnrepository.com/artifact/org.jetbrains.kotlin/kotlin-stdlib-jdk8/1.4.10 Apache-2.0
     https://mvnrepository.com/artifact/org.jetbrains.kotlin/kotlin-stdlib-jdk8/1.6.21 Apache-2.0
     https://mvnrepository.com/artifact/org.jetbrains.kotlinx/kotlinx-coroutines-core/1.6.4 Apache-2.0
     https://mvnrepository.com/artifact/org.jetbrains.kotlinx/kotlinx-coroutines-core-jvm/1.6.4 Apache-2.0
@@ -393,7 +362,6 @@ BSD-3-Clause licenses
 The following components are provided under the BSD-3-Clause License. See project link for details.
 The text of each license is also included in licenses/LICENSE-[project].txt.
 
-    https://mvnrepository.com/artifact/com.google.protobuf/protobuf-java/3.21.1 BSD-3-Clause
     https://mvnrepository.com/artifact/com.google.protobuf/protobuf-java/3.21.8 BSD-3-Clause
     https://mvnrepository.com/artifact/com.google.protobuf/protobuf-java-util/3.21.8 BSD-3-Clause
     https://npmjs.com/package/d3-collection/v/1.0.7 1.0.7 BSD-3-Clause
@@ -401,7 +369,6 @@ The text of each license is also included in licenses/LICENSE-[project].txt.
     https://npmjs.com/package/d3-tip/node_modules/d3-selection/v/1.4.2 1.4.2 BSD-3-Clause
     https://npmjs.com/package/normalize-wheel-es/v/1.2.0 1.2.0 BSD-3-Clause
     https://mvnrepository.com/artifact/org.antlr/antlr4-runtime/4.9.2 BSD-3-Clause
-    https://mvnrepository.com/artifact/org.hamcrest/hamcrest-core/1.3 BSD-3-Clause
     https://npmjs.com/package/rw/v/1.3.3 1.3.3 BSD-3-Clause
     https://npmjs.com/package/source-map/v/0.6.1 0.6.1 BSD-3-Clause
     https://npmjs.com/package/source-map-js/v/1.0.2 1.0.2 BSD-3-Clause
@@ -414,7 +381,6 @@ The following components are provided under the CC0-1.0 License. See project lin
 The text of each license is also included in licenses/LICENSE-[project].txt.
 
     https://mvnrepository.com/artifact/org.latencyutils/LatencyUtils/2.0.3 CC0-1.0
-    https://mvnrepository.com/artifact/org.reactivestreams/reactive-streams/1.0.3 CC0-1.0
 
 ========================================================================
 CC0-1.0 and BSD-2-Clause licenses
@@ -424,14 +390,6 @@ The text of each license is also included in licenses/LICENSE-[project].txt.
 
     https://mvnrepository.com/artifact/org.hdrhistogram/HdrHistogram/2.1.12 CC0-1.0 and BSD-2-Clause
 
-========================================================================
-EPL-1.0 licenses
-========================================================================
-The following components are provided under the EPL-1.0 License. See project link for details.
-The text of each license is also included in licenses/LICENSE-[project].txt.
-
-    https://mvnrepository.com/artifact/junit/junit/4.13.1 EPL-1.0
-
 ========================================================================
 ISC licenses
 ========================================================================
@@ -552,7 +510,6 @@ The text of each license is also included in licenses/LICENSE-[project].txt.
     https://mvnrepository.com/artifact/org.bouncycastle/bcprov-jdk18on/1.71 MIT
     https://mvnrepository.com/artifact/org.bouncycastle/bcutil-jdk18on/1.71 MIT
     https://mvnrepository.com/artifact/org.checkerframework/checker-qual/3.12.0 MIT
-    https://mvnrepository.com/artifact/org.checkerframework/checker-qual/3.5.0 MIT
     https://mvnrepository.com/artifact/org.codehaus.mojo/animal-sniffer-annotations/1.21 MIT
     https://npmjs.com/package/pinia/v/2.0.28 2.0.28 MIT
     https://npmjs.com/package/pinia/node_modules/vue-demi/v/0.13.11 0.13.11 MIT
diff --git a/docs/en/changes/changes.md b/docs/en/changes/changes.md
index e009169a3b..9096207808 100644
--- a/docs/en/changes/changes.md
+++ b/docs/en/changes/changes.md
@@ -92,6 +92,7 @@
 * Add missing TCP throughput metrics.
 * Refactor `@Column` annotation, swap `Column#name` and `ElasticSearch.Column#columnAlias` and rename `ElasticSearch.Column#columnAlias` to `ElasticSearch.Column#legacyName`.
 * Add Python HTTPX module component ID(7019).
+* Migrate tests from junit 4 to junit 5.
 
 #### UI
 
diff --git a/oap-server-bom/pom.xml b/oap-server-bom/pom.xml
index 26c7a54a45..6c3d030b35 100644
--- a/oap-server-bom/pom.xml
+++ b/oap-server-bom/pom.xml
@@ -67,7 +67,7 @@
         <flatbuffers-java.version>1.12.0</flatbuffers-java.version>
         <postgresql.version>42.4.1</postgresql.version>
         <jetcd.version>0.5.3</jetcd.version>
-        <testcontainers.version>1.15.3</testcontainers.version>
+        <testcontainers.version>1.17.6</testcontainers.version>
         <armeria.version>1.21.0</armeria.version>
         <awaitility.version>3.0.0</awaitility.version>
         <httpcore.version>4.4.13</httpcore.version>
@@ -539,6 +539,12 @@
                 <artifactId>testcontainers</artifactId>
                 <version>${testcontainers.version}</version>
                 <scope>test</scope>
+                <exclusions>
+                    <exclusion>
+                        <groupId>junit</groupId>
+                        <artifactId>junit</artifactId>
+                    </exclusion>
+                </exclusions>
             </dependency>
             <dependency>
                 <groupId>org.testcontainers</groupId>
@@ -546,6 +552,12 @@
                 <version>${testcontainers.version}</version>
                 <scope>test</scope>
             </dependency>
+            <dependency>
+                <groupId>org.testcontainers</groupId>
+                <artifactId>junit-jupiter</artifactId>
+                <version>${testcontainers.version}</version>
+                <scope>test</scope>
+            </dependency>
             <dependency>
                 <groupId>org.awaitility</groupId>
                 <artifactId>awaitility</artifactId>
diff --git a/oap-server/analyzer/agent-analyzer/src/test/java/org/apache/skywalking/oap/server/analyzer/provider/meter/process/MeterProcessorTest.java b/oap-server/analyzer/agent-analyzer/src/test/java/org/apache/skywalking/oap/server/analyzer/provider/meter/process/MeterProcessorTest.java
index d2891df575..01ed4c4082 100644
--- a/oap-server/analyzer/agent-analyzer/src/test/java/org/apache/skywalking/oap/server/analyzer/provider/meter/process/MeterProcessorTest.java
+++ b/oap-server/analyzer/agent-analyzer/src/test/java/org/apache/skywalking/oap/server/analyzer/provider/meter/process/MeterProcessorTest.java
@@ -38,14 +38,14 @@ import org.apache.skywalking.oap.server.library.module.ModuleManager;
 import org.apache.skywalking.oap.server.library.module.ModuleProviderHolder;
 import org.apache.skywalking.oap.server.library.module.ModuleServiceHolder;
 import org.apache.skywalking.oap.server.library.module.ModuleStartException;
-import org.junit.Assert;
-import org.junit.Before;
-import org.junit.BeforeClass;
-import org.junit.Test;
-import org.junit.runner.RunWith;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.BeforeAll;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.extension.ExtendWith;
 import org.mockito.Mock;
 import org.mockito.Mockito;
-import org.mockito.junit.MockitoJUnitRunner;
+import org.mockito.junit.jupiter.MockitoExtension;
 import org.powermock.reflect.Whitebox;
 
 import java.util.Arrays;
@@ -60,7 +60,7 @@ import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.spy;
 import static org.mockito.Mockito.when;
 
-@RunWith(MockitoJUnitRunner.class)
+@ExtendWith(MockitoExtension.class)
 public class MeterProcessorTest {
 
     @Mock
@@ -71,13 +71,13 @@ public class MeterProcessorTest {
     private String service = "test-service";
     private String serviceInstance = "test-service-instance";
 
-    @BeforeClass
+    @BeforeAll
     public static void init() {
         MeterEntity.setNamingControl(
                 new NamingControl(512, 512, 512, new EndpointNameGrouping()));
     }
 
-    @Before
+    @BeforeEach
     public void setup() throws StorageException, ModuleStartException {
         meterSystem = spy(new MeterSystem(moduleManager));
         when(moduleManager.find(anyString())).thenReturn(mock(ModuleProviderHolder.class));
@@ -121,12 +121,12 @@ public class MeterProcessorTest {
         summation.put(Bucket.INFINITE_NEGATIVE, 10L);
         summation.put("0", 20L);
         summation.put("10", 10L);
-        Assert.assertEquals(summation, func.getSummation());
+        Assertions.assertEquals(summation, func.getSummation());
         final DataTable count = new DataTable();
         count.put(Bucket.INFINITE_NEGATIVE, 1L);
         count.put("0", 1L);
         count.put("10", 1L);
-        Assert.assertEquals(count, func.getCount());
+        Assertions.assertEquals(count, func.getCount());
     }
 
 }
diff --git a/oap-server/analyzer/agent-analyzer/src/test/java/org/apache/skywalking/oap/server/analyzer/provider/trace/TraceSamplingPolicyWatcherTest.java b/oap-server/analyzer/agent-analyzer/src/test/java/org/apache/skywalking/oap/server/analyzer/provider/trace/TraceSamplingPolicyWatcherTest.java
index 73cfd07627..074af0856e 100644
--- a/oap-server/analyzer/agent-analyzer/src/test/java/org/apache/skywalking/oap/server/analyzer/provider/trace/TraceSamplingPolicyWatcherTest.java
+++ b/oap-server/analyzer/agent-analyzer/src/test/java/org/apache/skywalking/oap/server/analyzer/provider/trace/TraceSamplingPolicyWatcherTest.java
@@ -18,9 +18,6 @@
 
 package org.apache.skywalking.oap.server.analyzer.provider.trace;
 
-import java.util.Optional;
-import java.util.Set;
-import java.util.concurrent.atomic.AtomicReference;
 import org.apache.skywalking.oap.server.analyzer.provider.AnalyzerModuleConfig;
 import org.apache.skywalking.oap.server.analyzer.provider.AnalyzerModuleProvider;
 import org.apache.skywalking.oap.server.analyzer.provider.trace.sampling.SamplingPolicy;
@@ -29,20 +26,25 @@ import org.apache.skywalking.oap.server.configuration.api.ConfigChangeWatcher;
 import org.apache.skywalking.oap.server.configuration.api.ConfigTable;
 import org.apache.skywalking.oap.server.configuration.api.ConfigWatcherRegister;
 import org.apache.skywalking.oap.server.configuration.api.GroupConfigTable;
-import org.junit.Assert;
-import org.junit.Before;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.mockito.junit.MockitoJUnitRunner;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.Timeout;
+import org.junit.jupiter.api.extension.ExtendWith;
+import org.mockito.junit.jupiter.MockitoExtension;
 import org.powermock.reflect.Whitebox;
 
-@RunWith(MockitoJUnitRunner.class)
+import java.util.Optional;
+import java.util.Set;
+import java.util.concurrent.atomic.AtomicReference;
+
+@ExtendWith(MockitoExtension.class)
 public class TraceSamplingPolicyWatcherTest {
 
     private AnalyzerModuleProvider provider;
     private AnalyzerModuleConfig moduleConfig;
 
-    @Before
+    @BeforeEach
     public void init() {
         provider = new AnalyzerModuleProvider();
         moduleConfig = new AnalyzerModuleConfig();
@@ -56,7 +58,8 @@ public class TraceSamplingPolicyWatcherTest {
         globalDefaultSamplingRateEquals(watcher, 9999);
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testTraceLatencyThresholdDynamicUpdate() throws InterruptedException {
         ConfigWatcherRegister register = new TraceLatencyThresholdMockConfigWatcherRegister(3);
 
@@ -67,7 +70,7 @@ public class TraceSamplingPolicyWatcherTest {
         while (!watcher.shouldSample("", 10000, 3000)) {
             Thread.sleep(2000);
         }
-        Assert.assertTrue(watcher.shouldSample("", 10000, 3001));
+        Assertions.assertTrue(watcher.shouldSample("", 10000, 3001));
     }
 
     @Test
@@ -79,7 +82,7 @@ public class TraceSamplingPolicyWatcherTest {
 
         watcher.notify(value1);
         globalDefaultDurationEquals(watcher, 8000);
-        Assert.assertEquals(watcher.value(), "default:\n" +
+        Assertions.assertEquals(watcher.value(), "default:\n" +
             "  duration: 8000");
 
         ConfigChangeWatcher.ConfigChangeEvent value2 = new ConfigChangeWatcher.ConfigChangeEvent(
@@ -87,7 +90,7 @@ public class TraceSamplingPolicyWatcherTest {
                 "  duration: 8000", ConfigChangeWatcher.EventType.DELETE);
 
         watcher.notify(value2);
-        Assert.assertEquals(watcher.value(), null);
+        Assertions.assertEquals(watcher.value(), null);
 
         ConfigChangeWatcher.ConfigChangeEvent value3 = new ConfigChangeWatcher.ConfigChangeEvent(
             "default:\n" +
@@ -95,7 +98,7 @@ public class TraceSamplingPolicyWatcherTest {
 
         watcher.notify(value3);
         globalDefaultDurationEquals(watcher, 800);
-        Assert.assertEquals(watcher.value(), "default:\n" +
+        Assertions.assertEquals(watcher.value(), "default:\n" +
             "  duration: 800");
 
         ConfigChangeWatcher.ConfigChangeEvent value4 = new ConfigChangeWatcher.ConfigChangeEvent(
@@ -104,7 +107,7 @@ public class TraceSamplingPolicyWatcherTest {
 
         watcher.notify(value4);
         globalDefaultDurationEquals(watcher, 800);
-        Assert.assertEquals(watcher.value(), "default:\n" +
+        Assertions.assertEquals(watcher.value(), "default:\n" +
             "  duration: 800");
 
         ConfigChangeWatcher.ConfigChangeEvent value5 = new ConfigChangeWatcher.ConfigChangeEvent(
@@ -114,7 +117,7 @@ public class TraceSamplingPolicyWatcherTest {
 
         watcher.notify(value5);
         globalDefaultDurationEquals(watcher, 800);
-        Assert.assertEquals(watcher.value(), "default:\n" +
+        Assertions.assertEquals(watcher.value(), "default:\n" +
             "  duration: 800");
     }
 
@@ -138,7 +141,8 @@ public class TraceSamplingPolicyWatcherTest {
         }
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testDefaultSampleRateDynamicUpdate() throws InterruptedException {
         ConfigWatcherRegister register = new DefaultSampleRateMockConfigWatcherRegister(3);
 
@@ -161,7 +165,7 @@ public class TraceSamplingPolicyWatcherTest {
 
         watcher.notify(value1);
         globalDefaultSamplingRateEquals(watcher, 7999);
-        Assert.assertEquals(watcher.value(), "default:\n" +
+        Assertions.assertEquals(watcher.value(), "default:\n" +
             "  rate: 8000");
 
         ConfigChangeWatcher.ConfigChangeEvent value2 = new ConfigChangeWatcher.ConfigChangeEvent(
@@ -170,7 +174,7 @@ public class TraceSamplingPolicyWatcherTest {
 
         watcher.notify(value2);
         globalDefaultSamplingRateEquals(watcher, 9999);
-        Assert.assertEquals(watcher.value(), null);
+        Assertions.assertEquals(watcher.value(), null);
 
         ConfigChangeWatcher.ConfigChangeEvent value3 = new ConfigChangeWatcher.ConfigChangeEvent(
             "default:\n" +
@@ -178,7 +182,7 @@ public class TraceSamplingPolicyWatcherTest {
 
         watcher.notify(value3);
         globalDefaultSamplingRateEquals(watcher, 499);
-        Assert.assertEquals(watcher.value(), "default:\n" +
+        Assertions.assertEquals(watcher.value(), "default:\n" +
             "  rate: 500");
 
         ConfigChangeWatcher.ConfigChangeEvent value4 = new ConfigChangeWatcher.ConfigChangeEvent(
@@ -187,7 +191,7 @@ public class TraceSamplingPolicyWatcherTest {
 
         watcher.notify(value4);
         globalDefaultSamplingRateEquals(watcher, 499);
-        Assert.assertEquals(watcher.value(), "default:\n" +
+        Assertions.assertEquals(watcher.value(), "default:\n" +
             "  rate: 500");
 
         ConfigChangeWatcher.ConfigChangeEvent value5 = new ConfigChangeWatcher.ConfigChangeEvent(
@@ -197,7 +201,7 @@ public class TraceSamplingPolicyWatcherTest {
 
         watcher.notify(value5);
         globalDefaultSamplingRateEquals(watcher, 499);
-        Assert.assertEquals(watcher.value(), "default:\n" +
+        Assertions.assertEquals(watcher.value(), "default:\n" +
             "  rate: 500");
     }
 
@@ -221,7 +225,8 @@ public class TraceSamplingPolicyWatcherTest {
         }
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testServiceSampleRateDynamicUpdate() throws InterruptedException {
         ConfigWatcherRegister register = new ServiceMockConfigWatcherRegister(3);
 
@@ -236,9 +241,9 @@ public class TraceSamplingPolicyWatcherTest {
         }
 
         SamplingPolicy samplingPolicy = getSamplingPolicy("serverName1", watcher);
-        Assert.assertEquals(samplingPolicy.getRate().intValue(), 2000);
-        Assert.assertEquals(samplingPolicy.getDuration().intValue(), 30000);
-        Assert.assertEquals(getSamplingPolicy("serverName1", provider.getModuleConfig().getTraceSamplingPolicyWatcher())
+        Assertions.assertEquals(samplingPolicy.getRate().intValue(), 2000);
+        Assertions.assertEquals(samplingPolicy.getDuration().intValue(), 30000);
+        Assertions.assertEquals(getSamplingPolicy("serverName1", provider.getModuleConfig().getTraceSamplingPolicyWatcher())
                                 .getRate()
                                 .intValue(), 2000);
     }
@@ -254,28 +259,28 @@ public class TraceSamplingPolicyWatcherTest {
 
         watcher.notify(value1);
 
-        Assert.assertEquals(getSamplingPolicy("serverName1", watcher).getRate().intValue(), 8000);
-        Assert.assertEquals(getSamplingPolicy("serverName1", watcher).getDuration().intValue(), 20000);
-        Assert.assertEquals(watcher.value(), "services:\n" +
+        Assertions.assertEquals(getSamplingPolicy("serverName1", watcher).getRate().intValue(), 8000);
+        Assertions.assertEquals(getSamplingPolicy("serverName1", watcher).getDuration().intValue(), 20000);
+        Assertions.assertEquals(watcher.value(), "services:\n" +
             "  - name: serverName1\n" +
             "    rate: 8000\n" +
             "    duration: 20000");
 
         // use serverName1's sampling rate
-        Assert.assertTrue(watcher.shouldSample("serverName1", 7999, -1));
-        Assert.assertTrue(watcher.shouldSample("serverName1", 10000, 20000));
+        Assertions.assertTrue(watcher.shouldSample("serverName1", 7999, -1));
+        Assertions.assertTrue(watcher.shouldSample("serverName1", 10000, 20000));
 
         ConfigChangeWatcher.ConfigChangeEvent value2 = new ConfigChangeWatcher.ConfigChangeEvent(
             "", ConfigChangeWatcher.EventType.DELETE);
 
         watcher.notify(value2);
 
-        Assert.assertNull(getSamplingPolicy("serverName1", watcher));
+        Assertions.assertNull(getSamplingPolicy("serverName1", watcher));
         // use global sampling rate
-        Assert.assertTrue(watcher.shouldSample("serverName1", 9999, -1));
-        Assert.assertFalse(watcher.shouldSample("serverName1", 10000, 1));
+        Assertions.assertTrue(watcher.shouldSample("serverName1", 9999, -1));
+        Assertions.assertFalse(watcher.shouldSample("serverName1", 10000, 1));
 
-        Assert.assertEquals(watcher.value(), null);
+        Assertions.assertEquals(watcher.value(), null);
 
         ConfigChangeWatcher.ConfigChangeEvent value3 = new ConfigChangeWatcher.ConfigChangeEvent(
             "services:\n" +
@@ -284,12 +289,12 @@ public class TraceSamplingPolicyWatcherTest {
                 "    duration: 20000", ConfigChangeWatcher.EventType.ADD);
 
         watcher.notify(value3);
-        Assert.assertEquals(getSamplingPolicy("serverName1", watcher).getRate().intValue(), 8000);
-        Assert.assertEquals(getSamplingPolicy("serverName1", watcher).getDuration().intValue(), 20000);
-        Assert.assertTrue(watcher.shouldSample("serverName1", 7999, -1));
-        Assert.assertTrue(watcher.shouldSample("serverName1", 10000, 20000));
+        Assertions.assertEquals(getSamplingPolicy("serverName1", watcher).getRate().intValue(), 8000);
+        Assertions.assertEquals(getSamplingPolicy("serverName1", watcher).getDuration().intValue(), 20000);
+        Assertions.assertTrue(watcher.shouldSample("serverName1", 7999, -1));
+        Assertions.assertTrue(watcher.shouldSample("serverName1", 10000, 20000));
 
-        Assert.assertEquals(watcher.value(), "services:\n" +
+        Assertions.assertEquals(watcher.value(), "services:\n" +
             "  - name: serverName1\n" +
             "    rate: 8000\n" +
             "    duration: 20000");
@@ -301,12 +306,12 @@ public class TraceSamplingPolicyWatcherTest {
                 "    duration: 30000", ConfigChangeWatcher.EventType.MODIFY);
 
         watcher.notify(value4);
-        Assert.assertEquals(getSamplingPolicy("serverName1", watcher).getRate().intValue(), 9000);
-        Assert.assertEquals(getSamplingPolicy("serverName1", watcher).getDuration().intValue(), 30000);
-        Assert.assertTrue(watcher.shouldSample("serverName1", 8999, -1));
-        Assert.assertTrue(watcher.shouldSample("serverName1", 10000, 30000));
+        Assertions.assertEquals(getSamplingPolicy("serverName1", watcher).getRate().intValue(), 9000);
+        Assertions.assertEquals(getSamplingPolicy("serverName1", watcher).getDuration().intValue(), 30000);
+        Assertions.assertTrue(watcher.shouldSample("serverName1", 8999, -1));
+        Assertions.assertTrue(watcher.shouldSample("serverName1", 10000, 30000));
 
-        Assert.assertEquals(watcher.value(), "services:\n" +
+        Assertions.assertEquals(watcher.value(), "services:\n" +
             "  - name: serverName1\n" +
             "    rate: 9000\n" +
             "    duration: 30000");
@@ -318,12 +323,12 @@ public class TraceSamplingPolicyWatcherTest {
                 "    duration: abc", ConfigChangeWatcher.EventType.MODIFY);
 
         watcher.notify(value5);
-        Assert.assertEquals(getSamplingPolicy("serverName1", watcher).getRate().intValue(), 9000);
-        Assert.assertEquals(getSamplingPolicy("serverName1", watcher).getDuration().intValue(), 30000);
-        Assert.assertTrue(watcher.shouldSample("serverName1", 8999, -1));
-        Assert.assertTrue(watcher.shouldSample("serverName1", 10000, 30000));
+        Assertions.assertEquals(getSamplingPolicy("serverName1", watcher).getRate().intValue(), 9000);
+        Assertions.assertEquals(getSamplingPolicy("serverName1", watcher).getDuration().intValue(), 30000);
+        Assertions.assertTrue(watcher.shouldSample("serverName1", 8999, -1));
+        Assertions.assertTrue(watcher.shouldSample("serverName1", 10000, 30000));
 
-        Assert.assertEquals(watcher.value(), "services:\n" +
+        Assertions.assertEquals(watcher.value(), "services:\n" +
             "  - name: serverName1\n" +
             "    rate: 9000\n" +
             "    duration: 30000");
@@ -353,13 +358,13 @@ public class TraceSamplingPolicyWatcherTest {
     }
 
     private void globalDefaultSamplingRateEquals(TraceSamplingPolicyWatcher watcher, int sample) {
-        Assert.assertTrue(watcher.shouldSample("", sample, -1));
-        Assert.assertFalse(watcher.shouldSample("", sample + 1, -1));
+        Assertions.assertTrue(watcher.shouldSample("", sample, -1));
+        Assertions.assertFalse(watcher.shouldSample("", sample + 1, -1));
     }
 
     private void globalDefaultDurationEquals(TraceSamplingPolicyWatcher watcher, int duration) {
-        Assert.assertTrue(watcher.shouldSample("", 10000, duration));
-        Assert.assertFalse(watcher.shouldSample("", 10000, duration - 1));
+        Assertions.assertTrue(watcher.shouldSample("", 10000, duration));
+        Assertions.assertFalse(watcher.shouldSample("", 10000, duration - 1));
     }
 
     private SamplingPolicy getSamplingPolicy(String service, TraceSamplingPolicyWatcher watcher) {
diff --git a/oap-server/analyzer/agent-analyzer/src/test/java/org/apache/skywalking/oap/server/analyzer/provider/trace/UninstrumentedGatewaysConfigTest.java b/oap-server/analyzer/agent-analyzer/src/test/java/org/apache/skywalking/oap/server/analyzer/provider/trace/UninstrumentedGatewaysConfigTest.java
index f092790b26..1824fa0b76 100644
--- a/oap-server/analyzer/agent-analyzer/src/test/java/org/apache/skywalking/oap/server/analyzer/provider/trace/UninstrumentedGatewaysConfigTest.java
+++ b/oap-server/analyzer/agent-analyzer/src/test/java/org/apache/skywalking/oap/server/analyzer/provider/trace/UninstrumentedGatewaysConfigTest.java
@@ -22,8 +22,8 @@ import org.apache.skywalking.oap.server.library.module.ModuleDefine;
 import org.apache.skywalking.oap.server.library.module.ModuleProvider;
 import org.apache.skywalking.oap.server.library.module.ModuleStartException;
 import org.apache.skywalking.oap.server.library.module.ServiceNotProvidedException;
-import org.junit.Assert;
-import org.junit.Test;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Test;
 import org.powermock.reflect.Whitebox;
 
 public class UninstrumentedGatewaysConfigTest {
@@ -33,7 +33,7 @@ public class UninstrumentedGatewaysConfigTest {
             = new UninstrumentedGatewaysConfig(new MockProvider());
         UninstrumentedGatewaysConfig.GatewayInfos gatewayInfos
             = Whitebox.invokeMethod(uninstrumentedGatewaysConfig, "parseGatewaysFromFile", "gateways.yml");
-        Assert.assertEquals(1, gatewayInfos.getGateways().size());
+        Assertions.assertEquals(1, gatewayInfos.getGateways().size());
     }
 
     private static class MockProvider extends ModuleProvider {
diff --git a/oap-server/analyzer/agent-analyzer/src/test/java/org/apache/skywalking/oap/server/analyzer/provider/trace/parser/listener/strategy/SegmentStatusAnalyzerTest.java b/oap-server/analyzer/agent-analyzer/src/test/java/org/apache/skywalking/oap/server/analyzer/provider/trace/parser/listener/strategy/SegmentStatusAnalyzerTest.java
index b4b4537686..4d4f4beb5a 100644
--- a/oap-server/analyzer/agent-analyzer/src/test/java/org/apache/skywalking/oap/server/analyzer/provider/trace/parser/listener/strategy/SegmentStatusAnalyzerTest.java
+++ b/oap-server/analyzer/agent-analyzer/src/test/java/org/apache/skywalking/oap/server/analyzer/provider/trace/parser/listener/strategy/SegmentStatusAnalyzerTest.java
@@ -20,9 +20,9 @@ package org.apache.skywalking.oap.server.analyzer.provider.trace.parser.listener
 
 import org.apache.skywalking.apm.network.language.agent.v3.SpanObject;
 import org.apache.skywalking.apm.network.language.agent.v3.SpanType;
-import org.junit.Assert;
-import org.junit.Before;
-import org.junit.Test;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
 
 import static org.apache.skywalking.oap.server.analyzer.provider.trace.parser.listener.strategy.SegmentStatusStrategy.FROM_ENTRY_SPAN;
 import static org.apache.skywalking.oap.server.analyzer.provider.trace.parser.listener.strategy.SegmentStatusStrategy.FROM_FIRST_SPAN;
@@ -35,7 +35,7 @@ public class SegmentStatusAnalyzerTest {
     private SpanObject localFirstSpan;
     private SpanObject localErrorSpan;
 
-    @Before
+    @BeforeEach
     public void prepare() {
         entryErrorSpan = SpanObject.newBuilder().setIsError(true).setSpanType(SpanType.Entry).setSpanId(0).build();
         entryNormalSpan = SpanObject.newBuilder().setIsError(false).setSpanType(SpanType.Entry).setSpanId(0).build();
@@ -46,27 +46,27 @@ public class SegmentStatusAnalyzerTest {
     @Test
     public void fromSpanStatus() {
         SegmentStatusAnalyzer exceptionAnalyzer = FROM_SPAN_STATUS.getExceptionAnalyzer();
-        Assert.assertTrue(exceptionAnalyzer.isError(entryErrorSpan));
-        Assert.assertFalse(exceptionAnalyzer.isError(entryNormalSpan));
-        Assert.assertTrue(exceptionAnalyzer.isError(localErrorSpan));
-        Assert.assertTrue(exceptionAnalyzer.isError(localFirstSpan));
+        Assertions.assertTrue(exceptionAnalyzer.isError(entryErrorSpan));
+        Assertions.assertFalse(exceptionAnalyzer.isError(entryNormalSpan));
+        Assertions.assertTrue(exceptionAnalyzer.isError(localErrorSpan));
+        Assertions.assertTrue(exceptionAnalyzer.isError(localFirstSpan));
     }
 
     @Test
     public void fromEntrySpan() {
         SegmentStatusAnalyzer exceptionAnalyzer = FROM_ENTRY_SPAN.getExceptionAnalyzer();
-        Assert.assertTrue(exceptionAnalyzer.isError(entryErrorSpan));
-        Assert.assertFalse(exceptionAnalyzer.isError(entryNormalSpan));
-        Assert.assertFalse(exceptionAnalyzer.isError(localErrorSpan));
-        Assert.assertFalse(exceptionAnalyzer.isError(localFirstSpan));
+        Assertions.assertTrue(exceptionAnalyzer.isError(entryErrorSpan));
+        Assertions.assertFalse(exceptionAnalyzer.isError(entryNormalSpan));
+        Assertions.assertFalse(exceptionAnalyzer.isError(localErrorSpan));
+        Assertions.assertFalse(exceptionAnalyzer.isError(localFirstSpan));
     }
 
     @Test
     public void fromFirstSpan() {
         SegmentStatusAnalyzer exceptionAnalyzer = FROM_FIRST_SPAN.getExceptionAnalyzer();
-        Assert.assertTrue(exceptionAnalyzer.isError(entryErrorSpan));
-        Assert.assertFalse(exceptionAnalyzer.isError(entryNormalSpan));
-        Assert.assertFalse(exceptionAnalyzer.isError(localErrorSpan));
-        Assert.assertTrue(exceptionAnalyzer.isError(localFirstSpan));
+        Assertions.assertTrue(exceptionAnalyzer.isError(entryErrorSpan));
+        Assertions.assertFalse(exceptionAnalyzer.isError(entryNormalSpan));
+        Assertions.assertFalse(exceptionAnalyzer.isError(localErrorSpan));
+        Assertions.assertTrue(exceptionAnalyzer.isError(localFirstSpan));
     }
-}
\ No newline at end of file
+}
diff --git a/oap-server/analyzer/agent-analyzer/src/test/java/org/apache/skywalking/oap/server/analyzer/provider/trace/parser/listener/vservice/VirtualCacheProcessorTest.java b/oap-server/analyzer/agent-analyzer/src/test/java/org/apache/skywalking/oap/server/analyzer/provider/trace/parser/listener/vservice/VirtualCacheProcessorTest.java
index 55271435d8..51e959ddac 100644
--- a/oap-server/analyzer/agent-analyzer/src/test/java/org/apache/skywalking/oap/server/analyzer/provider/trace/parser/listener/vservice/VirtualCacheProcessorTest.java
+++ b/oap-server/analyzer/agent-analyzer/src/test/java/org/apache/skywalking/oap/server/analyzer/provider/trace/parser/listener/vservice/VirtualCacheProcessorTest.java
@@ -41,8 +41,8 @@ import org.apache.skywalking.oap.server.core.source.VirtualCacheOperation;
 import org.apache.skywalking.oap.server.core.source.CacheSlowAccess;
 import org.joda.time.DateTime;
 import org.joda.time.format.DateTimeFormat;
-import org.junit.Assert;
-import org.junit.Test;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Test;
 
 public class VirtualCacheProcessorTest {
 
@@ -54,7 +54,7 @@ public class VirtualCacheProcessorTest {
         cacheVirtualServiceProcessor.prepareVSIfNecessary(spanObject, segmentObject);
         ArrayList<Source> sources = new ArrayList<>();
         cacheVirtualServiceProcessor.emitTo(sources::add);
-        Assert.assertTrue(sources.isEmpty());
+        Assertions.assertTrue(sources.isEmpty());
     }
 
     @Test
@@ -74,27 +74,27 @@ public class VirtualCacheProcessorTest {
         cacheVirtualServiceProcessor.prepareVSIfNecessary(spanObject, segmentObject);
         ArrayList<Source> sources = new ArrayList<>();
         cacheVirtualServiceProcessor.emitTo(sources::add);
-        Assert.assertEquals(sources.size(), 3);
+        Assertions.assertEquals(sources.size(), 3);
 
         ServiceMeta serviceMeta = (ServiceMeta) sources.get(0);
-        Assert.assertEquals("127.0.0.1:6379", serviceMeta.getName());
-        Assert.assertEquals(202209121413L, serviceMeta.getTimeBucket());
-        Assert.assertEquals(Layer.VIRTUAL_CACHE, serviceMeta.getLayer());
+        Assertions.assertEquals("127.0.0.1:6379", serviceMeta.getName());
+        Assertions.assertEquals(202209121413L, serviceMeta.getTimeBucket());
+        Assertions.assertEquals(Layer.VIRTUAL_CACHE, serviceMeta.getLayer());
 
         CacheSlowAccess slowAccess = (CacheSlowAccess) sources.get(1);
-        Assert.assertEquals("MTI3LjAuMC4xOjYzNzk=.0", slowAccess.getCacheServiceId());
-        Assert.assertEquals(1000, slowAccess.getLatency());
-        Assert.assertEquals(20220912141312L, slowAccess.getTimeBucket());
-        Assert.assertEquals(VirtualCacheOperation.Read, slowAccess.getOperation());
-        Assert.assertNotNull(slowAccess.getTraceId());
-        Assert.assertNotNull(slowAccess.getCommand());
-        Assert.assertNotNull(slowAccess.getKey());
+        Assertions.assertEquals("MTI3LjAuMC4xOjYzNzk=.0", slowAccess.getCacheServiceId());
+        Assertions.assertEquals(1000, slowAccess.getLatency());
+        Assertions.assertEquals(20220912141312L, slowAccess.getTimeBucket());
+        Assertions.assertEquals(VirtualCacheOperation.Read, slowAccess.getOperation());
+        Assertions.assertNotNull(slowAccess.getTraceId());
+        Assertions.assertNotNull(slowAccess.getCommand());
+        Assertions.assertNotNull(slowAccess.getKey());
 
         CacheAccess cacheAccess = (CacheAccess) sources.get(2);
-        Assert.assertEquals("127.0.0.1:6379", cacheAccess.getName());
-        Assert.assertEquals(1000, cacheAccess.getLatency());
-        Assert.assertEquals(202209121413L, cacheAccess.getTimeBucket());
-        Assert.assertNotNull(cacheAccess.getOperation());
+        Assertions.assertEquals("127.0.0.1:6379", cacheAccess.getName());
+        Assertions.assertEquals(1000, cacheAccess.getLatency());
+        Assertions.assertEquals(202209121413L, cacheAccess.getTimeBucket());
+        Assertions.assertNotNull(cacheAccess.getOperation());
     }
 
     @Test
@@ -114,18 +114,18 @@ public class VirtualCacheProcessorTest {
         cacheVirtualServiceProcessor.prepareVSIfNecessary(spanObject, segmentObject);
         ArrayList<Source> sources = new ArrayList<>();
         cacheVirtualServiceProcessor.emitTo(sources::add);
-        Assert.assertEquals(sources.size(), 2);
+        Assertions.assertEquals(sources.size(), 2);
 
         ServiceMeta serviceMeta = (ServiceMeta) sources.get(0);
-        Assert.assertEquals("127.0.0.1:6379", serviceMeta.getName());
-        Assert.assertEquals(202209121413L, serviceMeta.getTimeBucket());
-        Assert.assertEquals(Layer.VIRTUAL_CACHE, serviceMeta.getLayer());
+        Assertions.assertEquals("127.0.0.1:6379", serviceMeta.getName());
+        Assertions.assertEquals(202209121413L, serviceMeta.getTimeBucket());
+        Assertions.assertEquals(Layer.VIRTUAL_CACHE, serviceMeta.getLayer());
 
         CacheAccess cacheAccess = (CacheAccess) sources.get(1);
-        Assert.assertEquals("127.0.0.1:6379", cacheAccess.getName());
-        Assert.assertEquals(3, cacheAccess.getLatency());
-        Assert.assertEquals(202209121413L, cacheAccess.getTimeBucket());
-        Assert.assertNotNull(cacheAccess.getOperation());
+        Assertions.assertEquals("127.0.0.1:6379", cacheAccess.getName());
+        Assertions.assertEquals(3, cacheAccess.getLatency());
+        Assertions.assertEquals(202209121413L, cacheAccess.getTimeBucket());
+        Assertions.assertNotNull(cacheAccess.getOperation());
     }
 
     @Test
@@ -143,27 +143,27 @@ public class VirtualCacheProcessorTest {
         cacheVirtualServiceProcessor.prepareVSIfNecessary(spanObject, segmentObject);
         ArrayList<Source> sources = new ArrayList<>();
         cacheVirtualServiceProcessor.emitTo(sources::add);
-        Assert.assertEquals(sources.size(), 3);
+        Assertions.assertEquals(sources.size(), 3);
 
         ServiceMeta serviceMeta = (ServiceMeta) sources.get(0);
-        Assert.assertEquals("redis-local", serviceMeta.getName());
-        Assert.assertEquals(202209121413L, serviceMeta.getTimeBucket());
-        Assert.assertEquals(Layer.VIRTUAL_CACHE, serviceMeta.getLayer());
+        Assertions.assertEquals("redis-local", serviceMeta.getName());
+        Assertions.assertEquals(202209121413L, serviceMeta.getTimeBucket());
+        Assertions.assertEquals(Layer.VIRTUAL_CACHE, serviceMeta.getLayer());
 
         CacheSlowAccess slowAccess = (CacheSlowAccess) sources.get(1);
-        Assert.assertEquals("cmVkaXMtbG9jYWw=.0", slowAccess.getCacheServiceId());
-        Assert.assertEquals(1000, slowAccess.getLatency());
-        Assert.assertEquals(20220912141312L, slowAccess.getTimeBucket());
-        Assert.assertEquals(VirtualCacheOperation.Read, slowAccess.getOperation());
-        Assert.assertNotNull(slowAccess.getTraceId());
-        Assert.assertNotNull(slowAccess.getCommand());
-        Assert.assertNotNull(slowAccess.getKey());
+        Assertions.assertEquals("cmVkaXMtbG9jYWw=.0", slowAccess.getCacheServiceId());
+        Assertions.assertEquals(1000, slowAccess.getLatency());
+        Assertions.assertEquals(20220912141312L, slowAccess.getTimeBucket());
+        Assertions.assertEquals(VirtualCacheOperation.Read, slowAccess.getOperation());
+        Assertions.assertNotNull(slowAccess.getTraceId());
+        Assertions.assertNotNull(slowAccess.getCommand());
+        Assertions.assertNotNull(slowAccess.getKey());
 
         CacheAccess cacheAccess = (CacheAccess) sources.get(2);
-        Assert.assertEquals("redis-local", cacheAccess.getName());
-        Assert.assertEquals(1000, cacheAccess.getLatency());
-        Assert.assertEquals(202209121413L, cacheAccess.getTimeBucket());
-        Assert.assertNotNull(cacheAccess.getOperation());
+        Assertions.assertEquals("redis-local", cacheAccess.getName());
+        Assertions.assertEquals(1000, cacheAccess.getLatency());
+        Assertions.assertEquals(202209121413L, cacheAccess.getTimeBucket());
+        Assertions.assertNotNull(cacheAccess.getOperation());
     }
 
     private long getTimeInMillis(String s) {
diff --git a/oap-server/analyzer/agent-analyzer/src/test/java/org/apache/skywalking/oap/server/analyzer/provider/trace/parser/listener/vservice/VirtualDatabaseProcessorTest.java b/oap-server/analyzer/agent-analyzer/src/test/java/org/apache/skywalking/oap/server/analyzer/provider/trace/parser/listener/vservice/VirtualDatabaseProcessorTest.java
index 0dbcc59234..a64c2c20e8 100644
--- a/oap-server/analyzer/agent-analyzer/src/test/java/org/apache/skywalking/oap/server/analyzer/provider/trace/parser/listener/vservice/VirtualDatabaseProcessorTest.java
+++ b/oap-server/analyzer/agent-analyzer/src/test/java/org/apache/skywalking/oap/server/analyzer/provider/trace/parser/listener/vservice/VirtualDatabaseProcessorTest.java
@@ -36,8 +36,8 @@ import org.apache.skywalking.oap.server.core.source.ServiceMeta;
 import org.apache.skywalking.oap.server.core.source.Source;
 import org.joda.time.DateTime;
 import org.joda.time.format.DateTimeFormat;
-import org.junit.Assert;
-import org.junit.Test;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Test;
 
 import java.nio.charset.StandardCharsets;
 import java.util.ArrayList;
@@ -54,7 +54,7 @@ public class VirtualDatabaseProcessorTest {
         processor.prepareVSIfNecessary(spanObject, segmentObject);
         ArrayList<Source> sources = new ArrayList<>();
         processor.emitTo(sources::add);
-        Assert.assertTrue(sources.isEmpty());
+        Assertions.assertTrue(sources.isEmpty());
     }
 
     @Test
@@ -75,23 +75,23 @@ public class VirtualDatabaseProcessorTest {
         processor.prepareVSIfNecessary(spanObject, segmentObject);
         ArrayList<Source> sources = new ArrayList<>();
         processor.emitTo(sources::add);
-        Assert.assertEquals(sources.size(), 3);
+        Assertions.assertEquals(sources.size(), 3);
 
         ServiceMeta serviceMeta = (ServiceMeta) sources.get(0);
-        Assert.assertEquals("127.0.0.1:3306", serviceMeta.getName());
-        Assert.assertEquals(202209121413L, serviceMeta.getTimeBucket());
-        Assert.assertEquals(Layer.VIRTUAL_DATABASE, serviceMeta.getLayer());
+        Assertions.assertEquals("127.0.0.1:3306", serviceMeta.getName());
+        Assertions.assertEquals(202209121413L, serviceMeta.getTimeBucket());
+        Assertions.assertEquals(Layer.VIRTUAL_DATABASE, serviceMeta.getLayer());
 
         DatabaseAccess databaseAccess = (DatabaseAccess) sources.get(1);
-        Assert.assertEquals("127.0.0.1:3306", databaseAccess.getName());
-        Assert.assertEquals(1000, databaseAccess.getLatency());
-        Assert.assertEquals(202209121413L, databaseAccess.getTimeBucket());
+        Assertions.assertEquals("127.0.0.1:3306", databaseAccess.getName());
+        Assertions.assertEquals(1000, databaseAccess.getLatency());
+        Assertions.assertEquals(202209121413L, databaseAccess.getTimeBucket());
 
         DatabaseSlowStatement slowStatement = (DatabaseSlowStatement) sources.get(2);
-        Assert.assertEquals("MTI3LjAuMC4xOjMzMDY=.0", slowStatement.getDatabaseServiceId());
-        Assert.assertEquals(1000, slowStatement.getLatency());
-        Assert.assertEquals(20220912141312L, slowStatement.getTimeBucket());
-        Assert.assertEquals("trace-id-1", slowStatement.getTraceId());
+        Assertions.assertEquals("MTI3LjAuMC4xOjMzMDY=.0", slowStatement.getDatabaseServiceId());
+        Assertions.assertEquals(1000, slowStatement.getLatency());
+        Assertions.assertEquals(20220912141312L, slowStatement.getTimeBucket());
+        Assertions.assertEquals("trace-id-1", slowStatement.getTraceId());
     }
 
     @Test
@@ -110,18 +110,18 @@ public class VirtualDatabaseProcessorTest {
         processor.prepareVSIfNecessary(spanObject, segmentObject);
         ArrayList<Source> sources = new ArrayList<>();
         processor.emitTo(sources::add);
-        Assert.assertEquals(sources.size(), 2);
+        Assertions.assertEquals(sources.size(), 2);
 
         ServiceMeta serviceMeta = (ServiceMeta) sources.get(0);
-        Assert.assertEquals("127.0.0.1:3306", serviceMeta.getName());
-        Assert.assertEquals(202209121413L, serviceMeta.getTimeBucket());
-        Assert.assertEquals(Layer.VIRTUAL_DATABASE, serviceMeta.getLayer());
+        Assertions.assertEquals("127.0.0.1:3306", serviceMeta.getName());
+        Assertions.assertEquals(202209121413L, serviceMeta.getTimeBucket());
+        Assertions.assertEquals(Layer.VIRTUAL_DATABASE, serviceMeta.getLayer());
 
         DatabaseAccess databaseAccess = (DatabaseAccess) sources.get(1);
 
-        Assert.assertEquals("127.0.0.1:3306", databaseAccess.getName());
-        Assert.assertEquals(3, databaseAccess.getLatency());
-        Assert.assertEquals(202209121413L, databaseAccess.getTimeBucket());
+        Assertions.assertEquals("127.0.0.1:3306", databaseAccess.getName());
+        Assertions.assertEquals(3, databaseAccess.getLatency());
+        Assertions.assertEquals(202209121413L, databaseAccess.getTimeBucket());
     }
 
     private long getTimeInMillis(String s) {
diff --git a/oap-server/analyzer/agent-analyzer/src/test/java/org/apache/skywalking/oap/server/analyzer/provider/trace/sampling/SamplingPolicySettingsReaderTest.java b/oap-server/analyzer/agent-analyzer/src/test/java/org/apache/skywalking/oap/server/analyzer/provider/trace/sampling/SamplingPolicySettingsReaderTest.java
index ffec602abd..668756a5e0 100644
--- a/oap-server/analyzer/agent-analyzer/src/test/java/org/apache/skywalking/oap/server/analyzer/provider/trace/sampling/SamplingPolicySettingsReaderTest.java
+++ b/oap-server/analyzer/agent-analyzer/src/test/java/org/apache/skywalking/oap/server/analyzer/provider/trace/sampling/SamplingPolicySettingsReaderTest.java
@@ -18,8 +18,9 @@
 
 package org.apache.skywalking.oap.server.analyzer.provider.trace.sampling;
 
-import org.junit.Assert;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 public class SamplingPolicySettingsReaderTest {
 
@@ -30,13 +31,13 @@ public class SamplingPolicySettingsReaderTest {
                                                                                    .getResourceAsStream(
                                                                                        "trace-sampling-policy-settings.yml"));
         SamplingPolicySettings settings = reader.readSettings();
-        Assert.assertEquals(settings.getDefaultPolicy().getRate().intValue(), 10000);
-        Assert.assertEquals(settings.getDefaultPolicy().getDuration().intValue(), -1);
+        assertEquals(settings.getDefaultPolicy().getRate().intValue(), 10000);
+        assertEquals(settings.getDefaultPolicy().getDuration().intValue(), -1);
 
-        Assert.assertEquals(settings.get("name1").getRate().intValue(), 1000);
-        Assert.assertEquals(settings.get("name1").getDuration().intValue(), 20000);
+        assertEquals(settings.get("name1").getRate().intValue(), 1000);
+        assertEquals(settings.get("name1").getDuration().intValue(), 20000);
 
-        Assert.assertEquals(settings.get("name2").getRate().intValue(), 2000);
-        Assert.assertEquals(settings.get("name2").getDuration().intValue(), 30000);
+        assertEquals(settings.get("name2").getRate().intValue(), 2000);
+        assertEquals(settings.get("name2").getDuration().intValue(), 30000);
     }
-}
\ No newline at end of file
+}
diff --git a/oap-server/analyzer/log-analyzer/src/test/java/org/apache/skywalking/oap/log/analyzer/dsl/DSLSecurityTest.java b/oap-server/analyzer/log-analyzer/src/test/java/org/apache/skywalking/oap/log/analyzer/dsl/DSLSecurityTest.java
index 51efffedef..f4df42034c 100644
--- a/oap-server/analyzer/log-analyzer/src/test/java/org/apache/skywalking/oap/log/analyzer/dsl/DSLSecurityTest.java
+++ b/oap-server/analyzer/log-analyzer/src/test/java/org/apache/skywalking/oap/log/analyzer/dsl/DSLSecurityTest.java
@@ -18,9 +18,6 @@
 
 package org.apache.skywalking.oap.log.analyzer.dsl;
 
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.Collections;
 import org.apache.skywalking.apm.network.logging.v3.LogData;
 import org.apache.skywalking.oap.log.analyzer.provider.LogAnalyzerModuleConfig;
 import org.apache.skywalking.oap.server.core.CoreModule;
@@ -29,21 +26,22 @@ import org.apache.skywalking.oap.server.core.source.SourceReceiver;
 import org.apache.skywalking.oap.server.library.module.ModuleManager;
 import org.apache.skywalking.oap.server.library.module.ModuleProviderHolder;
 import org.apache.skywalking.oap.server.library.module.ModuleServiceHolder;
-import org.apache.skywalking.oap.server.library.module.ModuleStartException;
 import org.codehaus.groovy.control.MultipleCompilationErrorsException;
-import org.junit.Before;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.junit.runners.Parameterized;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.params.ParameterizedTest;
+import org.junit.jupiter.params.provider.MethodSource;
 import org.powermock.reflect.Whitebox;
 
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Collections;
+
+import static org.junit.jupiter.api.Assertions.assertThrows;
 import static org.mockito.ArgumentMatchers.anyString;
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.when;
 
-@RunWith(Parameterized.class)
 public class DSLSecurityTest {
-    @Parameterized.Parameters(name = "{index}: {0}")
     public static Collection<Object[]> data() {
         return Arrays.asList(
             new String[] {
@@ -103,15 +101,9 @@ public class DSLSecurityTest {
         );
     }
 
-    @Parameterized.Parameter()
-    public String name;
-
-    @Parameterized.Parameter(1)
-    public String script;
-
     final ModuleManager manager = mock(ModuleManager.class);
 
-    @Before
+    @BeforeEach
     public void setup() {
         Whitebox.setInternalState(manager, "isInPrepareStage", false);
         when(manager.find(anyString())).thenReturn(mock(ModuleProviderHolder.class));
@@ -127,14 +119,17 @@ public class DSLSecurityTest {
             .thenReturn("");
     }
 
-    @Test(expected = MultipleCompilationErrorsException.class)
-    public void testSecurity() throws ModuleStartException {
-        final DSL dsl = DSL.of(manager, new LogAnalyzerModuleConfig(), script);
-        Whitebox.setInternalState(
-            Whitebox.getInternalState(dsl, "filterSpec"), "sinkListenerFactories", Collections.emptyList()
-        );
+    @ParameterizedTest(name = "{0}")
+    @MethodSource("data")
+    public void testSecurity(String name, String script) {
+        assertThrows(MultipleCompilationErrorsException.class, () -> {
+            final DSL dsl = DSL.of(manager, new LogAnalyzerModuleConfig(), script);
+            Whitebox.setInternalState(
+                    Whitebox.getInternalState(dsl, "filterSpec"), "sinkListenerFactories", Collections.emptyList()
+            );
 
-        dsl.bind(new Binding().log(LogData.newBuilder()));
-        dsl.evaluate();
+            dsl.bind(new Binding().log(LogData.newBuilder()));
+            dsl.evaluate();
+        });
     }
 }
diff --git a/oap-server/analyzer/log-analyzer/src/test/java/org/apache/skywalking/oap/log/analyzer/dsl/DSLTest.java b/oap-server/analyzer/log-analyzer/src/test/java/org/apache/skywalking/oap/log/analyzer/dsl/DSLTest.java
index c0296359cf..333f164cf6 100644
--- a/oap-server/analyzer/log-analyzer/src/test/java/org/apache/skywalking/oap/log/analyzer/dsl/DSLTest.java
+++ b/oap-server/analyzer/log-analyzer/src/test/java/org/apache/skywalking/oap/log/analyzer/dsl/DSLTest.java
@@ -18,9 +18,6 @@
 
 package org.apache.skywalking.oap.log.analyzer.dsl;
 
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.Collections;
 import org.apache.skywalking.apm.network.logging.v3.LogData;
 import org.apache.skywalking.oap.log.analyzer.provider.LogAnalyzerModuleConfig;
 import org.apache.skywalking.oap.server.core.CoreModule;
@@ -30,19 +27,20 @@ import org.apache.skywalking.oap.server.library.module.ModuleManager;
 import org.apache.skywalking.oap.server.library.module.ModuleProviderHolder;
 import org.apache.skywalking.oap.server.library.module.ModuleServiceHolder;
 import org.apache.skywalking.oap.server.library.module.ModuleStartException;
-import org.junit.Before;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.junit.runners.Parameterized;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.params.ParameterizedTest;
+import org.junit.jupiter.params.provider.MethodSource;
 import org.powermock.reflect.Whitebox;
 
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Collections;
+
 import static org.mockito.ArgumentMatchers.anyString;
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.when;
 
-@RunWith(Parameterized.class)
 public class DSLTest {
-    @Parameterized.Parameters(name = "{index}: {0}")
     public static Collection<Object[]> data() {
         return Arrays.asList(
                 new String[] {
@@ -182,15 +180,9 @@ public class DSLTest {
         );
     }
 
-    @Parameterized.Parameter()
-    public String name;
-
-    @Parameterized.Parameter(1)
-    public String script;
-
     final ModuleManager manager = mock(ModuleManager.class);
 
-    @Before
+    @BeforeEach
     public void setup() {
         Whitebox.setInternalState(manager, "isInPrepareStage", false);
         when(manager.find(anyString())).thenReturn(mock(ModuleProviderHolder.class));
@@ -206,8 +198,9 @@ public class DSLTest {
                 .thenReturn("");
     }
 
-    @Test
-    public void testDslStaticCompile() throws ModuleStartException {
+    @ParameterizedTest(name = "{0}")
+    @MethodSource("data")
+    public void testDslStaticCompile(String name, String script) throws ModuleStartException {
         final DSL dsl = DSL.of(manager, new LogAnalyzerModuleConfig(), script);
         Whitebox.setInternalState(
             Whitebox.getInternalState(dsl, "filterSpec"), "sinkListenerFactories", Collections.emptyList()
diff --git a/oap-server/analyzer/log-analyzer/src/test/resources/mockito-extensions/org.mockito.plugins.MockMaker b/oap-server/analyzer/log-analyzer/src/test/resources/mockito-extensions/org.mockito.plugins.MockMaker
new file mode 100644
index 0000000000..1f0955d450
--- /dev/null
+++ b/oap-server/analyzer/log-analyzer/src/test/resources/mockito-extensions/org.mockito.plugins.MockMaker
@@ -0,0 +1 @@
+mock-maker-inline
diff --git a/oap-server/analyzer/meter-analyzer/src/test/java/org/apache/skywalking/oap/meter/analyzer/MetricConvertTest.java b/oap-server/analyzer/meter-analyzer/src/test/java/org/apache/skywalking/oap/meter/analyzer/MetricConvertTest.java
index f3d0aafce4..bfcc57adcc 100644
--- a/oap-server/analyzer/meter-analyzer/src/test/java/org/apache/skywalking/oap/meter/analyzer/MetricConvertTest.java
+++ b/oap-server/analyzer/meter-analyzer/src/test/java/org/apache/skywalking/oap/meter/analyzer/MetricConvertTest.java
@@ -18,17 +18,18 @@
 
 package org.apache.skywalking.oap.meter.analyzer;
 
-import java.util.Arrays;
-import java.util.List;
 import lombok.AllArgsConstructor;
 import lombok.Getter;
 import org.apache.skywalking.oap.server.core.analysis.meter.MeterSystem;
-import org.junit.Assert;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.mockito.junit.MockitoJUnitRunner;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.extension.ExtendWith;
+import org.mockito.junit.jupiter.MockitoExtension;
+
+import java.util.Arrays;
+import java.util.List;
 
-@RunWith(MockitoJUnitRunner.class)
+@ExtendWith(MockitoExtension.class)
 public class MetricConvertTest {
 
     @Test
@@ -45,10 +46,9 @@ public class MetricConvertTest {
             null
         );
         MockMetricConvert metricConvert = new MockMetricConvert(mockMetricRuleConfig, null);
-        Assert.assertEquals("metrics name", "meter_apisix_sv_http_connections", metricConvert.metricsName);
-        Assert.assertEquals("filter", "{ tags -> tags.job_name == 'apisix-monitoring' }", metricConvert.filter);
-        Assert.assertEquals(
-            "exp",
+        Assertions.assertEquals("meter_apisix_sv_http_connections", metricConvert.metricsName);
+        Assertions.assertEquals("{ tags -> tags.job_name == 'apisix-monitoring' }", metricConvert.filter);
+        Assertions.assertEquals(
             "((apisix_nginx_http_current_connections.tag({tags -> tags.service_name = 1}))).tag({tags -> tags.service_name = 2})",
             metricConvert.exp
         );
@@ -66,9 +66,9 @@ public class MetricConvertTest {
             null
         );
         metricConvert = new MockMetricConvert(mockMetricRuleConfig, null);
-        Assert.assertEquals("metrics name", "meter_apisix_sv_http_connections", metricConvert.metricsName);
-        Assert.assertEquals(
-            "exp", "(apisix_nginx_http_current_connections.tag({tags -> tags.service_name = 1}))",
+        Assertions.assertEquals("meter_apisix_sv_http_connections", metricConvert.metricsName);
+        Assertions.assertEquals(
+            "(apisix_nginx_http_current_connections.tag({tags -> tags.service_name = 1}))",
             metricConvert.exp
         );
 
@@ -85,9 +85,9 @@ public class MetricConvertTest {
             null
         );
         metricConvert = new MockMetricConvert(mockMetricRuleConfig, null);
-        Assert.assertEquals("metrics name", "meter_apisix_sv_http_connections", metricConvert.metricsName);
-        Assert.assertEquals(
-            "exp", "(apisix_nginx_http_current_connections).tag({tags -> tags.service_name = 2})",
+        Assertions.assertEquals("meter_apisix_sv_http_connections", metricConvert.metricsName);
+        Assertions.assertEquals(
+            "(apisix_nginx_http_current_connections).tag({tags -> tags.service_name = 2})",
             metricConvert.exp
         );
 
@@ -104,9 +104,9 @@ public class MetricConvertTest {
             null
         );
         metricConvert = new MockMetricConvert(mockMetricRuleConfig, null);
-        Assert.assertEquals("metrics name", "meter_apisix_sv_http_connections", metricConvert.metricsName);
-        Assert.assertEquals(
-            "exp", "apisix_nginx_http_current_connections",
+        Assertions.assertEquals("meter_apisix_sv_http_connections", metricConvert.metricsName);
+        Assertions.assertEquals(
+            "apisix_nginx_http_current_connections",
             metricConvert.exp
         );
 
@@ -126,12 +126,12 @@ public class MetricConvertTest {
             null
         );
         MockMetricConvert metricConvert = new MockMetricConvert(mockMetricRuleConfig, null);
-        Assert.assertEquals("metrics name", "meter_apisix_sv_http_connections", metricConvert.metricsName);
-        Assert.assertEquals("filter", "{ tags -> tags.job_name == 'apisix-monitoring' }", metricConvert.filter);
-        Assert.assertEquals(
-            "exp",
+        Assertions.assertEquals("meter_apisix_sv_http_connections", metricConvert.metricsName);
+        Assertions.assertEquals("{ tags -> tags.job_name == 'apisix-monitoring' }", metricConvert.filter);
+        Assertions.assertEquals(
             "(((apisix_nginx_http_current_connections.tag({tags -> tags.service_name = 1})).sum(['a']))).tag({tags -> tags.service_name = 2})",
-            metricConvert.exp
+            metricConvert.exp,
+                "exp"
         );
 
         // expSuffix is null
@@ -147,10 +147,11 @@ public class MetricConvertTest {
             null
         );
         metricConvert = new MockMetricConvert(mockMetricRuleConfig, null);
-        Assert.assertEquals("metrics name", "meter_apisix_sv_http_connections", metricConvert.metricsName);
-        Assert.assertEquals(
-            "exp", "((apisix_nginx_http_current_connections.tag({tags -> tags.service_name = 1})).downsampling(LATEST))",
-            metricConvert.exp
+        Assertions.assertEquals("meter_apisix_sv_http_connections", metricConvert.metricsName, "metrics name");
+        Assertions.assertEquals(
+            "((apisix_nginx_http_current_connections.tag({tags -> tags.service_name = 1})).downsampling(LATEST))",
+            metricConvert.exp,
+            "exp"
         );
 
         // expPrefix is null
@@ -166,10 +167,11 @@ public class MetricConvertTest {
             null
         );
         metricConvert = new MockMetricConvert(mockMetricRuleConfig, null);
-        Assert.assertEquals("metrics name", "meter_apisix_sv_http_connections", metricConvert.metricsName);
-        Assert.assertEquals(
-            "exp", "(apisix_nginx_http_current_connections.downsampling(LATEST)).tag({tags -> tags.service_name = 2})",
-            metricConvert.exp
+        Assertions.assertEquals("meter_apisix_sv_http_connections", metricConvert.metricsName, "metrics name");
+        Assertions.assertEquals(
+            "(apisix_nginx_http_current_connections.downsampling(LATEST)).tag({tags -> tags.service_name = 2})",
+            metricConvert.exp,
+            "exp"
         );
 
         // expPrefix and expSuffix is null
@@ -185,10 +187,11 @@ public class MetricConvertTest {
             null
         );
         metricConvert = new MockMetricConvert(mockMetricRuleConfig, null);
-        Assert.assertEquals("metrics name", "meter_apisix_sv_http_connections", metricConvert.metricsName);
-        Assert.assertEquals(
-            "exp", "apisix_nginx_http_current_connections",
-            metricConvert.exp
+        Assertions.assertEquals("meter_apisix_sv_http_connections", metricConvert.metricsName, "metrics name");
+        Assertions.assertEquals(
+            "apisix_nginx_http_current_connections",
+            metricConvert.exp,
+            "exp"
         );
 
     }
diff --git a/oap-server/analyzer/meter-analyzer/src/test/java/org/apache/skywalking/oap/meter/analyzer/dsl/AggregationTest.java b/oap-server/analyzer/meter-analyzer/src/test/java/org/apache/skywalking/oap/meter/analyzer/dsl/AggregationTest.java
index ceee2c38aa..51bcd11b0f 100644
--- a/oap-server/analyzer/meter-analyzer/src/test/java/org/apache/skywalking/oap/meter/analyzer/dsl/AggregationTest.java
+++ b/oap-server/analyzer/meter-analyzer/src/test/java/org/apache/skywalking/oap/meter/analyzer/dsl/AggregationTest.java
@@ -20,38 +20,18 @@ package org.apache.skywalking.oap.meter.analyzer.dsl;
 
 import com.google.common.collect.ImmutableMap;
 import lombok.extern.slf4j.Slf4j;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.junit.runners.Parameterized;
+import org.junit.jupiter.params.ParameterizedTest;
+import org.junit.jupiter.params.provider.MethodSource;
 
 import java.util.Arrays;
 import java.util.Collection;
 
 import static com.google.common.collect.ImmutableMap.of;
-import static org.hamcrest.CoreMatchers.is;
-import static org.hamcrest.MatcherAssert.assertThat;
-import static org.junit.Assert.fail;
+import static org.assertj.core.api.AssertionsForClassTypes.assertThat;
+import static org.junit.jupiter.api.Assertions.fail;
 
 @Slf4j
-@RunWith(Parameterized.class)
 public class AggregationTest {
-
-    @Parameterized.Parameter
-    public String name;
-
-    @Parameterized.Parameter(1)
-    public ImmutableMap<String, SampleFamily> input;
-
-    @Parameterized.Parameter(2)
-    public String expression;
-
-    @Parameterized.Parameter(3)
-    public Result want;
-
-    @Parameterized.Parameter(4)
-    public boolean isThrow;
-
-    @Parameterized.Parameters(name = "{index}: {0}")
     public static Collection<Object[]> data() {
         return Arrays.asList(new Object[][] {
             {
@@ -170,8 +150,13 @@ public class AggregationTest {
         });
     }
 
-    @Test
-    public void test() {
+    @ParameterizedTest(name = "{0}")
+    @MethodSource("data")
+    public void test(String name,
+                     ImmutableMap<String, SampleFamily> input,
+                     String expression,
+                     Result want,
+                     boolean isThrow) {
         Expression e = DSL.parse(expression);
         Result r = null;
         try {
@@ -186,6 +171,6 @@ public class AggregationTest {
         if (isThrow) {
             fail("Should throw something");
         }
-        assertThat(r, is(want));
+        assertThat(r).isEqualTo(want);
     }
 }
diff --git a/oap-server/analyzer/meter-analyzer/src/test/java/org/apache/skywalking/oap/meter/analyzer/dsl/AnalyzerTest.java b/oap-server/analyzer/meter-analyzer/src/test/java/org/apache/skywalking/oap/meter/analyzer/dsl/AnalyzerTest.java
index b728210004..8618b7631e 100644
--- a/oap-server/analyzer/meter-analyzer/src/test/java/org/apache/skywalking/oap/meter/analyzer/dsl/AnalyzerTest.java
+++ b/oap-server/analyzer/meter-analyzer/src/test/java/org/apache/skywalking/oap/meter/analyzer/dsl/AnalyzerTest.java
@@ -19,8 +19,6 @@
 package org.apache.skywalking.oap.meter.analyzer.dsl;
 
 import com.google.common.collect.ImmutableMap;
-import java.util.HashMap;
-import java.util.Map;
 import org.apache.skywalking.oap.meter.analyzer.Analyzer;
 import org.apache.skywalking.oap.server.core.analysis.IDManager;
 import org.apache.skywalking.oap.server.core.analysis.StreamDefinition;
@@ -36,25 +34,28 @@ import org.apache.skywalking.oap.server.core.config.NamingControl;
 import org.apache.skywalking.oap.server.core.config.group.EndpointNameGrouping;
 import org.apache.skywalking.oap.server.core.storage.StorageException;
 import org.apache.skywalking.oap.server.library.module.ModuleManager;
-import org.junit.AfterClass;
-import org.junit.Assert;
-import org.junit.Before;
-import org.junit.BeforeClass;
-import org.junit.Test;
-import org.junit.runner.RunWith;
+import org.junit.jupiter.api.AfterAll;
+import org.junit.jupiter.api.BeforeAll;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.extension.ExtendWith;
 import org.mockito.Mock;
 import org.mockito.Mockito;
-import org.mockito.junit.MockitoJUnitRunner;
+import org.mockito.junit.jupiter.MockitoExtension;
 import org.powermock.reflect.Whitebox;
 
+import java.util.HashMap;
+import java.util.Map;
+
 import static com.google.common.collect.ImmutableMap.of;
-import static org.hamcrest.core.Is.is;
+import static org.assertj.core.api.AssertionsForClassTypes.assertThat;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.mockito.ArgumentMatchers.any;
 import static org.mockito.Mockito.doAnswer;
 import static org.mockito.Mockito.doNothing;
 import static org.mockito.Mockito.spy;
 
-@RunWith(MockitoJUnitRunner.Silent.class)
+@ExtendWith(MockitoExtension.class)
 public class AnalyzerTest {
 
     @Mock
@@ -62,7 +63,7 @@ public class AnalyzerTest {
     private MeterSystem meterSystem;
     private Analyzer analyzer;
 
-    @Before
+    @BeforeEach
     public void setup() throws StorageException {
         meterSystem = spy(new MeterSystem(moduleManager));
         Whitebox.setInternalState(MetricsStreamProcessor.class, "PROCESSOR",
@@ -72,13 +73,13 @@ public class AnalyzerTest {
 
     }
 
-    @BeforeClass
+    @BeforeAll
     public static void init() {
         MeterEntity.setNamingControl(
             new NamingControl(512, 512, 512, new EndpointNameGrouping()));
     }
 
-    @AfterClass
+    @AfterAll
     public static void tearDown() {
         MeterEntity.setNamingControl(null);
     }
@@ -117,14 +118,14 @@ public class AnalyzerTest {
         AvgFunction t3Cn = actValues.get(IDManager.ServiceInstanceID.buildId(
             IDManager.ServiceID.buildId("t3", true), "cn"));
 
-        Assert.assertEquals(50L, t1.getSummation(), 0.0);
-        Assert.assertEquals(1L, t1.getCount(), 0.0);
+        assertEquals(50L, t1.getSummation(), 0.0);
+        assertEquals(1L, t1.getCount(), 0.0);
 
-        Assert.assertEquals(150L, t1Us.getSummation(), 0.0);
-        Assert.assertEquals(1L, t1Us.getCount(), 0.0);
+        assertEquals(150L, t1Us.getSummation(), 0.0);
+        assertEquals(1L, t1Us.getCount(), 0.0);
 
-        Assert.assertEquals(54L, t3Cn.getSummation(), 0.0);
-        Assert.assertEquals(1L, t3Cn.getCount(), 0.0);
+        assertEquals(54L, t3Cn.getSummation(), 0.0);
+        assertEquals(1L, t3Cn.getCount(), 0.0);
     }
 
     @Test
@@ -162,18 +163,18 @@ public class AnalyzerTest {
         AvgLabeledFunction t3Cn = actValues.get(IDManager.ServiceInstanceID.buildId(
             IDManager.ServiceID.buildId("t3", true), "cn"));
 
-        Assert.assertEquals(50L, t1.getSummation().get(""), 0.0);
-        Assert.assertEquals(1L, t1.getCount().get(""), 0.0);
+        assertEquals(50L, t1.getSummation().get(""), 0.0);
+        assertEquals(1L, t1.getCount().get(""), 0.0);
 
-        Assert.assertEquals(50L, t1Us.getSummation().get(""), 0.0);
-        Assert.assertEquals(100L, t1Us.getSummation().get("10.0.0.1"), 0.0);
-        Assert.assertEquals(1L, t1Us.getCount().get(""), 0.0);
-        Assert.assertEquals(1L, t1Us.getCount().get("10.0.0.1"), 0.0);
+        assertEquals(50L, t1Us.getSummation().get(""), 0.0);
+        assertEquals(100L, t1Us.getSummation().get("10.0.0.1"), 0.0);
+        assertEquals(1L, t1Us.getCount().get(""), 0.0);
+        assertEquals(1L, t1Us.getCount().get("10.0.0.1"), 0.0);
 
-        Assert.assertEquals(51L, t3Cn.getSummation().get(""), 0.0);
-        Assert.assertEquals(3L, t3Cn.getSummation().get("10.0.0.1"), 0.0);
-        Assert.assertEquals(1L, t3Cn.getCount().get(""), 0.0);
-        Assert.assertEquals(1L, t3Cn.getCount().get("10.0.0.1"), 0.0);
+        assertEquals(51L, t3Cn.getSummation().get(""), 0.0);
+        assertEquals(3L, t3Cn.getSummation().get("10.0.0.1"), 0.0);
+        assertEquals(1L, t3Cn.getCount().get(""), 0.0);
+        assertEquals(1L, t3Cn.getCount().get("10.0.0.1"), 0.0);
     }
 
     @Test
@@ -217,7 +218,7 @@ public class AnalyzerTest {
         }).when(meterSystem).doStreamingCalculation(any());
 
         analyzer.analyse(input);
-        Assert.assertEquals(2, actValues.size());
+        assertEquals(2, actValues.size());
         String expServiceId = IDManager.ServiceID.buildId("service1", true);
         IntList expRanks = new IntList(2) {
             {
@@ -226,18 +227,18 @@ public class AnalyzerTest {
             }
         };
         actValues.forEach((key, actValue) -> {
-            Assert.assertEquals(expServiceId, actValue.getEntityId());
-            Assert.assertThat(expRanks, is(actValue.getRanks()));
+            assertEquals(expServiceId, actValue.getEntityId());
+            assertThat(expRanks).isEqualTo(actValue.getRanks());
 
         });
         AvgHistogramPercentileFunction instance1 = actValues.get("instance1");
         AvgHistogramPercentileFunction instance2 = actValues.get("instance2");
-        Assert.assertEquals(100L, instance1.getSummation().get("instance1:25"), 0.0);
-        Assert.assertEquals(300L, instance1.getSummation().get("instance1:1250"), 0.0);
-        Assert.assertEquals(1L, instance1.getCount().get("instance1:25"), 0.0);
-        Assert.assertEquals(1L, instance1.getCount().get("instance1:1250"), 0.0);
+        assertEquals(100L, instance1.getSummation().get("instance1:25"), 0.0);
+        assertEquals(300L, instance1.getSummation().get("instance1:1250"), 0.0);
+        assertEquals(1L, instance1.getCount().get("instance1:25"), 0.0);
+        assertEquals(1L, instance1.getCount().get("instance1:1250"), 0.0);
 
-        Assert.assertEquals(122L, instance2.getSummation().get("instance2:750"), 0.0);
-        Assert.assertEquals(1L, instance2.getCount().get("instance2:750"), 0.0);
+        assertEquals(122L, instance2.getSummation().get("instance2:750"), 0.0);
+        assertEquals(1L, instance2.getCount().get("instance2:750"), 0.0);
     }
 }
diff --git a/oap-server/analyzer/meter-analyzer/src/test/java/org/apache/skywalking/oap/meter/analyzer/dsl/ArithmeticTest.java b/oap-server/analyzer/meter-analyzer/src/test/java/org/apache/skywalking/oap/meter/analyzer/dsl/ArithmeticTest.java
index 86e170e27a..4a2afe4c61 100644
--- a/oap-server/analyzer/meter-analyzer/src/test/java/org/apache/skywalking/oap/meter/analyzer/dsl/ArithmeticTest.java
+++ b/oap-server/analyzer/meter-analyzer/src/test/java/org/apache/skywalking/oap/meter/analyzer/dsl/ArithmeticTest.java
@@ -20,38 +20,18 @@ package org.apache.skywalking.oap.meter.analyzer.dsl;
 
 import com.google.common.collect.ImmutableMap;
 import lombok.extern.slf4j.Slf4j;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.junit.runners.Parameterized;
+import org.junit.jupiter.params.ParameterizedTest;
+import org.junit.jupiter.params.provider.MethodSource;
 
 import java.util.Arrays;
 import java.util.Collection;
 
 import static com.google.common.collect.ImmutableMap.of;
-import static org.hamcrest.CoreMatchers.is;
-import static org.hamcrest.MatcherAssert.assertThat;
-import static org.junit.Assert.fail;
+import static org.assertj.core.api.AssertionsForClassTypes.assertThat;
+import static org.junit.jupiter.api.Assertions.fail;
 
 @Slf4j
-@RunWith(Parameterized.class)
 public class ArithmeticTest {
-
-    @Parameterized.Parameter
-    public String name;
-
-    @Parameterized.Parameter(1)
-    public ImmutableMap<String, SampleFamily> input;
-
-    @Parameterized.Parameter(2)
-    public String expression;
-
-    @Parameterized.Parameter(3)
-    public Result want;
-
-    @Parameterized.Parameter(4)
-    public boolean isThrow;
-
-    @Parameterized.Parameters(name = "{index}: {0}")
     public static Collection<Object[]> data() {
         return Arrays.asList(new Object[][] {
             {
@@ -466,8 +446,13 @@ public class ArithmeticTest {
             });
     }
 
-    @Test
-    public void test() {
+    @ParameterizedTest(name = "{0}")
+    @MethodSource("data")
+    public void test(String name,
+                     ImmutableMap<String, SampleFamily> input,
+                     String expression,
+                     Result want,
+                     boolean isThrow) {
         Expression e = DSL.parse(expression);
         Result r = null;
         try {
@@ -482,6 +467,6 @@ public class ArithmeticTest {
         if (isThrow) {
             fail("Should throw something");
         }
-        assertThat(r, is(want));
+        assertThat(r).isEqualTo(want);
     }
 }
diff --git a/oap-server/analyzer/meter-analyzer/src/test/java/org/apache/skywalking/oap/meter/analyzer/dsl/BasicTest.java b/oap-server/analyzer/meter-analyzer/src/test/java/org/apache/skywalking/oap/meter/analyzer/dsl/BasicTest.java
index 5ed6e1e3a9..004b2d8b79 100644
--- a/oap-server/analyzer/meter-analyzer/src/test/java/org/apache/skywalking/oap/meter/analyzer/dsl/BasicTest.java
+++ b/oap-server/analyzer/meter-analyzer/src/test/java/org/apache/skywalking/oap/meter/analyzer/dsl/BasicTest.java
@@ -20,38 +20,18 @@ package org.apache.skywalking.oap.meter.analyzer.dsl;
 
 import com.google.common.collect.ImmutableMap;
 import lombok.extern.slf4j.Slf4j;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.junit.runners.Parameterized;
+import org.junit.jupiter.params.ParameterizedTest;
+import org.junit.jupiter.params.provider.MethodSource;
 
 import java.util.Arrays;
 import java.util.Collection;
 
 import static com.google.common.collect.ImmutableMap.of;
-import static org.hamcrest.CoreMatchers.is;
-import static org.hamcrest.MatcherAssert.assertThat;
-import static org.junit.Assert.fail;
+import static org.assertj.core.api.AssertionsForClassTypes.assertThat;
+import static org.junit.jupiter.api.Assertions.fail;
 
 @Slf4j
-@RunWith(Parameterized.class)
 public class BasicTest {
-
-    @Parameterized.Parameter
-    public String name;
-
-    @Parameterized.Parameter(1)
-    public ImmutableMap<String, SampleFamily> input;
-
-    @Parameterized.Parameter(2)
-    public String expression;
-
-    @Parameterized.Parameter(3)
-    public Result want;
-
-    @Parameterized.Parameter(4)
-    public boolean isThrow;
-
-    @Parameterized.Parameters(name = "{index}: {0}")
     public static Collection<Object[]> data() {
         return Arrays.asList(new Object[][] {
             {
@@ -71,8 +51,13 @@ public class BasicTest {
         });
     }
 
-    @Test
-    public void test() {
+    @ParameterizedTest(name = "{0}")
+    @MethodSource("data")
+    public void test(String name,
+                     ImmutableMap<String, SampleFamily> input,
+                     String expression,
+                     Result want,
+                     boolean isThrow) {
         Expression e = DSL.parse(expression);
         Result r = null;
         try {
@@ -87,6 +72,6 @@ public class BasicTest {
         if (isThrow) {
             fail("Should throw something");
         }
-        assertThat(r, is(want));
+        assertThat(r).isEqualTo(want);
     }
-}
\ No newline at end of file
+}
diff --git a/oap-server/analyzer/meter-analyzer/src/test/java/org/apache/skywalking/oap/meter/analyzer/dsl/ExpressionParsingTest.java b/oap-server/analyzer/meter-analyzer/src/test/java/org/apache/skywalking/oap/meter/analyzer/dsl/ExpressionParsingTest.java
index 4148efa6c3..b93907057d 100644
--- a/oap-server/analyzer/meter-analyzer/src/test/java/org/apache/skywalking/oap/meter/analyzer/dsl/ExpressionParsingTest.java
+++ b/oap-server/analyzer/meter-analyzer/src/test/java/org/apache/skywalking/oap/meter/analyzer/dsl/ExpressionParsingTest.java
@@ -21,35 +21,18 @@ package org.apache.skywalking.oap.meter.analyzer.dsl;
 import com.google.common.collect.Sets;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.skywalking.oap.server.core.analysis.meter.ScopeType;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.junit.runners.Parameterized;
+import org.junit.jupiter.params.ParameterizedTest;
+import org.junit.jupiter.params.provider.MethodSource;
 
 import java.util.Arrays;
 import java.util.Collection;
 import java.util.Collections;
 
-import static org.hamcrest.CoreMatchers.is;
-import static org.hamcrest.MatcherAssert.assertThat;
-import static org.junit.Assert.fail;
+import static org.assertj.core.api.AssertionsForClassTypes.assertThat;
+import static org.junit.jupiter.api.Assertions.fail;
 
 @Slf4j
-@RunWith(Parameterized.class)
 public class ExpressionParsingTest {
-
-    @Parameterized.Parameter
-    public String name;
-
-    @Parameterized.Parameter(1)
-    public String expression;
-
-    @Parameterized.Parameter(2)
-    public ExpressionParsingContext want;
-
-    @Parameterized.Parameter(3)
-    public boolean isThrow;
-
-    @Parameterized.Parameters(name = "{index}: {0}")
     public static Collection<Object[]> data() {
         return Arrays.asList(new Object[][] {
             {
@@ -106,8 +89,12 @@ public class ExpressionParsingTest {
         });
     }
 
-    @Test
-    public void test() {
+    @ParameterizedTest(name = "{0}")
+    @MethodSource("data")
+    public void test(String name,
+                     String expression,
+                     ExpressionParsingContext want,
+                     boolean isThrow) {
         Expression e = DSL.parse(expression);
         ExpressionParsingContext r = null;
         try {
@@ -122,6 +109,6 @@ public class ExpressionParsingTest {
         if (isThrow) {
             fail("Should throw something");
         }
-        assertThat(r, is(want));
+        assertThat(r).isEqualTo(want);
     }
 }
diff --git a/oap-server/analyzer/meter-analyzer/src/test/java/org/apache/skywalking/oap/meter/analyzer/dsl/FilterTest.java b/oap-server/analyzer/meter-analyzer/src/test/java/org/apache/skywalking/oap/meter/analyzer/dsl/FilterTest.java
index e72defe8f7..7b73206807 100644
--- a/oap-server/analyzer/meter-analyzer/src/test/java/org/apache/skywalking/oap/meter/analyzer/dsl/FilterTest.java
+++ b/oap-server/analyzer/meter-analyzer/src/test/java/org/apache/skywalking/oap/meter/analyzer/dsl/FilterTest.java
@@ -18,38 +18,19 @@
 
 package org.apache.skywalking.oap.meter.analyzer.dsl;
 
-import static org.hamcrest.CoreMatchers.is;
-import static org.hamcrest.MatcherAssert.assertThat;
-
-import static com.google.common.collect.ImmutableMap.of;
+import com.google.common.collect.ImmutableMap;
+import lombok.extern.slf4j.Slf4j;
+import org.junit.jupiter.params.ParameterizedTest;
+import org.junit.jupiter.params.provider.MethodSource;
 
 import java.util.Arrays;
 import java.util.Collection;
 
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.junit.runners.Parameterized;
-
-import com.google.common.collect.ImmutableMap;
-
-import lombok.extern.slf4j.Slf4j;
+import static com.google.common.collect.ImmutableMap.of;
+import static org.assertj.core.api.AssertionsForClassTypes.assertThat;
 
 @Slf4j
-@RunWith(Parameterized.class)
 public class FilterTest {
-    @Parameterized.Parameter
-    public String name;
-
-    @Parameterized.Parameter(1)
-    public ImmutableMap<String, SampleFamily> input;
-
-    @Parameterized.Parameter(2)
-    public String expression;
-
-    @Parameterized.Parameter(3)
-    public Result want;
-
-    @Parameterized.Parameters(name = "{index}: {0}")
     public static Collection<Object[]> data() {
         final SampleFamily sf =
             SampleFamilyBuilder.newBuilder(
@@ -98,10 +79,14 @@ public class FilterTest {
         });
     }
 
-    @Test
-    public void test() {
+    @ParameterizedTest(name = "{0}")
+    @MethodSource("data")
+    public void test(String name,
+                     ImmutableMap<String, SampleFamily> input,
+                     String expression,
+                     Result want) {
         Expression e = DSL.parse(expression);
         Result r = e.run(input);
-        assertThat(r, is(want));
+        assertThat(r).isEqualTo(want);
     }
 }
diff --git a/oap-server/analyzer/meter-analyzer/src/test/java/org/apache/skywalking/oap/meter/analyzer/dsl/FunctionTest.java b/oap-server/analyzer/meter-analyzer/src/test/java/org/apache/skywalking/oap/meter/analyzer/dsl/FunctionTest.java
index 568aa36f8a..edc2e0a7f1 100644
--- a/oap-server/analyzer/meter-analyzer/src/test/java/org/apache/skywalking/oap/meter/analyzer/dsl/FunctionTest.java
+++ b/oap-server/analyzer/meter-analyzer/src/test/java/org/apache/skywalking/oap/meter/analyzer/dsl/FunctionTest.java
@@ -20,38 +20,18 @@ package org.apache.skywalking.oap.meter.analyzer.dsl;
 
 import com.google.common.collect.ImmutableMap;
 import lombok.extern.slf4j.Slf4j;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.junit.runners.Parameterized;
+import org.junit.jupiter.params.ParameterizedTest;
+import org.junit.jupiter.params.provider.MethodSource;
 
 import java.util.Arrays;
 import java.util.Collection;
 
 import static com.google.common.collect.ImmutableMap.of;
-import static org.hamcrest.CoreMatchers.is;
-import static org.hamcrest.MatcherAssert.assertThat;
-import static org.junit.Assert.fail;
+import static org.assertj.core.api.AssertionsForClassTypes.assertThat;
+import static org.junit.jupiter.api.Assertions.fail;
 
 @Slf4j
-@RunWith(Parameterized.class)
 public class FunctionTest {
-
-    @Parameterized.Parameter
-    public String name;
-
-    @Parameterized.Parameter(1)
-    public ImmutableMap<String, SampleFamily> input;
-
-    @Parameterized.Parameter(2)
-    public String expression;
-
-    @Parameterized.Parameter(3)
-    public Result want;
-
-    @Parameterized.Parameter(4)
-    public boolean isThrow;
-
-    @Parameterized.Parameters(name = "{index}: {0}")
     public static Collection<Object[]> data() {
         return Arrays.asList(new Object[][] {
             {
@@ -135,8 +115,13 @@ public class FunctionTest {
         });
     }
 
-    @Test
-    public void test() {
+    @ParameterizedTest(name = "{0}")
+    @MethodSource("data")
+    public void test(String name,
+                     ImmutableMap<String, SampleFamily> input,
+                     String expression,
+                     Result want,
+                     boolean isThrow) {
         Expression e = DSL.parse(expression);
         Result r = null;
         try {
@@ -151,6 +136,6 @@ public class FunctionTest {
         if (isThrow) {
             fail("Should throw something");
         }
-        assertThat(r, is(want));
+        assertThat(r).isEqualTo(want);
     }
 }
diff --git a/oap-server/analyzer/meter-analyzer/src/test/java/org/apache/skywalking/oap/meter/analyzer/dsl/IncreaseTest.java b/oap-server/analyzer/meter-analyzer/src/test/java/org/apache/skywalking/oap/meter/analyzer/dsl/IncreaseTest.java
index 922bb30cec..56fca53bf6 100644
--- a/oap-server/analyzer/meter-analyzer/src/test/java/org/apache/skywalking/oap/meter/analyzer/dsl/IncreaseTest.java
+++ b/oap-server/analyzer/meter-analyzer/src/test/java/org/apache/skywalking/oap/meter/analyzer/dsl/IncreaseTest.java
@@ -21,9 +21,8 @@ package org.apache.skywalking.oap.meter.analyzer.dsl;
 import com.google.common.collect.ImmutableMap;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.skywalking.oap.meter.analyzer.dsl.counter.CounterWindow;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.junit.runners.Parameterized;
+import org.junit.jupiter.params.ParameterizedTest;
+import org.junit.jupiter.params.provider.MethodSource;
 
 import java.util.Collection;
 import java.util.List;
@@ -31,30 +30,11 @@ import java.util.List;
 import static com.google.common.collect.ImmutableMap.of;
 import static java.time.Instant.parse;
 import static java.util.Arrays.asList;
-import static org.hamcrest.CoreMatchers.is;
-import static org.hamcrest.MatcherAssert.assertThat;
-import static org.junit.Assert.fail;
+import static org.assertj.core.api.AssertionsForClassTypes.assertThat;
+import static org.junit.jupiter.api.Assertions.fail;
 
 @Slf4j
-@RunWith(Parameterized.class)
 public class IncreaseTest {
-
-    @Parameterized.Parameter
-    public String name;
-
-    @Parameterized.Parameter(1)
-    public List<ImmutableMap<String, SampleFamily>> input;
-
-    @Parameterized.Parameter(2)
-    public String expression;
-
-    @Parameterized.Parameter(3)
-    public List<Result> want;
-
-    @Parameterized.Parameter(4)
-    public boolean isThrow;
-
-    @Parameterized.Parameters(name = "{index}: {0}")
     public static Collection<Object[]> data() {
         return asList(new Object[][] {
             {
@@ -231,8 +211,13 @@ public class IncreaseTest {
         });
     }
 
-    @Test
-    public void test() {
+    @ParameterizedTest(name = "{0}")
+    @MethodSource("data")
+    public void test(String name,
+                     List<ImmutableMap<String, SampleFamily>> input,
+                     String expression,
+                     List<Result> want,
+                     boolean isThrow) {
         Expression e = DSL.parse(expression);
         CounterWindow.INSTANCE.reset();
         for (int i = 0; i < input.size(); i++) {
@@ -249,7 +234,7 @@ public class IncreaseTest {
             if (isThrow) {
                 fail("Should throw something");
             }
-            assertThat(r, is(want.get(i)));
+            assertThat(r).isEqualTo(want.get(i));
         }
     }
 }
diff --git a/oap-server/analyzer/meter-analyzer/src/test/java/org/apache/skywalking/oap/meter/analyzer/dsl/K8sTagTest.java b/oap-server/analyzer/meter-analyzer/src/test/java/org/apache/skywalking/oap/meter/analyzer/dsl/K8sTagTest.java
index 7ceda7d9f3..5f0d71c2bb 100644
--- a/oap-server/analyzer/meter-analyzer/src/test/java/org/apache/skywalking/oap/meter/analyzer/dsl/K8sTagTest.java
+++ b/oap-server/analyzer/meter-analyzer/src/test/java/org/apache/skywalking/oap/meter/analyzer/dsl/K8sTagTest.java
@@ -27,10 +27,6 @@ import io.kubernetes.client.openapi.models.V1Pod;
 import io.kubernetes.client.openapi.models.V1PodStatus;
 import io.kubernetes.client.openapi.models.V1Service;
 import io.kubernetes.client.openapi.models.V1ServiceSpec;
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.Map;
-import java.util.Optional;
 import io.kubernetes.client.openapi.models.V1ServiceStatus;
 import lombok.SneakyThrows;
 import lombok.extern.slf4j.Slf4j;
@@ -40,46 +36,32 @@ import org.apache.skywalking.library.kubernetes.KubernetesServices;
 import org.apache.skywalking.library.kubernetes.ObjectID;
 import org.apache.skywalking.oap.meter.analyzer.dsl.tagOpt.Retag;
 import org.apache.skywalking.oap.server.core.analysis.IDManager;
-import org.junit.Before;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.junit.runners.Parameterized;
+import org.junit.jupiter.api.AfterEach;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.extension.ExtendWith;
+import org.junit.jupiter.params.ParameterizedTest;
+import org.junit.jupiter.params.provider.MethodSource;
+import org.mockito.MockedStatic;
 import org.mockito.Mockito;
-import org.powermock.api.mockito.PowerMockito;
-import org.powermock.core.classloader.annotations.PowerMockIgnore;
-import org.powermock.core.classloader.annotations.PrepareForTest;
-import org.powermock.modules.junit4.PowerMockRunner;
-import org.powermock.modules.junit4.PowerMockRunnerDelegate;
+import org.mockito.junit.jupiter.MockitoExtension;
+import org.mockito.junit.jupiter.MockitoSettings;
+import org.mockito.quality.Strictness;
 import org.powermock.reflect.Whitebox;
 
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Map;
+import java.util.Optional;
+
 import static com.google.common.collect.ImmutableMap.of;
-import static org.hamcrest.CoreMatchers.is;
-import static org.hamcrest.MatcherAssert.assertThat;
-import static org.junit.Assert.fail;
+import static org.assertj.core.api.AssertionsForClassTypes.assertThat;
+import static org.junit.jupiter.api.Assertions.fail;
+import static org.mockito.Mockito.when;
 
 @Slf4j
-@PowerMockIgnore({"javax.net.ssl.*", "javax.management.*"})
-@RunWith(PowerMockRunner.class)
-@PowerMockRunnerDelegate(Parameterized.class)
-@PrepareForTest({KubernetesPods.class, KubernetesServices.class, KubernetesClient.class})
+@ExtendWith(MockitoExtension.class)
+@MockitoSettings(strictness = Strictness.WARN)
 public class K8sTagTest {
-
-    @Parameterized.Parameter
-    public String name;
-
-    @Parameterized.Parameter(1)
-    public ImmutableMap<String, SampleFamily> input;
-
-    @Parameterized.Parameter(2)
-    public String expression;
-
-    @Parameterized.Parameter(3)
-    public Result want;
-
-    @Parameterized.Parameter(4)
-    public boolean isThrow;
-
-    @Parameterized.Parameters(name = "{index}: {0}")
     public static Collection<Object[]> data() {
         return Arrays.asList(new Object[][] {
             {
@@ -255,10 +237,12 @@ public class K8sTagTest {
             });
     }
 
+    private MockedStatic<KubernetesClient> kubernetesClientMockedStatic;
+
     @SneakyThrows
-    @Before
+    @BeforeEach
     public void setup() {
-        PowerMockito.mockStatic(KubernetesClient.class);
+        kubernetesClientMockedStatic = Mockito.mockStatic(KubernetesClient.class);
 
         Whitebox.setInternalState(KubernetesServices.class, "INSTANCE",
                                   Mockito.mock(KubernetesServices.class)
@@ -267,31 +251,37 @@ public class K8sTagTest {
                                   Mockito.mock(KubernetesPods.class)
         );
 
-        PowerMockito.when(KubernetesServices.INSTANCE.list()).thenReturn(ImmutableList.of(
+        when(KubernetesServices.INSTANCE.list()).thenReturn(ImmutableList.of(
                 mockService("nginx-service", "default", of("run", "nginx"), "2.2.2.1"),
                 mockService("kube-state-metrics", "kube-system", of("run", "kube-state-metrics"), "2.2.2.2")));
         ImmutableList.of(
             mockService("nginx-service", "default", of("run", "nginx"), "2.2.2.1"),
             mockService("kube-state-metrics", "kube-system", of("run", "kube-state-metrics"), "2.2.2.2"))
             .forEach(svc ->
-                PowerMockito
-                .when(KubernetesServices.INSTANCE.findByID(ObjectID.builder().namespace(svc.getMetadata().getNamespace()).name(svc.getMetadata().getName()).build()))
+                when(KubernetesServices.INSTANCE.findByID(ObjectID.builder().namespace(svc.getMetadata().getNamespace()).name(svc.getMetadata().getName()).build()))
                 .thenReturn(Optional.of(svc))
             );
         ImmutableList.of(
             mockPod("my-nginx-5dc4865748-mbczh", "default", of("run", "nginx"), "1.1.1.1"),
             mockPod("kube-state-metrics-6f979fd498-z7xwx", "kube-system", of("run", "kube-state-metrics"), "1.1.1.2"))
             .forEach(pod -> {
-                PowerMockito
-                .when(KubernetesPods.INSTANCE.findByIP(pod.getStatus().getPodIP()))
-                .thenReturn(Optional.of(pod));
-                PowerMockito
-                .when(KubernetesPods.INSTANCE.findByObjectID(ObjectID.builder().name(pod.getMetadata().getName()).namespace(pod.getMetadata().getNamespace()).build())).thenReturn(Optional.of(pod));
+                when(KubernetesPods.INSTANCE.findByIP(pod.getStatus().getPodIP())).thenReturn(Optional.of(pod));
+                when(KubernetesPods.INSTANCE.findByObjectID(ObjectID.builder().name(pod.getMetadata().getName()).namespace(pod.getMetadata().getNamespace()).build())).thenReturn(Optional.of(pod));
         });
     }
 
-    @Test
-    public void test() {
+    @AfterEach
+    public void after() {
+        kubernetesClientMockedStatic.close();
+    }
+
+    @ParameterizedTest(name = "{index}: {0}")
+    @MethodSource("data")
+    public void test(String name,
+                     ImmutableMap<String, SampleFamily> input,
+                     String expression,
+                     Result want,
+                     boolean isThrow) {
         Expression e = DSL.parse(expression);
         Result r = null;
         try {
@@ -306,7 +296,7 @@ public class K8sTagTest {
         if (isThrow) {
             fail("Should throw something");
         }
-        assertThat(r, is(want));
+        assertThat(r).isEqualTo(want);
     }
 
     private V1Service mockService(String name, String namespace, Map<String, String> selector, String ipAddress) {
diff --git a/oap-server/analyzer/meter-analyzer/src/test/java/org/apache/skywalking/oap/meter/analyzer/dsl/ScopeTest.java b/oap-server/analyzer/meter-analyzer/src/test/java/org/apache/skywalking/oap/meter/analyzer/dsl/ScopeTest.java
index 2722be7f37..a3117ddeb6 100644
--- a/oap-server/analyzer/meter-analyzer/src/test/java/org/apache/skywalking/oap/meter/analyzer/dsl/ScopeTest.java
+++ b/oap-server/analyzer/meter-analyzer/src/test/java/org/apache/skywalking/oap/meter/analyzer/dsl/ScopeTest.java
@@ -19,49 +19,30 @@
 package org.apache.skywalking.oap.meter.analyzer.dsl;
 
 import com.google.common.collect.ImmutableMap;
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.HashMap;
-import java.util.Map;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.skywalking.oap.server.core.analysis.Layer;
 import org.apache.skywalking.oap.server.core.analysis.meter.MeterEntity;
 import org.apache.skywalking.oap.server.core.config.NamingControl;
 import org.apache.skywalking.oap.server.core.config.group.EndpointNameGrouping;
 import org.apache.skywalking.oap.server.core.source.DetectPoint;
-import org.junit.AfterClass;
-import org.junit.BeforeClass;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.junit.runners.Parameterized;
+import org.junit.jupiter.api.AfterAll;
+import org.junit.jupiter.api.BeforeAll;
+import org.junit.jupiter.params.ParameterizedTest;
+import org.junit.jupiter.params.provider.MethodSource;
+
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.Map;
 
 import static com.google.common.collect.ImmutableMap.of;
-import static org.hamcrest.CoreMatchers.is;
-import static org.hamcrest.MatcherAssert.assertThat;
-import static org.junit.Assert.fail;
+import static org.assertj.core.api.AssertionsForClassTypes.assertThat;
+import static org.junit.jupiter.api.Assertions.fail;
 
 @Slf4j
-@RunWith(Parameterized.class)
 public class ScopeTest {
-
-    @Parameterized.Parameter
-    public String name;
-
-    @Parameterized.Parameter(1)
-    public ImmutableMap<String, SampleFamily> input;
-
-    @Parameterized.Parameter(2)
-    public String expression;
-
-    @Parameterized.Parameter(3)
-    public boolean isThrow;
-
-    @Parameterized.Parameter(4)
-    public Map<MeterEntity, Sample[]> want;
-
-    @Parameterized.Parameters(name = "{index}: {0}")
     public static Collection<Object[]> data() {
-        // This method is called before `@BeforeClass`.
+        // This method is called before `@BeforeAll`.
         MeterEntity.setNamingControl(
             new NamingControl(512, 512, 512, new EndpointNameGrouping()));
 
@@ -576,19 +557,24 @@ public class ScopeTest {
         });
     }
 
-    @BeforeClass
+    @BeforeAll
     public static void setup() {
         MeterEntity.setNamingControl(
             new NamingControl(512, 512, 512, new EndpointNameGrouping()));
     }
 
-    @AfterClass
+    @AfterAll
     public static void tearDown() {
         MeterEntity.setNamingControl(null);
     }
 
-    @Test
-    public void test() {
+    @ParameterizedTest(name = "{0}")
+    @MethodSource("data")
+    public void test(final String name,
+                     final ImmutableMap<String, SampleFamily> input,
+                     final String expression,
+                     final boolean isThrow,
+                     final Map<MeterEntity, Sample[]> want) {
         Expression e = DSL.parse(expression);
         Result r = null;
         try {
@@ -603,10 +589,10 @@ public class ScopeTest {
         if (isThrow) {
             fail("Should throw something");
         }
-        assertThat(r.isSuccess(), is(true));
+        assertThat(r.isSuccess()).isEqualTo(true);
         Map<MeterEntity, Sample[]> meterSamplesR = r.getData().context.getMeterSamples();
         meterSamplesR.forEach((meterEntity, samples) -> {
-            assertThat(samples, is(want.get(meterEntity)));
+            assertThat(samples).isEqualTo(want.get(meterEntity));
         });
     }
 }
diff --git a/oap-server/analyzer/meter-analyzer/src/test/java/org/apache/skywalking/oap/meter/analyzer/dsl/TagFilterTest.java b/oap-server/analyzer/meter-analyzer/src/test/java/org/apache/skywalking/oap/meter/analyzer/dsl/TagFilterTest.java
index a520cb7739..458e3d80ea 100644
--- a/oap-server/analyzer/meter-analyzer/src/test/java/org/apache/skywalking/oap/meter/analyzer/dsl/TagFilterTest.java
+++ b/oap-server/analyzer/meter-analyzer/src/test/java/org/apache/skywalking/oap/meter/analyzer/dsl/TagFilterTest.java
@@ -20,38 +20,18 @@ package org.apache.skywalking.oap.meter.analyzer.dsl;
 
 import com.google.common.collect.ImmutableMap;
 import lombok.extern.slf4j.Slf4j;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.junit.runners.Parameterized;
+import org.junit.jupiter.params.ParameterizedTest;
+import org.junit.jupiter.params.provider.MethodSource;
 
 import java.util.Arrays;
 import java.util.Collection;
 
 import static com.google.common.collect.ImmutableMap.of;
-import static org.hamcrest.CoreMatchers.is;
-import static org.hamcrest.MatcherAssert.assertThat;
-import static org.junit.Assert.fail;
+import static org.assertj.core.api.AssertionsForClassTypes.assertThat;
+import static org.junit.jupiter.api.Assertions.fail;
 
 @Slf4j
-@RunWith(Parameterized.class)
 public class TagFilterTest {
-
-    @Parameterized.Parameter
-    public String name;
-
-    @Parameterized.Parameter(1)
-    public ImmutableMap<String, SampleFamily> input;
-
-    @Parameterized.Parameter(2)
-    public String expression;
-
-    @Parameterized.Parameter(3)
-    public Result want;
-
-    @Parameterized.Parameter(4)
-    public boolean isThrow;
-
-    @Parameterized.Parameters(name = "{index}: {0}")
     public static Collection<Object[]> data() {
         final SampleFamily sf =
             SampleFamilyBuilder.newBuilder(
@@ -133,8 +113,13 @@ public class TagFilterTest {
             });
     }
 
-    @Test
-    public void test() {
+    @ParameterizedTest(name = "{0}")
+    @MethodSource("data")
+    public void test(String name,
+                     ImmutableMap<String, SampleFamily> input,
+                     String expression,
+                     Result want,
+                     boolean isThrow) {
         Expression e = DSL.parse(expression);
         Result r = null;
         try {
@@ -149,6 +134,6 @@ public class TagFilterTest {
         if (isThrow) {
             fail("Should throw something");
         }
-        assertThat(r, is(want));
+        assertThat(r).isEqualTo(want);
     }
 }
diff --git a/oap-server/analyzer/meter-analyzer/src/test/java/org/apache/skywalking/oap/meter/analyzer/dsl/ValueFilterTest.java b/oap-server/analyzer/meter-analyzer/src/test/java/org/apache/skywalking/oap/meter/analyzer/dsl/ValueFilterTest.java
index 0603f627d0..8cf82905a2 100644
--- a/oap-server/analyzer/meter-analyzer/src/test/java/org/apache/skywalking/oap/meter/analyzer/dsl/ValueFilterTest.java
+++ b/oap-server/analyzer/meter-analyzer/src/test/java/org/apache/skywalking/oap/meter/analyzer/dsl/ValueFilterTest.java
@@ -19,38 +19,19 @@
 package org.apache.skywalking.oap.meter.analyzer.dsl;
 
 import com.google.common.collect.ImmutableMap;
+import lombok.extern.slf4j.Slf4j;
+import org.junit.jupiter.params.ParameterizedTest;
+import org.junit.jupiter.params.provider.MethodSource;
+
 import java.util.Arrays;
 import java.util.Collection;
-import lombok.extern.slf4j.Slf4j;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.junit.runners.Parameterized;
 
 import static com.google.common.collect.ImmutableMap.of;
-import static org.hamcrest.CoreMatchers.is;
-import static org.hamcrest.MatcherAssert.assertThat;
-import static org.junit.Assert.fail;
+import static org.assertj.core.api.Assertions.assertThat;
+import static org.junit.jupiter.api.Assertions.fail;
 
 @Slf4j
-@RunWith(Parameterized.class)
 public class ValueFilterTest {
-
-    @Parameterized.Parameter
-    public String name;
-
-    @Parameterized.Parameter(1)
-    public ImmutableMap<String, SampleFamily> input;
-
-    @Parameterized.Parameter(2)
-    public String expression;
-
-    @Parameterized.Parameter(3)
-    public Result want;
-
-    @Parameterized.Parameter(4)
-    public boolean isThrow;
-
-    @Parameterized.Parameters(name = "{index}: {0}")
     public static Collection<Object[]> data() {
         return Arrays.asList(new Object[][] {
             {
@@ -140,8 +121,13 @@ public class ValueFilterTest {
             });
     }
 
-    @Test
-    public void test() {
+    @ParameterizedTest(name = "{0}")
+    @MethodSource("data")
+    public void test(final String name,
+                     final ImmutableMap<String, SampleFamily> input,
+                     final String expression,
+                     final Result want,
+                     final boolean isThrow) {
         Expression e = DSL.parse(expression);
         Result r = null;
         try {
@@ -156,6 +142,6 @@ public class ValueFilterTest {
         if (isThrow) {
             fail("Should throw something");
         }
-        assertThat(r, is(want));
+        assertThat(r).isEqualTo(want);
     }
-}
\ No newline at end of file
+}
diff --git a/oap-server/analyzer/meter-analyzer/src/test/java/org/apache/skywalking/oap/meter/analyzer/dsl/counter/CounterWindowTest.java b/oap-server/analyzer/meter-analyzer/src/test/java/org/apache/skywalking/oap/meter/analyzer/dsl/counter/CounterWindowTest.java
index 36e7749b1d..5f829db9ef 100644
--- a/oap-server/analyzer/meter-analyzer/src/test/java/org/apache/skywalking/oap/meter/analyzer/dsl/counter/CounterWindowTest.java
+++ b/oap-server/analyzer/meter-analyzer/src/test/java/org/apache/skywalking/oap/meter/analyzer/dsl/counter/CounterWindowTest.java
@@ -20,10 +20,11 @@ package org.apache.skywalking.oap.meter.analyzer.dsl.counter;
 import com.google.common.collect.ImmutableMap;
 import com.google.common.collect.Lists;
 import io.vavr.Tuple2;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Test;
+
 import java.time.Duration;
 import java.util.List;
-import org.junit.Assert;
-import org.junit.Test;
 
 import static java.time.Instant.parse;
 
@@ -52,7 +53,7 @@ public class CounterWindowTest {
             return e._2 - increase._2;
         }).toArray();
 
-        Assert.assertArrayEquals(new double[] {0, 1d, 1d, 1d, 1d, 0d, 2d, 1d}, actuals, 0.d);
+        Assertions.assertArrayEquals(new double[] {0, 1d, 1d, 1d, 1d, 0d, 2d, 1d}, actuals, 0.d);
     }
 
     @Test
@@ -65,7 +66,7 @@ public class CounterWindowTest {
             return e._2 - increase._2;
         }).toArray();
 
-        Assert.assertArrayEquals(new double[] {0, 1d, 2d, 2d, 2d, 0d, 3d, 3d}, actuals, 0.d);
+        Assertions.assertArrayEquals(new double[] {0, 1d, 2d, 2d, 2d, 0d, 3d, 3d}, actuals, 0.d);
     }
 
     @Test
@@ -78,7 +79,7 @@ public class CounterWindowTest {
             return e._2 - increase._2;
         }).toArray();
 
-        Assert.assertArrayEquals(new double[] {0, 1d, 2d, 3d, 4d, 0d, 5d, 5d}, actuals, 0.d);
+        Assertions.assertArrayEquals(new double[] {0, 1d, 2d, 3d, 4d, 0d, 5d, 5d}, actuals, 0.d);
     }
 
     @Test
@@ -91,6 +92,6 @@ public class CounterWindowTest {
             return e._2 - increase._2;
         }).toArray();
 
-        Assert.assertArrayEquals(new double[] {0, 1d, 2d, 3d, 4d, 0d, 1d, 2d}, actuals, 0.d);
+        Assertions.assertArrayEquals(new double[] {0, 1d, 2d, 3d, 4d, 0d, 1d, 2d}, actuals, 0.d);
     }
 }
diff --git a/oap-server/analyzer/meter-analyzer/src/test/java/org/apache/skywalking/oap/meter/analyzer/dsl/rule/RuleLoaderFailTest.java b/oap-server/analyzer/meter-analyzer/src/test/java/org/apache/skywalking/oap/meter/analyzer/dsl/rule/RuleLoaderFailTest.java
index dbd8580ab3..10c20d646d 100644
--- a/oap-server/analyzer/meter-analyzer/src/test/java/org/apache/skywalking/oap/meter/analyzer/dsl/rule/RuleLoaderFailTest.java
+++ b/oap-server/analyzer/meter-analyzer/src/test/java/org/apache/skywalking/oap/meter/analyzer/dsl/rule/RuleLoaderFailTest.java
@@ -19,27 +19,21 @@
 package org.apache.skywalking.oap.meter.analyzer.dsl.rule;
 
 import lombok.extern.slf4j.Slf4j;
-
 import org.apache.skywalking.oap.meter.analyzer.prometheus.rule.Rules;
-
 import org.apache.skywalking.oap.server.core.UnexpectedException;
 import org.apache.skywalking.oap.server.library.module.ModuleStartException;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.junit.runners.Parameterized;
+import org.junit.jupiter.params.ParameterizedTest;
+import org.junit.jupiter.params.provider.MethodSource;
 
 import java.io.IOException;
 import java.util.Arrays;
 import java.util.Collection;
 import java.util.List;
 
+import static org.junit.jupiter.api.Assertions.assertThrows;
+
 @Slf4j
-@RunWith(Parameterized.class)
 public class RuleLoaderFailTest {
-    @Parameterized.Parameter
-    public List<String> enabledRule;
-
-    @Parameterized.Parameters(name = "{index}: {0}")
     public static Collection<Object[]> data() {
         return Arrays.asList(new Object[][] {
             {Arrays.asList("not-exist-folder/*")},
@@ -51,8 +45,9 @@ public class RuleLoaderFailTest {
         });
     }
 
-    @Test(expected = UnexpectedException.class)
-    public void test() throws ModuleStartException, IOException {
-        Rules.loadRules("otel-rules", enabledRule);
+    @ParameterizedTest
+    @MethodSource("data")
+    public void test(List<String> enabledRule) throws ModuleStartException, IOException {
+        assertThrows(UnexpectedException.class, () -> Rules.loadRules("otel-rules", enabledRule));
     }
 }
diff --git a/oap-server/analyzer/meter-analyzer/src/test/java/org/apache/skywalking/oap/meter/analyzer/dsl/rule/RuleLoaderTest.java b/oap-server/analyzer/meter-analyzer/src/test/java/org/apache/skywalking/oap/meter/analyzer/dsl/rule/RuleLoaderTest.java
index dcd78a0197..09b8c60177 100644
--- a/oap-server/analyzer/meter-analyzer/src/test/java/org/apache/skywalking/oap/meter/analyzer/dsl/rule/RuleLoaderTest.java
+++ b/oap-server/analyzer/meter-analyzer/src/test/java/org/apache/skywalking/oap/meter/analyzer/dsl/rule/RuleLoaderTest.java
@@ -21,29 +21,19 @@ package org.apache.skywalking.oap.meter.analyzer.dsl.rule;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.skywalking.oap.meter.analyzer.prometheus.rule.Rule;
 import org.apache.skywalking.oap.meter.analyzer.prometheus.rule.Rules;
-
 import org.apache.skywalking.oap.server.library.module.ModuleStartException;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.junit.runners.Parameterized;
+import org.junit.jupiter.params.ParameterizedTest;
+import org.junit.jupiter.params.provider.MethodSource;
 
 import java.io.IOException;
 import java.util.Arrays;
 import java.util.Collection;
 import java.util.List;
 
-import static org.hamcrest.CoreMatchers.is;
-import static org.hamcrest.MatcherAssert.assertThat;
+import static org.assertj.core.api.AssertionsForClassTypes.assertThat;
 
 @Slf4j
-@RunWith(Parameterized.class)
 public class RuleLoaderTest {
-    @Parameterized.Parameter
-    public List<String> enabledRule;
-    @Parameterized.Parameter(1)
-    public int rulesNumber;
-
-    @Parameterized.Parameters(name = "{index}: {0}")
     public static Collection<Object[]> data() {
         return Arrays.asList(new Object[][] {
                 {Arrays.asList("test-folder/*.yml"), 1},
@@ -67,10 +57,12 @@ public class RuleLoaderTest {
         });
     }
 
-    @Test
-    public void test() throws ModuleStartException, IOException {
+    @ParameterizedTest
+    @MethodSource("data")
+    public void test(List<String> enabledRule,
+                     int rulesNumber) throws ModuleStartException, IOException {
         List<Rule> rules = Rules.loadRules("otel-rules", enabledRule);
-        assertThat(rules.size(), is(rulesNumber));
+        assertThat(rules.size()).isEqualTo(rulesNumber);
     }
 
 }
diff --git a/oap-server/analyzer/meter-analyzer/src/test/java/org/apache/skywalking/oap/meter/analyzer/dsl/rule/RuleLoaderYAMLFailTest.java b/oap-server/analyzer/meter-analyzer/src/test/java/org/apache/skywalking/oap/meter/analyzer/dsl/rule/RuleLoaderYAMLFailTest.java
index c5acb26607..4d58614851 100644
--- a/oap-server/analyzer/meter-analyzer/src/test/java/org/apache/skywalking/oap/meter/analyzer/dsl/rule/RuleLoaderYAMLFailTest.java
+++ b/oap-server/analyzer/meter-analyzer/src/test/java/org/apache/skywalking/oap/meter/analyzer/dsl/rule/RuleLoaderYAMLFailTest.java
@@ -18,28 +18,20 @@
 
 package org.apache.skywalking.oap.meter.analyzer.dsl.rule;
 
-import lombok.extern.slf4j.Slf4j;
 import org.apache.skywalking.oap.meter.analyzer.prometheus.rule.Rules;
-import org.apache.skywalking.oap.server.library.module.ModuleStartException;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.junit.runners.Parameterized;
+import org.junit.jupiter.params.ParameterizedTest;
+import org.junit.jupiter.params.provider.MethodSource;
 import org.yaml.snakeyaml.error.YAMLException;
 
-import java.io.IOException;
 import java.util.Arrays;
 import java.util.Collection;
 import java.util.List;
 
-@Slf4j
-@RunWith(Parameterized.class)
-public class RuleLoaderYAMLFailTest {
-    @Parameterized.Parameter
-    public List<String> enabledRule;
+import static org.junit.jupiter.api.Assertions.assertThrows;
 
-    @Parameterized.Parameters(name = "{index}: {0}")
+public class RuleLoaderYAMLFailTest {
     public static Collection<Object[]> data() {
-        return Arrays.asList(new Object[][] {
+        return Arrays.asList(new Object[][]{
                 {Arrays.asList("illegal-yaml/test.yml")},
                 {Arrays.asList("illegal-yaml/test")},
                 {Arrays.asList("illegal-yaml/*.yml")},
@@ -47,8 +39,9 @@ public class RuleLoaderYAMLFailTest {
         });
     }
 
-    @Test(expected = YAMLException.class)
-    public void test() throws ModuleStartException, IOException {
-        Rules.loadRules("otel-rules", enabledRule);
+    @ParameterizedTest
+    @MethodSource("data")
+    public void test(List<String> enabledRule) {
+        assertThrows(YAMLException.class, () -> Rules.loadRules("otel-rules", enabledRule));
     }
 }
diff --git a/oap-server/analyzer/meter-analyzer/src/test/resources/mockito-extensions/org.mockito.plugins.MockMaker b/oap-server/analyzer/meter-analyzer/src/test/resources/mockito-extensions/org.mockito.plugins.MockMaker
new file mode 100644
index 0000000000..1f0955d450
--- /dev/null
+++ b/oap-server/analyzer/meter-analyzer/src/test/resources/mockito-extensions/org.mockito.plugins.MockMaker
@@ -0,0 +1 @@
+mock-maker-inline
diff --git a/oap-server/exporter/src/test/java/org/apache/skywalking/oap/server/exporter/provider/grpc/GRPCExporterProviderTest.java b/oap-server/exporter/src/test/java/org/apache/skywalking/oap/server/exporter/provider/grpc/GRPCExporterProviderTest.java
index 80f4d48e55..6378093c78 100644
--- a/oap-server/exporter/src/test/java/org/apache/skywalking/oap/server/exporter/provider/grpc/GRPCExporterProviderTest.java
+++ b/oap-server/exporter/src/test/java/org/apache/skywalking/oap/server/exporter/provider/grpc/GRPCExporterProviderTest.java
@@ -18,8 +18,6 @@
 
 package org.apache.skywalking.oap.server.exporter.provider.grpc;
 
-import java.util.Iterator;
-import java.util.ServiceLoader;
 import org.apache.skywalking.oap.server.core.CoreModule;
 import org.apache.skywalking.oap.server.core.exporter.ExporterModule;
 import org.apache.skywalking.oap.server.exporter.provider.ExporterProvider;
@@ -30,26 +28,29 @@ import org.apache.skywalking.oap.server.library.module.ModuleProviderHolder;
 import org.apache.skywalking.oap.server.library.module.ModuleServiceHolder;
 import org.apache.skywalking.oap.server.library.module.ModuleStartException;
 import org.apache.skywalking.oap.server.library.module.ServiceNotProvidedException;
-import org.junit.Before;
-import org.junit.Ignore;
-import org.junit.Test;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Disabled;
+import org.junit.jupiter.api.Test;
 import org.powermock.reflect.Whitebox;
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertNull;
-import static org.junit.Assert.assertTrue;
+import java.util.Iterator;
+import java.util.ServiceLoader;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
+import static org.junit.jupiter.api.Assertions.assertNull;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 import static org.mockito.Mockito.doNothing;
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.when;
 
-@Ignore
+@Disabled
 public class GRPCExporterProviderTest {
 
     private ServiceLoader<ModuleProvider> serviceLoader = ServiceLoader.load(ModuleProvider.class);
     private ModuleProvider grpcExporterProvider;
 
-    @Before
+    @BeforeEach
     public void setUp() throws ModuleStartException {
         Iterator<ModuleProvider> moduleProviderIterator = serviceLoader.iterator();
         assertTrue(moduleProviderIterator.hasNext());
diff --git a/oap-server/exporter/src/test/java/org/apache/skywalking/oap/server/exporter/provider/grpc/GRPCExporterTest.java b/oap-server/exporter/src/test/java/org/apache/skywalking/oap/server/exporter/provider/grpc/GRPCExporterTest.java
index 54cd928227..07e52c0cf5 100644
--- a/oap-server/exporter/src/test/java/org/apache/skywalking/oap/server/exporter/provider/grpc/GRPCExporterTest.java
+++ b/oap-server/exporter/src/test/java/org/apache/skywalking/oap/server/exporter/provider/grpc/GRPCExporterTest.java
@@ -18,10 +18,11 @@
 
 package org.apache.skywalking.oap.server.exporter.provider.grpc;
 
-import io.grpc.testing.GrpcServerRule;
-import java.util.Collections;
-import java.util.LinkedList;
-import java.util.List;
+import io.grpc.ManagedChannel;
+import io.grpc.Server;
+import io.grpc.inprocess.InProcessChannelBuilder;
+import io.grpc.inprocess.InProcessServerBuilder;
+import io.grpc.util.MutableHandlerRegistry;
 import org.apache.skywalking.oap.server.core.analysis.metrics.MetricsMetaInfo;
 import org.apache.skywalking.oap.server.core.analysis.metrics.WithMetadata;
 import org.apache.skywalking.oap.server.core.exporter.ExportData;
@@ -29,37 +30,75 @@ import org.apache.skywalking.oap.server.core.exporter.ExportEvent;
 import org.apache.skywalking.oap.server.core.source.DefaultScopeDefine;
 import org.apache.skywalking.oap.server.exporter.grpc.MetricExportServiceGrpc;
 import org.apache.skywalking.oap.server.exporter.provider.ExporterSetting;
-import org.junit.Before;
-import org.junit.Rule;
-import org.junit.Test;
+import org.junit.jupiter.api.AfterEach;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
 import org.powermock.reflect.Whitebox;
 
+import java.util.Collections;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.UUID;
+import java.util.concurrent.TimeUnit;
+
 import static org.apache.skywalking.oap.server.core.exporter.ExportEvent.EventType.INCREMENT;
 
 public class GRPCExporterTest {
 
     private GRPCMetricsExporter exporter;
 
-    @Rule
-    public final GrpcServerRule grpcServerRule = new GrpcServerRule().directExecutor();
-
     private MetricExportServiceGrpc.MetricExportServiceImplBase service = new MockMetricExportServiceImpl();
     private MetricsMetaInfo metaInfo = new MetricsMetaInfo("mock-metrics", DefaultScopeDefine.SERVICE);
 
     private MetricExportServiceGrpc.MetricExportServiceBlockingStub stub;
 
-    @Before
+    private Server server;
+    private ManagedChannel channel;
+    private MutableHandlerRegistry serviceRegistry;
+
+    @BeforeEach
     public void setUp() throws Exception {
+        serviceRegistry = new MutableHandlerRegistry();
+        final String name = UUID.randomUUID().toString();
+        InProcessServerBuilder serverBuilder =
+                InProcessServerBuilder
+                        .forName(name)
+                        .fallbackHandlerRegistry(serviceRegistry);
+
+        server = serverBuilder.build();
+        server.start();
+
+        channel = InProcessChannelBuilder.forName(name).build();
+
         ExporterSetting setting = new ExporterSetting();
         setting.setGRPCTargetHost("localhost");
         setting.setGRPCTargetPort(9870);
         exporter = new GRPCMetricsExporter(setting);
-        grpcServerRule.getServiceRegistry().addService(service);
-        stub = MetricExportServiceGrpc.newBlockingStub(grpcServerRule.getChannel());
+        serviceRegistry.addService(service);
+        stub = MetricExportServiceGrpc.newBlockingStub(channel);
         Whitebox.setInternalState(exporter, "blockingStub", stub);
         exporter.start();
     }
 
+    @AfterEach
+    public void after() {
+        channel.shutdown();
+        server.shutdown();
+
+        try {
+            channel.awaitTermination(1L, TimeUnit.MINUTES);
+            server.awaitTermination(1L, TimeUnit.MINUTES);
+        } catch (InterruptedException e) {
+            Thread.currentThread().interrupt();
+            throw new RuntimeException(e);
+        } finally {
+            channel.shutdownNow();
+            channel = null;
+            server.shutdownNow();
+            server = null;
+        }
+    }
+
     @Test
     public void export() {
         ExportEvent event = new ExportEvent(new MockExporterMetrics(), ExportEvent.EventType.TOTAL);
diff --git a/oap-server/microbench/pom.xml b/oap-server/microbench/pom.xml
index 8820a1e424..ec40f3232d 100644
--- a/oap-server/microbench/pom.xml
+++ b/oap-server/microbench/pom.xml
@@ -69,9 +69,8 @@
         </dependency>
         <!--JUNIT-->
         <dependency>
-            <groupId>junit</groupId>
-            <artifactId>junit</artifactId>
-            <version>${junit.version}</version>
+            <groupId>org.junit.jupiter</groupId>
+            <artifactId>junit-jupiter</artifactId>
             <scope>compile</scope>
         </dependency>
     </dependencies>
diff --git a/oap-server/microbench/src/main/java/org/apache/skywalking/oap/server/microbench/base/AbstractMicrobenchmark.java b/oap-server/microbench/src/main/java/org/apache/skywalking/oap/server/microbench/base/AbstractMicrobenchmark.java
index 1c7d75037d..6e55b3a05a 100644
--- a/oap-server/microbench/src/main/java/org/apache/skywalking/oap/server/microbench/base/AbstractMicrobenchmark.java
+++ b/oap-server/microbench/src/main/java/org/apache/skywalking/oap/server/microbench/base/AbstractMicrobenchmark.java
@@ -25,7 +25,7 @@ import java.util.concurrent.LinkedBlockingQueue;
 import java.util.concurrent.ThreadPoolExecutor;
 import java.util.concurrent.TimeUnit;
 
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 import org.openjdk.jmh.annotations.Fork;
 import org.openjdk.jmh.annotations.Measurement;
 import org.openjdk.jmh.annotations.Scope;
diff --git a/oap-server/microbench/src/main/java/org/apache/skywalking/oap/server/microbench/library/datacarrier/common/AtomicRangeIntegerBenchmark.java b/oap-server/microbench/src/main/java/org/apache/skywalking/oap/server/microbench/library/datacarrier/common/AtomicRangeIntegerBenchmark.java
index ce2f05f71d..a08d7ed16a 100644
--- a/oap-server/microbench/src/main/java/org/apache/skywalking/oap/server/microbench/library/datacarrier/common/AtomicRangeIntegerBenchmark.java
+++ b/oap-server/microbench/src/main/java/org/apache/skywalking/oap/server/microbench/library/datacarrier/common/AtomicRangeIntegerBenchmark.java
@@ -20,8 +20,8 @@ package org.apache.skywalking.oap.server.microbench.library.datacarrier.common;
 
 import org.apache.skywalking.oap.server.library.datacarrier.common.AtomicRangeInteger;
 import org.apache.skywalking.oap.server.microbench.base.AbstractMicrobenchmark;
-import org.junit.Assert;
-import org.junit.Test;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Test;
 import org.openjdk.jmh.annotations.Benchmark;
 
 public class AtomicRangeIntegerBenchmark extends AbstractMicrobenchmark {
@@ -34,14 +34,14 @@ public class AtomicRangeIntegerBenchmark extends AbstractMicrobenchmark {
     public void testGetAndIncrement() {
         AtomicRangeInteger atomicI = new AtomicRangeInteger(0, 10);
         for (int i = 0; i < 10; i++) {
-            Assert.assertEquals(i, atomicI.getAndIncrement());
+            Assertions.assertEquals(i, atomicI.getAndIncrement());
         }
-        Assert.assertEquals(0, atomicI.getAndIncrement());
-        Assert.assertEquals(1, atomicI.get());
-        Assert.assertEquals(1, atomicI.intValue());
-        Assert.assertEquals(1, atomicI.longValue());
-        Assert.assertEquals(1, (int) atomicI.floatValue());
-        Assert.assertEquals(1, (int) atomicI.doubleValue());
+        Assertions.assertEquals(0, atomicI.getAndIncrement());
+        Assertions.assertEquals(1, atomicI.get());
+        Assertions.assertEquals(1, atomicI.intValue());
+        Assertions.assertEquals(1, atomicI.longValue());
+        Assertions.assertEquals(1, (int) atomicI.floatValue());
+        Assertions.assertEquals(1, (int) atomicI.doubleValue());
     }
 
     @Test
diff --git a/oap-server/microbench/src/main/java/org/apache/skywalking/oap/server/microbench/library/util/StringFormatGroupBenchmark.java b/oap-server/microbench/src/main/java/org/apache/skywalking/oap/server/microbench/library/util/StringFormatGroupBenchmark.java
index c4697b6c9d..71837e69dc 100644
--- a/oap-server/microbench/src/main/java/org/apache/skywalking/oap/server/microbench/library/util/StringFormatGroupBenchmark.java
+++ b/oap-server/microbench/src/main/java/org/apache/skywalking/oap/server/microbench/library/util/StringFormatGroupBenchmark.java
@@ -20,16 +20,15 @@ package org.apache.skywalking.oap.server.microbench.library.util;
 
 import org.apache.skywalking.oap.server.library.util.StringFormatGroup;
 import org.apache.skywalking.oap.server.microbench.base.AbstractMicrobenchmark;
-
-import java.util.concurrent.TimeUnit;
-
-import org.junit.Assert;
-import org.junit.Test;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Test;
 import org.openjdk.jmh.annotations.Benchmark;
 import org.openjdk.jmh.annotations.BenchmarkMode;
 import org.openjdk.jmh.annotations.Mode;
 import org.openjdk.jmh.annotations.OutputTimeUnit;
 
+import java.util.concurrent.TimeUnit;
+
 @BenchmarkMode(Mode.AverageTime)
 @OutputTimeUnit(TimeUnit.MICROSECONDS)
 public class StringFormatGroupBenchmark extends AbstractMicrobenchmark {
@@ -38,11 +37,11 @@ public class StringFormatGroupBenchmark extends AbstractMicrobenchmark {
     public void testMatch() {
         StringFormatGroup group = new StringFormatGroup();
         group.addRule("/name/*/add", "/name/.+/add");
-        Assert.assertEquals("/name/*/add", group.format("/name/test/add").getName());
+        Assertions.assertEquals("/name/*/add", group.format("/name/test/add").getName());
 
         group = new StringFormatGroup();
         group.addRule("/name/*/add/{orderId}", "/name/.+/add/.*");
-        Assert.assertEquals("/name/*/add/{orderId}", group.format("/name/test/add/12323").getName());
+        Assertions.assertEquals("/name/*/add/{orderId}", group.format("/name/test/add/12323").getName());
     }
 
     @Benchmark
@@ -53,7 +52,7 @@ public class StringFormatGroupBenchmark extends AbstractMicrobenchmark {
         for (int i = 0; i < 100; i++) {
             group.addRule("/name/*/add/{orderId}" + "/" + 1, "/name/.+/add/.*" + "/abc");
         }
-        Assert.assertEquals("/name/*/add/{orderId}", group.format("/name/test/add/12323").getName());
+        Assertions.assertEquals("/name/*/add/{orderId}", group.format("/name/test/add/12323").getName());
     }
 
     /*********************************
diff --git a/oap-server/oal-rt/src/test/java/org/apache/skywalking/oal/rt/parser/DeepAnalysisTest.java b/oap-server/oal-rt/src/test/java/org/apache/skywalking/oal/rt/parser/DeepAnalysisTest.java
index 0b5458f1f3..de22950736 100644
--- a/oap-server/oal-rt/src/test/java/org/apache/skywalking/oal/rt/parser/DeepAnalysisTest.java
+++ b/oap-server/oal-rt/src/test/java/org/apache/skywalking/oal/rt/parser/DeepAnalysisTest.java
@@ -18,32 +18,33 @@
 
 package org.apache.skywalking.oal.rt.parser;
 
-import java.io.IOException;
-import java.util.List;
 import org.apache.skywalking.oap.server.core.analysis.metrics.expression.BooleanMatch;
 import org.apache.skywalking.oap.server.core.analysis.metrics.expression.BooleanNotEqualMatch;
-import org.apache.skywalking.oap.server.core.analysis.metrics.expression.StringMatch;
 import org.apache.skywalking.oap.server.core.analysis.metrics.expression.NotEqualMatch;
+import org.apache.skywalking.oap.server.core.analysis.metrics.expression.StringMatch;
 import org.apache.skywalking.oap.server.core.annotation.AnnotationScan;
 import org.apache.skywalking.oap.server.core.source.DefaultScopeDefine;
 import org.apache.skywalking.oap.server.core.storage.StorageException;
-import org.junit.AfterClass;
-import org.junit.Assert;
-import org.junit.BeforeClass;
-import org.junit.Test;
+import org.junit.jupiter.api.AfterAll;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.BeforeAll;
+import org.junit.jupiter.api.Test;
+
+import java.io.IOException;
+import java.util.List;
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertTrue;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 public class DeepAnalysisTest {
-    @BeforeClass
+    @BeforeAll
     public static void init() throws IOException, StorageException {
         AnnotationScan scopeScan = new AnnotationScan();
         scopeScan.registerListener(new DefaultScopeDefine.Listener());
         scopeScan.scan();
     }
 
-    @AfterClass
+    @AfterAll
     public static void clear() {
         DefaultScopeDefine.reset();
     }
@@ -60,15 +61,15 @@ public class DeepAnalysisTest {
         result = analysis.analysis(result);
 
         EntryMethod method = result.getEntryMethod();
-        Assert.assertEquals("combine", method.getMethodName());
-        Assert.assertEquals("(long)(source.getLatency())", method.getArgsExpressions().get(0));
-        Assert.assertEquals("(long)(1)", method.getArgsExpressions().get(1));
+        Assertions.assertEquals("combine", method.getMethodName());
+        Assertions.assertEquals("(long)(source.getLatency())", method.getArgsExpressions().get(0));
+        Assertions.assertEquals("(long)(1)", method.getArgsExpressions().get(1));
 
         List<SourceColumn> source = result.getFieldsFromSource();
-        Assert.assertEquals(1, source.size());
+        Assertions.assertEquals(1, source.size());
 
         List<DataColumn> persistentFields = result.getPersistentFields();
-        Assert.assertEquals(4, persistentFields.size());
+        Assertions.assertEquals(4, persistentFields.size());
     }
 
     @Test
@@ -83,15 +84,15 @@ public class DeepAnalysisTest {
         result = analysis.analysis(result);
 
         EntryMethod method = result.getEntryMethod();
-        Assert.assertEquals("combine", method.getMethodName());
-        Assert.assertEquals("(long)(source.getLatency())", method.getArgsExpressions().get(0));
-        Assert.assertEquals("(long)(1)", method.getArgsExpressions().get(1));
+        Assertions.assertEquals("combine", method.getMethodName());
+        Assertions.assertEquals("(long)(source.getLatency())", method.getArgsExpressions().get(0));
+        Assertions.assertEquals("(long)(1)", method.getArgsExpressions().get(1));
 
         List<SourceColumn> source = result.getFieldsFromSource();
-        Assert.assertEquals(2, source.size());
+        Assertions.assertEquals(2, source.size());
 
         List<DataColumn> persistentFields = result.getPersistentFields();
-        Assert.assertEquals(4, persistentFields.size());
+        Assertions.assertEquals(4, persistentFields.size());
     }
 
     @Test
@@ -111,22 +112,22 @@ public class DeepAnalysisTest {
         result = analysis.analysis(result);
 
         EntryMethod method = result.getEntryMethod();
-        Assert.assertEquals("combine", method.getMethodName());
-        Assert.assertEquals("(long)(source.getLatency())", method.getArgsExpressions().get(0));
-        Assert.assertEquals("(long)(1)", method.getArgsExpressions().get(1));
+        Assertions.assertEquals("combine", method.getMethodName());
+        Assertions.assertEquals("(long)(source.getLatency())", method.getArgsExpressions().get(0));
+        Assertions.assertEquals("(long)(1)", method.getArgsExpressions().get(1));
 
         List<SourceColumn> source = result.getFieldsFromSource();
-        Assert.assertEquals(2, source.size());
+        Assertions.assertEquals(2, source.size());
 
         List<DataColumn> persistentFields = result.getPersistentFields();
-        Assert.assertEquals(4, persistentFields.size());
+        Assertions.assertEquals(4, persistentFields.size());
 
         List<Expression> filterExpressions = result.getFilters().getFilterExpressions();
-        Assert.assertEquals(1, filterExpressions.size());
+        Assertions.assertEquals(1, filterExpressions.size());
         Expression filterExpression = filterExpressions.get(0);
-        Assert.assertEquals(StringMatch.class.getName(), filterExpression.getExpressionObject());
-        Assert.assertEquals("source.getName()", filterExpression.getLeft());
-        Assert.assertEquals("\"/service/prod/save\"", filterExpression.getRight());
+        Assertions.assertEquals(StringMatch.class.getName(), filterExpression.getExpressionObject());
+        Assertions.assertEquals("source.getName()", filterExpression.getLeft());
+        Assertions.assertEquals("\"/service/prod/save\"", filterExpression.getRight());
     }
 
     @Test
diff --git a/oap-server/oal-rt/src/test/java/org/apache/skywalking/oal/rt/parser/ScriptParserTest.java b/oap-server/oal-rt/src/test/java/org/apache/skywalking/oal/rt/parser/ScriptParserTest.java
index 0ef9f54a5c..6577786e4c 100644
--- a/oap-server/oal-rt/src/test/java/org/apache/skywalking/oal/rt/parser/ScriptParserTest.java
+++ b/oap-server/oal-rt/src/test/java/org/apache/skywalking/oal/rt/parser/ScriptParserTest.java
@@ -18,28 +18,29 @@
 
 package org.apache.skywalking.oal.rt.parser;
 
-import java.io.IOException;
-import java.util.List;
 import org.apache.skywalking.oap.server.core.annotation.AnnotationScan;
 import org.apache.skywalking.oap.server.core.source.DefaultScopeDefine;
 import org.apache.skywalking.oap.server.core.storage.StorageException;
-import org.junit.AfterClass;
-import org.junit.Assert;
-import org.junit.BeforeClass;
-import org.junit.Test;
+import org.junit.jupiter.api.AfterAll;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.BeforeAll;
+import org.junit.jupiter.api.Test;
+
+import java.io.IOException;
+import java.util.List;
 
 public class ScriptParserTest {
 
     private static final String TEST_SOURCE_PACKAGE = ScriptParserTest.class.getPackage().getName() + ".test.source.";
 
-    @BeforeClass
+    @BeforeAll
     public static void init() throws IOException, StorageException {
         AnnotationScan scopeScan = new AnnotationScan();
         scopeScan.registerListener(new DefaultScopeDefine.Listener());
         scopeScan.scan();
     }
 
-    @AfterClass
+    @AfterAll
     public static void clear() {
         DefaultScopeDefine.reset();
     }
@@ -52,19 +53,19 @@ public class ScriptParserTest {
         );
         List<AnalysisResult> results = parser.parse().getMetricsStmts();
 
-        Assert.assertEquals(2, results.size());
+        Assertions.assertEquals(2, results.size());
 
         AnalysisResult endpointAvg = results.get(0);
-        Assert.assertEquals("EndpointRespTime", endpointAvg.getMetricsName());
-        Assert.assertEquals("Endpoint", endpointAvg.getFrom().getSourceName());
-        Assert.assertEquals("[latency]", endpointAvg.getFrom().getSourceAttribute().toString());
-        Assert.assertEquals("longAvg", endpointAvg.getAggregationFuncStmt().getAggregationFunctionName());
+        Assertions.assertEquals("EndpointRespTime", endpointAvg.getMetricsName());
+        Assertions.assertEquals("Endpoint", endpointAvg.getFrom().getSourceName());
+        Assertions.assertEquals("[latency]", endpointAvg.getFrom().getSourceAttribute().toString());
+        Assertions.assertEquals("longAvg", endpointAvg.getAggregationFuncStmt().getAggregationFunctionName());
 
         AnalysisResult serviceAvg = results.get(1);
-        Assert.assertEquals("ServiceAvg", serviceAvg.getMetricsName());
-        Assert.assertEquals("Service", serviceAvg.getFrom().getSourceName());
-        Assert.assertEquals("[latency]", serviceAvg.getFrom().getSourceAttribute().toString());
-        Assert.assertEquals("longAvg", serviceAvg.getAggregationFuncStmt().getAggregationFunctionName());
+        Assertions.assertEquals("ServiceAvg", serviceAvg.getMetricsName());
+        Assertions.assertEquals("Service", serviceAvg.getFrom().getSourceName());
+        Assertions.assertEquals("[latency]", serviceAvg.getFrom().getSourceAttribute().toString());
+        Assertions.assertEquals("longAvg", serviceAvg.getAggregationFuncStmt().getAggregationFunctionName());
     }
 
     @Test
@@ -74,13 +75,13 @@ public class ScriptParserTest {
         List<AnalysisResult> results = parser.parse().getMetricsStmts();
 
         AnalysisResult endpointPercent = results.get(0);
-        Assert.assertEquals("EndpointPercent", endpointPercent.getMetricsName());
-        Assert.assertEquals("Endpoint", endpointPercent.getFrom().getSourceName());
-        Assert.assertEquals("[*]", endpointPercent.getFrom().getSourceAttribute().toString());
-        Assert.assertEquals("percent", endpointPercent.getAggregationFuncStmt().getAggregationFunctionName());
+        Assertions.assertEquals("EndpointPercent", endpointPercent.getMetricsName());
+        Assertions.assertEquals("Endpoint", endpointPercent.getFrom().getSourceName());
+        Assertions.assertEquals("[*]", endpointPercent.getFrom().getSourceAttribute().toString());
+        Assertions.assertEquals("percent", endpointPercent.getAggregationFuncStmt().getAggregationFunctionName());
         EntryMethod entryMethod = endpointPercent.getEntryMethod();
         List<Object> methodArgsExpressions = entryMethod.getArgsExpressions();
-        Assert.assertEquals(1, methodArgsExpressions.size());
+        Assertions.assertEquals(1, methodArgsExpressions.size());
     }
 
     @Test
@@ -92,23 +93,23 @@ public class ScriptParserTest {
         List<AnalysisResult> results = parser.parse().getMetricsStmts();
 
         AnalysisResult endpointPercent = results.get(0);
-        Assert.assertEquals("EndpointPercent", endpointPercent.getMetricsName());
-        Assert.assertEquals("Endpoint", endpointPercent.getFrom().getSourceName());
-        Assert.assertEquals("[*]", endpointPercent.getFrom().getSourceAttribute().toString());
-        Assert.assertEquals("longAvg", endpointPercent.getAggregationFuncStmt().getAggregationFunctionName());
+        Assertions.assertEquals("EndpointPercent", endpointPercent.getMetricsName());
+        Assertions.assertEquals("Endpoint", endpointPercent.getFrom().getSourceName());
+        Assertions.assertEquals("[*]", endpointPercent.getFrom().getSourceAttribute().toString());
+        Assertions.assertEquals("longAvg", endpointPercent.getAggregationFuncStmt().getAggregationFunctionName());
         List<ConditionExpression> expressions = endpointPercent.getFilters().getFilterExpressionsParserResult();
 
-        Assert.assertEquals(2, expressions.size());
+        Assertions.assertEquals(2, expressions.size());
 
         ConditionExpression booleanMatchExp = expressions.get(0);
-        Assert.assertEquals("[status]", booleanMatchExp.getAttributes().toString());
-        Assert.assertEquals("true", booleanMatchExp.getValue());
-        Assert.assertEquals("booleanMatch", booleanMatchExp.getExpressionType());
+        Assertions.assertEquals("[status]", booleanMatchExp.getAttributes().toString());
+        Assertions.assertEquals("true", booleanMatchExp.getValue());
+        Assertions.assertEquals("booleanMatch", booleanMatchExp.getExpressionType());
 
         ConditionExpression stringMatchExp = expressions.get(1);
-        Assert.assertEquals("[name]", stringMatchExp.getAttributes().toString());
-        Assert.assertEquals("\"/product/abc\"", stringMatchExp.getValue());
-        Assert.assertEquals("stringMatch", stringMatchExp.getExpressionType());
+        Assertions.assertEquals("[name]", stringMatchExp.getAttributes().toString());
+        Assertions.assertEquals("\"/product/abc\"", stringMatchExp.getValue());
+        Assertions.assertEquals("stringMatch", stringMatchExp.getExpressionType());
     }
 
     @Test
@@ -123,48 +124,48 @@ public class ScriptParserTest {
         List<AnalysisResult> results = parser.parse().getMetricsStmts();
 
         AnalysisResult responseSummary = results.get(0);
-        Assert.assertEquals("ServiceResponseS1Summary", responseSummary.getMetricsName());
-        Assert.assertEquals("Service", responseSummary.getFrom().getSourceName());
-        Assert.assertEquals("[latency]", responseSummary.getFrom().getSourceAttribute().toString());
-        Assert.assertEquals("sum", responseSummary.getAggregationFuncStmt().getAggregationFunctionName());
+        Assertions.assertEquals("ServiceResponseS1Summary", responseSummary.getMetricsName());
+        Assertions.assertEquals("Service", responseSummary.getFrom().getSourceName());
+        Assertions.assertEquals("[latency]", responseSummary.getFrom().getSourceAttribute().toString());
+        Assertions.assertEquals("sum", responseSummary.getAggregationFuncStmt().getAggregationFunctionName());
         List<ConditionExpression> expressions = responseSummary.getFilters().getFilterExpressionsParserResult();
 
-        Assert.assertEquals(1, expressions.size());
+        Assertions.assertEquals(1, expressions.size());
 
         ConditionExpression booleanMatchExp = expressions.get(0);
-        Assert.assertEquals("[latency]", booleanMatchExp.getAttributes().toString());
-        Assert.assertEquals("1000", booleanMatchExp.getValue());
-        Assert.assertEquals("greaterMatch", booleanMatchExp.getExpressionType());
+        Assertions.assertEquals("[latency]", booleanMatchExp.getAttributes().toString());
+        Assertions.assertEquals("1000", booleanMatchExp.getValue());
+        Assertions.assertEquals("greaterMatch", booleanMatchExp.getExpressionType());
 
         responseSummary = results.get(1);
         expressions = responseSummary.getFilters().getFilterExpressionsParserResult();
 
-        Assert.assertEquals(1, expressions.size());
+        Assertions.assertEquals(1, expressions.size());
 
         booleanMatchExp = expressions.get(0);
-        Assert.assertEquals("[latency]", booleanMatchExp.getAttributes().toString());
-        Assert.assertEquals("2000", booleanMatchExp.getValue());
-        Assert.assertEquals("lessMatch", booleanMatchExp.getExpressionType());
+        Assertions.assertEquals("[latency]", booleanMatchExp.getAttributes().toString());
+        Assertions.assertEquals("2000", booleanMatchExp.getValue());
+        Assertions.assertEquals("lessMatch", booleanMatchExp.getExpressionType());
 
         responseSummary = results.get(2);
         expressions = responseSummary.getFilters().getFilterExpressionsParserResult();
 
-        Assert.assertEquals(1, expressions.size());
+        Assertions.assertEquals(1, expressions.size());
 
         booleanMatchExp = expressions.get(0);
-        Assert.assertEquals("[latency]", booleanMatchExp.getAttributes().toString());
-        Assert.assertEquals("3000", booleanMatchExp.getValue());
-        Assert.assertEquals("greaterEqualMatch", booleanMatchExp.getExpressionType());
+        Assertions.assertEquals("[latency]", booleanMatchExp.getAttributes().toString());
+        Assertions.assertEquals("3000", booleanMatchExp.getValue());
+        Assertions.assertEquals("greaterEqualMatch", booleanMatchExp.getExpressionType());
 
         responseSummary = results.get(3);
         expressions = responseSummary.getFilters().getFilterExpressionsParserResult();
 
-        Assert.assertEquals(1, expressions.size());
+        Assertions.assertEquals(1, expressions.size());
 
         booleanMatchExp = expressions.get(0);
-        Assert.assertEquals("[latency]", booleanMatchExp.getAttributes().toString());
-        Assert.assertEquals("4000", booleanMatchExp.getValue());
-        Assert.assertEquals("lessEqualMatch", booleanMatchExp.getExpressionType());
+        Assertions.assertEquals("[latency]", booleanMatchExp.getAttributes().toString());
+        Assertions.assertEquals("4000", booleanMatchExp.getValue());
+        Assertions.assertEquals("lessEqualMatch", booleanMatchExp.getExpressionType());
     }
 
     @Test
@@ -174,20 +175,20 @@ public class ScriptParserTest {
             TEST_SOURCE_PACKAGE
         );
         List<AnalysisResult> results = parser.parse().getMetricsStmts();
-        Assert.assertEquals(1, results.size());
+        Assertions.assertEquals(1, results.size());
         AnalysisResult result = results.get(0);
-        Assert.assertEquals("rate", result.getAggregationFuncStmt().getAggregationFunctionName());
-        Assert.assertEquals(2, result.getAggregationFuncStmt().getFuncConditionExpressions().size());
+        Assertions.assertEquals("rate", result.getAggregationFuncStmt().getAggregationFunctionName());
+        Assertions.assertEquals(2, result.getAggregationFuncStmt().getFuncConditionExpressions().size());
 
         ConditionExpression expression1 = result.getAggregationFuncStmt().getFuncConditionExpressions().get(0);
-        Assert.assertEquals("[param1]", expression1.getAttributes().toString());
-        Assert.assertEquals("booleanMatch", expression1.getExpressionType());
-        Assert.assertEquals("true", expression1.getValue());
+        Assertions.assertEquals("[param1]", expression1.getAttributes().toString());
+        Assertions.assertEquals("booleanMatch", expression1.getExpressionType());
+        Assertions.assertEquals("true", expression1.getValue());
 
         ConditionExpression expression2 = result.getAggregationFuncStmt().getFuncConditionExpressions().get(1);
-        Assert.assertEquals("[param2]", expression2.getAttributes().toString());
-        Assert.assertEquals("booleanMatch", expression2.getExpressionType());
-        Assert.assertEquals("false", expression2.getValue());
+        Assertions.assertEquals("[param2]", expression2.getAttributes().toString());
+        Assertions.assertEquals("booleanMatch", expression2.getExpressionType());
+        Assertions.assertEquals("false", expression2.getValue());
     }
 
     @Test
@@ -197,17 +198,17 @@ public class ScriptParserTest {
             TEST_SOURCE_PACKAGE
         );
         List<AnalysisResult> results = parser.parse().getMetricsStmts();
-        Assert.assertEquals(1, results.size());
+        Assertions.assertEquals(1, results.size());
         AnalysisResult result = results.get(0);
         List<Expression> expressions = result.getFilters().getFilterExpressions();
-        Assert.assertEquals(1, expressions.size());
+        Assertions.assertEquals(1, expressions.size());
         Expression expression = expressions.get(0);
-        Assert.assertEquals("source.getLatency()", expression.getLeft());
-        Assert.assertEquals(
+        Assertions.assertEquals("source.getLatency()", expression.getLeft());
+        Assertions.assertEquals(
             "org.apache.skywalking.oap.server.core.analysis.metrics.expression.LikeMatch",
             expression.getExpressionObject()
         );
-        Assert.assertEquals("\"%a\"", expression.getRight());
+        Assertions.assertEquals("\"%a\"", expression.getRight());
     }
 
     @Test
@@ -217,17 +218,17 @@ public class ScriptParserTest {
             TEST_SOURCE_PACKAGE
         );
         List<AnalysisResult> results = parser.parse().getMetricsStmts();
-        Assert.assertEquals(1, results.size());
+        Assertions.assertEquals(1, results.size());
         AnalysisResult result = results.get(0);
         List<Expression> expressions = result.getFilters().getFilterExpressions();
-        Assert.assertEquals(2, expressions.size());
+        Assertions.assertEquals(2, expressions.size());
         Expression expression = expressions.get(1);
-        Assert.assertEquals("source.getLatency()", expression.getLeft());
-        Assert.assertEquals(
+        Assertions.assertEquals("source.getLatency()", expression.getLeft());
+        Assertions.assertEquals(
             "org.apache.skywalking.oap.server.core.analysis.metrics.expression.InMatch",
             expression.getExpressionObject()
         );
-        Assert.assertEquals("new long[]{1,2,3}", expression.getRight());
+        Assertions.assertEquals("new long[]{1,2,3}", expression.getRight());
     }
 
     @Test
@@ -237,17 +238,17 @@ public class ScriptParserTest {
             TEST_SOURCE_PACKAGE
         );
         List<AnalysisResult> results = parser.parse().getMetricsStmts();
-        Assert.assertEquals(1, results.size());
+        Assertions.assertEquals(1, results.size());
         AnalysisResult result = results.get(0);
         List<Expression> expressions = result.getFilters().getFilterExpressions();
-        Assert.assertEquals(2, expressions.size());
+        Assertions.assertEquals(2, expressions.size());
         Expression expression = expressions.get(1);
-        Assert.assertEquals("source.getLatency()", expression.getLeft());
-        Assert.assertEquals(
+        Assertions.assertEquals("source.getLatency()", expression.getLeft());
+        Assertions.assertEquals(
             "org.apache.skywalking.oap.server.core.analysis.metrics.expression.InMatch",
             expression.getExpressionObject()
         );
-        Assert.assertEquals("new Object[]{\"1\",\"2\",\"3\"}", expression.getRight());
+        Assertions.assertEquals("new Object[]{\"1\",\"2\",\"3\"}", expression.getRight());
     }
 
     @Test
@@ -259,16 +260,16 @@ public class ScriptParserTest {
         List<AnalysisResult> results = parser.parse().getMetricsStmts();
 
         AnalysisResult servicePercent = results.get(0);
-        Assert.assertEquals("ServicePercent", servicePercent.getMetricsName());
-        Assert.assertEquals("Service", servicePercent.getFrom().getSourceName());
-        Assert.assertEquals("[sidecar, internalError]", servicePercent.getFrom().getSourceAttribute().toString());
+        Assertions.assertEquals("ServicePercent", servicePercent.getMetricsName());
+        Assertions.assertEquals("Service", servicePercent.getFrom().getSourceName());
+        Assertions.assertEquals("[sidecar, internalError]", servicePercent.getFrom().getSourceAttribute().toString());
         final List<Expression> filterExpressions = servicePercent.getFilters().getFilterExpressions();
-        Assert.assertEquals(1, filterExpressions.size());
-        Assert.assertEquals("source.getSidecar().getInternalError()", filterExpressions.get(0).getLeft());
-        Assert.assertEquals("percent", servicePercent.getAggregationFuncStmt().getAggregationFunctionName());
+        Assertions.assertEquals(1, filterExpressions.size());
+        Assertions.assertEquals("source.getSidecar().getInternalError()", filterExpressions.get(0).getLeft());
+        Assertions.assertEquals("percent", servicePercent.getAggregationFuncStmt().getAggregationFunctionName());
         EntryMethod entryMethod = servicePercent.getEntryMethod();
         List<Object> methodArgsExpressions = entryMethod.getArgsExpressions();
-        Assert.assertEquals(1, methodArgsExpressions.size());
+        Assertions.assertEquals(1, methodArgsExpressions.size());
     }
 
     @Test
@@ -277,16 +278,16 @@ public class ScriptParserTest {
             "ClientCpm = from(ServiceInstanceRelation.*).filter(componentId == 7).cpm();", TEST_SOURCE_PACKAGE);
         List<AnalysisResult> results = parser.parse().getMetricsStmts();
         AnalysisResult clientCpm = results.get(0);
-        Assert.assertEquals("ClientCpm", clientCpm.getMetricsName());
-        Assert.assertEquals("ServiceInstanceRelation", clientCpm.getFrom().getSourceName());
-        Assert.assertEquals("[*]", clientCpm.getFrom().getSourceAttribute().toString());
+        Assertions.assertEquals("ClientCpm", clientCpm.getMetricsName());
+        Assertions.assertEquals("ServiceInstanceRelation", clientCpm.getFrom().getSourceName());
+        Assertions.assertEquals("[*]", clientCpm.getFrom().getSourceAttribute().toString());
         final List<Expression> filterExpressions = clientCpm.getFilters().getFilterExpressions();
-        Assert.assertEquals(1, filterExpressions.size());
-        Assert.assertEquals("source.getComponentId()", filterExpressions.get(0).getLeft());
-        Assert.assertEquals("cpm", clientCpm.getAggregationFuncStmt().getAggregationFunctionName());
+        Assertions.assertEquals(1, filterExpressions.size());
+        Assertions.assertEquals("source.getComponentId()", filterExpressions.get(0).getLeft());
+        Assertions.assertEquals("cpm", clientCpm.getAggregationFuncStmt().getAggregationFunctionName());
         EntryMethod entryMethod = clientCpm.getEntryMethod();
         List<Object> methodArgsExpressions = entryMethod.getArgsExpressions();
-        Assert.assertEquals(1, methodArgsExpressions.size());
+        Assertions.assertEquals(1, methodArgsExpressions.size());
     }
 
     @Test
@@ -298,10 +299,10 @@ public class ScriptParserTest {
         List<AnalysisResult> results = parser.parse().getMetricsStmts();
         AnalysisResult clientCpm = results.get(0);
         final List<Expression> filterExpressions = clientCpm.getFilters().getFilterExpressions();
-        Assert.assertEquals(1, filterExpressions.size());
-        Assert.assertEquals("source.getTag(\"http.method\")", filterExpressions.get(0).getLeft());
-        Assert.assertEquals(1, clientCpm.getAggregationFuncStmt().getFuncArgs().size());
-        Assert.assertEquals("[tag[\"http.method\"]]", clientCpm.getAggregationFuncStmt().getFuncArgs().get(0).getText().toString());
+        Assertions.assertEquals(1, filterExpressions.size());
+        Assertions.assertEquals("source.getTag(\"http.method\")", filterExpressions.get(0).getLeft());
+        Assertions.assertEquals(1, clientCpm.getAggregationFuncStmt().getFuncArgs().size());
+        Assertions.assertEquals("[tag[\"http.method\"]]", clientCpm.getAggregationFuncStmt().getFuncArgs().get(0).getText().toString());
     }
 
     @Test
@@ -312,14 +313,14 @@ public class ScriptParserTest {
         );
         List<AnalysisResult> results = parser.parse().getMetricsStmts();
         AnalysisResult castExp = results.get(0);
-        Assert.assertEquals("(str->long)", castExp.getFrom().getSourceCastType());
+        Assertions.assertEquals("(str->long)", castExp.getFrom().getSourceCastType());
         final List<Expression> filterExpressions = castExp.getFilters().getFilterExpressions();
-        Assert.assertEquals(1, filterExpressions.size());
-        Assert.assertEquals(
+        Assertions.assertEquals(1, filterExpressions.size());
+        Assertions.assertEquals(
             "Long.parseLong(source.getTag(\"transmission.latency\"))", filterExpressions.get(0).getLeft());
-        Assert.assertEquals("(str->long)", castExp.getAggregationFuncStmt().getFuncConditionExpressions().get(0).getCastType());
-        Assert.assertEquals(EntryMethod.ATTRIBUTE_EXP_TYPE, castExp.getAggregationFuncStmt().getFuncArgs().get(0).getType());
-        Assert.assertEquals("(str->long)", castExp.getAggregationFuncStmt().getFuncArgs().get(0).getCastType());
+        Assertions.assertEquals("(str->long)", castExp.getAggregationFuncStmt().getFuncConditionExpressions().get(0).getCastType());
+        Assertions.assertEquals(EntryMethod.ATTRIBUTE_EXP_TYPE, castExp.getAggregationFuncStmt().getFuncArgs().get(0).getType());
+        Assertions.assertEquals("(str->long)", castExp.getAggregationFuncStmt().getFuncArgs().get(0).getCastType());
     }
 
     @Test
@@ -327,7 +328,7 @@ public class ScriptParserTest {
         ScriptParser parser = ScriptParser.createFromScriptText("disable(segment);", TEST_SOURCE_PACKAGE);
         DisableCollection collection = parser.parse().getDisableCollection();
         List<String> sources = collection.getAllDisableSources();
-        Assert.assertEquals(1, sources.size());
-        Assert.assertEquals("segment", sources.get(0));
+        Assertions.assertEquals(1, sources.size());
+        Assertions.assertEquals("segment", sources.get(0));
     }
 }
diff --git a/oap-server/pom.xml b/oap-server/pom.xml
index da4c45f1c4..26a4947d9d 100755
--- a/oap-server/pom.xml
+++ b/oap-server/pom.xml
@@ -83,6 +83,12 @@
         <dependency>
             <groupId>org.testcontainers</groupId>
             <artifactId>testcontainers</artifactId>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.testcontainers</groupId>
+            <artifactId>junit-jupiter</artifactId>
+            <scope>test</scope>
         </dependency>
         <dependency>
             <groupId>com.google.errorprone</groupId>
diff --git a/oap-server/server-alarm-plugin/pom.xml b/oap-server/server-alarm-plugin/pom.xml
index 5b27ca4826..3edb9af612 100644
--- a/oap-server/server-alarm-plugin/pom.xml
+++ b/oap-server/server-alarm-plugin/pom.xml
@@ -58,7 +58,7 @@
         </dependency>
         <dependency>
             <groupId>com.linecorp.armeria</groupId>
-            <artifactId>armeria-junit4</artifactId>
+            <artifactId>armeria-junit5</artifactId>
             <scope>test</scope>
         </dependency>
     </dependencies>
diff --git a/oap-server/server-alarm-plugin/src/test/java/org/apache/skywalking/oap/server/core/alarm/provider/AlarmCoreTest.java b/oap-server/server-alarm-plugin/src/test/java/org/apache/skywalking/oap/server/core/alarm/provider/AlarmCoreTest.java
index c1081bd1ab..27d95863e7 100644
--- a/oap-server/server-alarm-plugin/src/test/java/org/apache/skywalking/oap/server/core/alarm/provider/AlarmCoreTest.java
+++ b/oap-server/server-alarm-plugin/src/test/java/org/apache/skywalking/oap/server/core/alarm/provider/AlarmCoreTest.java
@@ -18,17 +18,19 @@
 
 package org.apache.skywalking.oap.server.core.alarm.provider;
 
+import org.joda.time.LocalDateTime;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Test;
+import org.mockito.stubbing.Answer;
+import org.powermock.reflect.Whitebox;
+
 import java.util.ArrayList;
 import java.util.LinkedList;
 import java.util.List;
 import java.util.Map;
-import org.joda.time.LocalDateTime;
-import org.junit.Assert;
-import org.junit.Test;
-import org.mockito.invocation.InvocationOnMock;
-import org.mockito.stubbing.Answer;
-import org.powermock.api.mockito.PowerMockito;
-import org.powermock.reflect.Whitebox;
+
+import static org.mockito.Mockito.doAnswer;
+import static org.mockito.Mockito.mock;
 
 /**
  * Alarm core is the trigger, which should run once per minute, also run after the first quarter in one single minute.
@@ -53,19 +55,16 @@ public class AlarmCoreTest {
         Map<String, List<RunningRule>> runningContext = Whitebox.getInternalState(core, "runningContext");
 
         List<RunningRule> rules = new ArrayList<>(1);
-        RunningRule mockRule = PowerMockito.mock(RunningRule.class);
+        RunningRule mockRule = mock(RunningRule.class);
 
         List<LocalDateTime> checkTime = new LinkedList<>();
         final boolean[] isAdd = {true};
 
-        PowerMockito.doAnswer(new Answer<Object>() {
-            @Override
-            public Object answer(InvocationOnMock mock) throws Throwable {
-                if (isAdd[0]) {
-                    checkTime.add(LocalDateTime.now());
-                }
-                return new ArrayList<>(0);
+        doAnswer((Answer<Object>) mock -> {
+            if (isAdd[0]) {
+                checkTime.add(LocalDateTime.now());
             }
+            return new ArrayList<>(0);
         }).when(mockRule).check();
 
         rules.add(mockRule);
@@ -77,11 +76,11 @@ public class AlarmCoreTest {
             Thread.sleep(60 * 1000L);
             if (checkTime.size() >= 3) {
                 isAdd[0] = false;
-                Assert.assertTrue(checkTimePoints(checkTime));
+                Assertions.assertTrue(checkTimePoints(checkTime));
                 break;
             }
             if (i == 9) {
-                Assert.assertTrue(false);
+                Assertions.assertTrue(false);
             }
         }
     }
diff --git a/oap-server/server-alarm-plugin/src/test/java/org/apache/skywalking/oap/server/core/alarm/provider/AlarmMessageFormatterTest.java b/oap-server/server-alarm-plugin/src/test/java/org/apache/skywalking/oap/server/core/alarm/provider/AlarmMessageFormatterTest.java
index 9f61d2b498..d22cf0190d 100644
--- a/oap-server/server-alarm-plugin/src/test/java/org/apache/skywalking/oap/server/core/alarm/provider/AlarmMessageFormatterTest.java
+++ b/oap-server/server-alarm-plugin/src/test/java/org/apache/skywalking/oap/server/core/alarm/provider/AlarmMessageFormatterTest.java
@@ -19,8 +19,8 @@
 package org.apache.skywalking.oap.server.core.alarm.provider;
 
 import org.apache.skywalking.oap.server.core.alarm.MetaInAlarm;
-import org.junit.Assert;
-import org.junit.Test;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Test;
 
 public class AlarmMessageFormatterTest {
     @Test
@@ -59,7 +59,7 @@ public class AlarmMessageFormatterTest {
             }
         });
 
-        Assert.assertEquals("abc words {sdf", message);
+        Assertions.assertEquals("abc words {sdf", message);
     }
 
     @Test
@@ -97,6 +97,6 @@ public class AlarmMessageFormatterTest {
                 return "";
             }
         });
-        Assert.assertEquals("abc} words service - 1290 .. {", message);
+        Assertions.assertEquals("abc} words service - 1290 .. {", message);
     }
 }
diff --git a/oap-server/server-alarm-plugin/src/test/java/org/apache/skywalking/oap/server/core/alarm/provider/AlarmModuleProviderTest.java b/oap-server/server-alarm-plugin/src/test/java/org/apache/skywalking/oap/server/core/alarm/provider/AlarmModuleProviderTest.java
index 36ebdca057..7b85106aec 100644
--- a/oap-server/server-alarm-plugin/src/test/java/org/apache/skywalking/oap/server/core/alarm/provider/AlarmModuleProviderTest.java
+++ b/oap-server/server-alarm-plugin/src/test/java/org/apache/skywalking/oap/server/core/alarm/provider/AlarmModuleProviderTest.java
@@ -24,20 +24,20 @@ import org.apache.skywalking.oap.server.configuration.api.ConfigurationModule;
 import org.apache.skywalking.oap.server.core.CoreModule;
 import org.apache.skywalking.oap.server.core.alarm.AlarmModule;
 import org.apache.skywalking.oap.server.library.module.ModuleProvider;
-import org.junit.Before;
-import org.junit.Test;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
 import org.powermock.reflect.Whitebox;
 
-import static org.junit.Assert.assertArrayEquals;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertTrue;
+import static org.junit.jupiter.api.Assertions.assertArrayEquals;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 import static org.mockito.Mockito.mock;
 
 public class AlarmModuleProviderTest {
 
     private AlarmModuleProvider moduleProvider;
 
-    @Before
+    @BeforeEach
     public void setUp() throws Exception {
         ServiceLoader<ModuleProvider> serviceLoader = ServiceLoader.load(ModuleProvider.class);
         Iterator<ModuleProvider> providerIterator = serviceLoader.iterator();
@@ -78,4 +78,4 @@ public class AlarmModuleProviderTest {
             ConfigurationModule.NAME
         }, modules);
     }
-}
\ No newline at end of file
+}
diff --git a/oap-server/server-alarm-plugin/src/test/java/org/apache/skywalking/oap/server/core/alarm/provider/AlarmRulesWatcherTest.java b/oap-server/server-alarm-plugin/src/test/java/org/apache/skywalking/oap/server/core/alarm/provider/AlarmRulesWatcherTest.java
index e10be74ae3..9f2914e30c 100644
--- a/oap-server/server-alarm-plugin/src/test/java/org/apache/skywalking/oap/server/core/alarm/provider/AlarmRulesWatcherTest.java
+++ b/oap-server/server-alarm-plugin/src/test/java/org/apache/skywalking/oap/server/core/alarm/provider/AlarmRulesWatcherTest.java
@@ -18,24 +18,24 @@
 
 package org.apache.skywalking.oap.server.core.alarm.provider;
 
+import org.apache.skywalking.oap.server.configuration.api.ConfigChangeWatcher;
+import org.apache.skywalking.oap.server.library.util.ResourceUtils;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+import org.mockito.MockitoAnnotations;
+import org.mockito.Spy;
+
 import java.io.IOException;
 import java.io.Reader;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.HashMap;
 
-import org.apache.skywalking.oap.server.configuration.api.ConfigChangeWatcher;
-import org.apache.skywalking.oap.server.library.util.ResourceUtils;
-import org.junit.Before;
-import org.junit.Test;
-import org.mockito.MockitoAnnotations;
-import org.mockito.Spy;
-
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotEquals;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertNull;
-import static org.junit.Assert.assertTrue;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertNotEquals;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
+import static org.junit.jupiter.api.Assertions.assertNull;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 import static org.mockito.Mockito.spy;
 
 public class AlarmRulesWatcherTest {
@@ -67,7 +67,7 @@ public class AlarmRulesWatcherTest {
                                                                        }})
                                                                        .threshold("2");
 
-    @Before
+    @BeforeEach
     public void setUp() {
         MockitoAnnotations.initMocks(this);
     }
@@ -129,10 +129,9 @@ public class AlarmRulesWatcherTest {
 
         assertEquals(1, alarmRulesWatcher.getRunningContext().size());
         assertEquals(2, alarmRulesWatcher.getRunningContext().get(rule.getMetricsName()).size());
-        assertEquals("The same alarm rule should map to the same existed running rule", runningRule, alarmRulesWatcher.getRunningContext()
-                                                                                                                      .get(rule
-                                                                                                                          .getMetricsName())
-                                                                                                                      .get(0));
+        assertEquals(
+                runningRule, alarmRulesWatcher.getRunningContext().get(rule.getMetricsName()).get(0),
+                "The same alarm rule should map to the same existed running rule");
     }
 
     @Test
@@ -156,10 +155,9 @@ public class AlarmRulesWatcherTest {
 
         assertEquals(1, alarmRulesWatcher.getRunningContext().size());
         assertEquals(1, alarmRulesWatcher.getRunningContext().get(rule.getMetricsName()).size());
-        assertNotEquals("The new alarm rule should map to a different running rule", runningRule, alarmRulesWatcher.getRunningContext()
-                                                                                                                   .get(rule
-                                                                                                                       .getMetricsName())
-                                                                                                                   .get(0));
+        assertNotEquals(
+                runningRule, alarmRulesWatcher.getRunningContext().get(rule.getMetricsName()).get(0),
+                "The new alarm rule should map to a different running rule");
     }
 
     @Test
@@ -190,4 +188,4 @@ public class AlarmRulesWatcherTest {
         assertEquals(1, alarmRulesWatcher.getRunningContext().get("metrics2").size());
         assertEquals(1, alarmRulesWatcher.getRunningContext().get("metrics3").size());
     }
-}
\ No newline at end of file
+}
diff --git a/oap-server/server-alarm-plugin/src/test/java/org/apache/skywalking/oap/server/core/alarm/provider/CompositeRuleEvaluatorTest.java b/oap-server/server-alarm-plugin/src/test/java/org/apache/skywalking/oap/server/core/alarm/provider/CompositeRuleEvaluatorTest.java
index 2da3e98bef..27fcf1e65a 100644
--- a/oap-server/server-alarm-plugin/src/test/java/org/apache/skywalking/oap/server/core/alarm/provider/CompositeRuleEvaluatorTest.java
+++ b/oap-server/server-alarm-plugin/src/test/java/org/apache/skywalking/oap/server/core/alarm/provider/CompositeRuleEvaluatorTest.java
@@ -21,21 +21,20 @@ package org.apache.skywalking.oap.server.core.alarm.provider;
 import org.apache.skywalking.oap.server.core.alarm.AlarmMessage;
 import org.apache.skywalking.oap.server.core.alarm.provider.expression.Expression;
 import org.apache.skywalking.oap.server.core.alarm.provider.expression.ExpressionContext;
-import org.junit.Before;
-import org.junit.Test;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
 
 import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.List;
 
-import static org.hamcrest.CoreMatchers.is;
-import static org.junit.Assert.assertThat;
+import static org.assertj.core.api.AssertionsForClassTypes.assertThat;
 
 public class CompositeRuleEvaluatorTest {
 
     private CompositeRuleEvaluator ruleEvaluate;
 
-    @Before
+    @BeforeEach
     public void init() {
         Expression expression = new Expression(new ExpressionContext());
         ruleEvaluate = new CompositeRuleEvaluator(expression);
@@ -50,14 +49,14 @@ public class CompositeRuleEvaluatorTest {
         compositeAlarmRules.add(compositeAlarmRule);
         List<AlarmMessage> alarmMessages = getAlarmMessages();
         List<AlarmMessage> compositeMsgs = ruleEvaluate.evaluate(compositeAlarmRules, alarmMessages);
-        assertThat(compositeMsgs.size(), is(1));
-        assertThat(compositeMsgs.get(0).getAlarmMessage(), is("composite rule demo service,id0 triggered!"));
-        assertThat(compositeMsgs.get(0).getRuleName(), is("dummy"));
-        assertThat(compositeMsgs.get(0).getId0(), is("id0"));
-        assertThat(compositeMsgs.get(0).getId1(), is("id1"));
-        assertThat(compositeMsgs.get(0).getTags().get(0).getKey(), is("key"));
-        assertThat(compositeMsgs.get(0).getTags().get(0).getValue(), is("value"));
-        assertThat(compositeMsgs.get(0).isOnlyAsCondition(), is(false));
+        assertThat(compositeMsgs.size()).isEqualTo(1);
+        assertThat(compositeMsgs.get(0).getAlarmMessage()).isEqualTo("composite rule demo service,id0 triggered!");
+        assertThat(compositeMsgs.get(0).getRuleName()).isEqualTo("dummy");
+        assertThat(compositeMsgs.get(0).getId0()).isEqualTo("id0");
+        assertThat(compositeMsgs.get(0).getId1()).isEqualTo("id1");
+        assertThat(compositeMsgs.get(0).getTags().get(0).getKey()).isEqualTo("key");
+        assertThat(compositeMsgs.get(0).getTags().get(0).getValue()).isEqualTo("value");
+        assertThat(compositeMsgs.get(0).isOnlyAsCondition()).isEqualTo(false);
     }
 
     @Test
@@ -69,14 +68,14 @@ public class CompositeRuleEvaluatorTest {
         compositeAlarmRules.add(compositeAlarmRule);
         List<AlarmMessage> alarmMessages = getAlarmMessages();
         List<AlarmMessage> compositeMsgs = ruleEvaluate.evaluate(compositeAlarmRules, alarmMessages);
-        assertThat(compositeMsgs.size(), is(1));
-        assertThat(compositeMsgs.get(0).getAlarmMessage(), is("composite rule demo service triggered!"));
-        assertThat(compositeMsgs.get(0).getRuleName(), is("dummy"));
-        assertThat(compositeMsgs.get(0).getId0(), is("id0"));
-        assertThat(compositeMsgs.get(0).getId1(), is("id1"));
-        assertThat(compositeMsgs.get(0).getTags().get(0).getKey(), is("key"));
-        assertThat(compositeMsgs.get(0).getTags().get(0).getValue(), is("value"));
-        assertThat(compositeMsgs.get(0).isOnlyAsCondition(), is(false));
+        assertThat(compositeMsgs.size()).isEqualTo(1);
+        assertThat(compositeMsgs.get(0).getAlarmMessage()).isEqualTo("composite rule demo service triggered!");
+        assertThat(compositeMsgs.get(0).getRuleName()).isEqualTo("dummy");
+        assertThat(compositeMsgs.get(0).getId0()).isEqualTo("id0");
+        assertThat(compositeMsgs.get(0).getId1()).isEqualTo("id1");
+        assertThat(compositeMsgs.get(0).getTags().get(0).getKey()).isEqualTo("key");
+        assertThat(compositeMsgs.get(0).getTags().get(0).getValue()).isEqualTo("value");
+        assertThat(compositeMsgs.get(0).isOnlyAsCondition()).isEqualTo(false);
     }
 
     @Test
@@ -86,7 +85,7 @@ public class CompositeRuleEvaluatorTest {
         compositeAlarmRules.add(compositeAlarmRule);
         List<AlarmMessage> alarmMessages = getAlarmMessages();
         List<AlarmMessage> compositeMsgs = ruleEvaluate.evaluate(compositeAlarmRules, alarmMessages);
-        assertThat(compositeMsgs.size(), is(0));
+        assertThat(compositeMsgs.size()).isEqualTo(0);
     }
 
     @Test
@@ -96,7 +95,7 @@ public class CompositeRuleEvaluatorTest {
         compositeAlarmRules.add(compositeAlarmRule);
         List<AlarmMessage> alarmMessages = getAlarmMessages();
         List<AlarmMessage> compositeMsgs = ruleEvaluate.evaluate(compositeAlarmRules, alarmMessages);
-        assertThat(compositeMsgs.size(), is(0));
+        assertThat(compositeMsgs.size()).isEqualTo(0);
     }
 
     private List<AlarmMessage> getAlarmMessages() {
@@ -141,14 +140,14 @@ public class CompositeRuleEvaluatorTest {
         List<AlarmMessage> alarmMessages = getAlarmMessages();
         alarmMessages.remove(0);
         List<AlarmMessage> compositeMsgs = ruleEvaluate.evaluate(compositeAlarmRules, alarmMessages);
-        assertThat(compositeMsgs.size(), is(1));
-        assertThat(compositeMsgs.get(0).getAlarmMessage(), is("composite rule triggered!"));
-        assertThat(compositeMsgs.get(0).getRuleName(), is("dummy"));
-        assertThat(compositeMsgs.get(0).getId0(), is("id0"));
-        assertThat(compositeMsgs.get(0).getId1(), is("id1"));
-        assertThat(compositeMsgs.get(0).getTags().get(0).getKey(), is("key"));
-        assertThat(compositeMsgs.get(0).getTags().get(0).getValue(), is("value"));
-        assertThat(compositeMsgs.get(0).isOnlyAsCondition(), is(false));
+        assertThat(compositeMsgs.size()).isEqualTo(1);
+        assertThat(compositeMsgs.get(0).getAlarmMessage()).isEqualTo("composite rule triggered!");
+        assertThat(compositeMsgs.get(0).getRuleName()).isEqualTo("dummy");
+        assertThat(compositeMsgs.get(0).getId0()).isEqualTo("id0");
+        assertThat(compositeMsgs.get(0).getId1()).isEqualTo("id1");
+        assertThat(compositeMsgs.get(0).getTags().get(0).getKey()).isEqualTo("key");
+        assertThat(compositeMsgs.get(0).getTags().get(0).getValue()).isEqualTo("value");
+        assertThat(compositeMsgs.get(0).isOnlyAsCondition()).isEqualTo(false);
     }
 
     @Test
@@ -159,7 +158,7 @@ public class CompositeRuleEvaluatorTest {
         List<AlarmMessage> alarmMessages = getAlarmMessages();
         alarmMessages.remove(alarmMessages.size() - 1);
         List<AlarmMessage> compositeMsgs = ruleEvaluate.evaluate(compositeAlarmRules, alarmMessages);
-        assertThat(compositeMsgs.size(), is(0));
+        assertThat(compositeMsgs.size()).isEqualTo(0);
     }
 
     @Test
@@ -169,11 +168,11 @@ public class CompositeRuleEvaluatorTest {
         compositeAlarmRules.add(compositeAlarmRule);
         List<AlarmMessage> alarmMessages = getAlarmMessages();
         List<AlarmMessage> compositeMsgs = ruleEvaluate.evaluate(compositeAlarmRules, alarmMessages);
-        assertThat(compositeMsgs.size(), is(1));
-        assertThat(compositeMsgs.get(0).getAlarmMessage(), is("composite rule triggered!"));
-        assertThat(compositeMsgs.get(0).getRuleName(), is("dummy"));
-        assertThat(compositeMsgs.get(0).getId0(), is("id0"));
-        assertThat(compositeMsgs.get(0).getId1(), is("id1"));
-        assertThat(compositeMsgs.get(0).isOnlyAsCondition(), is(false));
+        assertThat(compositeMsgs.size()).isEqualTo(1);
+        assertThat(compositeMsgs.get(0).getAlarmMessage()).isEqualTo("composite rule triggered!");
+        assertThat(compositeMsgs.get(0).getRuleName()).isEqualTo("dummy");
+        assertThat(compositeMsgs.get(0).getId0()).isEqualTo("id0");
+        assertThat(compositeMsgs.get(0).getId1()).isEqualTo("id1");
+        assertThat(compositeMsgs.get(0).isOnlyAsCondition()).isEqualTo(false);
     }
 }
diff --git a/oap-server/server-alarm-plugin/src/test/java/org/apache/skywalking/oap/server/core/alarm/provider/EventHookCallbackTest.java b/oap-server/server-alarm-plugin/src/test/java/org/apache/skywalking/oap/server/core/alarm/provider/EventHookCallbackTest.java
index b931ab5472..1a923c5211 100644
--- a/oap-server/server-alarm-plugin/src/test/java/org/apache/skywalking/oap/server/core/alarm/provider/EventHookCallbackTest.java
+++ b/oap-server/server-alarm-plugin/src/test/java/org/apache/skywalking/oap/server/core/alarm/provider/EventHookCallbackTest.java
@@ -27,13 +27,13 @@ import org.apache.skywalking.oap.server.core.source.DefaultScopeDefine;
 import org.apache.skywalking.oap.server.library.module.ModuleManager;
 import org.apache.skywalking.oap.server.library.module.ModuleProviderHolder;
 import org.apache.skywalking.oap.server.library.module.ModuleServiceHolder;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 import org.mockito.ArgumentCaptor;
 
 import java.util.Arrays;
 import java.util.List;
 
-import static junit.framework.TestCase.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.mockito.ArgumentMatchers.any;
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.times;
diff --git a/oap-server/server-alarm-plugin/src/test/java/org/apache/skywalking/oap/server/core/alarm/provider/NotifyHandlerTest.java b/oap-server/server-alarm-plugin/src/test/java/org/apache/skywalking/oap/server/core/alarm/provider/NotifyHandlerTest.java
index ca0c6d3022..5f887eb320 100644
--- a/oap-server/server-alarm-plugin/src/test/java/org/apache/skywalking/oap/server/core/alarm/provider/NotifyHandlerTest.java
+++ b/oap-server/server-alarm-plugin/src/test/java/org/apache/skywalking/oap/server/core/alarm/provider/NotifyHandlerTest.java
@@ -19,77 +19,82 @@
 package org.apache.skywalking.oap.server.core.alarm.provider;
 
 import com.google.common.collect.Lists;
-import org.apache.skywalking.oap.server.core.CoreModule;
 import org.apache.skywalking.oap.server.core.alarm.AlarmMessage;
-import org.apache.skywalking.oap.server.core.alarm.EndpointRelationMetaInAlarm;
-import org.apache.skywalking.oap.server.core.alarm.ProcessMetaInAlarm;
-import org.apache.skywalking.oap.server.core.alarm.ServiceInstanceRelationMetaInAlarm;
-import org.apache.skywalking.oap.server.core.alarm.ServiceRelationMetaInAlarm;
 import org.apache.skywalking.oap.server.core.alarm.EndpointMetaInAlarm;
+import org.apache.skywalking.oap.server.core.alarm.EndpointRelationMetaInAlarm;
 import org.apache.skywalking.oap.server.core.alarm.MetaInAlarm;
+import org.apache.skywalking.oap.server.core.alarm.ProcessMetaInAlarm;
 import org.apache.skywalking.oap.server.core.alarm.ServiceInstanceMetaInAlarm;
+import org.apache.skywalking.oap.server.core.alarm.ServiceInstanceRelationMetaInAlarm;
 import org.apache.skywalking.oap.server.core.alarm.ServiceMetaInAlarm;
+import org.apache.skywalking.oap.server.core.alarm.ServiceRelationMetaInAlarm;
 import org.apache.skywalking.oap.server.core.analysis.IDManager;
-import org.apache.skywalking.oap.server.core.analysis.manual.endpoint.EndpointTraffic;
 import org.apache.skywalking.oap.server.core.analysis.metrics.Metrics;
 import org.apache.skywalking.oap.server.core.analysis.metrics.MetricsEntityMetaInfo;
 import org.apache.skywalking.oap.server.core.analysis.metrics.MetricsMetaInfo;
 import org.apache.skywalking.oap.server.core.analysis.metrics.WithMetadata;
 import org.apache.skywalking.oap.server.core.source.DefaultScopeDefine;
 import org.apache.skywalking.oap.server.library.module.ModuleManager;
-import org.apache.skywalking.oap.server.library.module.ModuleProviderHolder;
-import org.apache.skywalking.oap.server.library.module.ModuleServiceHolder;
-import org.junit.Before;
-import org.junit.Test;
-import org.junit.runner.RunWith;
+import org.junit.jupiter.api.AfterEach;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.extension.ExtendWith;
 import org.mockito.ArgumentCaptor;
-import org.powermock.api.mockito.PowerMockito;
-import org.powermock.core.classloader.annotations.PowerMockIgnore;
-import org.powermock.core.classloader.annotations.PrepareForTest;
-import org.powermock.modules.junit4.PowerMockRunner;
+import org.mockito.MockedStatic;
+import org.mockito.junit.jupiter.MockitoExtension;
+import org.mockito.junit.jupiter.MockitoSettings;
+import org.mockito.quality.Strictness;
 import org.powermock.reflect.Whitebox;
 
-import static junit.framework.TestCase.assertEquals;
-import static junit.framework.TestCase.assertNotNull;
-import static junit.framework.TestCase.assertTrue;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 import static org.mockito.Mockito.any;
 import static org.mockito.Mockito.anyString;
 import static org.mockito.Mockito.doNothing;
 import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.mockStatic;
 import static org.mockito.Mockito.verify;
 import static org.mockito.Mockito.when;
 
-@RunWith(PowerMockRunner.class)
-@PowerMockIgnore({"com.sun.org.apache.xerces.*", "javax.xml.*", "org.xml.*", "javax.management.*", "org.w3c.*"})
-@PrepareForTest(DefaultScopeDefine.class)
+@ExtendWith(MockitoExtension.class)
+@MockitoSettings(strictness = Strictness.LENIENT)
 public class NotifyHandlerTest {
 
     private NotifyHandler notifyHandler;
 
-    private ModuleManager moduleManager;
-
-    private ModuleProviderHolder moduleProviderHolder;
-
-    private ModuleServiceHolder moduleServiceHolder;
-
     private MockMetrics metrics;
 
     private MetricsMetaInfo metadata;
 
     private RunningRule rule;
+    private MockedStatic<DefaultScopeDefine> defaultScopeDefineMockedStatic;
+
+    @BeforeEach
+    public void before() {
+        metadata = mock(MetricsMetaInfo.class);
+        when(metadata.getScope()).thenReturn(DefaultScopeDefine.ALL);
+        when(metadata.getId()).thenReturn("");
+
+        metrics = mock(MockMetrics.class);
+        when(metrics.getMeta()).thenReturn(metadata);
+
+        defaultScopeDefineMockedStatic = mockStatic(DefaultScopeDefine.class);
+    }
+
+    @AfterEach
+    public void after() {
+        defaultScopeDefineMockedStatic.close();
+    }
 
     @Test
     public void testNotifyWithEndpointCatalog() {
-        prepareNotify();
-
         String metricsName = "endpoint-metrics";
         when(metadata.getMetricsName()).thenReturn(metricsName);
 
         when(DefaultScopeDefine.inEndpointCatalog(0)).thenReturn(true);
 
         String endpointInventoryName = "endpoint-inventory-name";
-        EndpointTraffic endpointTraffic = mock(EndpointTraffic.class);
-        when(endpointTraffic.getName()).thenReturn(endpointInventoryName);
 
         String serviceInventoryName = "service-inventory-name";
         final String serviceId = IDManager.ServiceID.buildId(serviceInventoryName, true);
@@ -114,9 +119,6 @@ public class NotifyHandlerTest {
 
     @Test
     public void testNotifyWithServiceInstanceCatalog() {
-
-        prepareNotify();
-
         String metricsName = "service-instance-metrics";
         when(metadata.getMetricsName()).thenReturn(metricsName);
 
@@ -144,8 +146,6 @@ public class NotifyHandlerTest {
 
     @Test
     public void testNotifyWithServiceCatalog() {
-        prepareNotify();
-
         String metricsName = "service-metrics";
         when(metadata.getMetricsName()).thenReturn(metricsName);
         when(DefaultScopeDefine.inServiceCatalog(0)).thenReturn(true);
@@ -169,8 +169,6 @@ public class NotifyHandlerTest {
 
     @Test
     public void testNotifyWithServiceRelationCatalog() {
-        prepareNotify();
-
         String metricsName = "service-relation-metrics";
         when(metadata.getMetricsName()).thenReturn(metricsName);
         when(DefaultScopeDefine.inServiceRelationCatalog(0)).thenReturn(true);
@@ -198,8 +196,6 @@ public class NotifyHandlerTest {
 
     @Test
     public void testNotifyWithServiceInstanceRelationCatalog() {
-        prepareNotify();
-
         String metricsName = "service-instance-relation-metrics";
         when(metadata.getMetricsName()).thenReturn(metricsName);
         when(DefaultScopeDefine.inServiceInstanceRelationCatalog(0)).thenReturn(true);
@@ -227,8 +223,6 @@ public class NotifyHandlerTest {
 
     @Test
     public void testNotifyWithEndpointRelationCatalog() {
-        prepareNotify();
-
         String metricsName = "endpoint-relation-metrics";
         when(metadata.getMetricsName()).thenReturn(metricsName);
         when(DefaultScopeDefine.inEndpointRelationCatalog(0)).thenReturn(true);
@@ -256,8 +250,6 @@ public class NotifyHandlerTest {
 
     @Test
     public void testNotifyWithProcessCatalog() {
-        prepareNotify();
-
         String metricsName = "process-metrics";
         String serviceName = "test-service";
         String instanceName = "test-instance";
@@ -287,17 +279,6 @@ public class NotifyHandlerTest {
         assertEquals(DefaultScopeDefine.PROCESS, metaInAlarm.getScopeId());
     }
 
-    private void prepareNotify() {
-        metadata = mock(MetricsMetaInfo.class);
-        when(metadata.getScope()).thenReturn(DefaultScopeDefine.ALL);
-        when(metadata.getId()).thenReturn("");
-
-        metrics = mock(MockMetrics.class);
-        when(metrics.getMeta()).thenReturn(metadata);
-
-        PowerMockito.mockStatic(DefaultScopeDefine.class);
-    }
-
     @Test
     public void dontNotify() {
 
@@ -310,12 +291,12 @@ public class NotifyHandlerTest {
         notifyHandler.notify(mockMetrics);
     }
 
-    @Before
-    public void setUp() throws Exception {
+    @BeforeEach
+    public void setUp() {
 
         Rules rules = new Rules();
 
-        moduleManager = mock(ModuleManager.class);
+        ModuleManager moduleManager = mock(ModuleManager.class);
 
         notifyHandler = new NotifyHandler(new AlarmRulesWatcher(rules, null), moduleManager);
 
@@ -325,13 +306,6 @@ public class NotifyHandlerTest {
             }
         });
 
-        moduleProviderHolder = mock(ModuleProviderHolder.class);
-
-        moduleServiceHolder = mock(ModuleServiceHolder.class);
-
-        when(moduleManager.find(CoreModule.NAME)).thenReturn(moduleProviderHolder);
-        when(moduleProviderHolder.provider()).thenReturn(moduleServiceHolder);
-
         AlarmCore core = mock(AlarmCore.class);
 
         rule = mock(RunningRule.class);
@@ -343,7 +317,7 @@ public class NotifyHandlerTest {
         Whitebox.setInternalState(notifyHandler, "core", core);
     }
 
-    private abstract class MockMetrics extends Metrics implements WithMetadata {
+    private abstract static class MockMetrics extends Metrics implements WithMetadata {
 
     }
 }
diff --git a/oap-server/server-alarm-plugin/src/test/java/org/apache/skywalking/oap/server/core/alarm/provider/OPTest.java b/oap-server/server-alarm-plugin/src/test/java/org/apache/skywalking/oap/server/core/alarm/provider/OPTest.java
index 35db8dcfae..c18f800442 100644
--- a/oap-server/server-alarm-plugin/src/test/java/org/apache/skywalking/oap/server/core/alarm/provider/OPTest.java
+++ b/oap-server/server-alarm-plugin/src/test/java/org/apache/skywalking/oap/server/core/alarm/provider/OPTest.java
@@ -18,9 +18,9 @@
 
 package org.apache.skywalking.oap.server.core.alarm.provider;
 
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
-import static org.junit.Assert.assertTrue;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 public class OPTest {
     @Test
@@ -41,4 +41,4 @@ public class OPTest {
         assertTrue(OP.LESS.test(124L, 123L));
         assertTrue(OP.LESS.test(124.0D, 123.0D));
     }
-}
\ No newline at end of file
+}
diff --git a/oap-server/server-alarm-plugin/src/test/java/org/apache/skywalking/oap/server/core/alarm/provider/RulesReaderTest.java b/oap-server/server-alarm-plugin/src/test/java/org/apache/skywalking/oap/server/core/alarm/provider/RulesReaderTest.java
index e0f1c70cba..28800ce5a4 100644
--- a/oap-server/server-alarm-plugin/src/test/java/org/apache/skywalking/oap/server/core/alarm/provider/RulesReaderTest.java
+++ b/oap-server/server-alarm-plugin/src/test/java/org/apache/skywalking/oap/server/core/alarm/provider/RulesReaderTest.java
@@ -24,17 +24,15 @@ import org.apache.skywalking.oap.server.core.alarm.provider.grpc.GRPCAlarmSettin
 import org.apache.skywalking.oap.server.core.alarm.provider.pagerduty.PagerDutySettings;
 import org.apache.skywalking.oap.server.core.alarm.provider.slack.SlackSettings;
 import org.apache.skywalking.oap.server.core.alarm.provider.wechat.WechatSettings;
-import org.junit.Assert;
-import org.junit.Test;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Test;
 
 import java.util.List;
 
-import static org.hamcrest.CoreMatchers.any;
-import static org.hamcrest.CoreMatchers.is;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertNull;
-import static org.junit.Assert.assertThat;
-import static org.junit.Assert.assertEquals;
+import static org.assertj.core.api.AssertionsForClassTypes.assertThat;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
+import static org.junit.jupiter.api.Assertions.assertNull;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 public class RulesReaderTest {
     @Test
@@ -45,58 +43,58 @@ public class RulesReaderTest {
         Rules rules = reader.readRules();
 
         List<AlarmRule> ruleList = rules.getRules();
-        Assert.assertEquals(3, ruleList.size());
-        Assert.assertEquals("85", ruleList.get(1).getThreshold());
-        Assert.assertEquals("endpoint_percent_rule", ruleList.get(0).getAlarmRuleName());
-        Assert.assertEquals(0, ruleList.get(0).getIncludeNames().size());
-        Assert.assertEquals(0, ruleList.get(0).getExcludeNames().size());
-        Assert.assertEquals("Successful rate of endpoint {name} is lower than 75%", ruleList.get(0).getMessage());
+        Assertions.assertEquals(3, ruleList.size());
+        Assertions.assertEquals("85", ruleList.get(1).getThreshold());
+        Assertions.assertEquals("endpoint_percent_rule", ruleList.get(0).getAlarmRuleName());
+        Assertions.assertEquals(0, ruleList.get(0).getIncludeNames().size());
+        Assertions.assertEquals(0, ruleList.get(0).getExcludeNames().size());
+        Assertions.assertEquals("Successful rate of endpoint {name} is lower than 75%", ruleList.get(0).getMessage());
 
-        Assert.assertEquals("service_b", ruleList.get(1).getIncludeNames().get(1));
-        Assert.assertEquals("service_c", ruleList.get(1).getExcludeNames().get(0));
-        Assert.assertEquals("Alarm caused by Rule service_percent_rule", ruleList.get(1).getMessage());
+        Assertions.assertEquals("service_b", ruleList.get(1).getIncludeNames().get(1));
+        Assertions.assertEquals("service_c", ruleList.get(1).getExcludeNames().get(0));
+        Assertions.assertEquals("Alarm caused by Rule service_percent_rule", ruleList.get(1).getMessage());
 
         List<String> rulesWebhooks = rules.getWebhooks();
-        Assert.assertEquals(2, rulesWebhooks.size());
-        Assert.assertEquals("http://127.0.0.1/go-wechat/", rulesWebhooks.get(1));
+        Assertions.assertEquals(2, rulesWebhooks.size());
+        Assertions.assertEquals("http://127.0.0.1/go-wechat/", rulesWebhooks.get(1));
 
         GRPCAlarmSetting grpcAlarmSetting = rules.getGrpchookSetting();
         assertNotNull(grpcAlarmSetting);
-        assertThat(grpcAlarmSetting.getTargetHost(), is("127.0.0.1"));
-        assertThat(grpcAlarmSetting.getTargetPort(), is(9888));
+        assertThat(grpcAlarmSetting.getTargetHost()).isEqualTo("127.0.0.1");
+        assertThat(grpcAlarmSetting.getTargetPort()).isEqualTo(9888);
 
         SlackSettings slackSettings = rules.getSlacks();
         assertNotNull(slackSettings);
-        assertThat(slackSettings.getWebhooks().size(), is(1));
-        assertThat(slackSettings.getWebhooks().get(0), is("https://hooks.slack.com/services/x/y/zssss"));
-        assertThat(slackSettings.getTextTemplate(), any(String.class));
+        assertThat(slackSettings.getWebhooks().size()).isEqualTo(1);
+        assertThat(slackSettings.getWebhooks().get(0)).isEqualTo("https://hooks.slack.com/services/x/y/zssss");
+        assertThat(slackSettings.getTextTemplate()).isInstanceOfAny(String.class);
 
         WechatSettings wechatSettings = rules.getWecchats();
         assertNotNull(wechatSettings);
-        assertThat(wechatSettings.getWebhooks().size(), is(1));
-        assertThat(wechatSettings.getWebhooks().get(0), is("https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=dummy_key"));
-        assertThat(slackSettings.getTextTemplate(), any(String.class));
+        assertThat(wechatSettings.getWebhooks().size()).isEqualTo(1);
+        assertThat(wechatSettings.getWebhooks().get(0)).isEqualTo("https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=dummy_key");
+        assertThat(slackSettings.getTextTemplate()).isInstanceOfAny(String.class);
 
         List<CompositeAlarmRule> compositeRules = rules.getCompositeRules();
-        Assert.assertEquals(1, compositeRules.size());
-        Assert.assertEquals("endpoint_percent_more_rule && endpoint_percent_rule", compositeRules.get(0).getExpression());
+        Assertions.assertEquals(1, compositeRules.size());
+        Assertions.assertEquals("endpoint_percent_more_rule && endpoint_percent_rule", compositeRules.get(0).getExpression());
 
         DingtalkSettings dingtalkSettings = rules.getDingtalks();
-        assertThat(dingtalkSettings.getTextTemplate(), any(String.class));
+        assertThat(dingtalkSettings.getTextTemplate()).isInstanceOfAny(String.class);
         List<DingtalkSettings.WebHookUrl> webHookUrls = dingtalkSettings.getWebhooks();
-        assertThat(webHookUrls.size(), is(2));
-        assertThat(webHookUrls.get(0).getUrl(), is("https://oapi.dingtalk.com/robot/send?access_token=dummy_token"));
-        assertThat(webHookUrls.get(0).getSecret(), is("dummysecret"));
-        assertThat(webHookUrls.get(1).getUrl(), is("https://oapi.dingtalk.com/robot/send?access_token=dummy_token2"));
+        assertThat(webHookUrls.size()).isEqualTo(2);
+        assertThat(webHookUrls.get(0).getUrl()).isEqualTo("https://oapi.dingtalk.com/robot/send?access_token=dummy_token");
+        assertThat(webHookUrls.get(0).getSecret()).isEqualTo("dummysecret");
+        assertThat(webHookUrls.get(1).getUrl()).isEqualTo("https://oapi.dingtalk.com/robot/send?access_token=dummy_token2");
         assertNull(webHookUrls.get(1).getSecret());
 
         FeishuSettings feishuSettings = rules.getFeishus();
-        assertThat(feishuSettings.getTextTemplate(), any(String.class));
+        assertThat(feishuSettings.getTextTemplate()).isInstanceOfAny(String.class);
         List<FeishuSettings.WebHookUrl> feishuSettingsWebhooks = feishuSettings.getWebhooks();
-        assertThat(feishuSettingsWebhooks.size(), is(2));
-        assertThat(feishuSettingsWebhooks.get(0).getUrl(), is("https://open.feishu.cn/open-apis/bot/v2/hook/dummy_token"));
-        assertThat(feishuSettingsWebhooks.get(0).getSecret(), is("dummysecret"));
-        assertThat(feishuSettingsWebhooks.get(1).getUrl(), is("https://open.feishu.cn/open-apis/bot/v2/hook/dummy_token2"));
+        assertThat(feishuSettingsWebhooks.size()).isEqualTo(2);
+        assertThat(feishuSettingsWebhooks.get(0).getUrl()).isEqualTo("https://open.feishu.cn/open-apis/bot/v2/hook/dummy_token");
+        assertThat(feishuSettingsWebhooks.get(0).getSecret()).isEqualTo("dummysecret");
+        assertThat(feishuSettingsWebhooks.get(1).getUrl()).isEqualTo("https://open.feishu.cn/open-apis/bot/v2/hook/dummy_token2");
         assertNull(feishuSettingsWebhooks.get(1).getSecret());
 
         PagerDutySettings pagerDutySettings = rules.getPagerDutySettings();
diff --git a/oap-server/server-alarm-plugin/src/test/java/org/apache/skywalking/oap/server/core/alarm/provider/RunningRuleTest.java b/oap-server/server-alarm-plugin/src/test/java/org/apache/skywalking/oap/server/core/alarm/provider/RunningRuleTest.java
index ed678430fe..a272d2279f 100644
--- a/oap-server/server-alarm-plugin/src/test/java/org/apache/skywalking/oap/server/core/alarm/provider/RunningRuleTest.java
+++ b/oap-server/server-alarm-plugin/src/test/java/org/apache/skywalking/oap/server/core/alarm/provider/RunningRuleTest.java
@@ -19,11 +19,6 @@
 package org.apache.skywalking.oap.server.core.alarm.provider;
 
 import com.google.common.collect.Lists;
-import java.util.HashMap;
-import java.util.LinkedList;
-import java.util.List;
-import java.util.Map;
-import java.util.Objects;
 import lombok.Getter;
 import lombok.Setter;
 import org.apache.skywalking.oap.server.core.Const;
@@ -41,10 +36,16 @@ import org.apache.skywalking.oap.server.core.storage.StorageID;
 import org.joda.time.LocalDateTime;
 import org.joda.time.format.DateTimeFormat;
 import org.joda.time.format.DateTimeFormatter;
-import org.junit.Assert;
-import org.junit.Test;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Test;
 import org.powermock.reflect.Whitebox;
 
+import java.util.HashMap;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Map;
+import java.util.Objects;
+
 /**
  * Running rule is the core of how does alarm work.
  * <p>
@@ -77,9 +78,9 @@ public class RunningRuleTest {
         int period = Whitebox.getInternalState(window, "period");
         LinkedList<Metrics> metricsBuffer = Whitebox.getInternalState(window, "values");
 
-        Assert.assertTrue(startTime.equals(endTime));
-        Assert.assertEquals(15, period);
-        Assert.assertEquals(15, metricsBuffer.size());
+        Assertions.assertTrue(startTime.equals(endTime));
+        Assertions.assertEquals(15, period);
+        Assertions.assertEquals(15, metricsBuffer.size());
     }
 
     @Test
@@ -107,13 +108,13 @@ public class RunningRuleTest {
 
         // check at 201808301440
         List<AlarmMessage> alarmMessages = runningRule.check();
-        Assert.assertEquals(0, alarmMessages.size());
+        Assertions.assertEquals(0, alarmMessages.size());
 
         runningRule.in(getMetaInAlarm(123), getMetrics(timeInPeriod3, 74));
 
         // check at 201808301440
         alarmMessages = runningRule.check();
-        Assert.assertEquals(1, alarmMessages.size());
+        Assertions.assertEquals(1, alarmMessages.size());
     }
 
     @Test
@@ -141,14 +142,14 @@ public class RunningRuleTest {
 
         // check at 201808301440
         List<AlarmMessage> alarmMessages = runningRule.check();
-        Assert.assertEquals(0, alarmMessages.size());
+        Assertions.assertEquals(0, alarmMessages.size());
         runningRule.moveTo(TIME_BUCKET_FORMATTER.parseLocalDateTime("201808301441"));
 
         runningRule.in(getMetaInAlarm(123), getMultipleValueMetrics(timeInPeriod3, 74, 60, 40, 40, 40));
 
         // check at 201808301440
         alarmMessages = runningRule.check();
-        Assert.assertEquals(1, alarmMessages.size());
+        Assertions.assertEquals(1, alarmMessages.size());
         runningRule.moveTo(TIME_BUCKET_FORMATTER.parseLocalDateTime("201808301441"));
     }
 
@@ -206,13 +207,13 @@ public class RunningRuleTest {
         runningRule.in(getMetaInAlarm(123), getMetrics(timeInPeriod5, 95));
 
         // check at 201808301440
-        Assert.assertEquals(0, runningRule.check().size());
+        Assertions.assertEquals(0, runningRule.check().size());
         runningRule.moveTo(TIME_BUCKET_FORMATTER.parseLocalDateTime("201808301442"));
         // check at 201808301441
-        Assert.assertEquals(0, runningRule.check().size());
+        Assertions.assertEquals(0, runningRule.check().size());
         runningRule.moveTo(TIME_BUCKET_FORMATTER.parseLocalDateTime("201808301443"));
         // check at 201808301442
-        Assert.assertEquals(0, runningRule.check().size());
+        Assertions.assertEquals(0, runningRule.check().size());
     }
 
     @Test
@@ -237,22 +238,22 @@ public class RunningRuleTest {
         runningRule.in(getMetaInAlarm(123), getMetrics(timeInPeriod2, 71));
 
         // check at 201808301440
-        Assert.assertEquals(0, runningRule.check().size()); //check matches, no alarm
+        Assertions.assertEquals(0, runningRule.check().size()); //check matches, no alarm
         runningRule.moveTo(TIME_BUCKET_FORMATTER.parseLocalDateTime("201808301441"));
 
         runningRule.in(getMetaInAlarm(123), getMetrics(timeInPeriod3, 74));
 
         // check at 201808301440
-        Assert.assertEquals(1, runningRule.check().size()); //alarm
+        Assertions.assertEquals(1, runningRule.check().size()); //alarm
         runningRule.moveTo(TIME_BUCKET_FORMATTER.parseLocalDateTime("201808301441"));
 
         // check at 201808301442
-        Assert.assertEquals(0, runningRule.check().size()); //silence, no alarm
-        Assert.assertEquals(0, runningRule.check().size()); //silence, no alarm
-        Assert.assertNotEquals(0, runningRule.check().size()); //alarm
-        Assert.assertEquals(0, runningRule.check().size()); //silence, no alarm
-        Assert.assertEquals(0, runningRule.check().size()); //silence, no alarm
-        Assert.assertNotEquals(0, runningRule.check().size()); //alarm
+        Assertions.assertEquals(0, runningRule.check().size()); //silence, no alarm
+        Assertions.assertEquals(0, runningRule.check().size()); //silence, no alarm
+        Assertions.assertNotEquals(0, runningRule.check().size()); //alarm
+        Assertions.assertEquals(0, runningRule.check().size()); //silence, no alarm
+        Assertions.assertEquals(0, runningRule.check().size()); //silence, no alarm
+        Assertions.assertNotEquals(0, runningRule.check().size()); //alarm
     }
 
     @Test
@@ -280,13 +281,13 @@ public class RunningRuleTest {
         runningRule.in(getMetaInAlarm(123), getMetrics(timeInPeriod3, 74));
 
         // check at 201808301440
-        Assert.assertEquals(0, runningRule.check().size());
+        Assertions.assertEquals(0, runningRule.check().size());
         runningRule.moveTo(TIME_BUCKET_FORMATTER.parseLocalDateTime("201808301441"));
         // check at 201808301441
-        Assert.assertEquals(0, runningRule.check().size());
+        Assertions.assertEquals(0, runningRule.check().size());
         runningRule.moveTo(TIME_BUCKET_FORMATTER.parseLocalDateTime("201808301442"));
         // check at 201808301442
-        Assert.assertEquals(0, runningRule.check().size());
+        Assertions.assertEquals(0, runningRule.check().size());
     }
 
     @Test
@@ -315,13 +316,13 @@ public class RunningRuleTest {
         runningRule.in(getMetaInAlarm(223), getMetrics(timeInPeriod3, 74));
 
         // check at 201808301440
-        Assert.assertEquals(1, runningRule.check().size());
+        Assertions.assertEquals(1, runningRule.check().size());
         runningRule.moveTo(TIME_BUCKET_FORMATTER.parseLocalDateTime("201808301441"));
         // check at 201808301441
-        Assert.assertEquals(1, runningRule.check().size());
+        Assertions.assertEquals(1, runningRule.check().size());
         runningRule.moveTo(TIME_BUCKET_FORMATTER.parseLocalDateTime("201808301446"));
         // check at 201808301442
-        Assert.assertEquals(0, runningRule.check().size());
+        Assertions.assertEquals(0, runningRule.check().size());
     }
 
     @Test
@@ -350,13 +351,13 @@ public class RunningRuleTest {
         runningRule.in(getMetaInAlarm(223), getMetrics(timeInPeriod3, 74));
 
         // check at 201808301440
-        Assert.assertEquals(1, runningRule.check().size());
+        Assertions.assertEquals(1, runningRule.check().size());
         runningRule.moveTo(TIME_BUCKET_FORMATTER.parseLocalDateTime("201808301441"));
         // check at 201808301441
-        Assert.assertEquals(1, runningRule.check().size());
+        Assertions.assertEquals(1, runningRule.check().size());
         runningRule.moveTo(TIME_BUCKET_FORMATTER.parseLocalDateTime("201808301446"));
         // check at 201808301442
-        Assert.assertEquals(0, runningRule.check().size());
+        Assertions.assertEquals(0, runningRule.check().size());
     }
 
     private MetaInAlarm getMetaInAlarm(int id) {
@@ -601,14 +602,14 @@ public class RunningRuleTest {
         runningRule.in(getMetaInAlarm(123), getLabeledValueMetrics(timeInPeriod2, "75,15|95,12"));
 
         List<AlarmMessage> alarmMessages = runningRule.check();
-        Assert.assertEquals(0, alarmMessages.size());
+        Assertions.assertEquals(0, alarmMessages.size());
         runningRule.moveTo(TIME_BUCKET_FORMATTER.parseLocalDateTime("201808301441"));
 
         runningRule.in(getMetaInAlarm(123), getLabeledValueMetrics(timeInPeriod3, "90,1|99,20"));
 
         // check at 201808301440
         alarmMessages = runningRule.check();
-        Assert.assertEquals(1, alarmMessages.size());
+        Assertions.assertEquals(1, alarmMessages.size());
         runningRule.moveTo(TIME_BUCKET_FORMATTER.parseLocalDateTime("201808301441"));
     }
 }
diff --git a/oap-server/server-alarm-plugin/src/test/java/org/apache/skywalking/oap/server/core/alarm/provider/ThresholdTest.java b/oap-server/server-alarm-plugin/src/test/java/org/apache/skywalking/oap/server/core/alarm/provider/ThresholdTest.java
index 2e435ef666..053154e26e 100644
--- a/oap-server/server-alarm-plugin/src/test/java/org/apache/skywalking/oap/server/core/alarm/provider/ThresholdTest.java
+++ b/oap-server/server-alarm-plugin/src/test/java/org/apache/skywalking/oap/server/core/alarm/provider/ThresholdTest.java
@@ -18,10 +18,10 @@
 
 package org.apache.skywalking.oap.server.core.alarm.provider;
 
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
-import static org.junit.Assert.assertArrayEquals;
-import static org.junit.Assert.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertArrayEquals;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 public class ThresholdTest {
 
@@ -57,4 +57,4 @@ public class ThresholdTest {
         threshold.setType(MetricsValueType.INT);
         assertEquals(0, threshold.getIntThreshold());
     }
-}
\ No newline at end of file
+}
diff --git a/oap-server/server-alarm-plugin/src/test/java/org/apache/skywalking/oap/server/core/alarm/provider/WebhookCallbackTest.java b/oap-server/server-alarm-plugin/src/test/java/org/apache/skywalking/oap/server/core/alarm/provider/WebhookCallbackTest.java
index 88496df029..81b5eba868 100644
--- a/oap-server/server-alarm-plugin/src/test/java/org/apache/skywalking/oap/server/core/alarm/provider/WebhookCallbackTest.java
+++ b/oap-server/server-alarm-plugin/src/test/java/org/apache/skywalking/oap/server/core/alarm/provider/WebhookCallbackTest.java
@@ -23,21 +23,22 @@ import com.google.gson.JsonArray;
 import com.linecorp.armeria.common.HttpResponse;
 import com.linecorp.armeria.common.HttpStatus;
 import com.linecorp.armeria.server.ServerBuilder;
-import com.linecorp.armeria.testing.junit4.server.ServerRule;
+import com.linecorp.armeria.testing.junit5.server.ServerExtension;
+import org.apache.skywalking.oap.server.core.alarm.AlarmMessage;
+import org.apache.skywalking.oap.server.core.source.DefaultScopeDefine;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.extension.RegisterExtension;
+
 import java.util.ArrayList;
 import java.util.List;
 import java.util.concurrent.atomic.AtomicBoolean;
-import org.apache.skywalking.oap.server.core.alarm.AlarmMessage;
-import org.apache.skywalking.oap.server.core.source.DefaultScopeDefine;
-import org.junit.Assert;
-import org.junit.Rule;
-import org.junit.Test;
 
 public class WebhookCallbackTest {
-    private final AtomicBoolean isSuccess = new AtomicBoolean();
+    private static final AtomicBoolean IS_SUCCESS = new AtomicBoolean();
 
-    @Rule
-    public final ServerRule server = new ServerRule() {
+    @RegisterExtension
+    public static final ServerExtension SERVER = new ServerExtension() {
         @Override
         protected void configure(ServerBuilder sb) {
             sb.service("/webhook/receiveAlarm", (ctx, req) -> HttpResponse.from(
@@ -45,7 +46,7 @@ public class WebhookCallbackTest {
                     final String content = r.content().toStringUtf8();
                     final JsonArray elements = new Gson().fromJson(content, JsonArray.class);
                     if (elements.size() == 2) {
-                        isSuccess.set(true);
+                        IS_SUCCESS.set(true);
                         return HttpResponse.of(HttpStatus.OK);
                     }
 
@@ -58,7 +59,7 @@ public class WebhookCallbackTest {
     @Test
     public void testWebhook() {
         List<String> remoteEndpoints = new ArrayList<>();
-        remoteEndpoints.add("http://127.0.0.1:" + server.httpPort() + "/webhook/receiveAlarm");
+        remoteEndpoints.add("http://127.0.0.1:" + SERVER.httpPort() + "/webhook/receiveAlarm");
         Rules rules = new Rules();
         rules.setWebhooks(remoteEndpoints);
         AlarmRulesWatcher alarmRulesWatcher = new AlarmRulesWatcher(rules, null);
@@ -76,6 +77,6 @@ public class WebhookCallbackTest {
         alarmMessages.add(anotherAlarmMessage);
         webhookCallback.doAlarm(alarmMessages);
 
-        Assert.assertTrue(isSuccess.get());
+        Assertions.assertTrue(IS_SUCCESS.get());
     }
 }
diff --git a/oap-server/server-alarm-plugin/src/test/java/org/apache/skywalking/oap/server/core/alarm/provider/dingtalk/DingtalkHookCallbackTest.java b/oap-server/server-alarm-plugin/src/test/java/org/apache/skywalking/oap/server/core/alarm/provider/dingtalk/DingtalkHookCallbackTest.java
index 04695641c1..0e17c20582 100644
--- a/oap-server/server-alarm-plugin/src/test/java/org/apache/skywalking/oap/server/core/alarm/provider/dingtalk/DingtalkHookCallbackTest.java
+++ b/oap-server/server-alarm-plugin/src/test/java/org/apache/skywalking/oap/server/core/alarm/provider/dingtalk/DingtalkHookCallbackTest.java
@@ -23,29 +23,30 @@ import com.google.gson.JsonObject;
 import com.linecorp.armeria.common.HttpResponse;
 import com.linecorp.armeria.common.HttpStatus;
 import com.linecorp.armeria.server.ServerBuilder;
-import com.linecorp.armeria.testing.junit4.server.ServerRule;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.concurrent.atomic.AtomicBoolean;
-import java.util.concurrent.atomic.AtomicInteger;
+import com.linecorp.armeria.testing.junit5.server.ServerExtension;
 import org.apache.skywalking.oap.server.core.alarm.AlarmMessage;
 import org.apache.skywalking.oap.server.core.alarm.provider.AlarmRulesWatcher;
 import org.apache.skywalking.oap.server.core.alarm.provider.Rules;
 import org.apache.skywalking.oap.server.core.source.DefaultScopeDefine;
 import org.apache.skywalking.oap.server.library.util.StringUtil;
-import org.junit.Assert;
-import org.junit.Rule;
-import org.junit.Test;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.extension.RegisterExtension;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.concurrent.atomic.AtomicBoolean;
+import java.util.concurrent.atomic.AtomicInteger;
 
 public class DingtalkHookCallbackTest {
-    private final AtomicBoolean isSuccess = new AtomicBoolean();
-    private final AtomicInteger count = new AtomicInteger();
-    private final AtomicBoolean checkSign = new AtomicBoolean();
+    private static final AtomicBoolean IS_SUCCESS = new AtomicBoolean();
+    private static final AtomicInteger COUNT = new AtomicInteger();
+    private static final AtomicBoolean CHECK_SIGN = new AtomicBoolean();
 
     private final String secret = "dummy-secret";
 
-    @Rule
-    public final ServerRule server = new ServerRule() {
+    @RegisterExtension
+    public static final ServerExtension SERVER = new ServerExtension() {
         @Override
         protected void configure(ServerBuilder sb) {
             sb.service("/dingtalkhook/receiveAlarm", (ctx, req) -> HttpResponse.from(
@@ -53,7 +54,7 @@ public class DingtalkHookCallbackTest {
                     final String content = r.content().toStringUtf8();
                     final JsonObject jsonObject = new Gson().fromJson(content, JsonObject.class);
                     final String type = jsonObject.get("msgtype").getAsString();
-                    if (checkSign.get()) {
+                    if (CHECK_SIGN.get()) {
                         String timestamp = ctx.queryParam("timestamp");
                         String sign = ctx.queryParam("sign");
                         if (StringUtil.isEmpty(timestamp) || StringUtil.isEmpty(sign)) {
@@ -61,9 +62,9 @@ public class DingtalkHookCallbackTest {
                         }
                     }
                     if (type.equalsIgnoreCase("text")) {
-                        count.incrementAndGet();
-                        if (count.get() == 2) {
-                            isSuccess.set(true);
+                        COUNT.incrementAndGet();
+                        if (COUNT.get() == 2) {
+                            IS_SUCCESS.set(true);
                         }
                         return HttpResponse.of(HttpStatus.OK);
                     }
@@ -76,7 +77,7 @@ public class DingtalkHookCallbackTest {
     @Test
     public void testDingtalkWebhookWithoutSign() {
         List<DingtalkSettings.WebHookUrl> webHooks = new ArrayList<>();
-        webHooks.add(new DingtalkSettings.WebHookUrl("", "http://127.0.0.1:" + server.httpPort() + "/dingtalkhook/receiveAlarm?token=dummy_token"));
+        webHooks.add(new DingtalkSettings.WebHookUrl("", "http://127.0.0.1:" + SERVER.httpPort() + "/dingtalkhook/receiveAlarm?token=dummy_token"));
         Rules rules = new Rules();
         String template = "{\"msgtype\":\"text\",\"text\":{\"content\":\"Skywaling alarm: %s\"}}";
         rules.setDingtalks(DingtalkSettings.builder().webhooks(webHooks).textTemplate(template).build());
@@ -95,14 +96,14 @@ public class DingtalkHookCallbackTest {
         anotherAlarmMessage.setAlarmMessage("anotherAlarmMessage with [DefaultScopeDefine.Endpoint]");
         alarmMessages.add(anotherAlarmMessage);
         dingtalkCallBack.doAlarm(alarmMessages);
-        Assert.assertTrue(isSuccess.get());
+        Assertions.assertTrue(IS_SUCCESS.get());
     }
 
     @Test
     public void testDingtalkWebhookWithSign() {
-        checkSign.set(true);
+        CHECK_SIGN.set(true);
         List<DingtalkSettings.WebHookUrl> webHooks = new ArrayList<>();
-        webHooks.add(new DingtalkSettings.WebHookUrl(secret, "http://127.0.0.1:" + server.httpPort() + "/dingtalkhook/receiveAlarm?token=dummy_token"));
+        webHooks.add(new DingtalkSettings.WebHookUrl(secret, "http://127.0.0.1:" + SERVER.httpPort() + "/dingtalkhook/receiveAlarm?token=dummy_token"));
         Rules rules = new Rules();
         String template = "{\"msgtype\":\"text\",\"text\":{\"content\":\"Skywaling alarm: %s\"}}";
         rules.setDingtalks(DingtalkSettings.builder().webhooks(webHooks).textTemplate(template).build());
@@ -121,6 +122,6 @@ public class DingtalkHookCallbackTest {
         anotherAlarmMessage.setAlarmMessage("anotherAlarmMessage with [DefaultScopeDefine.Endpoint]");
         alarmMessages.add(anotherAlarmMessage);
         dingtalkCallBack.doAlarm(alarmMessages);
-        Assert.assertTrue(isSuccess.get());
+        Assertions.assertTrue(IS_SUCCESS.get());
     }
 }
diff --git a/oap-server/server-alarm-plugin/src/test/java/org/apache/skywalking/oap/server/core/alarm/provider/expression/ExpressionContextTest.java b/oap-server/server-alarm-plugin/src/test/java/org/apache/skywalking/oap/server/core/alarm/provider/expression/ExpressionContextTest.java
index 86deb8bdfc..1ff05a0caa 100644
--- a/oap-server/server-alarm-plugin/src/test/java/org/apache/skywalking/oap/server/core/alarm/provider/expression/ExpressionContextTest.java
+++ b/oap-server/server-alarm-plugin/src/test/java/org/apache/skywalking/oap/server/core/alarm/provider/expression/ExpressionContextTest.java
@@ -18,13 +18,12 @@
 
 package org.apache.skywalking.oap.server.core.alarm.provider.expression;
 
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
 import java.lang.reflect.Method;
 import java.util.Arrays;
 
-import static org.hamcrest.CoreMatchers.is;
-import static org.junit.Assert.assertThat;
+import static org.assertj.core.api.AssertionsForClassTypes.assertThat;
 
 public class ExpressionContextTest {
 
@@ -39,7 +38,7 @@ public class ExpressionContextTest {
         });
         Expression expression = new Expression(expressionContext);
         Number number = (Number) expression.eval("sqrt(16)");
-        assertThat(number, is(4.0));
+        assertThat(number).isEqualTo(4.0);
     }
 
     @Test
@@ -48,8 +47,8 @@ public class ExpressionContextTest {
         expressionContext.registerFunc(Math.class);
         Expression expression = new Expression(expressionContext);
         Number number = (Number) expression.eval("sqrt(16)");
-        assertThat(number, is(4.0));
+        assertThat(number).isEqualTo(4.0);
         number = (Number) expression.eval("abs(-12)");
-        assertThat(number, is(12));
+        assertThat(number).isEqualTo(12);
     }
 }
diff --git a/oap-server/server-alarm-plugin/src/test/java/org/apache/skywalking/oap/server/core/alarm/provider/expression/ExpressionTest.java b/oap-server/server-alarm-plugin/src/test/java/org/apache/skywalking/oap/server/core/alarm/provider/expression/ExpressionTest.java
index 604dc2cbd3..3f81b0af2a 100644
--- a/oap-server/server-alarm-plugin/src/test/java/org/apache/skywalking/oap/server/core/alarm/provider/expression/ExpressionTest.java
+++ b/oap-server/server-alarm-plugin/src/test/java/org/apache/skywalking/oap/server/core/alarm/provider/expression/ExpressionTest.java
@@ -19,23 +19,23 @@
 package org.apache.skywalking.oap.server.core.alarm.provider.expression;
 
 import com.google.common.collect.Sets;
-import org.junit.Before;
-import org.junit.Test;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
 import org.mvel2.CompileException;
 
 import java.util.HashMap;
 import java.util.Map;
 import java.util.Set;
 
-import static org.hamcrest.CoreMatchers.is;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertNull;
-import static org.junit.Assert.assertThat;
+import static org.assertj.core.api.AssertionsForClassTypes.assertThat;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
+import static org.junit.jupiter.api.Assertions.assertNull;
+import static org.junit.jupiter.api.Assertions.assertThrows;
 
 public class ExpressionTest {
     private Expression expression;
 
-    @Before
+    @BeforeEach
     public void init() {
         expression = new Expression(new ExpressionContext());
     }
@@ -49,15 +49,15 @@ public class ExpressionTest {
         assertNull(flag);
         dataMap.put("b", Boolean.TRUE);
         flag = expression.eval(expr, dataMap);
-        assertThat(flag, is(true));
+        assertThat(flag).isEqualTo(true);
     }
 
     @Test
     public void testAnalysisInputs() {
         String expr = " a && b ";
         Set<String> inputs = expression.analysisInputs(expr);
-        assertThat(inputs.size(), is(2));
-        assertThat(inputs, is(Sets.newHashSet("a", "b")));
+        assertThat(inputs.size()).isEqualTo(2);
+        assertThat(inputs).isEqualTo(Sets.newHashSet("a", "b"));
     }
 
     @Test
@@ -66,7 +66,7 @@ public class ExpressionTest {
         Object flag = expression.eval(expr);
         assertNull(flag);
         flag = expression.eval(" 1 > 0");
-        assertThat(flag, is(true));
+        assertThat(flag).isEqualTo(true);
     }
 
     @Test
@@ -76,13 +76,15 @@ public class ExpressionTest {
         Object compiledExpression = expression.compile(expr, context);
         assertNotNull(compiledExpression);
         Object sameExpression = expression.compile(expr, context);
-        assertThat(compiledExpression, is(sameExpression));
+        assertThat(compiledExpression).isEqualTo(sameExpression);
     }
 
-    @Test(expected = CompileException.class)
+    @Test
     public void testCompileWithException() {
-        String expr = " a && * b ";
-        ExpressionContext context = new ExpressionContext();
-        expression.compile(expr, context);
+        assertThrows(CompileException.class, () -> {
+            String expr = " a && * b ";
+            ExpressionContext context = new ExpressionContext();
+            expression.compile(expr, context);
+        });
     }
 }
diff --git a/oap-server/server-alarm-plugin/src/test/java/org/apache/skywalking/oap/server/core/alarm/provider/feishu/FeishuHookCallbackTest.java b/oap-server/server-alarm-plugin/src/test/java/org/apache/skywalking/oap/server/core/alarm/provider/feishu/FeishuHookCallbackTest.java
index e04b92b5ca..a5a8d6c07d 100644
--- a/oap-server/server-alarm-plugin/src/test/java/org/apache/skywalking/oap/server/core/alarm/provider/feishu/FeishuHookCallbackTest.java
+++ b/oap-server/server-alarm-plugin/src/test/java/org/apache/skywalking/oap/server/core/alarm/provider/feishu/FeishuHookCallbackTest.java
@@ -23,28 +23,29 @@ import com.google.gson.JsonObject;
 import com.linecorp.armeria.common.HttpResponse;
 import com.linecorp.armeria.common.HttpStatus;
 import com.linecorp.armeria.server.ServerBuilder;
-import com.linecorp.armeria.testing.junit4.server.ServerRule;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.concurrent.atomic.AtomicBoolean;
-import java.util.concurrent.atomic.AtomicInteger;
+import com.linecorp.armeria.testing.junit5.server.ServerExtension;
 import org.apache.skywalking.oap.server.core.alarm.AlarmMessage;
 import org.apache.skywalking.oap.server.core.alarm.provider.AlarmRulesWatcher;
 import org.apache.skywalking.oap.server.core.alarm.provider.Rules;
 import org.apache.skywalking.oap.server.core.source.DefaultScopeDefine;
 import org.apache.skywalking.oap.server.library.util.StringUtil;
-import org.junit.Assert;
-import org.junit.Rule;
-import org.junit.Test;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.extension.RegisterExtension;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.concurrent.atomic.AtomicBoolean;
+import java.util.concurrent.atomic.AtomicInteger;
 
 public class FeishuHookCallbackTest {
-    private final AtomicBoolean isSuccess = new AtomicBoolean();
-    private final AtomicBoolean checkSign = new AtomicBoolean();
-    private final AtomicInteger count = new AtomicInteger();
+    private static final AtomicBoolean IS_SUCCESS = new AtomicBoolean();
+    private static final AtomicBoolean CHECK_SIGN = new AtomicBoolean();
+    private static final AtomicInteger COUNT = new AtomicInteger();
     private final String secret = "dummy-secret";
 
-    @Rule
-    public final ServerRule server = new ServerRule() {
+    @RegisterExtension
+    public static final ServerExtension SERVER = new ServerExtension() {
         @Override
         protected void configure(ServerBuilder sb) {
             sb.service("/feishuhook/receiveAlarm", (ctx, req) -> HttpResponse.from(
@@ -52,7 +53,7 @@ public class FeishuHookCallbackTest {
                     final String content = r.content().toStringUtf8();
                     final JsonObject jsonObject = new Gson().fromJson(content, JsonObject.class);
                     final String type = jsonObject.get("msg_type").getAsString();
-                    if (checkSign.get()) {
+                    if (CHECK_SIGN.get()) {
                         String timestamp = jsonObject.get("timestamp").getAsString();
                         String sign = jsonObject.get("sign").getAsString();
                         if (StringUtil.isEmpty(timestamp) || StringUtil.isEmpty(sign)) {
@@ -60,9 +61,9 @@ public class FeishuHookCallbackTest {
                         }
                     }
                     if (type.equalsIgnoreCase("text")) {
-                        count.incrementAndGet();
-                        if (count.get() == 2) {
-                            isSuccess.set(true);
+                        COUNT.incrementAndGet();
+                        if (COUNT.get() == 2) {
+                            IS_SUCCESS.set(true);
                         }
                         return HttpResponse.of(HttpStatus.OK);
                     }
@@ -74,7 +75,7 @@ public class FeishuHookCallbackTest {
     @Test
     public void testFeishuWebhookWithoutSign() {
         List<FeishuSettings.WebHookUrl> webHooks = new ArrayList<>();
-        webHooks.add(new FeishuSettings.WebHookUrl("", "http://127.0.0.1:" + server.httpPort() + "/feishuhook/receiveAlarm?token=dummy_token"));
+        webHooks.add(new FeishuSettings.WebHookUrl("", "http://127.0.0.1:" + SERVER.httpPort() + "/feishuhook/receiveAlarm?token=dummy_token"));
         Rules rules = new Rules();
         String template = "{\"msg_type\":\"text\",\"content\":{\"text\":\"Skywaling alarm: %s\"}}";
         rules.setFeishus(FeishuSettings.builder().webhooks(webHooks).textTemplate(template).build());
@@ -93,14 +94,14 @@ public class FeishuHookCallbackTest {
         anotherAlarmMessage.setAlarmMessage("anotherAlarmMessage with [DefaultScopeDefine.Endpoint]");
         alarmMessages.add(anotherAlarmMessage);
         feishuHookCallback.doAlarm(alarmMessages);
-        Assert.assertTrue(isSuccess.get());
+        Assertions.assertTrue(IS_SUCCESS.get());
     }
 
     @Test
     public void testFeishuWebhookWithSign() {
-        checkSign.set(true);
+        CHECK_SIGN.set(true);
         List<FeishuSettings.WebHookUrl> webHooks = new ArrayList<>();
-        webHooks.add(new FeishuSettings.WebHookUrl(secret, "http://127.0.0.1:" + server.httpPort() + "/feishuhook/receiveAlarm?token=dummy_token"));
+        webHooks.add(new FeishuSettings.WebHookUrl(secret, "http://127.0.0.1:" + SERVER.httpPort() + "/feishuhook/receiveAlarm?token=dummy_token"));
         Rules rules = new Rules();
         String template = "{\"msg_type\":\"text\",\"content\":{\"text\":\"Skywaling alarm: %s\"}}";
         rules.setFeishus(FeishuSettings.builder().webhooks(webHooks).textTemplate(template).build());
@@ -119,14 +120,14 @@ public class FeishuHookCallbackTest {
         anotherAlarmMessage.setAlarmMessage("anotherAlarmMessage with [DefaultScopeDefine.Endpoint]");
         alarmMessages.add(anotherAlarmMessage);
         feishuHookCallback.doAlarm(alarmMessages);
-        Assert.assertTrue(isSuccess.get());
+        Assertions.assertTrue(IS_SUCCESS.get());
     }
 
     @Test
     public void testFeishuWebhookWithSignAndAt() {
-        checkSign.set(true);
+        CHECK_SIGN.set(true);
         List<FeishuSettings.WebHookUrl> webHooks = new ArrayList<>();
-        webHooks.add(new FeishuSettings.WebHookUrl(secret, "http://127.0.0.1:" + server.httpPort() + "/feishuhook/receiveAlarm?token=dummy_token"));
+        webHooks.add(new FeishuSettings.WebHookUrl(secret, "http://127.0.0.1:" + SERVER.httpPort() + "/feishuhook/receiveAlarm?token=dummy_token"));
         Rules rules = new Rules();
         String template = "{\"msg_type\":\"text\",\"content\":{\"text\":\"Skywaling alarm: %s\"},\"ats\":\"123\"}";
         rules.setFeishus(FeishuSettings.builder().webhooks(webHooks).textTemplate(template).build());
@@ -145,6 +146,6 @@ public class FeishuHookCallbackTest {
         anotherAlarmMessage.setAlarmMessage("anotherAlarmMessage with [DefaultScopeDefine.Endpoint]");
         alarmMessages.add(anotherAlarmMessage);
         feishuHookCallback.doAlarm(alarmMessages);
-        Assert.assertTrue(isSuccess.get());
+        Assertions.assertTrue(IS_SUCCESS.get());
     }
 }
diff --git a/oap-server/server-alarm-plugin/src/test/java/org/apache/skywalking/oap/server/core/alarm/provider/grpc/GRPChookCallbackTest.java b/oap-server/server-alarm-plugin/src/test/java/org/apache/skywalking/oap/server/core/alarm/provider/grpc/GRPChookCallbackTest.java
index 012d0a5654..9154ddd6f9 100644
--- a/oap-server/server-alarm-plugin/src/test/java/org/apache/skywalking/oap/server/core/alarm/provider/grpc/GRPChookCallbackTest.java
+++ b/oap-server/server-alarm-plugin/src/test/java/org/apache/skywalking/oap/server/core/alarm/provider/grpc/GRPChookCallbackTest.java
@@ -27,8 +27,8 @@ import org.apache.skywalking.oap.server.core.alarm.provider.AlarmRulesWatcher;
 import org.apache.skywalking.oap.server.core.alarm.provider.Rules;
 import org.apache.skywalking.oap.server.core.analysis.manual.searchtag.Tag;
 import org.apache.skywalking.oap.server.core.query.enumeration.Scope;
-import org.junit.Before;
-import org.junit.Test;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
 
 public class GRPChookCallbackTest {
 
@@ -38,7 +38,7 @@ public class GRPChookCallbackTest {
 
     private List<AlarmMessage> alarmMessageList;
 
-    @Before
+    @BeforeEach
     public void init() throws Exception {
         GRPCAlarmSetting setting = new GRPCAlarmSetting();
         setting.setTargetHost("127.0.0.1");
diff --git a/oap-server/server-alarm-plugin/src/test/java/org/apache/skywalking/oap/server/core/alarm/provider/pagerduty/PagerDutyHookCallbackTest.java b/oap-server/server-alarm-plugin/src/test/java/org/apache/skywalking/oap/server/core/alarm/provider/pagerduty/PagerDutyHookCallbackTest.java
index 33822b0ff8..c42b8011a2 100644
--- a/oap-server/server-alarm-plugin/src/test/java/org/apache/skywalking/oap/server/core/alarm/provider/pagerduty/PagerDutyHookCallbackTest.java
+++ b/oap-server/server-alarm-plugin/src/test/java/org/apache/skywalking/oap/server/core/alarm/provider/pagerduty/PagerDutyHookCallbackTest.java
@@ -22,16 +22,16 @@ import org.apache.skywalking.oap.server.core.alarm.AlarmMessage;
 import org.apache.skywalking.oap.server.core.alarm.provider.AlarmRulesWatcher;
 import org.apache.skywalking.oap.server.core.alarm.provider.Rules;
 import org.apache.skywalking.oap.server.core.source.DefaultScopeDefine;
-import org.junit.Ignore;
-import org.junit.Test;
+import org.junit.jupiter.api.Disabled;
+import org.junit.jupiter.api.Test;
 
 import java.util.Arrays;
 import java.util.List;
 
 public class PagerDutyHookCallbackTest {
 
-    @Ignore
     @Test
+    @Disabled
     public void testWithRealAccount() {
         // replace this with your actual integration key(s) and run this test manually
         List<String> integrationKeys = Arrays.asList(
@@ -71,4 +71,4 @@ public class PagerDutyHookCallbackTest {
                 anotherAlarmMessage
         );
     }
-}
\ No newline at end of file
+}
diff --git a/oap-server/server-alarm-plugin/src/test/java/org/apache/skywalking/oap/server/core/alarm/provider/wechat/WechatHookCallbackTest.java b/oap-server/server-alarm-plugin/src/test/java/org/apache/skywalking/oap/server/core/alarm/provider/wechat/WechatHookCallbackTest.java
index f745ae8547..807592a83a 100644
--- a/oap-server/server-alarm-plugin/src/test/java/org/apache/skywalking/oap/server/core/alarm/provider/wechat/WechatHookCallbackTest.java
+++ b/oap-server/server-alarm-plugin/src/test/java/org/apache/skywalking/oap/server/core/alarm/provider/wechat/WechatHookCallbackTest.java
@@ -23,25 +23,26 @@ import com.google.gson.JsonObject;
 import com.linecorp.armeria.common.HttpResponse;
 import com.linecorp.armeria.common.HttpStatus;
 import com.linecorp.armeria.server.ServerBuilder;
-import com.linecorp.armeria.testing.junit4.server.ServerRule;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.concurrent.atomic.AtomicBoolean;
-import java.util.concurrent.atomic.AtomicInteger;
+import com.linecorp.armeria.testing.junit5.server.ServerExtension;
 import org.apache.skywalking.oap.server.core.alarm.AlarmMessage;
 import org.apache.skywalking.oap.server.core.alarm.provider.AlarmRulesWatcher;
 import org.apache.skywalking.oap.server.core.alarm.provider.Rules;
 import org.apache.skywalking.oap.server.core.source.DefaultScopeDefine;
-import org.junit.Assert;
-import org.junit.Rule;
-import org.junit.Test;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.extension.RegisterExtension;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.concurrent.atomic.AtomicBoolean;
+import java.util.concurrent.atomic.AtomicInteger;
 
 public class WechatHookCallbackTest {
-    private final AtomicBoolean isSuccess = new AtomicBoolean();
-    private final AtomicInteger count = new AtomicInteger();
+    private static final AtomicBoolean IS_SUCCESS = new AtomicBoolean();
+    private static final AtomicInteger COUNT = new AtomicInteger();
 
-    @Rule
-    public final ServerRule server = new ServerRule() {
+    @RegisterExtension
+    public static final ServerExtension SERVER = new ServerExtension() {
         @Override
         protected void configure(ServerBuilder sb) {
             sb.service("/wechathook/receiveAlarm", (ctx, req) -> HttpResponse.from(
@@ -50,9 +51,9 @@ public class WechatHookCallbackTest {
                     final JsonObject jsonObject = new Gson().fromJson(content, JsonObject.class);
                     final String type = jsonObject.get("msgtype").getAsString();
                     if (type.equalsIgnoreCase("text")) {
-                        count.incrementAndGet();
-                        if (count.get() == 2) {
-                            isSuccess.set(true);
+                        COUNT.incrementAndGet();
+                        if (COUNT.get() == 2) {
+                            IS_SUCCESS.set(true);
                         }
                         return HttpResponse.of(HttpStatus.OK);
                     }
@@ -66,7 +67,7 @@ public class WechatHookCallbackTest {
     @Test
     public void testWechatWebhook() {
         List<String> remoteEndpoints = new ArrayList<>();
-        remoteEndpoints.add("http://127.0.0.1:" + server.httpPort() + "/wechathook/receiveAlarm");
+        remoteEndpoints.add("http://127.0.0.1:" + SERVER.httpPort() + "/wechathook/receiveAlarm");
         Rules rules = new Rules();
         String template = "{\"msgtype\":\"text\",\"text\":{\"content\":\"Skywaling alarm: %s\"}}";
         rules.setWecchats(WechatSettings.builder().webhooks(remoteEndpoints).textTemplate(template).build());
@@ -84,6 +85,6 @@ public class WechatHookCallbackTest {
         anotherAlarmMessage.setAlarmMessage("anotherAlarmMessage with [DefaultScopeDefine.Endpoint]");
         alarmMessages.add(anotherAlarmMessage);
         wechatHookCallback.doAlarm(alarmMessages);
-        Assert.assertTrue(isSuccess.get());
+        Assertions.assertTrue(IS_SUCCESS.get());
     }
 }
diff --git a/oap-server/server-alarm-plugin/src/test/java/org/apache/skywalking/oap/server/core/alarm/provider/welink/WeLinkHookCallbackTest.java b/oap-server/server-alarm-plugin/src/test/java/org/apache/skywalking/oap/server/core/alarm/provider/welink/WeLinkHookCallbackTest.java
index c86940de23..4a28f5d96a 100644
--- a/oap-server/server-alarm-plugin/src/test/java/org/apache/skywalking/oap/server/core/alarm/provider/welink/WeLinkHookCallbackTest.java
+++ b/oap-server/server-alarm-plugin/src/test/java/org/apache/skywalking/oap/server/core/alarm/provider/welink/WeLinkHookCallbackTest.java
@@ -24,25 +24,26 @@ import com.linecorp.armeria.common.HttpResponse;
 import com.linecorp.armeria.common.HttpStatus;
 import com.linecorp.armeria.common.MediaType;
 import com.linecorp.armeria.server.ServerBuilder;
-import com.linecorp.armeria.testing.junit4.server.ServerRule;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.concurrent.atomic.AtomicBoolean;
-import java.util.concurrent.atomic.AtomicInteger;
+import com.linecorp.armeria.testing.junit5.server.ServerExtension;
 import org.apache.skywalking.oap.server.core.alarm.AlarmMessage;
 import org.apache.skywalking.oap.server.core.alarm.provider.AlarmRulesWatcher;
 import org.apache.skywalking.oap.server.core.alarm.provider.Rules;
 import org.apache.skywalking.oap.server.core.source.DefaultScopeDefine;
-import org.junit.Assert;
-import org.junit.Rule;
-import org.junit.Test;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.extension.RegisterExtension;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.concurrent.atomic.AtomicBoolean;
+import java.util.concurrent.atomic.AtomicInteger;
 
 public class WeLinkHookCallbackTest {
-    private final AtomicBoolean isSuccess = new AtomicBoolean();
-    private final AtomicInteger count = new AtomicInteger();
+    private static final AtomicBoolean IS_SUCCESS = new AtomicBoolean();
+    private static final AtomicInteger COUNT = new AtomicInteger();
 
-    @Rule
-    public final ServerRule server = new ServerRule() {
+    @RegisterExtension
+    public static final ServerExtension SERVER = new ServerExtension() {
         @Override
         protected void configure(ServerBuilder sb) {
             sb.serviceUnder("/welinkhook", (ctx, req) -> HttpResponse.from(
@@ -50,19 +51,19 @@ public class WeLinkHookCallbackTest {
                     final String content = r.content().toStringUtf8();
                     final JsonObject jsonObject = new Gson().fromJson(content, JsonObject.class);
 
-                    if (count.get() == 0) {
+                    if (COUNT.get() == 0) {
                         String clientId = jsonObject.get("client_id").getAsString();
                         if (clientId != null) {
-                            count.incrementAndGet();
+                            COUNT.incrementAndGet();
                         }
-                    } else if (count.get() >= 1) {
+                    } else if (COUNT.get() >= 1) {
                         String appMsgId = jsonObject.get("app_msg_id").getAsString();
                         if (appMsgId != null) {
-                            count.incrementAndGet();
+                            COUNT.incrementAndGet();
                         }
                     }
-                    if (count.get() == 2) {
-                        isSuccess.set(true);
+                    if (COUNT.get() == 2) {
+                        IS_SUCCESS.set(true);
                     }
 
                     return HttpResponse.of(HttpStatus.OK, MediaType.JSON, "{}");
@@ -74,8 +75,8 @@ public class WeLinkHookCallbackTest {
     public void testWeLinkDoAlarm() {
         List<WeLinkSettings.WebHookUrl> webHooks = new ArrayList<>();
         webHooks.add(new WeLinkSettings.WebHookUrl("clientId", "clientSecret",
-                                                   "http://127.0.0.1:" + server.httpPort() + "/welinkhook/api/auth/v2/tickets",
-                                                   "http://127.0.0.1:" + server.httpPort() + "/welinkhook/api/welinkim/v1/im-service/chat/group-chat",
+                                                   "http://127.0.0.1:" + SERVER.httpPort() + "/welinkhook/api/auth/v2/tickets",
+                                                   "http://127.0.0.1:" + SERVER.httpPort() + "/welinkhook/api/welinkim/v1/im-service/chat/group-chat",
                                                    "robotName", "1,2,3"
         ));
         Rules rules = new Rules();
@@ -96,6 +97,6 @@ public class WeLinkHookCallbackTest {
         anotherAlarmMessage.setAlarmMessage("anotherAlarmMessage with [DefaultScopeDefine.Endpoint]");
         alarmMessages.add(anotherAlarmMessage);
         welinkHookCallback.doAlarm(alarmMessages);
-        Assert.assertTrue(isSuccess.get());
+        Assertions.assertTrue(IS_SUCCESS.get());
     }
 }
diff --git a/oap-server/server-cluster-plugin/cluster-consul-plugin/src/test/java/org/apache/skywalking/oap/server/cluster/plugin/consul/ClusterModuleConsulProviderTest.java b/oap-server/server-cluster-plugin/cluster-consul-plugin/src/test/java/org/apache/skywalking/oap/server/cluster/plugin/consul/ClusterModuleConsulProviderTest.java
index 70233a4c41..6316b8948f 100644
--- a/oap-server/server-cluster-plugin/cluster-consul-plugin/src/test/java/org/apache/skywalking/oap/server/cluster/plugin/consul/ClusterModuleConsulProviderTest.java
+++ b/oap-server/server-cluster-plugin/cluster-consul-plugin/src/test/java/org/apache/skywalking/oap/server/cluster/plugin/consul/ClusterModuleConsulProviderTest.java
@@ -21,46 +21,37 @@ package org.apache.skywalking.oap.server.cluster.plugin.consul;
 import com.google.common.collect.Lists;
 import com.google.common.net.HostAndPort;
 import com.orbitz.consul.Consul;
-import java.util.Collection;
-import java.util.List;
 import org.apache.skywalking.oap.server.core.CoreModule;
 import org.apache.skywalking.oap.server.core.cluster.ClusterModule;
 import org.apache.skywalking.oap.server.library.module.ModuleManager;
 import org.apache.skywalking.oap.server.library.module.ModuleStartException;
 import org.apache.skywalking.oap.server.telemetry.TelemetryModule;
-import org.apache.skywalking.oap.server.telemetry.api.MetricsCreator;
-import org.apache.skywalking.oap.server.telemetry.none.MetricsCreatorNoop;
 import org.apache.skywalking.oap.server.telemetry.none.NoneTelemetryProvider;
-import org.junit.Before;
-import org.junit.Test;
-import org.junit.runner.RunWith;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.extension.ExtendWith;
 import org.mockito.ArgumentCaptor;
 import org.mockito.Mock;
+import org.mockito.MockedStatic;
 import org.mockito.Mockito;
-import org.powermock.api.mockito.PowerMockito;
-import org.powermock.core.classloader.annotations.PowerMockIgnore;
-import org.powermock.core.classloader.annotations.PrepareForTest;
-import org.powermock.modules.junit4.PowerMockRunner;
+import org.mockito.junit.jupiter.MockitoExtension;
 import org.powermock.reflect.Whitebox;
 
-import static org.junit.Assert.assertArrayEquals;
-import static org.junit.Assert.assertEquals;
+import java.util.Collection;
+import java.util.List;
+
+import static org.junit.jupiter.api.Assertions.assertArrayEquals;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertThrows;
 import static org.mockito.Mockito.any;
 import static org.mockito.Mockito.anyCollection;
 import static org.mockito.Mockito.anyLong;
 import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.mockStatic;
 import static org.mockito.Mockito.verify;
 import static org.mockito.Mockito.when;
 
-@RunWith(PowerMockRunner.class)
-@PrepareForTest(Consul.class)
-@PowerMockIgnore({
-    "com.sun.org.apache.xerces.*",
-    "javax.xml.*",
-    "org.xml.*",
-    "javax.management.*",
-    "org.w3c.*"
-})
+@ExtendWith(MockitoExtension.class)
 public class ClusterModuleConsulProviderTest {
 
     private ClusterModuleConsulProvider provider = new ClusterModuleConsulProvider();
@@ -70,13 +61,10 @@ public class ClusterModuleConsulProviderTest {
     @Mock
     private NoneTelemetryProvider telemetryProvider;
 
-    @Before
+    @BeforeEach
     public void before() {
-        Mockito.when(telemetryProvider.getService(MetricsCreator.class))
-               .thenReturn(new MetricsCreatorNoop());
         TelemetryModule telemetryModule = Mockito.spy(TelemetryModule.class);
         Whitebox.setInternalState(telemetryModule, "loadedProvider", telemetryProvider);
-        Mockito.when(moduleManager.find(TelemetryModule.NAME)).thenReturn(telemetryModule);
         provider.setManager(moduleManager);
         Whitebox.setInternalState(provider, "config", new ClusterModuleConsulConfig());
     }
@@ -91,9 +79,9 @@ public class ClusterModuleConsulProviderTest {
         assertEquals(ClusterModule.class, provider.module());
     }
 
-    @Test(expected = ModuleStartException.class)
+    @Test
     public void prepareWithNonHost() throws Exception {
-        provider.prepare();
+        assertThrows(ModuleStartException.class, () -> provider.prepare());
     }
 
     @Test
@@ -107,23 +95,24 @@ public class ClusterModuleConsulProviderTest {
         Consul.Builder builder = mock(Consul.Builder.class);
         when(builder.build()).thenReturn(consulClient);
 
-        PowerMockito.mockStatic(Consul.class);
-        when(Consul.builder()).thenReturn(builder);
-        when(builder.withConnectTimeoutMillis(anyLong())).thenReturn(builder);
+        try (MockedStatic<Consul> ignored = mockStatic(Consul.class)) {
+            when(Consul.builder()).thenReturn(builder);
+            when(builder.withConnectTimeoutMillis(anyLong())).thenReturn(builder);
 
-        when(builder.withMultipleHostAndPort(anyCollection(), anyLong())).thenReturn(builder);
-        provider.prepare();
+            when(builder.withMultipleHostAndPort(anyCollection(), anyLong())).thenReturn(builder);
+            provider.prepare();
 
-        ArgumentCaptor<Collection> addressCaptor = ArgumentCaptor.forClass(Collection.class);
-        ArgumentCaptor<Long> timeCaptor = ArgumentCaptor.forClass(long.class);
-        verify(builder).withMultipleHostAndPort(addressCaptor.capture(), timeCaptor.capture());
+            ArgumentCaptor<Collection> addressCaptor = ArgumentCaptor.forClass(Collection.class);
+            ArgumentCaptor<Long> timeCaptor = ArgumentCaptor.forClass(long.class);
+            verify(builder).withMultipleHostAndPort(addressCaptor.capture(), timeCaptor.capture());
 
-        List<HostAndPort> address = (List<HostAndPort>) addressCaptor.getValue();
-        assertEquals(2, address.size());
-        assertEquals(
-            Lists.newArrayList(HostAndPort.fromParts("10.0.0.1", 1000), HostAndPort.fromParts("10.0.0.2", 1001)),
-            address
-        );
+            List<HostAndPort> address = (List<HostAndPort>) addressCaptor.getValue();
+            assertEquals(2, address.size());
+            assertEquals(
+                    Lists.newArrayList(HostAndPort.fromParts("10.0.0.1", 1000), HostAndPort.fromParts("10.0.0.2", 1001)),
+                    address
+            );
+        }
     }
 
     @Test
@@ -136,19 +125,20 @@ public class ClusterModuleConsulProviderTest {
         Consul.Builder builder = mock(Consul.Builder.class);
         when(builder.build()).thenReturn(consulClient);
 
-        PowerMockito.mockStatic(Consul.class);
-        when(Consul.builder()).thenReturn(builder);
-        when(builder.withConnectTimeoutMillis(anyLong())).thenReturn(builder);
+        try (MockedStatic<Consul> ignored = mockStatic(Consul.class)) {
+            when(Consul.builder()).thenReturn(builder);
+            when(builder.withConnectTimeoutMillis(anyLong())).thenReturn(builder);
 
-        when(builder.withHostAndPort(any())).thenReturn(builder);
+            when(builder.withHostAndPort(any())).thenReturn(builder);
 
-        provider.prepare();
+            provider.prepare();
 
-        ArgumentCaptor<HostAndPort> hostAndPortArgumentCaptor = ArgumentCaptor.forClass(HostAndPort.class);
-        verify(builder).withHostAndPort(hostAndPortArgumentCaptor.capture());
+            ArgumentCaptor<HostAndPort> hostAndPortArgumentCaptor = ArgumentCaptor.forClass(HostAndPort.class);
+            verify(builder).withHostAndPort(hostAndPortArgumentCaptor.capture());
 
-        HostAndPort address = hostAndPortArgumentCaptor.getValue();
-        assertEquals(HostAndPort.fromParts("10.0.0.1", 1000), address);
+            HostAndPort address = hostAndPortArgumentCaptor.getValue();
+            assertEquals(HostAndPort.fromParts("10.0.0.1", 1000), address);
+        }
     }
 
     @Test
diff --git a/oap-server/server-cluster-plugin/cluster-consul-plugin/src/test/java/org/apache/skywalking/oap/server/cluster/plugin/consul/ConsulCoordinatorTest.java b/oap-server/server-cluster-plugin/cluster-consul-plugin/src/test/java/org/apache/skywalking/oap/server/cluster/plugin/consul/ConsulCoordinatorTest.java
index c3867c0828..fe8662f3f4 100644
--- a/oap-server/server-cluster-plugin/cluster-consul-plugin/src/test/java/org/apache/skywalking/oap/server/cluster/plugin/consul/ConsulCoordinatorTest.java
+++ b/oap-server/server-cluster-plugin/cluster-consul-plugin/src/test/java/org/apache/skywalking/oap/server/cluster/plugin/consul/ConsulCoordinatorTest.java
@@ -25,21 +25,22 @@ import com.orbitz.consul.model.ConsulResponse;
 import com.orbitz.consul.model.agent.Registration;
 import com.orbitz.consul.model.health.Service;
 import com.orbitz.consul.model.health.ServiceHealth;
-import java.util.Collections;
-import java.util.LinkedList;
-import java.util.List;
 import org.apache.skywalking.oap.server.core.cluster.RemoteInstance;
 import org.apache.skywalking.oap.server.core.remote.client.Address;
 import org.apache.skywalking.oap.server.library.module.ModuleDefineHolder;
 import org.apache.skywalking.oap.server.telemetry.api.HealthCheckMetrics;
-import org.junit.Before;
-import org.junit.Test;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
 import org.mockito.ArgumentCaptor;
 import org.powermock.reflect.Whitebox;
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertTrue;
+import java.util.Collections;
+import java.util.LinkedList;
+import java.util.List;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 import static org.mockito.Mockito.anyString;
 import static org.mockito.Mockito.doNothing;
 import static org.mockito.Mockito.mock;
@@ -65,7 +66,7 @@ public class ConsulCoordinatorTest {
 
     private static final String SERVICE_NAME = "my-service";
 
-    @Before
+    @BeforeEach
     public void setUp() {
         consulConfig.setServiceName(SERVICE_NAME);
         ModuleDefineHolder manager = mock(ModuleDefineHolder.class);
@@ -205,4 +206,4 @@ public class ConsulCoordinatorTest {
 
         return serviceHealth;
     }
-}
\ No newline at end of file
+}
diff --git a/oap-server/server-cluster-plugin/cluster-consul-plugin/src/test/java/org/apache/skywalking/oap/server/cluster/plugin/consul/ITClusterModuleConsulProviderFunctionalTest.java b/oap-server/server-cluster-plugin/cluster-consul-plugin/src/test/java/org/apache/skywalking/oap/server/cluster/plugin/consul/ITClusterModuleConsulProviderFunctionalTest.java
index 501a0fb539..f815e94d42 100644
--- a/oap-server/server-cluster-plugin/cluster-consul-plugin/src/test/java/org/apache/skywalking/oap/server/cluster/plugin/consul/ITClusterModuleConsulProviderFunctionalTest.java
+++ b/oap-server/server-cluster-plugin/cluster-consul-plugin/src/test/java/org/apache/skywalking/oap/server/cluster/plugin/consul/ITClusterModuleConsulProviderFunctionalTest.java
@@ -21,58 +21,60 @@ package org.apache.skywalking.oap.server.cluster.plugin.consul;
 import com.google.common.base.Strings;
 import com.orbitz.consul.AgentClient;
 import com.orbitz.consul.Consul;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.List;
 import lombok.Getter;
 import org.apache.skywalking.oap.server.core.cluster.ClusterCoordinator;
-import org.apache.skywalking.oap.server.core.cluster.ClusterWatcher;
-import org.apache.skywalking.oap.server.library.util.StringUtil;
 import org.apache.skywalking.oap.server.core.cluster.ClusterNodesQuery;
 import org.apache.skywalking.oap.server.core.cluster.ClusterRegister;
+import org.apache.skywalking.oap.server.core.cluster.ClusterWatcher;
 import org.apache.skywalking.oap.server.core.cluster.RemoteInstance;
 import org.apache.skywalking.oap.server.core.remote.client.Address;
 import org.apache.skywalking.oap.server.library.module.ModuleManager;
 import org.apache.skywalking.oap.server.library.module.ModuleProvider;
+import org.apache.skywalking.oap.server.library.util.StringUtil;
 import org.apache.skywalking.oap.server.telemetry.TelemetryModule;
 import org.apache.skywalking.oap.server.telemetry.api.MetricsCreator;
 import org.apache.skywalking.oap.server.telemetry.none.MetricsCreatorNoop;
 import org.apache.skywalking.oap.server.telemetry.none.NoneTelemetryProvider;
-import org.junit.Before;
-import org.junit.Rule;
-import org.junit.Test;
-import org.junit.runner.RunWith;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.extension.ExtendWith;
 import org.mockito.Mock;
 import org.mockito.Mockito;
-import org.powermock.core.classloader.annotations.PowerMockIgnore;
-import org.powermock.modules.junit4.PowerMockRunner;
+import org.mockito.junit.jupiter.MockitoExtension;
 import org.powermock.reflect.Whitebox;
 import org.testcontainers.containers.GenericContainer;
 import org.testcontainers.containers.wait.strategy.Wait;
+import org.testcontainers.junit.jupiter.Container;
+import org.testcontainers.junit.jupiter.Testcontainers;
 import org.testcontainers.utility.DockerImageName;
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertTrue;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
-@RunWith(PowerMockRunner.class)
-@PowerMockIgnore({"javax.net.ssl.*", "javax.security.*", "javax.management.*"})
+@Testcontainers
+@ExtendWith(MockitoExtension.class)
 public class ITClusterModuleConsulProviderFunctionalTest {
 
     private String consulAddress;
 
-    @Rule
+    @Container
     public final GenericContainer<?> container =
         new GenericContainer<>(DockerImageName.parse("consul:0.9"))
             .waitingFor(Wait.forLogMessage(".*Synced node info.*", 1))
-            .withCommand("agent", "-server", "-bootstrap-expect=1", "-client=0.0.0.0");
+            .withCommand("agent", "-server", "-bootstrap-expect=1", "-client=0.0.0.0")
+            .withExposedPorts(8500);
 
     @Mock
     private ModuleManager moduleManager;
     @Mock
     private NoneTelemetryProvider telemetryProvider;
 
-    @Before
+    @BeforeEach
     public void before() {
         Mockito.when(telemetryProvider.getService(MetricsCreator.class))
                 .thenReturn(new MetricsCreatorNoop());
diff --git a/oap-server/server-cluster-plugin/cluster-etcd-plugin/src/test/java/org/apache/skywalking/oap/server/cluster/plugin/etcd/ITClusterEtcdPluginTest.java b/oap-server/server-cluster-plugin/cluster-etcd-plugin/src/test/java/org/apache/skywalking/oap/server/cluster/plugin/etcd/ITClusterEtcdPluginTest.java
index b8291653fa..7f929db384 100644
--- a/oap-server/server-cluster-plugin/cluster-etcd-plugin/src/test/java/org/apache/skywalking/oap/server/cluster/plugin/etcd/ITClusterEtcdPluginTest.java
+++ b/oap-server/server-cluster-plugin/cluster-etcd-plugin/src/test/java/org/apache/skywalking/oap/server/cluster/plugin/etcd/ITClusterEtcdPluginTest.java
@@ -22,28 +22,31 @@ import io.etcd.jetcd.ByteSequence;
 import io.etcd.jetcd.Client;
 import io.etcd.jetcd.kv.GetResponse;
 import io.etcd.jetcd.options.GetOption;
-import java.nio.charset.Charset;
-import java.util.Collections;
-import java.util.List;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.skywalking.oap.server.core.cluster.RemoteInstance;
 import org.apache.skywalking.oap.server.core.remote.client.Address;
 import org.apache.skywalking.oap.server.library.module.ModuleDefineHolder;
 import org.apache.skywalking.oap.server.telemetry.api.HealthCheckMetrics;
-import org.junit.Before;
-import org.junit.Rule;
-import org.junit.Test;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
 import org.powermock.reflect.Whitebox;
 import org.testcontainers.containers.GenericContainer;
 import org.testcontainers.containers.wait.strategy.Wait;
+import org.testcontainers.junit.jupiter.Container;
+import org.testcontainers.junit.jupiter.Testcontainers;
 import org.testcontainers.utility.DockerImageName;
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotNull;
+import java.nio.charset.Charset;
+import java.util.Collections;
+import java.util.List;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
 import static org.mockito.Mockito.doNothing;
 import static org.mockito.Mockito.mock;
 
 @Slf4j
+@Testcontainers
 public class ITClusterEtcdPluginTest {
     private ClusterModuleEtcdConfig etcdConfig;
 
@@ -59,7 +62,7 @@ public class ITClusterEtcdPluginTest {
 
     private static final String SERVICE_NAME = "my-service";
 
-    @Rule
+    @Container
     public final GenericContainer<?> container =
         new GenericContainer<>(DockerImageName.parse("quay.io/coreos/etcd:v3.5.0"))
             .waitingFor(Wait.forLogMessage(".*ready to serve client requests.*", 1))
@@ -68,9 +71,10 @@ public class ITClusterEtcdPluginTest {
                 "etcd",
                 "--advertise-client-urls", "http://0.0.0.0:2379",
                 "--listen-client-urls", "http://0.0.0.0:2379"
-            );
+            )
+            .withExposedPorts(2379);
 
-    @Before
+    @BeforeEach
     public void before() throws Exception {
         String baseUrl = "http://" + container.getHost() + ":" + container.getMappedPort(2379);
         System.setProperty("etcd.endpoint", baseUrl);
diff --git a/oap-server/server-cluster-plugin/cluster-etcd-plugin/src/test/java/org/apache/skywalking/oap/server/cluster/plugin/etcd/ITClusterModuleEtcdProviderFunctionalTest.java b/oap-server/server-cluster-plugin/cluster-etcd-plugin/src/test/java/org/apache/skywalking/oap/server/cluster/plugin/etcd/ITClusterModuleEtcdProviderFunctionalTest.java
index 3fbde15353..2b89dc3d48 100644
--- a/oap-server/server-cluster-plugin/cluster-etcd-plugin/src/test/java/org/apache/skywalking/oap/server/cluster/plugin/etcd/ITClusterModuleEtcdProviderFunctionalTest.java
+++ b/oap-server/server-cluster-plugin/cluster-etcd-plugin/src/test/java/org/apache/skywalking/oap/server/cluster/plugin/etcd/ITClusterModuleEtcdProviderFunctionalTest.java
@@ -19,43 +19,46 @@
 package org.apache.skywalking.oap.server.cluster.plugin.etcd;
 
 import io.etcd.jetcd.Client;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.List;
 import lombok.Getter;
 import org.apache.skywalking.oap.server.core.cluster.ClusterCoordinator;
-import org.apache.skywalking.oap.server.core.cluster.ClusterWatcher;
-import org.apache.skywalking.oap.server.library.util.StringUtil;
 import org.apache.skywalking.oap.server.core.cluster.ClusterNodesQuery;
+import org.apache.skywalking.oap.server.core.cluster.ClusterWatcher;
 import org.apache.skywalking.oap.server.core.cluster.RemoteInstance;
 import org.apache.skywalking.oap.server.core.remote.client.Address;
 import org.apache.skywalking.oap.server.library.module.ModuleManager;
 import org.apache.skywalking.oap.server.library.module.ModuleProvider;
 import org.apache.skywalking.oap.server.library.module.ModuleStartException;
+import org.apache.skywalking.oap.server.library.util.StringUtil;
 import org.apache.skywalking.oap.server.telemetry.TelemetryModule;
 import org.apache.skywalking.oap.server.telemetry.api.MetricsCreator;
 import org.apache.skywalking.oap.server.telemetry.none.MetricsCreatorNoop;
 import org.apache.skywalking.oap.server.telemetry.none.NoneTelemetryProvider;
-import org.junit.Before;
-import org.junit.Rule;
-import org.junit.Test;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
 import org.mockito.Mockito;
 import org.powermock.reflect.Whitebox;
 import org.testcontainers.containers.GenericContainer;
 import org.testcontainers.containers.wait.strategy.Wait;
+import org.testcontainers.junit.jupiter.Container;
+import org.testcontainers.junit.jupiter.Testcontainers;
 import org.testcontainers.utility.DockerImageName;
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertTrue;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 import static org.mockito.Mockito.mock;
 
+@Testcontainers
 public class ITClusterModuleEtcdProviderFunctionalTest {
 
     private String endpoint;
     private NoneTelemetryProvider telemetryProvider;
 
-    @Rule
+    @Container
     public final GenericContainer<?> container =
         new GenericContainer<>(DockerImageName.parse("quay.io/coreos/etcd:v3.5.0"))
             .waitingFor(Wait.forLogMessage(".*ready to serve client requests.*", 1))
@@ -64,9 +67,10 @@ public class ITClusterModuleEtcdProviderFunctionalTest {
                 "etcd",
                 "--advertise-client-urls", "http://0.0.0.0:2379",
                 "--listen-client-urls", "http://0.0.0.0:2379"
-            );
+            )
+            .withExposedPorts(2379);
 
-    @Before
+    @BeforeEach
     public void setup() {
         telemetryProvider = mock(NoneTelemetryProvider.class);
         Mockito.when(telemetryProvider.getService(MetricsCreator.class))
diff --git a/oap-server/server-cluster-plugin/cluster-kubernetes-plugin/pom.xml b/oap-server/server-cluster-plugin/cluster-kubernetes-plugin/pom.xml
index 7aefc876b6..1f8127d125 100644
--- a/oap-server/server-cluster-plugin/cluster-kubernetes-plugin/pom.xml
+++ b/oap-server/server-cluster-plugin/cluster-kubernetes-plugin/pom.xml
@@ -40,14 +40,20 @@
         </dependency>
         <dependency>
             <groupId>org.apache.skywalking</groupId>
-            <artifactId>server-testing</artifactId>
+            <artifactId>library-kubernetes-support</artifactId>
             <version>${project.version}</version>
-            <scope>test</scope>
         </dependency>
+
         <dependency>
             <groupId>org.apache.skywalking</groupId>
-            <artifactId>library-kubernetes-support</artifactId>
+            <artifactId>server-testing</artifactId>
             <version>${project.version}</version>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>uk.org.webcompere</groupId>
+            <artifactId>system-stubs-jupiter</artifactId>
+            <scope>test</scope>
         </dependency>
     </dependencies>
 </project>
diff --git a/oap-server/server-cluster-plugin/cluster-kubernetes-plugin/src/test/java/org/apache/skywalking/oap/server/cluster/plugin/kubernetes/ClusterModuleKubernetesProviderTest.java b/oap-server/server-cluster-plugin/cluster-kubernetes-plugin/src/test/java/org/apache/skywalking/oap/server/cluster/plugin/kubernetes/ClusterModuleKubernetesProviderTest.java
index 3498417080..1f146bed23 100644
--- a/oap-server/server-cluster-plugin/cluster-kubernetes-plugin/src/test/java/org/apache/skywalking/oap/server/cluster/plugin/kubernetes/ClusterModuleKubernetesProviderTest.java
+++ b/oap-server/server-cluster-plugin/cluster-kubernetes-plugin/src/test/java/org/apache/skywalking/oap/server/cluster/plugin/kubernetes/ClusterModuleKubernetesProviderTest.java
@@ -22,23 +22,19 @@ import org.apache.skywalking.oap.server.core.CoreModule;
 import org.apache.skywalking.oap.server.core.cluster.ClusterModule;
 import org.apache.skywalking.oap.server.library.module.ModuleManager;
 import org.apache.skywalking.oap.server.telemetry.TelemetryModule;
-import org.apache.skywalking.oap.server.telemetry.api.MetricsCreator;
-import org.apache.skywalking.oap.server.telemetry.none.MetricsCreatorNoop;
 import org.apache.skywalking.oap.server.telemetry.none.NoneTelemetryProvider;
-import org.junit.Before;
-import org.junit.Test;
-import org.junit.runner.RunWith;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.extension.ExtendWith;
 import org.mockito.Mock;
 import org.mockito.Mockito;
-import org.powermock.core.classloader.annotations.PowerMockIgnore;
-import org.powermock.modules.junit4.PowerMockRunner;
+import org.mockito.junit.jupiter.MockitoExtension;
 import org.powermock.reflect.Whitebox;
 
-import static org.junit.Assert.assertArrayEquals;
-import static org.junit.Assert.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertArrayEquals;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
-@RunWith(PowerMockRunner.class)
-@PowerMockIgnore({"com.sun.org.apache.xerces.*", "javax.xml.*", "org.xml.*", "javax.management.*", "org.w3c.*"})
+@ExtendWith(MockitoExtension.class)
 public class ClusterModuleKubernetesProviderTest {
 
     private ClusterModuleKubernetesProvider provider = new ClusterModuleKubernetesProvider();
@@ -48,13 +44,10 @@ public class ClusterModuleKubernetesProviderTest {
     @Mock
     private NoneTelemetryProvider telemetryProvider;
 
-    @Before
+    @BeforeEach
     public void before() {
-        Mockito.when(telemetryProvider.getService(MetricsCreator.class))
-                .thenReturn(new MetricsCreatorNoop());
         TelemetryModule telemetryModule = Mockito.spy(TelemetryModule.class);
         Whitebox.setInternalState(telemetryModule, "loadedProvider", telemetryProvider);
-        Mockito.when(moduleManager.find(TelemetryModule.NAME)).thenReturn(telemetryModule);
         provider.setManager(moduleManager);
         Whitebox.setInternalState(provider, "config", new ClusterModuleKubernetesConfig());
     }
@@ -84,4 +77,4 @@ public class ClusterModuleKubernetesProviderTest {
         String[] modules = provider.requiredModules();
         assertArrayEquals(new String[] {CoreModule.NAME}, modules);
     }
-}
\ No newline at end of file
+}
diff --git a/oap-server/server-cluster-plugin/cluster-kubernetes-plugin/src/test/java/org/apache/skywalking/oap/server/cluster/plugin/kubernetes/KubernetesCoordinatorTest.java b/oap-server/server-cluster-plugin/cluster-kubernetes-plugin/src/test/java/org/apache/skywalking/oap/server/cluster/plugin/kubernetes/KubernetesCoordinatorTest.java
index 87c003cf0d..90dc3e7541 100644
--- a/oap-server/server-cluster-plugin/cluster-kubernetes-plugin/src/test/java/org/apache/skywalking/oap/server/cluster/plugin/kubernetes/KubernetesCoordinatorTest.java
+++ b/oap-server/server-cluster-plugin/cluster-kubernetes-plugin/src/test/java/org/apache/skywalking/oap/server/cluster/plugin/kubernetes/KubernetesCoordinatorTest.java
@@ -21,12 +21,6 @@ package org.apache.skywalking.oap.server.cluster.plugin.kubernetes;
 import io.kubernetes.client.openapi.models.V1ObjectMeta;
 import io.kubernetes.client.openapi.models.V1Pod;
 import io.kubernetes.client.openapi.models.V1PodStatus;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.List;
-import java.util.Optional;
-import java.util.stream.Collectors;
 import lombok.Getter;
 import org.apache.skywalking.oap.server.core.CoreModule;
 import org.apache.skywalking.oap.server.core.cluster.ClusterCoordinator;
@@ -43,36 +37,35 @@ import org.apache.skywalking.oap.server.telemetry.TelemetryModule;
 import org.apache.skywalking.oap.server.telemetry.api.MetricsCreator;
 import org.apache.skywalking.oap.server.telemetry.none.MetricsCreatorNoop;
 import org.apache.skywalking.oap.server.telemetry.none.NoneTelemetryProvider;
-import org.junit.Assert;
-import org.junit.Before;
-import org.junit.Test;
-import org.junit.runner.RunWith;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.extension.ExtendWith;
 import org.mockito.Mock;
 import org.mockito.Mockito;
-import org.powermock.api.mockito.PowerMockito;
-import org.powermock.api.support.membermodification.MemberModifier;
-import org.powermock.core.classloader.annotations.PowerMockIgnore;
-import org.powermock.core.classloader.annotations.PrepareForTest;
-import org.powermock.modules.junit4.PowerMockRunner;
+import org.mockito.junit.jupiter.MockitoExtension;
+import org.mockito.junit.jupiter.MockitoSettings;
+import org.mockito.quality.Strictness;
 import org.powermock.reflect.Whitebox;
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertTrue;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.List;
+import java.util.Optional;
+import java.util.stream.Collectors;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+import static org.mockito.Mockito.doReturn;
 import static org.mockito.Mockito.mock;
-import static org.powermock.api.mockito.PowerMockito.when;
-
-@RunWith(PowerMockRunner.class)
-@PowerMockIgnore({
-    "com.sun.org.apache.xerces.*",
-    "javax.xml.*",
-    "org.xml.*",
-    "javax.management.*",
-    "org.w3c.*"
-})
-@PrepareForTest({NamespacedPodListInformer.class})
-public class KubernetesCoordinatorTest {
+import static org.mockito.Mockito.when;
+import static uk.org.webcompere.systemstubs.SystemStubs.withEnvironmentVariable;
 
+@ExtendWith(MockitoExtension.class)
+@MockitoSettings(strictness = Strictness.LENIENT)
+public class KubernetesCoordinatorTest {
     public static final String LOCAL_HOST = "127.0.0.1";
     public static final String REMOTE_HOST = "127.0.0.2";
     public static final Integer GRPC_PORT = 11800;
@@ -83,9 +76,7 @@ public class KubernetesCoordinatorTest {
     private ModuleManager moduleManager;
     @Mock
     private NoneTelemetryProvider telemetryProvider;
-    private NamespacedPodListInformer informer;
     private ModuleProvider providerA;
-    private ModuleProvider providerB;
     private Address addressA;
     private Address addressB;
     private KubernetesCoordinator coordinatorA;
@@ -93,16 +84,15 @@ public class KubernetesCoordinatorTest {
     private V1Pod podA;
     private V1Pod podB;
 
-    @Before
-    public void prepare() throws ModuleStartException {
-
+    @BeforeEach
+    public void prepare() {
         Mockito.when(telemetryProvider.getService(MetricsCreator.class))
                .thenReturn(new MetricsCreatorNoop());
         TelemetryModule telemetryModule = Mockito.spy(TelemetryModule.class);
         Whitebox.setInternalState(telemetryModule, "loadedProvider", telemetryProvider);
-        informer = PowerMockito.mock(NamespacedPodListInformer.class);
+        NamespacedPodListInformer informer = mock(NamespacedPodListInformer.class);
         Whitebox.setInternalState(NamespacedPodListInformer.class, "INFORMER", informer);
-        Mockito.when(moduleManager.find(TelemetryModule.NAME)).thenReturn(telemetryModule);
+        when(moduleManager.find(TelemetryModule.NAME)).thenReturn(telemetryModule);
         when(moduleManager.find(CoreModule.NAME)).thenReturn(mock(ModuleProviderHolder.class));
         when(moduleManager.find(CoreModule.NAME).provider()).thenReturn(mock(ModuleServiceHolder.class));
         when(moduleManager.find(CoreModule.NAME).provider().getService(ConfigService.class)).thenReturn(
@@ -110,57 +100,60 @@ public class KubernetesCoordinatorTest {
         when(moduleManager.find(CoreModule.NAME).provider().getService(ConfigService.class).getGRPCPort()).thenReturn(
             GRPC_PORT);
 
-        providerA = createProvider(SELF_UID);
-        providerB = createProvider(REMOTE_UID);
         addressA = new Address(LOCAL_HOST, GRPC_PORT, true);
         addressB = new Address(REMOTE_HOST, GRPC_PORT, true);
         podA = mockPod(SELF_UID, LOCAL_HOST);
         podB = mockPod(REMOTE_UID, REMOTE_HOST);
-        coordinatorA = getClusterCoordinator(providerA);
-        coordinatorB = getClusterCoordinator(providerB);
-        coordinatorA.start();
-        coordinatorB.start();
     }
 
     @Test
     public void queryRemoteNodesWhenInformerNotwork() throws Exception {
+        withEnvironmentVariable(SELF_UID, SELF_UID + "0").execute(() -> {
+            providerA = createProvider(SELF_UID);
+            coordinatorA = getClusterCoordinator(providerA);
+            coordinatorA.start();
+        });
+
         KubernetesCoordinator coordinator = getClusterCoordinator(providerA);
-        MemberModifier.field(KubernetesCoordinator.class, "uid").set(coordinatorA, SELF_UID);
-        PowerMockito.doReturn(Optional.empty()).when(NamespacedPodListInformer.INFORMER).listPods();
+        doReturn(Optional.empty()).when(NamespacedPodListInformer.INFORMER).listPods();
         List<RemoteInstance> remoteInstances = Whitebox.invokeMethod(coordinator, "queryRemoteNodes");
-        Assert.assertEquals(1, remoteInstances.size());
-        Assert.assertEquals(addressA, remoteInstances.get(0).getAddress());
-
+        Assertions.assertEquals(1, remoteInstances.size());
+        Assertions.assertEquals(addressA, remoteInstances.get(0).getAddress());
     }
 
     @Test
     public void queryRemoteNodesWhenInformerWork() throws Exception {
-        ModuleProvider provider = createProvider(SELF_UID + "0");
-        KubernetesCoordinator coordinator = getClusterCoordinator(provider);
-        coordinator.start();
-        MemberModifier.field(KubernetesCoordinator.class, "uid").set(coordinator, SELF_UID + "0");
-        PowerMockito.doReturn(Optional.of(mockPodList())).when(NamespacedPodListInformer.INFORMER).listPods();
-        List<RemoteInstance> remoteInstances = Whitebox.invokeMethod(coordinator, "queryRemoteNodes");
-        Assert.assertEquals(5, remoteInstances.size());
-        List<RemoteInstance> self = remoteInstances.stream()
-                                                   .filter(item -> item.getAddress().isSelf())
-                                                   .collect(Collectors.toList());
-        List<RemoteInstance> others = remoteInstances.stream()
-                                                     .filter(item -> !item.getAddress().isSelf())
-                                                     .collect(Collectors.toList());
-
-        Assert.assertEquals(1, self.size());
-        Assert.assertEquals(4, others.size());
-
+        withEnvironmentVariable(SELF_UID + "0", SELF_UID + "0")
+                .execute(() -> {
+                    ModuleProvider provider = createProvider(SELF_UID + "0");
+                    KubernetesCoordinator coordinator = getClusterCoordinator(provider);
+                    coordinator.start();
+                    doReturn(Optional.of(mockPodList())).when(NamespacedPodListInformer.INFORMER).listPods();
+                    List<RemoteInstance> remoteInstances = Whitebox.invokeMethod(coordinator, "queryRemoteNodes");
+                    Assertions.assertEquals(5, remoteInstances.size());
+                    List<RemoteInstance> self = remoteInstances.stream()
+                            .filter(item -> item.getAddress().isSelf())
+                            .collect(Collectors.toList());
+                    List<RemoteInstance> others = remoteInstances.stream()
+                            .filter(item -> !item.getAddress().isSelf())
+                            .collect(Collectors.toList());
+
+                    Assertions.assertEquals(1, self.size());
+                    Assertions.assertEquals(4, others.size());
+                });
     }
 
     @Test
     public void registerRemote() throws Exception {
         RemoteInstance instance = new RemoteInstance(addressA);
-        MemberModifier.field(KubernetesCoordinator.class, "uid").set(coordinatorA, SELF_UID);
-        PowerMockito.doReturn(Optional.of(Collections.singletonList(podA)))
-                    .when(NamespacedPodListInformer.INFORMER)
-                    .listPods();
+        withEnvironmentVariable(SELF_UID, SELF_UID).execute(() -> {
+            providerA = createProvider(SELF_UID);
+            coordinatorA = getClusterCoordinator(providerA);
+            coordinatorA.start();
+        });
+        doReturn(Optional.of(Collections.singletonList(podA)))
+                .when(NamespacedPodListInformer.INFORMER)
+                .listPods();
 
         ClusterMockWatcher watcher = new ClusterMockWatcher();
         coordinatorA.registerWatcher(watcher);
@@ -178,13 +171,23 @@ public class KubernetesCoordinatorTest {
 
     @Test
     public void registerRemoteOfReceiver() throws Exception {
-        MemberModifier.field(KubernetesCoordinator.class, "uid").set(coordinatorB, REMOTE_UID);
+        withEnvironmentVariable(SELF_UID, SELF_UID + "0").execute(() -> {
+            providerA = createProvider(SELF_UID);
+            coordinatorA = getClusterCoordinator(providerA);
+            coordinatorA.start();
+        });
+        withEnvironmentVariable(REMOTE_UID, REMOTE_UID).execute(() -> {
+            ModuleProvider providerB = createProvider(REMOTE_UID);
+            coordinatorB = getClusterCoordinator(providerB);
+        });
+        coordinatorB.start();
+
         ClusterMockWatcher watcherB = new ClusterMockWatcher();
         coordinatorB.registerWatcher(watcherB);
 
-        PowerMockito.doReturn(Optional.of(Collections.singletonList(podA)))
-                    .when(NamespacedPodListInformer.INFORMER)
-                    .listPods();
+        doReturn(Optional.of(Collections.singletonList(podA)))
+                .when(NamespacedPodListInformer.INFORMER)
+                .listPods();
         RemoteInstance instance = new RemoteInstance(addressA);
         coordinatorA.registerRemote(instance);
         KubernetesCoordinator.K8sResourceEventHandler listener = coordinatorB.new K8sResourceEventHandler();
@@ -201,16 +204,25 @@ public class KubernetesCoordinatorTest {
 
     @Test
     public void registerRemoteOfCluster() throws Exception {
-        MemberModifier.field(KubernetesCoordinator.class, "uid").set(coordinatorA, SELF_UID);
+        withEnvironmentVariable(SELF_UID, SELF_UID).execute(() -> {
+            providerA = createProvider(SELF_UID);
+            coordinatorA = getClusterCoordinator(providerA);
+            coordinatorA.start();
+        });
+        withEnvironmentVariable(REMOTE_UID, REMOTE_UID).execute(() -> {
+            ModuleProvider providerB = createProvider(REMOTE_UID);
+            coordinatorB = getClusterCoordinator(providerB);
+        });
+        coordinatorB.start();
+
         ClusterMockWatcher watcherA = new ClusterMockWatcher();
         coordinatorA.registerWatcher(watcherA);
-        MemberModifier.field(KubernetesCoordinator.class, "uid").set(coordinatorB, REMOTE_UID);
         ClusterMockWatcher watcherB = new ClusterMockWatcher();
         coordinatorB.registerWatcher(watcherB);
 
-        PowerMockito.doReturn(Optional.of(Arrays.asList(podA, podB)))
-                    .when(NamespacedPodListInformer.INFORMER)
-                    .listPods();
+        doReturn(Optional.of(Arrays.asList(podA, podB)))
+                .when(NamespacedPodListInformer.INFORMER)
+                .listPods();
         RemoteInstance instanceA = new RemoteInstance(addressA);
         RemoteInstance instanceB = new RemoteInstance(addressB);
         coordinatorA.registerRemote(instanceA);
@@ -234,17 +246,26 @@ public class KubernetesCoordinatorTest {
 
     @Test
     public void deregisterRemoteOfCluster() throws Exception {
-        MemberModifier.field(KubernetesCoordinator.class, "uid").set(coordinatorA, SELF_UID);
+        withEnvironmentVariable(SELF_UID, SELF_UID).execute(() -> {
+            providerA = createProvider(SELF_UID);
+            coordinatorA = getClusterCoordinator(providerA);
+            coordinatorA.start();
+        });
+        withEnvironmentVariable(REMOTE_UID, REMOTE_UID).execute(() -> {
+            ModuleProvider providerB = createProvider(REMOTE_UID);
+            coordinatorB = getClusterCoordinator(providerB);
+        });
+        coordinatorB.start();
+
         ClusterMockWatcher watcherA = new ClusterMockWatcher();
         coordinatorA.registerWatcher(watcherA);
 
-        MemberModifier.field(KubernetesCoordinator.class, "uid").set(coordinatorB, REMOTE_UID);
         ClusterMockWatcher watcherB = new ClusterMockWatcher();
         coordinatorB.registerWatcher(watcherB);
 
-        PowerMockito.doReturn(Optional.of(Arrays.asList(podA, podB)))
-                    .when(NamespacedPodListInformer.INFORMER)
-                    .listPods();
+        doReturn(Optional.of(Arrays.asList(podA, podB)))
+                .when(NamespacedPodListInformer.INFORMER)
+                .listPods();
         RemoteInstance instanceA = new RemoteInstance(addressA);
         RemoteInstance instanceB = new RemoteInstance(addressB);
         coordinatorA.registerRemote(instanceA);
@@ -267,9 +288,9 @@ public class KubernetesCoordinatorTest {
 
         // deregister A
         listenerB.onDelete(podA, false);
-        PowerMockito.doReturn(Optional.of(Collections.singletonList(podB)))
-                    .when(NamespacedPodListInformer.INFORMER)
-                    .listPods();
+        doReturn(Optional.of(Collections.singletonList(podB)))
+                .when(NamespacedPodListInformer.INFORMER)
+                .listPods();
         // only B
         remoteInstancesOfB = watcherB.getRemoteInstances();
         assertEquals(1, remoteInstancesOfB.size());
@@ -343,7 +364,7 @@ public class KubernetesCoordinatorTest {
         assertTrue(otherExist);
     }
 
-    class ClusterMockWatcher implements ClusterWatcher {
+    static class ClusterMockWatcher implements ClusterWatcher {
         @Getter
         private List<RemoteInstance> remoteInstances = new ArrayList<>();
 
diff --git a/oap-server/server-cluster-plugin/cluster-nacos-plugin/src/test/java/org/apache/skywalking/oap/server/cluster/plugin/nacos/ITClusterModuleNacosProviderFunctionalTest.java b/oap-server/server-cluster-plugin/cluster-nacos-plugin/src/test/java/org/apache/skywalking/oap/server/cluster/plugin/nacos/ITClusterModuleNacosProviderFunctionalTest.java
index f575b961a0..944ca6e693 100644
--- a/oap-server/server-cluster-plugin/cluster-nacos-plugin/src/test/java/org/apache/skywalking/oap/server/cluster/plugin/nacos/ITClusterModuleNacosProviderFunctionalTest.java
+++ b/oap-server/server-cluster-plugin/cluster-nacos-plugin/src/test/java/org/apache/skywalking/oap/server/cluster/plugin/nacos/ITClusterModuleNacosProviderFunctionalTest.java
@@ -19,60 +19,62 @@
 package org.apache.skywalking.oap.server.cluster.plugin.nacos;
 
 import com.alibaba.nacos.api.naming.NamingService;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.List;
 import lombok.Getter;
 import org.apache.skywalking.oap.server.core.cluster.ClusterCoordinator;
-import org.apache.skywalking.oap.server.core.cluster.ClusterWatcher;
-import org.apache.skywalking.oap.server.library.util.StringUtil;
 import org.apache.skywalking.oap.server.core.cluster.ClusterNodesQuery;
+import org.apache.skywalking.oap.server.core.cluster.ClusterWatcher;
 import org.apache.skywalking.oap.server.core.cluster.RemoteInstance;
 import org.apache.skywalking.oap.server.core.remote.client.Address;
 import org.apache.skywalking.oap.server.library.module.ModuleManager;
 import org.apache.skywalking.oap.server.library.module.ModuleProvider;
 import org.apache.skywalking.oap.server.library.module.ModuleStartException;
+import org.apache.skywalking.oap.server.library.util.StringUtil;
 import org.apache.skywalking.oap.server.telemetry.TelemetryModule;
 import org.apache.skywalking.oap.server.telemetry.api.MetricsCreator;
 import org.apache.skywalking.oap.server.telemetry.none.MetricsCreatorNoop;
 import org.apache.skywalking.oap.server.telemetry.none.NoneTelemetryProvider;
-import org.junit.Before;
-import org.junit.Rule;
-import org.junit.Test;
-import org.junit.runner.RunWith;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.extension.ExtendWith;
 import org.mockito.Mock;
 import org.mockito.Mockito;
-import org.powermock.core.classloader.annotations.PowerMockIgnore;
-import org.powermock.modules.junit4.PowerMockRunner;
+import org.mockito.junit.jupiter.MockitoExtension;
 import org.powermock.reflect.Whitebox;
 import org.testcontainers.containers.GenericContainer;
 import org.testcontainers.containers.wait.strategy.Wait;
+import org.testcontainers.junit.jupiter.Container;
+import org.testcontainers.junit.jupiter.Testcontainers;
 import org.testcontainers.utility.DockerImageName;
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertTrue;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
-@RunWith(PowerMockRunner.class)
-@PowerMockIgnore({"javax.security.*", "javax.net.ssl.*", "javax.management.*"})
+@Testcontainers
+@ExtendWith(MockitoExtension.class)
 public class ITClusterModuleNacosProviderFunctionalTest {
 
     private String nacosAddress;
     private final String username = "nacos";
     private final String password = "nacos";
 
-    @Rule
+    @Container
     public final GenericContainer<?> container =
         new GenericContainer<>(DockerImageName.parse("nacos/nacos-server:1.4.2"))
             .waitingFor(Wait.forLogMessage(".*Nacos started successfully.*", 1))
-            .withEnv(Collections.singletonMap("MODE", "standalone"));
+            .withEnv(Collections.singletonMap("MODE", "standalone"))
+            .withExposedPorts(8848);
 
     @Mock
     private ModuleManager moduleManager;
     @Mock
     private NoneTelemetryProvider telemetryProvider;
 
-    @Before
+    @BeforeEach
     public void before() {
         Mockito.when(telemetryProvider.getService(MetricsCreator.class))
                .thenReturn(new MetricsCreatorNoop());
diff --git a/oap-server/server-cluster-plugin/cluster-nacos-plugin/src/test/java/org/apache/skywalking/oap/server/cluster/plugin/nacos/NacosCoordinatorTest.java b/oap-server/server-cluster-plugin/cluster-nacos-plugin/src/test/java/org/apache/skywalking/oap/server/cluster/plugin/nacos/NacosCoordinatorTest.java
index 7a69ecbbbd..b6e83e87a8 100644
--- a/oap-server/server-cluster-plugin/cluster-nacos-plugin/src/test/java/org/apache/skywalking/oap/server/cluster/plugin/nacos/NacosCoordinatorTest.java
+++ b/oap-server/server-cluster-plugin/cluster-nacos-plugin/src/test/java/org/apache/skywalking/oap/server/cluster/plugin/nacos/NacosCoordinatorTest.java
@@ -21,21 +21,22 @@ package org.apache.skywalking.oap.server.cluster.plugin.nacos;
 import com.alibaba.nacos.api.exception.NacosException;
 import com.alibaba.nacos.api.naming.NamingService;
 import com.alibaba.nacos.api.naming.pojo.Instance;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.List;
 import org.apache.skywalking.oap.server.core.cluster.RemoteInstance;
 import org.apache.skywalking.oap.server.core.remote.client.Address;
 import org.apache.skywalking.oap.server.library.module.ModuleDefineHolder;
 import org.apache.skywalking.oap.server.telemetry.api.HealthCheckMetrics;
-import org.junit.Before;
-import org.junit.Test;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
 import org.mockito.ArgumentCaptor;
 import org.powermock.reflect.Whitebox;
 
-import static org.junit.Assert.assertEquals;
-import static org.mockito.Matchers.anyBoolean;
-import static org.mockito.Matchers.anyString;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.mockito.ArgumentMatchers.anyBoolean;
+import static org.mockito.ArgumentMatchers.anyString;
 import static org.mockito.Mockito.doNothing;
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.verify;
@@ -53,7 +54,7 @@ public class NacosCoordinatorTest {
 
     private static final String SERVICE_NAME = "test-service";
 
-    @Before
+    @BeforeEach
     public void setUp() throws NacosException {
         doNothing().when(healthChecker).health();
         nacosConfig.setServiceName(SERVICE_NAME);
diff --git a/oap-server/server-cluster-plugin/cluster-standalone-plugin/src/test/java/org/apache/skywalking/oap/server/cluster/plugin/standalone/StandaloneManagerTest.java b/oap-server/server-cluster-plugin/cluster-standalone-plugin/src/test/java/org/apache/skywalking/oap/server/cluster/plugin/standalone/StandaloneManagerTest.java
index 0612239a63..0a76c4b91d 100644
--- a/oap-server/server-cluster-plugin/cluster-standalone-plugin/src/test/java/org/apache/skywalking/oap/server/cluster/plugin/standalone/StandaloneManagerTest.java
+++ b/oap-server/server-cluster-plugin/cluster-standalone-plugin/src/test/java/org/apache/skywalking/oap/server/cluster/plugin/standalone/StandaloneManagerTest.java
@@ -20,8 +20,8 @@ package org.apache.skywalking.oap.server.cluster.plugin.standalone;
 
 import org.apache.skywalking.oap.server.core.cluster.RemoteInstance;
 import org.apache.skywalking.oap.server.core.remote.client.Address;
-import org.junit.Assert;
-import org.junit.Test;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Test;
 
 public class StandaloneManagerTest {
     @Test
@@ -31,8 +31,8 @@ public class StandaloneManagerTest {
         RemoteInstance remote2 = new RemoteInstance(new Address("B", 100, false));
 
         standaloneManager.registerRemote(remote1);
-        Assert.assertEquals(remote1, standaloneManager.queryRemoteNodes().get(0));
+        Assertions.assertEquals(remote1, standaloneManager.queryRemoteNodes().get(0));
         standaloneManager.registerRemote(remote2);
-        Assert.assertEquals(remote2, standaloneManager.queryRemoteNodes().get(0));
+        Assertions.assertEquals(remote2, standaloneManager.queryRemoteNodes().get(0));
     }
 }
diff --git a/oap-server/server-cluster-plugin/cluster-zookeeper-plugin/src/test/java/org/apache/skywalking/oap/server/cluster/plugin/zookeeper/ITClusterModuleZookeeperProviderFunctionalTest.java b/oap-server/server-cluster-plugin/cluster-zookeeper-plugin/src/test/java/org/apache/skywalking/oap/server/cluster/plugin/zookeeper/ITClusterModuleZookeeperProviderFunctionalTest.java
index 77d719f9a8..36a3a89436 100644
--- a/oap-server/server-cluster-plugin/cluster-zookeeper-plugin/src/test/java/org/apache/skywalking/oap/server/cluster/plugin/zookeeper/ITClusterModuleZookeeperProviderFunctionalTest.java
+++ b/oap-server/server-cluster-plugin/cluster-zookeeper-plugin/src/test/java/org/apache/skywalking/oap/server/cluster/plugin/zookeeper/ITClusterModuleZookeeperProviderFunctionalTest.java
@@ -18,9 +18,6 @@
 
 package org.apache.skywalking.oap.server.cluster.plugin.zookeeper;
 
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.List;
 import lombok.Getter;
 import org.apache.curator.x.discovery.ServiceDiscovery;
 import org.apache.skywalking.oap.server.core.cluster.ClusterCoordinator;
@@ -36,40 +33,45 @@ import org.apache.skywalking.oap.server.telemetry.TelemetryModule;
 import org.apache.skywalking.oap.server.telemetry.api.MetricsCreator;
 import org.apache.skywalking.oap.server.telemetry.none.MetricsCreatorNoop;
 import org.apache.skywalking.oap.server.telemetry.none.NoneTelemetryProvider;
-import org.junit.Before;
-import org.junit.Rule;
-import org.junit.Test;
-import org.junit.runner.RunWith;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.extension.ExtendWith;
 import org.mockito.Mock;
 import org.mockito.Mockito;
-import org.powermock.core.classloader.annotations.PowerMockIgnore;
-import org.powermock.modules.junit4.PowerMockRunner;
+import org.mockito.junit.jupiter.MockitoExtension;
 import org.powermock.reflect.Whitebox;
 import org.testcontainers.containers.GenericContainer;
 import org.testcontainers.containers.wait.strategy.Wait;
+import org.testcontainers.junit.jupiter.Container;
+import org.testcontainers.junit.jupiter.Testcontainers;
 import org.testcontainers.utility.DockerImageName;
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertTrue;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
-@RunWith(PowerMockRunner.class)
-@PowerMockIgnore({"javax.net.ssl.*", "javax.security.*", "com.sun.org.apache.xerces.*", "javax.xml.*", "org.xml.*", "javax.management.*", "org.w3c.*"})
+@Testcontainers
+@ExtendWith(MockitoExtension.class)
 public class ITClusterModuleZookeeperProviderFunctionalTest {
 
     private String zkAddress;
 
-    @Rule
+    @Container
     public final GenericContainer<?> container =
         new GenericContainer<>(DockerImageName.parse("zookeeper:3.5"))
-            .waitingFor(Wait.forLogMessage(".*binding to port.*", 1));
+            .waitingFor(Wait.forLogMessage(".*binding to port.*", 1))
+            .withExposedPorts(2181);
 
     @Mock
     private ModuleManager moduleManager;
     @Mock
     private NoneTelemetryProvider telemetryProvider;
 
-    @Before
+    @BeforeEach
     public void init() {
         Mockito.when(telemetryProvider.getService(MetricsCreator.class))
                 .thenReturn(new MetricsCreatorNoop());
diff --git a/oap-server/server-cluster-plugin/cluster-zookeeper-plugin/src/test/java/org/apache/skywalking/oap/server/cluster/plugin/zookeeper/NodeNameBuilderTest.java b/oap-server/server-cluster-plugin/cluster-zookeeper-plugin/src/test/java/org/apache/skywalking/oap/server/cluster/plugin/zookeeper/NodeNameBuilderTest.java
index ab15f1e73d..87f0315422 100644
--- a/oap-server/server-cluster-plugin/cluster-zookeeper-plugin/src/test/java/org/apache/skywalking/oap/server/cluster/plugin/zookeeper/NodeNameBuilderTest.java
+++ b/oap-server/server-cluster-plugin/cluster-zookeeper-plugin/src/test/java/org/apache/skywalking/oap/server/cluster/plugin/zookeeper/NodeNameBuilderTest.java
@@ -18,9 +18,9 @@
 
 package org.apache.skywalking.oap.server.cluster.plugin.zookeeper;
 
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
-import static org.junit.Assert.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 public class NodeNameBuilderTest {
 
@@ -31,4 +31,4 @@ public class NodeNameBuilderTest {
         String nodeName = NodeNameBuilder.build(moduleName, providerName);
         assertEquals(moduleName + "/" + providerName, nodeName);
     }
-}
\ No newline at end of file
+}
diff --git a/oap-server/server-cluster-plugin/cluster-zookeeper-plugin/src/test/java/org/apache/skywalking/oap/server/cluster/plugin/zookeeper/ZookeeperCoordinatorTest.java b/oap-server/server-cluster-plugin/cluster-zookeeper-plugin/src/test/java/org/apache/skywalking/oap/server/cluster/plugin/zookeeper/ZookeeperCoordinatorTest.java
index 36ee9e7802..d2a8832895 100644
--- a/oap-server/server-cluster-plugin/cluster-zookeeper-plugin/src/test/java/org/apache/skywalking/oap/server/cluster/plugin/zookeeper/ZookeeperCoordinatorTest.java
+++ b/oap-server/server-cluster-plugin/cluster-zookeeper-plugin/src/test/java/org/apache/skywalking/oap/server/cluster/plugin/zookeeper/ZookeeperCoordinatorTest.java
@@ -27,13 +27,13 @@ import org.apache.skywalking.oap.server.core.cluster.RemoteInstance;
 import org.apache.skywalking.oap.server.core.remote.client.Address;
 import org.apache.skywalking.oap.server.library.module.ModuleDefineHolder;
 import org.apache.skywalking.oap.server.telemetry.api.HealthCheckMetrics;
-import org.junit.Before;
-import org.junit.Test;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
 import org.mockito.ArgumentCaptor;
 import org.powermock.reflect.Whitebox;
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertTrue;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 import static org.mockito.Mockito.any;
 import static org.mockito.Mockito.doNothing;
 import static org.mockito.Mockito.mock;
@@ -58,7 +58,7 @@ public class ZookeeperCoordinatorTest {
 
     private Address selfAddress = new Address("127.0.0.1", 1000, true);
 
-    @Before
+    @BeforeEach
     public void setUp() throws Exception {
         when(cacheBuilder.name("remote")).thenReturn(cacheBuilder);
         when(cacheBuilder.build()).thenReturn(serviceCache);
@@ -108,4 +108,4 @@ public class ZookeeperCoordinatorTest {
     @Test
     public void queryRemoteNodes() {
     }
-}
\ No newline at end of file
+}
diff --git a/oap-server/server-configuration/configuration-api/src/main/java/org/apache/skywalking/oap/server/configuration/api/ConfigWatcherRegister.java b/oap-server/server-configuration/configuration-api/src/main/java/org/apache/skywalking/oap/server/configuration/api/ConfigWatcherRegister.java
index e4ae9c83cb..b4c6d23d33 100644
--- a/oap-server/server-configuration/configuration-api/src/main/java/org/apache/skywalking/oap/server/configuration/api/ConfigWatcherRegister.java
+++ b/oap-server/server-configuration/configuration-api/src/main/java/org/apache/skywalking/oap/server/configuration/api/ConfigWatcherRegister.java
@@ -18,15 +18,16 @@
 
 package org.apache.skywalking.oap.server.configuration.api;
 
+import lombok.Getter;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.skywalking.oap.server.library.util.RunnableWithExceptionProtection;
+
 import java.util.HashMap;
 import java.util.Map;
 import java.util.Optional;
 import java.util.Set;
 import java.util.concurrent.Executors;
 import java.util.concurrent.TimeUnit;
-import lombok.Getter;
-import lombok.extern.slf4j.Slf4j;
-import org.apache.skywalking.oap.server.library.util.RunnableWithExceptionProtection;
 
 /**
  * The default implementor of Config Watcher register.
@@ -34,9 +35,9 @@ import org.apache.skywalking.oap.server.library.util.RunnableWithExceptionProtec
 @Slf4j
 public abstract class ConfigWatcherRegister implements DynamicConfigurationService {
     public static final String LINE_SEPARATOR = System.getProperty("line.separator", "\n");
-    private Register singleConfigChangeWatcherRegister = new Register();
+    private final Register singleConfigChangeWatcherRegister = new Register();
     @Getter
-    private Register groupConfigChangeWatcherRegister = new Register();
+    private final Register groupConfigChangeWatcherRegister = new Register();
     private volatile boolean isStarted = false;
     private final long syncPeriod;
 
diff --git a/oap-server/server-configuration/configuration-api/src/test/java/org/apache/skywalking/oap/server/configuration/api/ConfigWatcherRegisterTest.java b/oap-server/server-configuration/configuration-api/src/test/java/org/apache/skywalking/oap/server/configuration/api/ConfigWatcherRegisterTest.java
index 6795bc8338..8ba7427824 100644
--- a/oap-server/server-configuration/configuration-api/src/test/java/org/apache/skywalking/oap/server/configuration/api/ConfigWatcherRegisterTest.java
+++ b/oap-server/server-configuration/configuration-api/src/test/java/org/apache/skywalking/oap/server/configuration/api/ConfigWatcherRegisterTest.java
@@ -18,29 +18,31 @@
 
 package org.apache.skywalking.oap.server.configuration.api;
 
-import java.util.Map;
-import java.util.Optional;
-import java.util.Set;
-import java.util.concurrent.ConcurrentHashMap;
 import org.apache.skywalking.oap.server.library.module.ModuleDefine;
 import org.apache.skywalking.oap.server.library.module.ModuleProvider;
 import org.apache.skywalking.oap.server.library.module.ModuleStartException;
 import org.apache.skywalking.oap.server.library.module.ServiceNotProvidedException;
-import org.junit.After;
-import org.junit.Assert;
-import org.junit.Before;
-import org.junit.Test;
+import org.junit.jupiter.api.AfterEach;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
 import org.powermock.reflect.Whitebox;
 
+import java.util.Map;
+import java.util.Optional;
+import java.util.Set;
+import java.util.concurrent.ConcurrentHashMap;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+
 public class ConfigWatcherRegisterTest {
     private ConfigWatcherRegister register;
 
-    @Before
+    @BeforeEach
     public void setup() {
         register = new MockConfigWatcherRegister();
     }
 
-    @After
+    @AfterEach
     public void tearDown() {
         register = null;
     }
@@ -63,7 +65,7 @@ public class ConfigWatcherRegisterTest {
 
         register.configSync();
 
-        Assert.assertEquals("abc2", newValue[0]);
+        assertEquals("abc2", newValue[0]);
     }
 
     @Test
@@ -86,8 +88,8 @@ public class ConfigWatcherRegisterTest {
 
         register.configSync();
 
-        Assert.assertEquals("abc", config.get("item1"));
-        Assert.assertEquals("abc2", config.get("item2"));
+        assertEquals("abc", config.get("item1"));
+        assertEquals("abc2", config.get("item2"));
     }
 
     @Test
@@ -122,8 +124,8 @@ public class ConfigWatcherRegisterTest {
         String expected = "Following dynamic config items are available." + ConfigWatcherRegister.LINE_SEPARATOR + "---------------------------------------------" + ConfigWatcherRegister.LINE_SEPARATOR + "key:MockModule.provider.prop2    module:MockModule    provider:provider    value(current):null" + ConfigWatcherRegister.LINE_SEPARATOR;
         String groupConfigExpected = "Following dynamic config items are available." + ConfigWatcherRegister.LINE_SEPARATOR + "---------------------------------------------" + ConfigWatcherRegister.LINE_SEPARATOR + "key:MockModule.provider.groupItems1    module:MockModule    provider:provider    groupItems(current):null" + ConfigWatcherRegister.LINE_SEPARATOR;
 
-        Assert.assertEquals(expected, registerTable.toString());
-        Assert.assertEquals(groupConfigExpected, groupRegisterTable.toString());
+        assertEquals(expected, registerTable.toString());
+        assertEquals(groupConfigExpected, groupRegisterTable.toString());
     }
 
     public static class MockConfigWatcherRegister extends ConfigWatcherRegister {
diff --git a/oap-server/server-configuration/configuration-apollo/src/test/java/org/apache/skywalking/oap/server/configuration/apollo/ITApolloConfigurationTest.java b/oap-server/server-configuration/configuration-apollo/src/test/java/org/apache/skywalking/oap/server/configuration/apollo/ITApolloConfigurationTest.java
index 6bb3de3495..4c17f2ebaa 100644
--- a/oap-server/server-configuration/configuration-apollo/src/test/java/org/apache/skywalking/oap/server/configuration/apollo/ITApolloConfigurationTest.java
+++ b/oap-server/server-configuration/configuration-apollo/src/test/java/org/apache/skywalking/oap/server/configuration/apollo/ITApolloConfigurationTest.java
@@ -18,14 +18,6 @@
 
 package org.apache.skywalking.oap.server.configuration.apollo;
 
-import java.io.File;
-import java.io.FileNotFoundException;
-import java.io.IOException;
-import java.io.Reader;
-import java.time.Duration;
-import java.util.Map;
-import java.util.Properties;
-import java.util.concurrent.TimeUnit;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.http.client.ResponseHandler;
 import org.apache.http.client.methods.HttpDelete;
@@ -35,23 +27,36 @@ import org.apache.http.entity.StringEntity;
 import org.apache.http.impl.client.BasicResponseHandler;
 import org.apache.http.impl.client.CloseableHttpClient;
 import org.apache.http.impl.client.HttpClients;
-import org.apache.skywalking.oap.server.library.util.PropertyPlaceholderHelper;
 import org.apache.skywalking.oap.server.library.module.ApplicationConfiguration;
 import org.apache.skywalking.oap.server.library.module.ModuleManager;
 import org.apache.skywalking.oap.server.library.util.CollectionUtils;
+import org.apache.skywalking.oap.server.library.util.PropertyPlaceholderHelper;
 import org.apache.skywalking.oap.server.library.util.ResourceUtils;
-import org.junit.Before;
-import org.junit.ClassRule;
-import org.junit.Test;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.Timeout;
 import org.testcontainers.containers.DockerComposeContainer;
 import org.testcontainers.containers.wait.strategy.Wait;
+import org.testcontainers.junit.jupiter.Container;
+import org.testcontainers.junit.jupiter.Testcontainers;
 import org.yaml.snakeyaml.Yaml;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertNull;
-import static org.junit.Assert.fail;
+
+import java.io.File;
+import java.io.FileNotFoundException;
+import java.io.IOException;
+import java.io.Reader;
+import java.time.Duration;
+import java.util.Map;
+import java.util.Properties;
+import java.util.concurrent.TimeUnit;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
+import static org.junit.jupiter.api.Assertions.assertNull;
+import static org.junit.jupiter.api.Assertions.fail;
 
 @Slf4j
+@Testcontainers
 public class ITApolloConfigurationTest {
     private final Yaml yaml = new Yaml();
     private final String token = "f71f002a4ff9845639ef655ee7019759e31449de";
@@ -61,7 +66,7 @@ public class ITApolloConfigurationTest {
     private String baseUrl;
     private ApolloConfigurationTestProvider provider;
 
-    @ClassRule
+    @Container
     public final static DockerComposeContainer<?> ENVIRONMENT =
         new DockerComposeContainer<>(new File(ITApolloConfigurationTest.class
                                                 .getClassLoader()
@@ -73,7 +78,7 @@ public class ITApolloConfigurationTest {
                                     .withStartupTimeout(Duration.ofSeconds(100))
             );
 
-    @Before
+    @BeforeEach
     public void setUp() throws Exception {
         String metaHost = ENVIRONMENT.getServiceHost("apollo-config-and-portal", 8080);
         String metaPort = ENVIRONMENT.getServicePort("apollo-config-and-portal", 8080).toString();
@@ -99,7 +104,8 @@ public class ITApolloConfigurationTest {
     }
 
     @SuppressWarnings("StatementWithEmptyBody")
-    @Test(timeout = 100000)
+    @Test
+    @Timeout(100)
     public void shouldReadUpdated() {
         try {
             assertNull(provider.watcher.value());
@@ -148,7 +154,8 @@ public class ITApolloConfigurationTest {
     }
 
     @SuppressWarnings("StatementWithEmptyBody")
-    @Test(timeout = 100000)
+    @Test
+    @Timeout(100)
     public void shouldReadUpdated4Group() {
         try {
             assertEquals("{}", provider.groupWatcher.groupItems().toString());
diff --git a/oap-server/server-configuration/configuration-consul/src/test/java/org/apache/skywalking/oap/server/configuration/consul/ConsulConfigurationProviderTest.java b/oap-server/server-configuration/configuration-consul/src/test/java/org/apache/skywalking/oap/server/configuration/consul/ConsulConfigurationProviderTest.java
index 79dd2049df..3fcaea4e58 100644
--- a/oap-server/server-configuration/configuration-consul/src/test/java/org/apache/skywalking/oap/server/configuration/consul/ConsulConfigurationProviderTest.java
+++ b/oap-server/server-configuration/configuration-consul/src/test/java/org/apache/skywalking/oap/server/configuration/consul/ConsulConfigurationProviderTest.java
@@ -19,14 +19,18 @@
 package org.apache.skywalking.oap.server.configuration.consul;
 
 import org.apache.skywalking.oap.server.library.module.ModuleStartException;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
+
+import static org.junit.jupiter.api.Assertions.assertThrows;
 
 public class ConsulConfigurationProviderTest {
 
-    @Test(expected = ModuleStartException.class)
-    public void shouldThrowWhenSettingsInvalid() throws ModuleStartException {
-        ConsulConfigurationProvider provider = new ConsulConfigurationProvider();
-        provider.newConfigCreator().onInitialized(new ConsulConfigurationCenterSettings());
-        provider.initConfigReader();
+    @Test
+    public void shouldThrowWhenSettingsInvalid() {
+        assertThrows(ModuleStartException.class, () -> {
+            ConsulConfigurationProvider provider = new ConsulConfigurationProvider();
+            provider.newConfigCreator().onInitialized(new ConsulConfigurationCenterSettings());
+            provider.initConfigReader();
+        });
     }
-}
\ No newline at end of file
+}
diff --git a/oap-server/server-configuration/configuration-consul/src/test/java/org/apache/skywalking/oap/server/configuration/consul/ConsulConfigurationWatcherRegisterTest.java b/oap-server/server-configuration/configuration-consul/src/test/java/org/apache/skywalking/oap/server/configuration/consul/ConsulConfigurationWatcherRegisterTest.java
index 34e6fc37fc..8403131377 100644
--- a/oap-server/server-configuration/configuration-consul/src/test/java/org/apache/skywalking/oap/server/configuration/consul/ConsulConfigurationWatcherRegisterTest.java
+++ b/oap-server/server-configuration/configuration-consul/src/test/java/org/apache/skywalking/oap/server/configuration/consul/ConsulConfigurationWatcherRegisterTest.java
@@ -24,37 +24,27 @@ import com.google.common.io.BaseEncoding;
 import com.orbitz.consul.cache.ConsulCache;
 import com.orbitz.consul.cache.KVCache;
 import com.orbitz.consul.model.kv.ImmutableValue;
-import java.util.Optional;
-import java.util.Set;
-import java.util.concurrent.ConcurrentHashMap;
-import org.junit.Before;
-import org.junit.Test;
-import org.junit.runner.RunWith;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.extension.ExtendWith;
 import org.mockito.ArgumentCaptor;
 import org.mockito.Mock;
-import org.mockito.MockitoAnnotations;
-import org.powermock.api.mockito.PowerMockito;
-import org.powermock.core.classloader.annotations.PowerMockIgnore;
-import org.powermock.core.classloader.annotations.PrepareForTest;
-import org.powermock.modules.junit4.PowerMockRunner;
+import org.mockito.MockedStatic;
+import org.mockito.junit.jupiter.MockitoExtension;
 import org.powermock.reflect.Whitebox;
 
-import static org.junit.Assert.assertEquals;
-import static org.mockito.Matchers.any;
-import static org.mockito.Matchers.eq;
+import java.util.Optional;
+import java.util.Set;
+import java.util.concurrent.ConcurrentHashMap;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.ArgumentMatchers.eq;
 import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.mockStatic;
 import static org.mockito.Mockito.verify;
 import static org.mockito.Mockito.when;
 
-@RunWith(PowerMockRunner.class)
-@PrepareForTest(KVCache.class)
-@PowerMockIgnore({
-    "com.sun.org.apache.xerces.*",
-    "javax.xml.*",
-    "org.xml.*",
-    "javax.management.*",
-    "org.w3c.*"
-})
+@ExtendWith(MockitoExtension.class)
 @SuppressWarnings({
     "unchecked",
     "OptionalGetWithoutIsPresent"
@@ -65,11 +55,6 @@ public class ConsulConfigurationWatcherRegisterTest {
     private ConcurrentHashMap<String, KVCache> cacheByKey;
     private ConcurrentHashMap<String, Optional<String>> configItemKeyedByName;
 
-    @Before
-    public void setUp() {
-        MockitoAnnotations.initMocks(this);
-    }
-
     @Test
     public void shouldUpdateCachesWhenNotified() {
         cacheByKey = new ConcurrentHashMap<>();
@@ -83,39 +68,40 @@ public class ConsulConfigurationWatcherRegisterTest {
         ArgumentCaptor<ConsulCache.Listener> listener1 = ArgumentCaptor.forClass(ConsulCache.Listener.class);
         ArgumentCaptor<ConsulCache.Listener> listener2 = ArgumentCaptor.forClass(ConsulCache.Listener.class);
 
-        PowerMockito.mockStatic(KVCache.class);
-        PowerMockito.when(KVCache.newCache(any(), eq("key1"))).thenReturn(cache1);
-        PowerMockito.when(KVCache.newCache(any(), eq("key2"))).thenReturn(cache2);
-
-        when(register.readConfig(any(Set.class))).thenCallRealMethod();
-
-        register.readConfig(Sets.newHashSet("key1", "key2"));
-
-        verify(cache1).addListener(listener1.capture());
-        verify(cache2).addListener(listener2.capture());
-
-        listener1.getValue()
-                 .notify(ImmutableMap.of("key1", ImmutableValue.builder()
-                                                               .createIndex(0)
-                                                               .modifyIndex(0)
-                                                               .lockIndex(0)
-                                                               .key("key1")
-                                                               .flags(0)
-                                                               .value(BaseEncoding.base64().encode("val1".getBytes()))
-                                                               .build()));
-        listener2.getValue()
-                 .notify(ImmutableMap.of("key2", ImmutableValue.builder()
-                                                               .createIndex(0)
-                                                               .modifyIndex(0)
-                                                               .lockIndex(0)
-                                                               .key("key2")
-                                                               .flags(0)
-                                                               .value(BaseEncoding.base64().encode("val2".getBytes()))
-                                                               .build()));
-
-        assertEquals(2, configItemKeyedByName.size());
-        assertEquals("val1", configItemKeyedByName.get("key1").get());
-        assertEquals("val2", configItemKeyedByName.get("key2").get());
+        try (MockedStatic<KVCache> kvCacheMockedStatic = mockStatic(KVCache.class)) {
+            kvCacheMockedStatic.when(() -> KVCache.newCache(any(), eq("key1"))).thenReturn(cache1);
+            kvCacheMockedStatic.when(() -> KVCache.newCache(any(), eq("key2"))).thenReturn(cache2);
+
+            when(register.readConfig(any(Set.class))).thenCallRealMethod();
+
+            register.readConfig(Sets.newHashSet("key1", "key2"));
+
+            verify(cache1).addListener(listener1.capture());
+            verify(cache2).addListener(listener2.capture());
+
+            listener1.getValue()
+                    .notify(ImmutableMap.of("key1", ImmutableValue.builder()
+                            .createIndex(0)
+                            .modifyIndex(0)
+                            .lockIndex(0)
+                            .key("key1")
+                            .flags(0)
+                            .value(BaseEncoding.base64().encode("val1".getBytes()))
+                            .build()));
+            listener2.getValue()
+                    .notify(ImmutableMap.of("key2", ImmutableValue.builder()
+                            .createIndex(0)
+                            .modifyIndex(0)
+                            .lockIndex(0)
+                            .key("key2")
+                            .flags(0)
+                            .value(BaseEncoding.base64().encode("val2".getBytes()))
+                            .build()));
+
+            assertEquals(2, configItemKeyedByName.size());
+            assertEquals("val1", configItemKeyedByName.get("key1").get());
+            assertEquals("val2", configItemKeyedByName.get("key2").get());
+        }
     }
 
     @Test
@@ -134,16 +120,17 @@ public class ConsulConfigurationWatcherRegisterTest {
         ArgumentCaptor<ConsulCache.Listener> listener1 = ArgumentCaptor.forClass(ConsulCache.Listener.class);
         ArgumentCaptor<ConsulCache.Listener> listener2 = ArgumentCaptor.forClass(ConsulCache.Listener.class);
 
-        PowerMockito.mockStatic(KVCache.class);
-        PowerMockito.when(KVCache.newCache(any(), eq("key1"))).thenReturn(cache1);
-        PowerMockito.when(KVCache.newCache(any(), eq("key2"))).thenReturn(cache2);
+        try (MockedStatic<KVCache> kvCacheMockedStatic = mockStatic(KVCache.class)) {
+            kvCacheMockedStatic.when(() -> KVCache.newCache(any(), eq("key1"))).thenReturn(cache1);
+            kvCacheMockedStatic.when(() -> KVCache.newCache(any(), eq("key2"))).thenReturn(cache2);
 
-        when(register.readConfig(any(Set.class))).thenCallRealMethod();
+            when(register.readConfig(any(Set.class))).thenCallRealMethod();
 
-        register.readConfig(Sets.newHashSet("key1", "key2"));
+            register.readConfig(Sets.newHashSet("key1", "key2"));
 
-        verify(cache1).addListener(listener1.capture());
-        verify(cache2).addListener(listener2.capture());
-        verify(existedCache).stop();
+            verify(cache1).addListener(listener1.capture());
+            verify(cache2).addListener(listener2.capture());
+            verify(existedCache).stop();
+        }
     }
-}
\ No newline at end of file
+}
diff --git a/oap-server/server-configuration/configuration-consul/src/test/java/org/apache/skywalking/oap/server/configuration/consul/ITConsulConfigurationTest.java b/oap-server/server-configuration/configuration-consul/src/test/java/org/apache/skywalking/oap/server/configuration/consul/ITConsulConfigurationTest.java
index f69dd6449e..31cae8e141 100644
--- a/oap-server/server-configuration/configuration-consul/src/test/java/org/apache/skywalking/oap/server/configuration/consul/ITConsulConfigurationTest.java
+++ b/oap-server/server-configuration/configuration-consul/src/test/java/org/apache/skywalking/oap/server/configuration/consul/ITConsulConfigurationTest.java
@@ -21,40 +21,45 @@ package org.apache.skywalking.oap.server.configuration.consul;
 import com.google.common.net.HostAndPort;
 import com.orbitz.consul.Consul;
 import com.orbitz.consul.KeyValueClient;
-import java.io.FileNotFoundException;
-import java.io.Reader;
-import java.util.Map;
-import java.util.Properties;
-import org.apache.skywalking.oap.server.library.util.PropertyPlaceholderHelper;
 import org.apache.skywalking.oap.server.library.module.ApplicationConfiguration;
 import org.apache.skywalking.oap.server.library.module.ModuleManager;
 import org.apache.skywalking.oap.server.library.util.CollectionUtils;
+import org.apache.skywalking.oap.server.library.util.PropertyPlaceholderHelper;
 import org.apache.skywalking.oap.server.library.util.ResourceUtils;
-import org.junit.Before;
-import org.junit.Rule;
-import org.junit.Test;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.Timeout;
 import org.testcontainers.containers.GenericContainer;
 import org.testcontainers.containers.wait.strategy.Wait;
+import org.testcontainers.junit.jupiter.Container;
+import org.testcontainers.junit.jupiter.Testcontainers;
 import org.testcontainers.utility.DockerImageName;
 import org.yaml.snakeyaml.Yaml;
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertNull;
-import static org.junit.Assert.assertTrue;
+import java.io.FileNotFoundException;
+import java.io.Reader;
+import java.util.Map;
+import java.util.Properties;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
+import static org.junit.jupiter.api.Assertions.assertNull;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
+@Testcontainers
 public class ITConsulConfigurationTest {
     private final Yaml yaml = new Yaml();
 
     private ConsulConfigurationTestProvider provider;
 
-    @Rule
+    @Container
     public final GenericContainer<?> container =
         new GenericContainer<>(DockerImageName.parse("consul:0.9"))
             .waitingFor(Wait.forLogMessage(".*Synced node info.*", 1))
-            .withCommand("agent", "-server", "-bootstrap-expect=1", "-client=0.0.0.0");
+            .withCommand("agent", "-server", "-bootstrap-expect=1", "-client=0.0.0.0")
+            .withExposedPorts(8500);
 
-    @Before
+    @BeforeEach
     public void setUp() throws Exception {
         System.setProperty("consul.address", container.getHost() + ":" + container.getMappedPort(8500));
         final ApplicationConfiguration applicationConfiguration = new ApplicationConfiguration();
@@ -68,7 +73,8 @@ public class ITConsulConfigurationTest {
         assertNotNull(provider);
     }
 
-    @Test(timeout = 60000)
+    @Test
+    @Timeout(60)
     public void shouldReadUpdated() {
         assertNull(provider.watcher.value());
 
@@ -94,7 +100,8 @@ public class ITConsulConfigurationTest {
         assertNull(provider.watcher.value());
     }
 
-    @Test(timeout = 30000)
+    @Test
+    @Timeout(30)
     public void shouldReadUpdated4Group() {
         assertEquals("{}", provider.groupWatcher.groupItems().toString());
 
diff --git a/oap-server/server-configuration/configuration-consul/src/test/resources/mockito-extensions/org.mockito.plugins.MockMaker b/oap-server/server-configuration/configuration-consul/src/test/resources/mockito-extensions/org.mockito.plugins.MockMaker
new file mode 100644
index 0000000000..1f0955d450
--- /dev/null
+++ b/oap-server/server-configuration/configuration-consul/src/test/resources/mockito-extensions/org.mockito.plugins.MockMaker
@@ -0,0 +1 @@
+mock-maker-inline
diff --git a/oap-server/server-configuration/configuration-etcd/src/test/java/org/apache/skywalking/oap/server/configuration/etcd/ITEtcdConfigurationTest.java b/oap-server/server-configuration/configuration-etcd/src/test/java/org/apache/skywalking/oap/server/configuration/etcd/ITEtcdConfigurationTest.java
index 8a6c0d0d1c..cba2e62092 100644
--- a/oap-server/server-configuration/configuration-etcd/src/test/java/org/apache/skywalking/oap/server/configuration/etcd/ITEtcdConfigurationTest.java
+++ b/oap-server/server-configuration/configuration-etcd/src/test/java/org/apache/skywalking/oap/server/configuration/etcd/ITEtcdConfigurationTest.java
@@ -21,34 +21,38 @@ package org.apache.skywalking.oap.server.configuration.etcd;
 import io.etcd.jetcd.ByteSequence;
 import io.etcd.jetcd.Client;
 import io.etcd.jetcd.KV;
-import java.io.FileNotFoundException;
-import java.io.Reader;
-import java.nio.charset.Charset;
-import java.util.Collections;
-import java.util.Map;
-import java.util.Properties;
-import java.util.concurrent.TimeUnit;
 import lombok.extern.slf4j.Slf4j;
-import org.apache.skywalking.oap.server.library.util.PropertyPlaceholderHelper;
 import org.apache.skywalking.oap.server.library.module.ApplicationConfiguration;
 import org.apache.skywalking.oap.server.library.module.ModuleManager;
 import org.apache.skywalking.oap.server.library.util.CollectionUtils;
+import org.apache.skywalking.oap.server.library.util.PropertyPlaceholderHelper;
 import org.apache.skywalking.oap.server.library.util.ResourceUtils;
-import org.junit.Before;
-import org.junit.Rule;
-import org.junit.Test;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.Timeout;
 import org.testcontainers.containers.GenericContainer;
 import org.testcontainers.containers.wait.strategy.Wait;
+import org.testcontainers.junit.jupiter.Container;
+import org.testcontainers.junit.jupiter.Testcontainers;
 import org.testcontainers.utility.DockerImageName;
 import org.yaml.snakeyaml.Yaml;
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertNull;
+import java.io.FileNotFoundException;
+import java.io.Reader;
+import java.nio.charset.Charset;
+import java.util.Collections;
+import java.util.Map;
+import java.util.Properties;
+import java.util.concurrent.TimeUnit;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
+import static org.junit.jupiter.api.Assertions.assertNull;
 
 @Slf4j
+@Testcontainers
 public class ITEtcdConfigurationTest {
-    @Rule
+    @Container
     public final GenericContainer<?> container =
         new GenericContainer<>(DockerImageName.parse("quay.io/coreos/etcd:v3.5.0"))
             .waitingFor(Wait.forLogMessage(".*ready to serve client requests.*", 1))
@@ -57,11 +61,12 @@ public class ITEtcdConfigurationTest {
                 "etcd",
                 "--advertise-client-urls", "http://0.0.0.0:2379",
                 "--listen-client-urls", "http://0.0.0.0:2379"
-            );
+            )
+            .withExposedPorts(2379);
 
     private EtcdConfigurationTestProvider provider;
 
-    @Before
+    @BeforeEach
     public void before() throws Exception {
         System.setProperty("etcd.endpoint", "http://127.0.0.1:" + container.getMappedPort(2379));
 
@@ -76,7 +81,8 @@ public class ITEtcdConfigurationTest {
         assertNotNull(provider);
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void shouldReadUpdated() throws Exception {
         assertNull(provider.watcher.value());
 
@@ -108,7 +114,8 @@ public class ITEtcdConfigurationTest {
         assertNull(provider.watcher.value());
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void shouldReadUpdated4Group() throws Exception {
         assertEquals("{}", provider.groupWatcher.groupItems().toString());
 
diff --git a/oap-server/server-configuration/configuration-k8s-configmap/src/test/java/org/apache/skywalking/oap/server/configuration/configmap/ConfigmapConfigWatcherRegisterTest.java b/oap-server/server-configuration/configuration-k8s-configmap/src/test/java/org/apache/skywalking/oap/server/configuration/configmap/ConfigmapConfigWatcherRegisterTest.java
index 85e0722be9..ee1c019832 100644
--- a/oap-server/server-configuration/configuration-k8s-configmap/src/test/java/org/apache/skywalking/oap/server/configuration/configmap/ConfigmapConfigWatcherRegisterTest.java
+++ b/oap-server/server-configuration/configuration-k8s-configmap/src/test/java/org/apache/skywalking/oap/server/configuration/configmap/ConfigmapConfigWatcherRegisterTest.java
@@ -18,6 +18,16 @@
 
 package org.apache.skywalking.oap.server.configuration.configmap;
 
+import org.apache.skywalking.oap.server.configuration.api.ConfigTable;
+import org.apache.skywalking.oap.server.configuration.api.GroupConfigTable;
+import org.apache.skywalking.oap.server.library.util.ResourceUtils;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.extension.ExtendWith;
+import org.mockito.junit.jupiter.MockitoExtension;
+import org.yaml.snakeyaml.Yaml;
+
 import java.io.FileNotFoundException;
 import java.io.Reader;
 import java.util.HashMap;
@@ -27,22 +37,11 @@ import java.util.Map;
 import java.util.Objects;
 import java.util.Optional;
 import java.util.stream.Collectors;
-import org.apache.skywalking.oap.server.configuration.api.ConfigTable;
-import org.apache.skywalking.oap.server.configuration.api.GroupConfigTable;
-import org.apache.skywalking.oap.server.library.util.ResourceUtils;
-import org.junit.Assert;
-import org.junit.Before;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.powermock.api.mockito.PowerMockito;
-import org.powermock.core.classloader.annotations.PowerMockIgnore;
-import org.powermock.core.classloader.annotations.PrepareForTest;
-import org.powermock.modules.junit4.PowerMockRunner;
-import org.yaml.snakeyaml.Yaml;
 
-@RunWith(PowerMockRunner.class)
-@PowerMockIgnore({"com.sun.org.apache.xerces.*", "javax.xml.*", "org.xml.*", "javax.management.*", "org.w3c.*"})
-@PrepareForTest({ConfigurationConfigmapInformer.class})
+import static org.mockito.Mockito.doReturn;
+import static org.mockito.Mockito.mock;
+
+@ExtendWith(MockitoExtension.class)
 public class ConfigmapConfigWatcherRegisterTest {
 
     private ConfigmapConfigurationWatcherRegister register;
@@ -51,47 +50,47 @@ public class ConfigmapConfigWatcherRegisterTest {
 
     private final Yaml yaml = new Yaml();
 
-    @Before
-    public void prepare() throws IllegalAccessException {
+    @BeforeEach
+    public void prepare() {
         ConfigmapConfigurationSettings settings = new ConfigmapConfigurationSettings();
         settings.setPeriod(60);
-        informer = PowerMockito.mock(ConfigurationConfigmapInformer.class);
+        informer = mock(ConfigurationConfigmapInformer.class);
         register = new ConfigmapConfigurationWatcherRegister(settings, informer);
     }
 
     @Test
-    public void readConfigWhenConfigMapDataIsNull() throws Exception {
+    public void readConfigWhenConfigMapDataIsNull() {
         Map<String, String> configMapData = new HashMap<>();
-        PowerMockito.doReturn(configMapData).when(informer).configMapData();
+        doReturn(configMapData).when(informer).configMapData();
         Optional<ConfigTable> optionalConfigTable = register.readConfig(new HashSet<String>() {{
             add("key1");
         }});
 
-        Assert.assertTrue(optionalConfigTable.isPresent());
+        Assertions.assertTrue(optionalConfigTable.isPresent());
         ConfigTable configTable = optionalConfigTable.get();
-        Assert.assertEquals(configTable.getItems().size(), 1);
-        Assert.assertEquals(configTable.getItems().get(0).getName(), "key1");
-        Assert.assertNull(configTable.getItems().get(0).getValue());
+        Assertions.assertEquals(configTable.getItems().size(), 1);
+        Assertions.assertEquals(configTable.getItems().get(0).getName(), "key1");
+        Assertions.assertNull(configTable.getItems().get(0).getValue());
     }
 
     @Test
     public void readConfigWhenInformerNotwork() throws Exception {
-        PowerMockito.doReturn(new HashMap<>()).when(informer).configMapData();
+        doReturn(new HashMap<>()).when(informer).configMapData();
         Optional<ConfigTable> optionalConfigTable = register.readConfig(new HashSet<String>() {{
             add("key1");
         }});
 
-        Assert.assertTrue(optionalConfigTable.isPresent());
+        Assertions.assertTrue(optionalConfigTable.isPresent());
         ConfigTable configTable = optionalConfigTable.get();
-        Assert.assertEquals(configTable.getItems().size(), 1);
-        Assert.assertEquals(configTable.getItems().get(0).getName(), "key1");
-        Assert.assertNull(configTable.getItems().get(0).getValue());
+        Assertions.assertEquals(configTable.getItems().size(), 1);
+        Assertions.assertEquals(configTable.getItems().get(0).getName(), "key1");
+        Assertions.assertNull(configTable.getItems().get(0).getValue());
     }
 
     @Test
     public void readConfigWhenInformerWork() throws Exception {
         Map<String, String> configMapData = this.readMockConfigMapData();
-        PowerMockito.doReturn(configMapData).when(informer).configMapData();
+        doReturn(configMapData).when(informer).configMapData();
         Optional<ConfigTable> optionalConfigTable = register.readConfig(new HashSet<String>() {{
             add("agent-analyzer.default.slowDBAccessThreshold");
             add("alarm.default.alarm-settings");
@@ -99,59 +98,59 @@ public class ConfigmapConfigWatcherRegisterTest {
             add("agent-analyzer.default.uninstrumentedGateways");
         }});
 
-        Assert.assertTrue(optionalConfigTable.isPresent());
+        Assertions.assertTrue(optionalConfigTable.isPresent());
         ConfigTable configTable = optionalConfigTable.get();
 
         List<String> list = configTable.getItems().stream()
                                        .map(ConfigTable.ConfigItem::getValue)
                                        .filter(Objects::nonNull)
                                        .collect(Collectors.toList());
-        Assert.assertEquals(list.size(), 4);
+        Assertions.assertEquals(list.size(), 4);
     }
 
     @Test
     public void readGroupConfigWhenConfigMapDataIsNull() throws Exception {
         Map<String, String> configMapData = new HashMap<>();
-        PowerMockito.doReturn(configMapData).when(informer).configMapData();
+        doReturn(configMapData).when(informer).configMapData();
         Optional<GroupConfigTable> optionalGroupConfigTable = register.readGroupConfig(new HashSet<String>() {{
             add("key1");
         }});
 
-        Assert.assertTrue(optionalGroupConfigTable.isPresent());
+        Assertions.assertTrue(optionalGroupConfigTable.isPresent());
         GroupConfigTable groupConfigTable = optionalGroupConfigTable.get();
-        Assert.assertEquals(groupConfigTable.getGroupItems().size(), 1);
-        Assert.assertEquals(groupConfigTable.getGroupItems().get(0).getName(), "key1");
-        Assert.assertEquals(groupConfigTable.getGroupItems().get(0).getItems().size(), 0);
+        Assertions.assertEquals(groupConfigTable.getGroupItems().size(), 1);
+        Assertions.assertEquals(groupConfigTable.getGroupItems().get(0).getName(), "key1");
+        Assertions.assertEquals(groupConfigTable.getGroupItems().get(0).getItems().size(), 0);
     }
 
     @Test
     public void readGroupConfigWhenInformerNotwork() throws Exception {
-        PowerMockito.doReturn(new HashMap<>()).when(informer).configMapData();
+        doReturn(new HashMap<>()).when(informer).configMapData();
         Optional<GroupConfigTable> optionalGroupConfigTable = register.readGroupConfig(new HashSet<String>() {{
             add("key1");
         }});
 
-        Assert.assertTrue(optionalGroupConfigTable.isPresent());
+        Assertions.assertTrue(optionalGroupConfigTable.isPresent());
         GroupConfigTable groupConfigTable = optionalGroupConfigTable.get();
-        Assert.assertEquals(groupConfigTable.getGroupItems().size(), 1);
-        Assert.assertEquals(groupConfigTable.getGroupItems().get(0).getName(), "key1");
-        Assert.assertEquals(groupConfigTable.getGroupItems().get(0).getItems().size(), 0);
+        Assertions.assertEquals(groupConfigTable.getGroupItems().size(), 1);
+        Assertions.assertEquals(groupConfigTable.getGroupItems().get(0).getName(), "key1");
+        Assertions.assertEquals(groupConfigTable.getGroupItems().get(0).getItems().size(), 0);
     }
 
     @Test
     public void readGroupConfigWhenInformerWork() throws Exception {
         Map<String, String> configMapData = this.readMockConfigMapData();
-        PowerMockito.doReturn(configMapData).when(informer).configMapData();
+        doReturn(configMapData).when(informer).configMapData();
         Optional<GroupConfigTable> optionalGroupConfigTable = register.readGroupConfig(new HashSet<String>() {{
             add("core.default.endpoint-name-grouping-openapi");
         }});
 
-        Assert.assertTrue(optionalGroupConfigTable.isPresent());
+        Assertions.assertTrue(optionalGroupConfigTable.isPresent());
         GroupConfigTable groupConfigTable = optionalGroupConfigTable.get();
 
-        Assert.assertEquals(groupConfigTable.getGroupItems().size(), 1);
-        Assert.assertEquals(groupConfigTable.getGroupItems().get(0).getName(), "core.default.endpoint-name-grouping-openapi");
-        Assert.assertEquals(groupConfigTable.getGroupItems().get(0).getItems().size(), 3);
+        Assertions.assertEquals(groupConfigTable.getGroupItems().size(), 1);
+        Assertions.assertEquals(groupConfigTable.getGroupItems().get(0).getName(), "core.default.endpoint-name-grouping-openapi");
+        Assertions.assertEquals(groupConfigTable.getGroupItems().get(0).getItems().size(), 3);
     }
 
     private Map<String, String> readMockConfigMapData() throws FileNotFoundException {
diff --git a/oap-server/server-configuration/configuration-nacos/pom.xml b/oap-server/server-configuration/configuration-nacos/pom.xml
index d481ce779e..a53f169a87 100644
--- a/oap-server/server-configuration/configuration-nacos/pom.xml
+++ b/oap-server/server-configuration/configuration-nacos/pom.xml
@@ -42,5 +42,15 @@
             <groupId>com.alibaba.nacos</groupId>
             <artifactId>nacos-client</artifactId>
         </dependency>
+
+        <dependency>
+            <groupId>org.testcontainers</groupId>
+            <artifactId>testcontainers</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.skywalking</groupId>
+            <artifactId>server-testing</artifactId>
+            <version>${project.version}</version>
+        </dependency>
     </dependencies>
 </project>
diff --git a/oap-server/server-configuration/configuration-nacos/src/test/java/org/apache/skywalking/oap/server/configuration/nacos/ITNacosConfigurationTest.java b/oap-server/server-configuration/configuration-nacos/src/test/java/org/apache/skywalking/oap/server/configuration/nacos/ITNacosConfigurationTest.java
index cca5dadde2..44d483fe77 100644
--- a/oap-server/server-configuration/configuration-nacos/src/test/java/org/apache/skywalking/oap/server/configuration/nacos/ITNacosConfigurationTest.java
+++ b/oap-server/server-configuration/configuration-nacos/src/test/java/org/apache/skywalking/oap/server/configuration/nacos/ITNacosConfigurationTest.java
@@ -21,43 +21,48 @@ package org.apache.skywalking.oap.server.configuration.nacos;
 import com.alibaba.nacos.api.NacosFactory;
 import com.alibaba.nacos.api.config.ConfigService;
 import com.alibaba.nacos.api.exception.NacosException;
-import java.io.FileNotFoundException;
-import java.io.Reader;
-import java.util.Collections;
-import java.util.Map;
-import java.util.Properties;
 import lombok.extern.slf4j.Slf4j;
-import org.apache.skywalking.oap.server.library.util.PropertyPlaceholderHelper;
 import org.apache.skywalking.oap.server.library.module.ApplicationConfiguration;
 import org.apache.skywalking.oap.server.library.module.ModuleManager;
 import org.apache.skywalking.oap.server.library.util.CollectionUtils;
+import org.apache.skywalking.oap.server.library.util.PropertyPlaceholderHelper;
 import org.apache.skywalking.oap.server.library.util.ResourceUtils;
-import org.junit.Before;
-import org.junit.Rule;
-import org.junit.Test;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.Timeout;
 import org.testcontainers.containers.GenericContainer;
 import org.testcontainers.containers.wait.strategy.Wait;
+import org.testcontainers.junit.jupiter.Container;
+import org.testcontainers.junit.jupiter.Testcontainers;
 import org.testcontainers.utility.DockerImageName;
 import org.yaml.snakeyaml.Yaml;
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertNull;
-import static org.junit.Assert.assertTrue;
+import java.io.FileNotFoundException;
+import java.io.Reader;
+import java.util.Collections;
+import java.util.Map;
+import java.util.Properties;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
+import static org.junit.jupiter.api.Assertions.assertNull;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 @Slf4j
+@Testcontainers
 public class ITNacosConfigurationTest {
     private final Yaml yaml = new Yaml();
 
     private NacosConfigurationTestProvider provider;
 
-    @Rule
+    @Container
     public final GenericContainer<?> container =
         new GenericContainer<>(DockerImageName.parse("nacos/nacos-server:1.4.2"))
             .waitingFor(Wait.forLogMessage(".*Nacos started successfully.*", 1))
-            .withEnv(Collections.singletonMap("MODE", "standalone"));
+            .withEnv(Collections.singletonMap("MODE", "standalone"))
+            .withExposedPorts(8848);
 
-    @Before
+    @BeforeEach
     public void setUp() throws Exception {
         System.setProperty("nacos.host", container.getHost());
         System.setProperty("nacos.port", String.valueOf(container.getMappedPort(8848)));
@@ -74,7 +79,8 @@ public class ITNacosConfigurationTest {
     }
 
     @SuppressWarnings("StatementWithEmptyBody")
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void shouldReadUpdated() throws NacosException {
         assertNull(provider.watcher.value());
 
@@ -100,7 +106,8 @@ public class ITNacosConfigurationTest {
         assertNull(provider.watcher.value());
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void shouldReadUpdatedGroup() throws NacosException {
         assertEquals("{}", provider.groupWatcher.groupItems().toString());
 
diff --git a/oap-server/server-configuration/configuration-nacos/src/test/java/org/apache/skywalking/oap/server/configuration/nacos/NacosConfigWatcherRegisterTest.java b/oap-server/server-configuration/configuration-nacos/src/test/java/org/apache/skywalking/oap/server/configuration/nacos/NacosConfigWatcherRegisterTest.java
index 11b1005f78..f2497ab950 100644
--- a/oap-server/server-configuration/configuration-nacos/src/test/java/org/apache/skywalking/oap/server/configuration/nacos/NacosConfigWatcherRegisterTest.java
+++ b/oap-server/server-configuration/configuration-nacos/src/test/java/org/apache/skywalking/oap/server/configuration/nacos/NacosConfigWatcherRegisterTest.java
@@ -21,13 +21,14 @@ package org.apache.skywalking.oap.server.configuration.nacos;
 import com.alibaba.nacos.api.config.ConfigService;
 import com.alibaba.nacos.api.exception.NacosException;
 import com.google.common.collect.Sets;
-import java.util.HashMap;
-import java.util.Map;
 import org.apache.skywalking.oap.server.configuration.api.ConfigTable;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 import org.powermock.reflect.Whitebox;
 
-import static org.junit.Assert.assertEquals;
+import java.util.HashMap;
+import java.util.Map;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.spy;
 import static org.mockito.Mockito.when;
diff --git a/oap-server/server-configuration/configuration-zookeeper/src/test/java/org/apache/skywalking/oap/server/configuration/zookeeper/it/ITZookeeperConfigurationTest.java b/oap-server/server-configuration/configuration-zookeeper/src/test/java/org/apache/skywalking/oap/server/configuration/zookeeper/it/ITZookeeperConfigurationTest.java
index 6c76f8bd24..745b8827e4 100644
--- a/oap-server/server-configuration/configuration-zookeeper/src/test/java/org/apache/skywalking/oap/server/configuration/zookeeper/it/ITZookeeperConfigurationTest.java
+++ b/oap-server/server-configuration/configuration-zookeeper/src/test/java/org/apache/skywalking/oap/server/configuration/zookeeper/it/ITZookeeperConfigurationTest.java
@@ -18,47 +18,52 @@
 
 package org.apache.skywalking.oap.server.configuration.zookeeper.it;
 
-import java.io.FileNotFoundException;
-import java.io.Reader;
-import java.util.Map;
-import java.util.Properties;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.curator.RetryPolicy;
 import org.apache.curator.framework.CuratorFramework;
 import org.apache.curator.framework.CuratorFrameworkFactory;
 import org.apache.curator.retry.ExponentialBackoffRetry;
-import org.apache.skywalking.oap.server.library.util.PropertyPlaceholderHelper;
 import org.apache.skywalking.oap.server.library.module.ApplicationConfiguration;
 import org.apache.skywalking.oap.server.library.module.ModuleManager;
 import org.apache.skywalking.oap.server.library.util.CollectionUtils;
+import org.apache.skywalking.oap.server.library.util.PropertyPlaceholderHelper;
 import org.apache.skywalking.oap.server.library.util.ResourceUtils;
-import org.junit.Before;
-import org.junit.Rule;
-import org.junit.Test;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.Timeout;
 import org.testcontainers.containers.GenericContainer;
 import org.testcontainers.containers.wait.strategy.Wait;
+import org.testcontainers.junit.jupiter.Container;
+import org.testcontainers.junit.jupiter.Testcontainers;
 import org.testcontainers.utility.DockerImageName;
 import org.yaml.snakeyaml.Yaml;
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertNull;
-import static org.junit.Assert.assertTrue;
+import java.io.FileNotFoundException;
+import java.io.Reader;
+import java.util.Map;
+import java.util.Properties;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
+import static org.junit.jupiter.api.Assertions.assertNull;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 @Slf4j
+@Testcontainers
 public class ITZookeeperConfigurationTest {
     private final Yaml yaml = new Yaml();
 
     private MockZookeeperConfigurationProvider provider;
 
-    @Rule
+    @Container
     public final GenericContainer<?> container =
         new GenericContainer<>(DockerImageName.parse("zookeeper:3.5"))
-            .waitingFor(Wait.forLogMessage(".*binding to port.*", 1));
+            .waitingFor(Wait.forLogMessage(".*binding to port.*", 1))
+            .withExposedPorts(2181);
 
     private String zkAddress;
 
-    @Before
+    @BeforeEach
     public void setUp() throws Exception {
         zkAddress = container.getHost() + ":" + container.getMappedPort(2181);
         System.setProperty("zk.address", zkAddress);
@@ -76,7 +81,8 @@ public class ITZookeeperConfigurationTest {
     }
 
     @SuppressWarnings("StatementWithEmptyBody")
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void shouldReadUpdated() throws Exception {
         String namespace = "/default";
         String key = "test-module.default.testKey";
@@ -102,7 +108,8 @@ public class ITZookeeperConfigurationTest {
         assertNull(provider.watcher.value());
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void shouldReadUpdated4GroupConfig() throws Exception {
         String namespace = "/default";
         String key = "test-module.default.testKeyGroup";
diff --git a/oap-server/server-configuration/configuration-zookeeper/src/test/java/org/apache/skywalking/oap/server/configuration/zookeeper/ut/ZookeeperConfigWatcherRegisterTestCase.java b/oap-server/server-configuration/configuration-zookeeper/src/test/java/org/apache/skywalking/oap/server/configuration/zookeeper/ut/ZookeeperConfigWatcherRegisterTestCase.java
index aa9587499b..ce6f6f9d0a 100644
--- a/oap-server/server-configuration/configuration-zookeeper/src/test/java/org/apache/skywalking/oap/server/configuration/zookeeper/ut/ZookeeperConfigWatcherRegisterTestCase.java
+++ b/oap-server/server-configuration/configuration-zookeeper/src/test/java/org/apache/skywalking/oap/server/configuration/zookeeper/ut/ZookeeperConfigWatcherRegisterTestCase.java
@@ -23,10 +23,10 @@ import org.apache.curator.framework.recipes.cache.ChildData;
 import org.apache.curator.framework.recipes.cache.PathChildrenCache;
 import org.apache.skywalking.oap.server.configuration.api.ConfigTable;
 import org.apache.skywalking.oap.server.configuration.zookeeper.ZookeeperServerSettings;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 import org.powermock.reflect.Whitebox;
 
-import static org.junit.Assert.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.spy;
 import static org.mockito.Mockito.when;
diff --git a/oap-server/server-configuration/grpc-configuration-sync/src/test/java/org/apache/skywalking/oap/server/configuration/grpc/GRPCConfigurationTest.java b/oap-server/server-configuration/grpc-configuration-sync/src/test/java/org/apache/skywalking/oap/server/configuration/grpc/GRPCConfigurationTest.java
index 7d3c0df119..84f64e7c23 100644
--- a/oap-server/server-configuration/grpc-configuration-sync/src/test/java/org/apache/skywalking/oap/server/configuration/grpc/GRPCConfigurationTest.java
+++ b/oap-server/server-configuration/grpc-configuration-sync/src/test/java/org/apache/skywalking/oap/server/configuration/grpc/GRPCConfigurationTest.java
@@ -18,22 +18,31 @@
 
 package org.apache.skywalking.oap.server.configuration.grpc;
 
-import io.grpc.testing.GrpcServerRule;
-import java.util.Map;
-import java.util.concurrent.ConcurrentHashMap;
-import java.util.concurrent.TimeUnit;
-import java.util.concurrent.atomic.AtomicInteger;
+import io.grpc.ManagedChannel;
+import io.grpc.Server;
+import io.grpc.inprocess.InProcessChannelBuilder;
+import io.grpc.inprocess.InProcessServerBuilder;
+import io.grpc.util.MutableHandlerRegistry;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.skywalking.oap.server.configuration.api.ConfigChangeWatcher;
 import org.apache.skywalking.oap.server.configuration.api.GroupConfigChangeWatcher;
 import org.apache.skywalking.oap.server.configuration.service.ConfigurationServiceGrpc;
-import org.junit.Before;
-import org.junit.Rule;
-import org.junit.Test;
+import org.junit.jupiter.api.AfterEach;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.Timeout;
 import org.powermock.reflect.Whitebox;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertNull;
+
+import java.io.IOException;
+import java.util.Map;
+import java.util.UUID;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.TimeUnit;
+import java.util.concurrent.atomic.AtomicInteger;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
+import static org.junit.jupiter.api.Assertions.assertNull;
 
 @Slf4j
 public class GRPCConfigurationTest {
@@ -42,29 +51,60 @@ public class GRPCConfigurationTest {
     private ConfigChangeWatcher singleWatcher;
     private GroupConfigChangeWatcher groupWatcher;
 
-    @Rule
-    public final GrpcServerRule grpcServerRule = new GrpcServerRule().directExecutor();
+    private Server server;
+    private ManagedChannel channel;
+    private MutableHandlerRegistry serviceRegistry;
+
+    @BeforeEach
+    public void before() throws IOException {
+        serviceRegistry = new MutableHandlerRegistry();
+        final String name = UUID.randomUUID().toString();
+        InProcessServerBuilder serverBuilder =
+                InProcessServerBuilder
+                        .forName(name)
+                        .fallbackHandlerRegistry(serviceRegistry);
+
+        server = serverBuilder.build();
+        server.start();
+
+        channel = InProcessChannelBuilder.forName(name).build();
 
-    @Before
-    public void before() {
-        //for create register
         RemoteEndpointSettings settings = new RemoteEndpointSettings();
         settings.setHost("localhost");
         settings.setPort(5678);
         settings.setPeriod(1);
         provider = new GRPCConfigurationProvider();
         register = new GRPCConfigWatcherRegister(settings);
-        ConfigurationServiceGrpc.ConfigurationServiceBlockingStub blockingStub = ConfigurationServiceGrpc.newBlockingStub(
-            grpcServerRule.getChannel());
+        ConfigurationServiceGrpc.ConfigurationServiceBlockingStub blockingStub = ConfigurationServiceGrpc.newBlockingStub(channel);
         Whitebox.setInternalState(register, "stub", blockingStub);
         initWatcher();
         assertNotNull(provider);
     }
 
-    @Test(timeout = 20000)
+    @AfterEach
+    public void after() {
+        channel.shutdown();
+        server.shutdown();
+
+        try {
+            channel.awaitTermination(1L, TimeUnit.MINUTES);
+            server.awaitTermination(1L, TimeUnit.MINUTES);
+        } catch (InterruptedException e) {
+            Thread.currentThread().interrupt();
+            throw new RuntimeException(e);
+        } finally {
+            channel.shutdownNow();
+            channel = null;
+            server.shutdownNow();
+            server = null;
+        }
+    }
+
+    @Test
+    @Timeout(20)
     public void shouldReadUpdated() throws Exception {
         AtomicInteger dataFlag = new AtomicInteger(0);
-        grpcServerRule.getServiceRegistry().addService(new MockGRPCConfigService(dataFlag));
+        serviceRegistry.addService(new MockGRPCConfigService(dataFlag));
         assertNull(singleWatcher.value());
         register.registerConfigChangeWatcher(singleWatcher);
         register.start();
@@ -92,10 +132,11 @@ public class GRPCConfigurationTest {
         assertEquals("", singleWatcher.value());
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void shouldReadUpdated4Group() throws Exception {
         AtomicInteger dataFlag = new AtomicInteger(0);
-        grpcServerRule.getServiceRegistry().addService(new MockGRPCConfigService(dataFlag));
+        serviceRegistry.addService(new MockGRPCConfigService(dataFlag));
         assertEquals("{}", groupWatcher.groupItems().toString());
         register.registerConfigChangeWatcher(groupWatcher);
         register.start();
diff --git a/oap-server/server-configuration/pom.xml b/oap-server/server-configuration/pom.xml
index 7a68bb250a..ef4c2edde6 100644
--- a/oap-server/server-configuration/pom.xml
+++ b/oap-server/server-configuration/pom.xml
@@ -38,4 +38,12 @@
         <module>configuration-k8s-configmap</module>
         <module>configuration-nacos</module>
     </modules>
+
+    <dependencies>
+        <dependency>
+            <groupId>org.apache.skywalking</groupId>
+            <artifactId>server-testing</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+    </dependencies>
 </project>
diff --git a/oap-server/server-core/src/test/java/org/apache/skywalking/oap/server/core/CoreModuleConfigTest.java b/oap-server/server-core/src/test/java/org/apache/skywalking/oap/server/core/CoreModuleConfigTest.java
index afdb5bb260..4d61d7e984 100644
--- a/oap-server/server-core/src/test/java/org/apache/skywalking/oap/server/core/CoreModuleConfigTest.java
+++ b/oap-server/server-core/src/test/java/org/apache/skywalking/oap/server/core/CoreModuleConfigTest.java
@@ -19,26 +19,27 @@
 package org.apache.skywalking.oap.server.core;
 
 import org.apache.commons.lang3.StringUtils;
-import org.junit.Assert;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 public class CoreModuleConfigTest {
 
     @Test
     public void testRoleFromNameNormalSituation() {
-        Assert.assertEquals(CoreModuleConfig.Role.Mixed, CoreModuleConfig.Role.fromName("Mixed"));
-        Assert.assertEquals(CoreModuleConfig.Role.Receiver, CoreModuleConfig.Role.fromName("Receiver"));
-        Assert.assertEquals(CoreModuleConfig.Role.Aggregator, CoreModuleConfig.Role.fromName("Aggregator"));
+        assertEquals(CoreModuleConfig.Role.Mixed, CoreModuleConfig.Role.fromName("Mixed"));
+        assertEquals(CoreModuleConfig.Role.Receiver, CoreModuleConfig.Role.fromName("Receiver"));
+        assertEquals(CoreModuleConfig.Role.Aggregator, CoreModuleConfig.Role.fromName("Aggregator"));
     }
 
     @Test
     public void testRoleFromNameBlockParameter() {
-        Assert.assertEquals(CoreModuleConfig.Role.Mixed, CoreModuleConfig.Role.fromName(StringUtils.EMPTY));
-        Assert.assertEquals(CoreModuleConfig.Role.Mixed, CoreModuleConfig.Role.fromName(null));
+        assertEquals(CoreModuleConfig.Role.Mixed, CoreModuleConfig.Role.fromName(StringUtils.EMPTY));
+        assertEquals(CoreModuleConfig.Role.Mixed, CoreModuleConfig.Role.fromName(null));
     }
 
     @Test
     public void testRoleFromNameNotIncludeRole() {
-        Assert.assertEquals(CoreModuleConfig.Role.Mixed, CoreModuleConfig.Role.fromName("a"));
+        assertEquals(CoreModuleConfig.Role.Mixed, CoreModuleConfig.Role.fromName("a"));
     }
 }
diff --git a/oap-server/server-core/src/test/java/org/apache/skywalking/oap/server/core/CoreModuleTest.java b/oap-server/server-core/src/test/java/org/apache/skywalking/oap/server/core/CoreModuleTest.java
index e62c4ad3d6..bc9fbe9240 100644
--- a/oap-server/server-core/src/test/java/org/apache/skywalking/oap/server/core/CoreModuleTest.java
+++ b/oap-server/server-core/src/test/java/org/apache/skywalking/oap/server/core/CoreModuleTest.java
@@ -18,14 +18,14 @@
 
 package org.apache.skywalking.oap.server.core;
 
-import org.junit.Assert;
-import org.junit.Test;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Test;
 
 public class CoreModuleTest {
     @Test
     public void testOpenServiceList() {
         CoreModule coreModule = new CoreModule();
 
-        Assert.assertEquals(38, coreModule.services().length);
+        Assertions.assertEquals(38, coreModule.services().length);
     }
 }
diff --git a/oap-server/server-core/src/test/java/org/apache/skywalking/oap/server/core/WorkPathTest.java b/oap-server/server-core/src/test/java/org/apache/skywalking/oap/server/core/WorkPathTest.java
index ad9ad7676d..1f673e98f8 100644
--- a/oap-server/server-core/src/test/java/org/apache/skywalking/oap/server/core/WorkPathTest.java
+++ b/oap-server/server-core/src/test/java/org/apache/skywalking/oap/server/core/WorkPathTest.java
@@ -18,12 +18,12 @@
 
 package org.apache.skywalking.oap.server.core;
 
-import org.junit.Assert;
-import org.junit.Test;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Test;
 
 public class WorkPathTest {
     @Test
     public void testPath() {
-        Assert.assertTrue(WorkPath.getPath().exists());
+        Assertions.assertTrue(WorkPath.getPath().exists());
     }
 }
diff --git a/oap-server/server-core/src/test/java/org/apache/skywalking/oap/server/core/analysis/ApdexThresholdConfigTest.java b/oap-server/server-core/src/test/java/org/apache/skywalking/oap/server/core/analysis/ApdexThresholdConfigTest.java
index 18afa118b5..789efa8405 100644
--- a/oap-server/server-core/src/test/java/org/apache/skywalking/oap/server/core/analysis/ApdexThresholdConfigTest.java
+++ b/oap-server/server-core/src/test/java/org/apache/skywalking/oap/server/core/analysis/ApdexThresholdConfigTest.java
@@ -18,22 +18,23 @@
 
 package org.apache.skywalking.oap.server.core.analysis;
 
-import java.util.Optional;
-import java.util.Set;
 import org.apache.skywalking.oap.server.configuration.api.ConfigTable;
 import org.apache.skywalking.oap.server.configuration.api.ConfigWatcherRegister;
 import org.apache.skywalking.oap.server.configuration.api.GroupConfigTable;
 import org.apache.skywalking.oap.server.core.CoreModuleProvider;
-import org.junit.Test;
-import org.junit.runner.RunWith;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.Timeout;
+import org.junit.jupiter.api.extension.ExtendWith;
 import org.mockito.Mock;
-import org.mockito.runners.MockitoJUnitRunner;
+import org.mockito.junit.jupiter.MockitoExtension;
+
+import java.util.Optional;
+import java.util.Set;
 
-import static org.hamcrest.CoreMatchers.is;
-import static org.hamcrest.MatcherAssert.assertThat;
+import static org.assertj.core.api.AssertionsForClassTypes.assertThat;
 import static org.mockito.Mockito.when;
 
-@RunWith(MockitoJUnitRunner.class)
+@ExtendWith(MockitoExtension.class)
 public class ApdexThresholdConfigTest {
 
     @Mock
@@ -42,12 +43,13 @@ public class ApdexThresholdConfigTest {
     @Test
     public void testLookupOfBeforeInit() {
         ApdexThresholdConfig config = new ApdexThresholdConfig(provider);
-        assertThat(config.lookup("foo"), is(500));
-        assertThat(config.lookup("default"), is(500));
-        assertThat(config.lookup("bar"), is(500));
+        assertThat(config.lookup("foo")).isEqualTo(500);
+        assertThat(config.lookup("default")).isEqualTo(500);
+        assertThat(config.lookup("bar")).isEqualTo(500);
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testLookupOfDynamicUpdate() throws InterruptedException {
         ConfigWatcherRegister register = new MockConfigWatcherRegister(3);
         when(provider.name()).thenReturn("default");
@@ -58,9 +60,9 @@ public class ApdexThresholdConfigTest {
         while (config.lookup("foo").intValue() == 500) {
             Thread.sleep(2000);
         }
-        assertThat(config.lookup("foo"), is(200));
-        assertThat(config.lookup("default"), is(1000));
-        assertThat(config.lookup("bar"), is(1000));
+        assertThat(config.lookup("foo")).isEqualTo(200);
+        assertThat(config.lookup("default")).isEqualTo(1000);
+        assertThat(config.lookup("bar")).isEqualTo(1000);
     }
 
     public static class MockConfigWatcherRegister extends ConfigWatcherRegister {
@@ -81,4 +83,4 @@ public class ApdexThresholdConfigTest {
             return Optional.empty();
         }
     }
-}
\ No newline at end of file
+}
diff --git a/oap-server/server-core/src/test/java/org/apache/skywalking/oap/server/core/analysis/IDManagerTest.java b/oap-server/server-core/src/test/java/org/apache/skywalking/oap/server/core/analysis/IDManagerTest.java
index 786810bb2b..c5fb93a68a 100644
--- a/oap-server/server-core/src/test/java/org/apache/skywalking/oap/server/core/analysis/IDManagerTest.java
+++ b/oap-server/server-core/src/test/java/org/apache/skywalking/oap/server/core/analysis/IDManagerTest.java
@@ -18,8 +18,8 @@
 
 package org.apache.skywalking.oap.server.core.analysis;
 
-import org.junit.Assert;
-import org.junit.Test;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Test;
 
 public class IDManagerTest {
     @Test
@@ -33,7 +33,7 @@ public class IDManagerTest {
                 "Service",
                 true
             ));
-        Assert.assertEquals(define, relationDefine);
+        Assertions.assertEquals(define, relationDefine);
     }
 
     @Test
@@ -46,7 +46,7 @@ public class IDManagerTest {
         final String relationId = IDManager.ServiceID.buildRelationId(define);
         final IDManager.ServiceID.ServiceRelationDefine serviceRelationDefine = IDManager.ServiceID.analysisRelationId(
             relationId);
-        Assert.assertEquals(define, serviceRelationDefine);
+        Assertions.assertEquals(define, serviceRelationDefine);
     }
 
 }
diff --git a/oap-server/server-core/src/test/java/org/apache/skywalking/oap/server/core/analysis/TimeBucketTest.java b/oap-server/server-core/src/test/java/org/apache/skywalking/oap/server/core/analysis/TimeBucketTest.java
index 2dedb1c101..26115eac53 100644
--- a/oap-server/server-core/src/test/java/org/apache/skywalking/oap/server/core/analysis/TimeBucketTest.java
+++ b/oap-server/server-core/src/test/java/org/apache/skywalking/oap/server/core/analysis/TimeBucketTest.java
@@ -18,19 +18,16 @@
 
 package org.apache.skywalking.oap.server.core.analysis;
 
-import org.junit.Assert;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.junit.runners.Parameterized;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.params.ParameterizedTest;
+import org.junit.jupiter.params.provider.MethodSource;
 
 import java.util.Calendar;
 import java.util.TimeZone;
 
-@RunWith(Parameterized.class)
 public class TimeBucketTest {
     private static final long NOW = System.currentTimeMillis();
 
-    @Parameterized.Parameters
     public static Object[] parameters() {
         return new Object[]{
                 DownSampling.Second,
@@ -40,14 +37,9 @@ public class TimeBucketTest {
         };
     }
 
-    private DownSampling downSampling;
-
-    public TimeBucketTest(DownSampling downSampling) {
-        this.downSampling = downSampling;
-    }
-
-    @Test
-    public void testConversion() {
+    @ParameterizedTest
+    @MethodSource("parameters")
+    public void testConversion(DownSampling downSampling) {
         long timestamp = TimeBucket.getTimestamp(TimeBucket.getTimeBucket(NOW, downSampling));
 
         Calendar instance = Calendar.getInstance(TimeZone.getDefault());
@@ -70,6 +62,6 @@ public class TimeBucketTest {
                 // Fall through
             }
         }
-        Assert.assertEquals(instance.getTimeInMillis(), timestamp);
+        Assertions.assertEquals(instance.getTimeInMillis(), timestamp);
     }
 }
diff --git a/oap-server/server-core/src/test/java/org/apache/skywalking/oap/server/core/analysis/data/LimitedSizeBufferedDataTest.java b/oap-server/server-core/src/test/java/org/apache/skywalking/oap/server/core/analysis/data/LimitedSizeBufferedDataTest.java
index e5445bd902..e0b001c811 100644
--- a/oap-server/server-core/src/test/java/org/apache/skywalking/oap/server/core/analysis/data/LimitedSizeBufferedDataTest.java
+++ b/oap-server/server-core/src/test/java/org/apache/skywalking/oap/server/core/analysis/data/LimitedSizeBufferedDataTest.java
@@ -18,11 +18,12 @@
 
 package org.apache.skywalking.oap.server.core.analysis.data;
 
-import java.util.Objects;
 import org.apache.skywalking.oap.server.core.storage.ComparableStorageData;
 import org.apache.skywalking.oap.server.core.storage.StorageID;
-import org.junit.Assert;
-import org.junit.Test;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Test;
+
+import java.util.Objects;
 
 public class LimitedSizeBufferedDataTest {
     @Test
@@ -46,7 +47,7 @@ public class LimitedSizeBufferedDataTest {
         };
         int i = 0;
         for (MockStorageData data : collection.read()) {
-            Assert.assertEquals(expected[i++], data.latency);
+            Assertions.assertEquals(expected[i++], data.latency);
         }
     }
 
diff --git a/oap-server/server-core/src/test/java/org/apache/skywalking/oap/server/core/analysis/manual/endpoint/EndpointTrafficTest.java b/oap-server/server-core/src/test/java/org/apache/skywalking/oap/server/core/analysis/manual/endpoint/EndpointTrafficTest.java
index 383696e864..a6f956e582 100644
--- a/oap-server/server-core/src/test/java/org/apache/skywalking/oap/server/core/analysis/manual/endpoint/EndpointTrafficTest.java
+++ b/oap-server/server-core/src/test/java/org/apache/skywalking/oap/server/core/analysis/manual/endpoint/EndpointTrafficTest.java
@@ -20,8 +20,8 @@ package org.apache.skywalking.oap.server.core.analysis.manual.endpoint;
 
 import org.apache.skywalking.oap.server.core.source.DetectPoint;
 import org.apache.skywalking.oap.server.core.storage.type.HashMapConverter;
-import org.junit.Assert;
-import org.junit.Test;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Test;
 
 public class EndpointTrafficTest {
     @Test
@@ -38,7 +38,7 @@ public class EndpointTrafficTest {
         EndpointTraffic another = new EndpointTraffic();
         another.deserialize(endpointTraffic.serialize().build());
 
-        Assert.assertEquals(endpointTraffic, another);
+        Assertions.assertEquals(endpointTraffic, another);
     }
 
     @Test
@@ -57,6 +57,6 @@ public class EndpointTrafficTest {
         builder.entity2Storage(endpointTraffic, toStorage);
         final EndpointTraffic another = builder.storage2Entity(new HashMapConverter.ToEntity(toStorage.obtain()));
 
-        Assert.assertEquals(endpointTraffic, another);
+        Assertions.assertEquals(endpointTraffic, another);
     }
 }
diff --git a/oap-server/server-core/src/test/java/org/apache/skywalking/oap/server/core/analysis/manual/relation/endpoint/EndpointCallRelationTest.java b/oap-server/server-core/src/test/java/org/apache/skywalking/oap/server/core/analysis/manual/relation/endpoint/EndpointCallRelationTest.java
index c509604abf..0ff9902af1 100644
--- a/oap-server/server-core/src/test/java/org/apache/skywalking/oap/server/core/analysis/manual/relation/endpoint/EndpointCallRelationTest.java
+++ b/oap-server/server-core/src/test/java/org/apache/skywalking/oap/server/core/analysis/manual/relation/endpoint/EndpointCallRelationTest.java
@@ -18,8 +18,8 @@
 
 package org.apache.skywalking.oap.server.core.analysis.manual.relation.endpoint;
 
-import org.junit.Assert;
-import org.junit.Test;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Test;
 
 public class EndpointCallRelationTest {
     @Test
@@ -34,7 +34,7 @@ public class EndpointCallRelationTest {
             "VXNlcg==.0-VXNlcg==-em1iaXotcHJvbW90aW9uMi1hZG1pbkAxMjUyNw==.1-L0Bpbi9hcGkvaGVhbHRo");
         otherObject.setTimeBucket(202101071505L);
 
-        Assert.assertTrue(thisObject.equals(otherObject));
+        Assertions.assertTrue(thisObject.equals(otherObject));
     }
 
     @Test
@@ -49,6 +49,6 @@ public class EndpointCallRelationTest {
             "VXNlcg==.0-VXNlcg==-em1iaXotcHJvbW90aW9uMi1hZG1pbkAxMjUyNw==.1-L0Bpbi9hcGkvaGVhbHRo");
         otherObject.setTimeBucket(202101071506L);
 
-        Assert.assertFalse(thisObject.equals(otherObject));
+        Assertions.assertFalse(thisObject.equals(otherObject));
     }
 }
diff --git a/oap-server/server-core/src/test/java/org/apache/skywalking/oap/server/core/analysis/manual/relation/instance/ServiceInstanceRelationTest.java b/oap-server/server-core/src/test/java/org/apache/skywalking/oap/server/core/analysis/manual/relation/instance/ServiceInstanceRelationTest.java
index 18dc008d7e..a75eee16df 100644
--- a/oap-server/server-core/src/test/java/org/apache/skywalking/oap/server/core/analysis/manual/relation/instance/ServiceInstanceRelationTest.java
+++ b/oap-server/server-core/src/test/java/org/apache/skywalking/oap/server/core/analysis/manual/relation/instance/ServiceInstanceRelationTest.java
@@ -18,8 +18,8 @@
 
 package org.apache.skywalking.oap.server.core.analysis.manual.relation.instance;
 
-import org.junit.Assert;
-import org.junit.Test;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Test;
 
 public class ServiceInstanceRelationTest {
     @Test
@@ -34,7 +34,7 @@ public class ServiceInstanceRelationTest {
             "em1jLWJlYWNvbi1taWRkbGV3YXJlQDExMTIz.1_MTAuMTExLjIzMi4yMDc=-MTkyLjE2OC40Ni4xNDM6NDY2MDY=.0_MTkyLjE2OC40Ni4xNDM6NDY2MDY=");
         otherObject.setTimeBucket(202101071505L);
 
-        Assert.assertTrue(thisObject.equals(otherObject));
+        Assertions.assertTrue(thisObject.equals(otherObject));
     }
 
     @Test
@@ -49,7 +49,7 @@ public class ServiceInstanceRelationTest {
             "em1jLWJlYWNvbi1taWRkbGV3YXJlQDExMTIz.1_MTAuMTExLjIzMi4yMDc=-MTkyLjE2OC40Ni4xNDM6NDY2MDY=.0_MTkyLjE2OC40Ni4xNDM6NDY2MDY=");
         otherObject.setTimeBucket(202101071506L);
 
-        Assert.assertFalse(thisObject.equals(otherObject));
+        Assertions.assertFalse(thisObject.equals(otherObject));
     }
 
     @Test
@@ -64,7 +64,7 @@ public class ServiceInstanceRelationTest {
             "em1jLWJlYWNvbi1taWRkbGV3YXJlQDExMTIz.1_MTAuMTExLjIzMi4yMDc=-MTkyLjE2OC40Ni4xNDM6NDY2MDY=.0_MTkyLjE2OC40Ni4xNDM6NDY2MDY=");
         otherObject.setTimeBucket(202101071505L);
 
-        Assert.assertTrue(thisObject.equals(otherObject));
+        Assertions.assertTrue(thisObject.equals(otherObject));
     }
 
     @Test
@@ -79,6 +79,6 @@ public class ServiceInstanceRelationTest {
             "em1jLWJlYWNvbi1taWRkbGV3YXJlQDExMTIz.1_MTAuMTExLjIzMi4yMDc=-MTkyLjE2OC40Ni4xNDM6NDY2MDY=.0_MTkyLjE2OC40Ni4xNDM6NDY2MDY=");
         otherObject.setTimeBucket(202101071506L);
 
-        Assert.assertFalse(thisObject.equals(otherObject));
+        Assertions.assertFalse(thisObject.equals(otherObject));
     }
 }
diff --git a/oap-server/server-core/src/test/java/org/apache/skywalking/oap/server/core/analysis/manual/relation/service/ServiceRelationTest.java b/oap-server/server-core/src/test/java/org/apache/skywalking/oap/server/core/analysis/manual/relation/service/ServiceRelationTest.java
index 6bf8282a4c..834e1bc018 100644
--- a/oap-server/server-core/src/test/java/org/apache/skywalking/oap/server/core/analysis/manual/relation/service/ServiceRelationTest.java
+++ b/oap-server/server-core/src/test/java/org/apache/skywalking/oap/server/core/analysis/manual/relation/service/ServiceRelationTest.java
@@ -18,8 +18,8 @@
 
 package org.apache.skywalking.oap.server.core.analysis.manual.relation.service;
 
-import org.junit.Assert;
-import org.junit.Test;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Test;
 
 public class ServiceRelationTest {
     @Test
@@ -32,7 +32,7 @@ public class ServiceRelationTest {
         otherObject.setEntityId("VXNlcg==.0-em0tY2xpZW50LXNldHRpbmctd2ViYXBpQDEwNjQ4.1");
         otherObject.setTimeBucket(202101071505L);
 
-        Assert.assertTrue(thisObject.equals(otherObject));
+        Assertions.assertTrue(thisObject.equals(otherObject));
     }
 
     @Test
@@ -45,7 +45,7 @@ public class ServiceRelationTest {
         otherObject.setEntityId("VXNlcg==.0-em0tY2xpZW50LXNldHRpbmctd2ViYXBpQDEwNjQ4.1");
         otherObject.setTimeBucket(202101071506L);
 
-        Assert.assertFalse(thisObject.equals(otherObject));
+        Assertions.assertFalse(thisObject.equals(otherObject));
     }
 
     @Test
@@ -58,7 +58,7 @@ public class ServiceRelationTest {
         otherObject.setEntityId("VXNlcg==.0-em0tY2xpZW50LXNldHRpbmctd2ViYXBpQDEwNjQ4.1");
         otherObject.setTimeBucket(202101071505L);
 
-        Assert.assertTrue(thisObject.equals(otherObject));
+        Assertions.assertTrue(thisObject.equals(otherObject));
     }
 
     @Test
@@ -71,6 +71,6 @@ public class ServiceRelationTest {
         otherObject.setEntityId("VXNlcg==.0-em0tY2xpZW50LXNldHRpbmctd2ViYXBpQDEwNjQ4.1");
         otherObject.setTimeBucket(202101071506L);
 
-        Assert.assertFalse(thisObject.equals(otherObject));
+        Assertions.assertFalse(thisObject.equals(otherObject));
     }
 }
diff --git a/oap-server/server-core/src/test/java/org/apache/skywalking/oap/server/core/analysis/manual/searchtag/TagTest.java b/oap-server/server-core/src/test/java/org/apache/skywalking/oap/server/core/analysis/manual/searchtag/TagTest.java
index 4705c4d02c..8fe086619b 100644
--- a/oap-server/server-core/src/test/java/org/apache/skywalking/oap/server/core/analysis/manual/searchtag/TagTest.java
+++ b/oap-server/server-core/src/test/java/org/apache/skywalking/oap/server/core/analysis/manual/searchtag/TagTest.java
@@ -17,8 +17,8 @@
 
 package org.apache.skywalking.oap.server.core.analysis.manual.searchtag;
 
-import org.junit.Assert;
-import org.junit.Test;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Test;
 
 public class TagTest {
     @Test
@@ -27,8 +27,8 @@ public class TagTest {
         final Tag tag1 = new Tag("tag1", "value2");
         final Tag tag2 = new Tag("tag2", "value3");
         final Tag tag3 = new Tag("tag1", "value1");
-        Assert.assertEquals(tag, tag3);
-        Assert.assertNotEquals(tag, tag1);
-        Assert.assertNotEquals(tag, tag2);
+        Assertions.assertEquals(tag, tag3);
+        Assertions.assertNotEquals(tag, tag1);
+        Assertions.assertNotEquals(tag, tag2);
     }
 }
diff --git a/oap-server/server-core/src/test/java/org/apache/skywalking/oap/server/core/analysis/manual/service/ServiceTrafficTest.java b/oap-server/server-core/src/test/java/org/apache/skywalking/oap/server/core/analysis/manual/service/ServiceTrafficTest.java
index 254369a01b..5dca7755aa 100644
--- a/oap-server/server-core/src/test/java/org/apache/skywalking/oap/server/core/analysis/manual/service/ServiceTrafficTest.java
+++ b/oap-server/server-core/src/test/java/org/apache/skywalking/oap/server/core/analysis/manual/service/ServiceTrafficTest.java
@@ -18,11 +18,12 @@
 
 package org.apache.skywalking.oap.server.core.analysis.manual.service;
 
-import java.util.Map;
 import org.apache.skywalking.oap.server.core.analysis.Layer;
 import org.apache.skywalking.oap.server.core.storage.type.HashMapConverter;
-import org.junit.Assert;
-import org.junit.Test;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Test;
+
+import java.util.Map;
 
 public class ServiceTrafficTest {
     @Test
@@ -33,7 +34,7 @@ public class ServiceTrafficTest {
         final HashMapConverter.ToStorage toStorage = new HashMapConverter.ToStorage();
         new ServiceTraffic.Builder().entity2Storage(traffic, toStorage);
         final Map<String, Object> stringObjectMap = toStorage.obtain();
-        Assert.assertEquals("group-name", stringObjectMap.get(ServiceTraffic.GROUP));
+        Assertions.assertEquals("group-name", stringObjectMap.get(ServiceTraffic.GROUP));
     }
 
     @Test
@@ -44,6 +45,6 @@ public class ServiceTrafficTest {
         final HashMapConverter.ToStorage toStorage = new HashMapConverter.ToStorage();
         new ServiceTraffic.Builder().entity2Storage(traffic, toStorage);
         final Map<String, Object> stringObjectMap = toStorage.obtain();
-        Assert.assertNull(stringObjectMap.get(ServiceTraffic.GROUP));
+        Assertions.assertNull(stringObjectMap.get(ServiceTraffic.GROUP));
     }
 }
diff --git a/oap-server/server-core/src/test/java/org/apache/skywalking/oap/server/core/analysis/meter/MeterSystemTest.java b/oap-server/server-core/src/test/java/org/apache/skywalking/oap/server/core/analysis/meter/MeterSystemTest.java
index da9f3e79e0..0610661bbe 100644
--- a/oap-server/server-core/src/test/java/org/apache/skywalking/oap/server/core/analysis/meter/MeterSystemTest.java
+++ b/oap-server/server-core/src/test/java/org/apache/skywalking/oap/server/core/analysis/meter/MeterSystemTest.java
@@ -18,32 +18,32 @@
 
 package org.apache.skywalking.oap.server.core.analysis.meter;
 
-import java.util.Map;
 import org.apache.skywalking.oap.server.core.analysis.StreamDefinition;
 import org.apache.skywalking.oap.server.core.analysis.worker.MetricsStreamProcessor;
 import org.apache.skywalking.oap.server.core.storage.StorageException;
 import org.apache.skywalking.oap.server.library.module.ModuleManager;
-import org.junit.Assert;
-import org.junit.Before;
-import org.junit.Test;
-import org.junit.runner.RunWith;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.extension.ExtendWith;
 import org.mockito.Mock;
 import org.mockito.Mockito;
-import org.mockito.junit.MockitoJUnitRunner;
+import org.mockito.junit.jupiter.MockitoExtension;
 import org.powermock.reflect.Whitebox;
 
+import java.util.Map;
+
 import static org.mockito.ArgumentMatchers.any;
 import static org.mockito.Mockito.doNothing;
 import static org.mockito.Mockito.spy;
 
-@RunWith(MockitoJUnitRunner.Silent.class)
+@ExtendWith(MockitoExtension.class)
 public class MeterSystemTest {
-
     @Mock
     private ModuleManager moduleManager;
     private MeterSystem meterSystem;
 
-    @Before
+    @BeforeEach
     public void setup() throws StorageException {
         meterSystem = spy(new MeterSystem(moduleManager));
         Whitebox.setInternalState(MetricsStreamProcessor.class, "PROCESSOR",
@@ -82,8 +82,8 @@ public class MeterSystemTest {
         Class<?> realDataType = Whitebox.getInternalState(meterDefinition, "dataType");
         ScopeType realScopeTypes = Whitebox.getInternalState(meterDefinition, "scopeType");
 
-        Assert.assertEquals(dataType, realDataType);
-        Assert.assertEquals(type, realScopeTypes);
+        Assertions.assertEquals(dataType, realDataType);
+        Assertions.assertEquals(type, realScopeTypes);
     }
 
 }
diff --git a/oap-server/server-core/src/test/java/org/apache/skywalking/oap/server/core/analysis/meter/function/HistogramFunctionTest.java b/oap-server/server-core/src/test/java/org/apache/skywalking/oap/server/core/analysis/meter/function/HistogramFunctionTest.java
index 9af0afe09e..6c3f1e648e 100644
--- a/oap-server/server-core/src/test/java/org/apache/skywalking/oap/server/core/analysis/meter/function/HistogramFunctionTest.java
+++ b/oap-server/server-core/src/test/java/org/apache/skywalking/oap/server/core/analysis/meter/function/HistogramFunctionTest.java
@@ -18,8 +18,6 @@
 
 package org.apache.skywalking.oap.server.core.analysis.meter.function;
 
-import java.util.Map;
-import java.util.stream.IntStream;
 import org.apache.skywalking.oap.server.core.analysis.Layer;
 import org.apache.skywalking.oap.server.core.analysis.meter.MeterEntity;
 import org.apache.skywalking.oap.server.core.analysis.metrics.DataTable;
@@ -29,12 +27,16 @@ import org.apache.skywalking.oap.server.core.query.type.Bucket;
 import org.apache.skywalking.oap.server.core.query.type.HeatMap;
 import org.apache.skywalking.oap.server.core.storage.type.HashMapConverter;
 import org.apache.skywalking.oap.server.core.storage.type.StorageBuilder;
-import org.junit.AfterClass;
-import org.junit.Assert;
-import org.junit.BeforeClass;
-import org.junit.Test;
+import org.junit.jupiter.api.AfterAll;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.BeforeAll;
+import org.junit.jupiter.api.Test;
+
+import java.util.Map;
+import java.util.stream.IntStream;
 
 import static org.apache.skywalking.oap.server.core.analysis.meter.function.HistogramFunction.DATASET;
+import static org.junit.jupiter.api.Assertions.assertThrows;
 
 public class HistogramFunctionTest {
     private static final long[] BUCKETS = new long[] {
@@ -58,13 +60,13 @@ public class HistogramFunctionTest {
         10
     };
 
-    @BeforeClass
+    @BeforeAll
     public static void setup() {
         MeterEntity.setNamingControl(
             new NamingControl(512, 512, 512, new EndpointNameGrouping()));
     }
 
-    @AfterClass
+    @AfterAll
     public static void tearDown() {
         MeterEntity.setNamingControl(null);
     }
@@ -97,7 +99,7 @@ public class HistogramFunctionTest {
         final int[] results = inst.getDataset().sortedValues(new HeatMap.KeyComparator(true)).stream()
                                   .flatMapToInt(l -> IntStream.of(l.intValue()))
                                   .toArray();
-        Assert.assertArrayEquals(new int[] {
+        Assertions.assertArrayEquals(new int[] {
             1,
             6,
             13,
@@ -130,33 +132,35 @@ public class HistogramFunctionTest {
             })
         );
 
-        Assert.assertEquals(1L, inst.getDataset().get(Bucket.INFINITE_NEGATIVE).longValue());
+        Assertions.assertEquals(1L, inst.getDataset().get(Bucket.INFINITE_NEGATIVE).longValue());
     }
 
-    @Test(expected = IllegalArgumentException.class)
+    @Test
     public void testIncompatible() {
-        HistogramFunctionInst inst = new HistogramFunctionInst();
-        inst.accept(
-            MeterEntity.newService("service-test", Layer.GENERAL),
-            new BucketedValues(
-                BUCKETS, new long[] {
-                0,
-                4,
-                10,
-                10
-            })
-        );
-
-        inst.accept(
-            MeterEntity.newService("service-test", Layer.GENERAL),
-            new BucketedValues(
-                BUCKETS_2ND, new long[] {
-                1,
-                2,
-                3,
-                4
-            })
-        );
+        assertThrows(IllegalArgumentException.class, () -> {
+            HistogramFunctionInst inst = new HistogramFunctionInst();
+            inst.accept(
+                    MeterEntity.newService("service-test", Layer.GENERAL),
+                    new BucketedValues(
+                            BUCKETS, new long[]{
+                            0,
+                            4,
+                            10,
+                            10
+                    })
+            );
+
+            inst.accept(
+                    MeterEntity.newService("service-test", Layer.GENERAL),
+                    new BucketedValues(
+                            BUCKETS_2ND, new long[]{
+                            1,
+                            2,
+                            3,
+                            4
+                    })
+            );
+        });
     }
 
     @Test
@@ -176,9 +180,9 @@ public class HistogramFunctionTest {
         final HistogramFunctionInst inst2 = new HistogramFunctionInst();
         inst2.deserialize(inst.serialize().build());
 
-        Assert.assertEquals(inst, inst2);
+        Assertions.assertEquals(inst, inst2);
         // HistogramFunction equal doesn't include dataset.
-        Assert.assertEquals(inst.getDataset(), inst2.getDataset());
+        Assertions.assertEquals(inst.getDataset(), inst2.getDataset());
     }
 
     @Test
@@ -198,9 +202,9 @@ public class HistogramFunctionTest {
         final HistogramFunctionInst inst2 = new HistogramFunctionInst();
         inst2.deserialize(inst.serialize().build());
 
-        Assert.assertEquals(inst, inst2);
+        Assertions.assertEquals(inst, inst2);
         // HistogramFunction equal doesn't include dataset.
-        Assert.assertEquals(inst.getDataset(), inst2.getDataset());
+        Assertions.assertEquals(inst.getDataset(), inst2.getDataset());
     }
 
     @Test
@@ -227,9 +231,9 @@ public class HistogramFunctionTest {
 
         final HistogramFunction inst2 = (HistogramFunction) storageBuilder.storage2Entity(
             new HashMapConverter.ToEntity(map));
-        Assert.assertEquals(inst, inst2);
+        Assertions.assertEquals(inst, inst2);
         // HistogramFunction equal doesn't include dataset.
-        Assert.assertEquals(inst.getDataset(), inst2.getDataset());
+        Assertions.assertEquals(inst.getDataset(), inst2.getDataset());
     }
 
     private static class HistogramFunctionInst extends HistogramFunction {
diff --git a/oap-server/server-core/src/test/java/org/apache/skywalking/oap/server/core/analysis/meter/function/PercentileFunctionTest.java b/oap-server/server-core/src/test/java/org/apache/skywalking/oap/server/core/analysis/meter/function/PercentileFunctionTest.java
index ee3c60f957..69915d2897 100644
--- a/oap-server/server-core/src/test/java/org/apache/skywalking/oap/server/core/analysis/meter/function/PercentileFunctionTest.java
+++ b/oap-server/server-core/src/test/java/org/apache/skywalking/oap/server/core/analysis/meter/function/PercentileFunctionTest.java
@@ -18,7 +18,6 @@
 
 package org.apache.skywalking.oap.server.core.analysis.meter.function;
 
-import java.util.Map;
 import org.apache.skywalking.oap.server.core.analysis.Layer;
 import org.apache.skywalking.oap.server.core.analysis.meter.MeterEntity;
 import org.apache.skywalking.oap.server.core.analysis.metrics.DataTable;
@@ -27,10 +26,14 @@ import org.apache.skywalking.oap.server.core.config.NamingControl;
 import org.apache.skywalking.oap.server.core.config.group.EndpointNameGrouping;
 import org.apache.skywalking.oap.server.core.storage.type.HashMapConverter;
 import org.apache.skywalking.oap.server.core.storage.type.StorageBuilder;
-import org.junit.AfterClass;
-import org.junit.Assert;
-import org.junit.BeforeClass;
-import org.junit.Test;
+import org.junit.jupiter.api.AfterAll;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.BeforeAll;
+import org.junit.jupiter.api.Test;
+
+import java.util.Map;
+
+import static org.junit.jupiter.api.Assertions.assertThrows;
 
 public class PercentileFunctionTest {
     private static final long[] BUCKETS = new long[] {
@@ -52,13 +55,13 @@ public class PercentileFunctionTest {
         90
     };
 
-    @BeforeClass
+    @BeforeAll
     public static void setup() {
         MeterEntity.setNamingControl(
             new NamingControl(512, 512, 512, new EndpointNameGrouping()));
     }
 
-    @AfterClass
+    @AfterAll
     public static void tearDown() {
         MeterEntity.setNamingControl(null);
     }
@@ -109,46 +112,48 @@ public class PercentileFunctionTest {
          *     250, 80 <- P90
          * </pre>
          */
-        Assert.assertArrayEquals(new int[] {
+        Assertions.assertArrayEquals(new int[] {
             100,
             250
         }, values);
     }
 
-    @Test(expected = IllegalArgumentException.class)
+    @Test
     public void testIncompatible() {
-        PercentileFunctionInst inst = new PercentileFunctionInst();
-        inst.accept(
-            MeterEntity.newService("service-test", Layer.GENERAL),
-            new PercentileFunction.PercentileArgument(
-                new BucketedValues(
-                    BUCKETS,
-                    new long[] {
-                        10,
-                        20,
-                        30,
-                        40
-                    }
-                ),
-                RANKS
-            )
-        );
-
-        inst.accept(
-            MeterEntity.newService("service-test", Layer.GENERAL),
-            new PercentileFunction.PercentileArgument(
-                new BucketedValues(
-                    BUCKETS_2ND,
-                    new long[] {
-                        10,
-                        20,
-                        30,
-                        40
-                    }
-                ),
-                RANKS
-            )
-        );
+        assertThrows(IllegalArgumentException.class, () -> {
+            PercentileFunctionInst inst = new PercentileFunctionInst();
+            inst.accept(
+                    MeterEntity.newService("service-test", Layer.GENERAL),
+                    new PercentileFunction.PercentileArgument(
+                            new BucketedValues(
+                                    BUCKETS,
+                                    new long[]{
+                                            10,
+                                            20,
+                                            30,
+                                            40
+                                    }
+                            ),
+                            RANKS
+                    )
+            );
+
+            inst.accept(
+                    MeterEntity.newService("service-test", Layer.GENERAL),
+                    new PercentileFunction.PercentileArgument(
+                            new BucketedValues(
+                                    BUCKETS_2ND,
+                                    new long[]{
+                                            10,
+                                            20,
+                                            30,
+                                            40
+                                    }
+                            ),
+                            RANKS
+                    )
+            );
+        });
     }
 
     @Test
@@ -173,11 +178,11 @@ public class PercentileFunctionTest {
         PercentileFunctionInst inst2 = new PercentileFunctionInst();
         inst2.deserialize(inst.serialize().build());
 
-        Assert.assertEquals(inst, inst2);
+        Assertions.assertEquals(inst, inst2);
         // HistogramFunction equal doesn't include dataset.
-        Assert.assertEquals(inst.getDataset(), inst2.getDataset());
-        Assert.assertEquals(inst.getRanks(), inst2.getRanks());
-        Assert.assertEquals(0, inst2.getPercentileValues().size());
+        Assertions.assertEquals(inst.getDataset(), inst2.getDataset());
+        Assertions.assertEquals(inst.getRanks(), inst2.getRanks());
+        Assertions.assertEquals(0, inst2.getPercentileValues().size());
     }
 
     @Test
@@ -212,11 +217,11 @@ public class PercentileFunctionTest {
 
         final PercentileFunction inst2 = (PercentileFunction) storageBuilder.storage2Entity(
             new HashMapConverter.ToEntity(map));
-        Assert.assertEquals(inst, inst2);
+        Assertions.assertEquals(inst, inst2);
         // HistogramFunction equal doesn't include dataset.
-        Assert.assertEquals(inst.getDataset(), inst2.getDataset());
-        Assert.assertEquals(inst.getPercentileValues(), inst2.getPercentileValues());
-        Assert.assertEquals(inst.getRanks(), inst2.getRanks());
+        Assertions.assertEquals(inst.getDataset(), inst2.getDataset());
+        Assertions.assertEquals(inst.getPercentileValues(), inst2.getPercentileValues());
+        Assertions.assertEquals(inst.getRanks(), inst2.getRanks());
     }
 
     private static class PercentileFunctionInst extends PercentileFunction {
diff --git a/oap-server/server-core/src/test/java/org/apache/skywalking/oap/server/core/analysis/meter/function/avg/AvgHistogramFunctionTest.java b/oap-server/server-core/src/test/java/org/apache/skywalking/oap/server/core/analysis/meter/function/avg/AvgHistogramFunctionTest.java
index f0fa3841be..ddba0a4744 100644
--- a/oap-server/server-core/src/test/java/org/apache/skywalking/oap/server/core/analysis/meter/function/avg/AvgHistogramFunctionTest.java
+++ b/oap-server/server-core/src/test/java/org/apache/skywalking/oap/server/core/analysis/meter/function/avg/AvgHistogramFunctionTest.java
@@ -18,8 +18,6 @@
 
 package org.apache.skywalking.oap.server.core.analysis.meter.function.avg;
 
-import java.util.Map;
-import java.util.stream.IntStream;
 import org.apache.skywalking.oap.server.core.analysis.Layer;
 import org.apache.skywalking.oap.server.core.analysis.meter.MeterEntity;
 import org.apache.skywalking.oap.server.core.analysis.meter.function.AcceptableValue;
@@ -31,10 +29,13 @@ import org.apache.skywalking.oap.server.core.query.type.Bucket;
 import org.apache.skywalking.oap.server.core.query.type.HeatMap;
 import org.apache.skywalking.oap.server.core.storage.type.HashMapConverter;
 import org.apache.skywalking.oap.server.core.storage.type.StorageBuilder;
-import org.junit.AfterClass;
-import org.junit.Assert;
-import org.junit.BeforeClass;
-import org.junit.Test;
+import org.junit.jupiter.api.AfterAll;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.BeforeAll;
+import org.junit.jupiter.api.Test;
+
+import java.util.Map;
+import java.util.stream.IntStream;
 
 import static org.apache.skywalking.oap.server.core.analysis.meter.function.avg.AvgHistogramFunction.DATASET;
 import static org.apache.skywalking.oap.server.core.analysis.meter.function.avg.AvgLabeledFunction.COUNT;
@@ -55,13 +56,13 @@ public class AvgHistogramFunctionTest {
         10
     };
 
-    @BeforeClass
+    @BeforeAll
     public static void setup() {
         MeterEntity.setNamingControl(
             new NamingControl(512, 512, 512, new EndpointNameGrouping()));
     }
 
-    @AfterClass
+    @AfterAll
     public static void tearDown() {
         MeterEntity.setNamingControl(null);
     }
@@ -95,7 +96,7 @@ public class AvgHistogramFunctionTest {
         final int[] results = inst.getDataset().sortedValues(new HeatMap.KeyComparator(true)).stream()
                                   .flatMapToInt(l -> IntStream.of(l.intValue()))
                                   .toArray();
-        Assert.assertArrayEquals(new int[] {
+        Assertions.assertArrayEquals(new int[] {
             1,
             3,
             6,
@@ -130,7 +131,7 @@ public class AvgHistogramFunctionTest {
 
         inst.calculate();
 
-        Assert.assertEquals(1L, inst.getDataset().get(Bucket.INFINITE_NEGATIVE).longValue());
+        Assertions.assertEquals(1L, inst.getDataset().get(Bucket.INFINITE_NEGATIVE).longValue());
     }
 
     @Test
@@ -151,9 +152,9 @@ public class AvgHistogramFunctionTest {
         final HistogramFunctionInst inst2 = new HistogramFunctionInst();
         inst2.deserialize(inst.serialize().build());
 
-        Assert.assertEquals(inst, inst2);
+        Assertions.assertEquals(inst, inst2);
         // HistogramFunction equal doesn't include dataset.
-        Assert.assertEquals(inst.getDataset(), inst2.getDataset());
+        Assertions.assertEquals(inst.getDataset(), inst2.getDataset());
     }
 
     @Test
@@ -173,9 +174,9 @@ public class AvgHistogramFunctionTest {
         final HistogramFunctionInst inst2 = new HistogramFunctionInst();
         inst2.deserialize(inst.serialize().build());
 
-        Assert.assertEquals(inst, inst2);
+        Assertions.assertEquals(inst, inst2);
         // HistogramFunction equal doesn't include dataset.
-        Assert.assertEquals(inst.getDataset(), inst2.getDataset());
+        Assertions.assertEquals(inst.getDataset(), inst2.getDataset());
     }
 
     @Test
@@ -205,9 +206,9 @@ public class AvgHistogramFunctionTest {
 
         final AvgHistogramFunction inst2 = (AvgHistogramFunction) storageBuilder.storage2Entity(
             new HashMapConverter.ToEntity(map));
-        Assert.assertEquals(inst, inst2);
+        Assertions.assertEquals(inst, inst2);
         // HistogramFunction equal doesn't include dataset.
-        Assert.assertEquals(inst.getDataset(), inst2.getDataset());
+        Assertions.assertEquals(inst.getDataset(), inst2.getDataset());
     }
 
     @Test
@@ -256,7 +257,7 @@ public class AvgHistogramFunctionTest {
         int[] results = inst.getDataset().sortedValues(new HeatMap.KeyComparator(true)).stream()
                             .flatMapToInt(l -> IntStream.of(l.intValue()))
                             .toArray();
-        Assert.assertArrayEquals(new int[] {
+        Assertions.assertArrayEquals(new int[] {
             1,
             3,
             6,
diff --git a/oap-server/server-core/src/test/java/org/apache/skywalking/oap/server/core/analysis/meter/function/avg/AvgHistogramPercentileFunctionTest.java b/oap-server/server-core/src/test/java/org/apache/skywalking/oap/server/core/analysis/meter/function/avg/AvgHistogramPercentileFunctionTest.java
index 180e39d80c..c1067563d7 100644
--- a/oap-server/server-core/src/test/java/org/apache/skywalking/oap/server/core/analysis/meter/function/avg/AvgHistogramPercentileFunctionTest.java
+++ b/oap-server/server-core/src/test/java/org/apache/skywalking/oap/server/core/analysis/meter/function/avg/AvgHistogramPercentileFunctionTest.java
@@ -18,7 +18,6 @@
 
 package org.apache.skywalking.oap.server.core.analysis.meter.function.avg;
 
-import java.util.Map;
 import org.apache.skywalking.oap.server.core.analysis.Layer;
 import org.apache.skywalking.oap.server.core.analysis.meter.MeterEntity;
 import org.apache.skywalking.oap.server.core.analysis.meter.function.AcceptableValue;
@@ -30,12 +29,14 @@ import org.apache.skywalking.oap.server.core.config.NamingControl;
 import org.apache.skywalking.oap.server.core.config.group.EndpointNameGrouping;
 import org.apache.skywalking.oap.server.core.storage.type.HashMapConverter;
 import org.apache.skywalking.oap.server.core.storage.type.StorageBuilder;
-import org.junit.AfterClass;
-import org.junit.Assert;
-import org.junit.BeforeClass;
-import org.junit.Test;
+import org.junit.jupiter.api.AfterAll;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.BeforeAll;
+import org.junit.jupiter.api.Test;
+
+import java.util.Map;
 
-import static org.junit.Assert.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 public class AvgHistogramPercentileFunctionTest {
 
@@ -51,13 +52,13 @@ public class AvgHistogramPercentileFunctionTest {
         90
     };
 
-    @BeforeClass
+    @BeforeAll
     public static void setup() {
         MeterEntity.setNamingControl(
             new NamingControl(512, 512, 512, new EndpointNameGrouping()));
     }
 
-    @AfterClass
+    @AfterAll
     public static void tearDown() {
         MeterEntity.setNamingControl(null);
     }
@@ -108,7 +109,7 @@ public class AvgHistogramPercentileFunctionTest {
          *     250, 40 <- P90
          * </pre>
          */
-        Assert.assertArrayEquals(new int[] {
+        Assertions.assertArrayEquals(new int[] {
             100,
             250
         }, values);
diff --git a/oap-server/server-core/src/test/java/org/apache/skywalking/oap/server/core/analysis/meter/function/avg/AvgLabeledFunctionTest.java b/oap-server/server-core/src/test/java/org/apache/skywalking/oap/server/core/analysis/meter/function/avg/AvgLabeledFunctionTest.java
index 3a678eaac6..df94f118c9 100644
--- a/oap-server/server-core/src/test/java/org/apache/skywalking/oap/server/core/analysis/meter/function/avg/AvgLabeledFunctionTest.java
+++ b/oap-server/server-core/src/test/java/org/apache/skywalking/oap/server/core/analysis/meter/function/avg/AvgLabeledFunctionTest.java
@@ -19,9 +19,6 @@
 package org.apache.skywalking.oap.server.core.analysis.meter.function.avg;
 
 import io.vavr.collection.Stream;
-import java.util.Comparator;
-import java.util.List;
-import java.util.Map;
 import org.apache.skywalking.oap.server.core.analysis.Layer;
 import org.apache.skywalking.oap.server.core.analysis.meter.MeterEntity;
 import org.apache.skywalking.oap.server.core.analysis.metrics.DataTable;
@@ -29,33 +26,36 @@ import org.apache.skywalking.oap.server.core.config.NamingControl;
 import org.apache.skywalking.oap.server.core.config.group.EndpointNameGrouping;
 import org.apache.skywalking.oap.server.core.storage.type.HashMapConverter;
 import org.apache.skywalking.oap.server.core.storage.type.StorageBuilder;
-import org.junit.AfterClass;
-import org.junit.BeforeClass;
-import org.junit.Test;
-import org.junit.runner.RunWith;
+import org.junit.jupiter.api.AfterAll;
+import org.junit.jupiter.api.BeforeAll;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.extension.ExtendWith;
 import org.mockito.Mockito;
 import org.mockito.Spy;
-import org.mockito.junit.MockitoJUnitRunner;
+import org.mockito.junit.jupiter.MockitoExtension;
+
+import java.util.Comparator;
+import java.util.List;
+import java.util.Map;
 
 import static java.util.Arrays.asList;
 import static org.apache.skywalking.oap.server.core.analysis.meter.function.avg.AvgLabeledFunction.COUNT;
 import static org.apache.skywalking.oap.server.core.analysis.meter.function.avg.AvgLabeledFunction.SUMMATION;
 import static org.apache.skywalking.oap.server.core.analysis.meter.function.avg.AvgLabeledFunction.VALUE;
-import static org.hamcrest.core.Is.is;
-import static org.junit.Assert.assertThat;
+import static org.assertj.core.api.AssertionsForClassTypes.assertThat;
 
-@RunWith(MockitoJUnitRunner.class)
+@ExtendWith(MockitoExtension.class)
 public class AvgLabeledFunctionTest {
     @Spy
     private AvgLabeledFunction function;
 
-    @BeforeClass
+    @BeforeAll
     public static void setup() {
         MeterEntity.setNamingControl(
             new NamingControl(512, 512, 512, new EndpointNameGrouping()));
     }
 
-    @AfterClass
+    @AfterAll
     public static void tearDown() {
         MeterEntity.setNamingControl(null);
     }
@@ -78,8 +78,8 @@ public class AvgLabeledFunctionTest {
             MeterEntity.newService("request_count", Layer.GENERAL), build(asList("200", "500"), asList(2L, 3L)));
         function.calculate();
 
-        assertThat(function.getValue().sortedKeys(Comparator.naturalOrder()), is(asList("200", "404", "500")));
-        assertThat(function.getValue().sortedValues(Comparator.naturalOrder()), is(asList(6L, 2L, 3L)));
+        assertThat(function.getValue().sortedKeys(Comparator.naturalOrder())).isEqualTo(asList("200", "404", "500"));
+        assertThat(function.getValue().sortedValues(Comparator.naturalOrder())).isEqualTo(asList(6L, 2L, 3L));
     }
 
     @Test
@@ -88,8 +88,8 @@ public class AvgLabeledFunctionTest {
             MeterEntity.newService("request_count", Layer.GENERAL), build(asList("200", "404"), asList(10L, 2L)));
         AvgLabeledFunction function2 = Mockito.spy(AvgLabeledFunction.class);
         function2.deserialize(function.serialize().build());
-        assertThat(function2.getEntityId(), is(function.getEntityId()));
-        assertThat(function2.getTimeBucket(), is(function.getTimeBucket()));
+        assertThat(function2.getEntityId()).isEqualTo(function.getEntityId());
+        assertThat(function2.getTimeBucket()).isEqualTo(function.getTimeBucket());
     }
 
     @Test
@@ -107,7 +107,7 @@ public class AvgLabeledFunctionTest {
         map.put(VALUE, ((DataTable) map.get(VALUE)).toStorageData());
 
         AvgLabeledFunction function2 = storageBuilder.storage2Entity(new HashMapConverter.ToEntity(map));
-        assertThat(function2.getValue(), is(function.getValue()));
+        assertThat(function2.getValue()).isEqualTo(function.getValue());
     }
 
     private DataTable build(List<String> keys, List<Long> values) {
@@ -123,15 +123,15 @@ public class AvgLabeledFunctionTest {
 
     private void assertCount(List<String> expectedKeys, List<Long> expectedCount) {
         List<String> keys = function.getCount().sortedKeys(Comparator.comparingInt(Integer::parseInt));
-        assertThat(keys, is(expectedKeys));
+        assertThat(keys).isEqualTo(expectedKeys);
         List<Long> values = function.getCount().sortedValues(Comparator.comparingLong(Long::parseLong));
-        assertThat(values, is(expectedCount));
+        assertThat(values).isEqualTo(expectedCount);
     }
 
     private void assertSummation(List<String> expectedKeys, List<Long> expectedValues) {
         List<String> keys = function.getSummation().sortedKeys(Comparator.comparingInt(Integer::parseInt));
-        assertThat(keys, is(expectedKeys));
+        assertThat(keys).isEqualTo(expectedKeys);
         List<Long> values = function.getSummation().sortedValues(Comparator.comparingLong(Long::parseLong));
-        assertThat(values, is(expectedValues));
+        assertThat(values).isEqualTo(expectedValues);
     }
 }
diff --git a/oap-server/server-core/src/test/java/org/apache/skywalking/oap/server/core/analysis/meter/function/latest/LatestFunctionTest.java b/oap-server/server-core/src/test/java/org/apache/skywalking/oap/server/core/analysis/meter/function/latest/LatestFunctionTest.java
index 2bd9162d0c..5127e6bd05 100644
--- a/oap-server/server-core/src/test/java/org/apache/skywalking/oap/server/core/analysis/meter/function/latest/LatestFunctionTest.java
+++ b/oap-server/server-core/src/test/java/org/apache/skywalking/oap/server/core/analysis/meter/function/latest/LatestFunctionTest.java
@@ -18,37 +18,37 @@
 
 package org.apache.skywalking.oap.server.core.analysis.meter.function.latest;
 
-import java.util.Map;
 import org.apache.skywalking.oap.server.core.analysis.Layer;
 import org.apache.skywalking.oap.server.core.analysis.meter.MeterEntity;
 import org.apache.skywalking.oap.server.core.config.NamingControl;
 import org.apache.skywalking.oap.server.core.config.group.EndpointNameGrouping;
 import org.apache.skywalking.oap.server.core.storage.type.HashMapConverter;
 import org.apache.skywalking.oap.server.core.storage.type.StorageBuilder;
-import org.junit.AfterClass;
-import org.junit.BeforeClass;
-import org.junit.Test;
-import org.junit.runner.RunWith;
+import org.junit.jupiter.api.AfterAll;
+import org.junit.jupiter.api.BeforeAll;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.extension.ExtendWith;
 import org.mockito.Mockito;
 import org.mockito.Spy;
-import org.mockito.runners.MockitoJUnitRunner;
+import org.mockito.junit.jupiter.MockitoExtension;
+
+import java.util.Map;
 
-import static org.hamcrest.core.Is.is;
-import static org.junit.Assert.assertThat;
+import static org.assertj.core.api.AssertionsForClassTypes.assertThat;
 
-@RunWith(MockitoJUnitRunner.class)
+@ExtendWith(MockitoExtension.class)
 public class LatestFunctionTest {
 
     @Spy
     private LatestFunction function;
 
-    @BeforeClass
+    @BeforeAll
     public static void setup() {
         MeterEntity.setNamingControl(
             new NamingControl(512, 512, 512, new EndpointNameGrouping()));
     }
 
-    @AfterClass
+    @AfterAll
     public static void tearDown() {
         MeterEntity.setNamingControl(null);
     }
@@ -57,10 +57,10 @@ public class LatestFunctionTest {
     public void testAccept() {
         long time = 1597113318673L;
         function.accept(MeterEntity.newService("latest_sync_time", Layer.GENERAL), time);
-        assertThat(function.getValue(), is(time));
+        assertThat(function.getValue()).isEqualTo(time);
         time = 1597113447737L;
         function.accept(MeterEntity.newService("latest_sync_time", Layer.GENERAL), time);
-        assertThat(function.getValue(), is(time));
+        assertThat(function.getValue()).isEqualTo(time);
     }
 
     @Test
@@ -70,7 +70,7 @@ public class LatestFunctionTest {
         function.accept(MeterEntity.newService("latest_sync_time", Layer.GENERAL), time1);
         function.accept(MeterEntity.newService("latest_sync_time", Layer.GENERAL), time2);
         function.calculate();
-        assertThat(function.getValue(), is(time2));
+        assertThat(function.getValue()).isEqualTo(time2);
     }
 
     @Test
@@ -79,8 +79,8 @@ public class LatestFunctionTest {
         function.accept(MeterEntity.newService("latest_sync_time", Layer.GENERAL), time);
         LatestFunction function2 = Mockito.spy(LatestFunction.class);
         function2.deserialize(function.serialize().build());
-        assertThat(function2.getEntityId(), is(function.getEntityId()));
-        assertThat(function2.getTimeBucket(), is(function.getTimeBucket()));
+        assertThat(function2.getEntityId()).isEqualTo(function.getEntityId());
+        assertThat(function2.getTimeBucket()).isEqualTo(function.getTimeBucket());
     }
 
     @Test
@@ -96,6 +96,6 @@ public class LatestFunctionTest {
         map.put(LatestFunction.VALUE, map.get(LatestFunction.VALUE));
 
         LatestFunction function2 = storageBuilder.storage2Entity(new HashMapConverter.ToEntity(map));
-        assertThat(function2.getValue(), is(function.getValue()));
+        assertThat(function2.getValue()).isEqualTo(function.getValue());
     }
 }
diff --git a/oap-server/server-core/src/test/java/org/apache/skywalking/oap/server/core/analysis/meter/function/sum/SumHistogramPercentileFunctionTest.java b/oap-server/server-core/src/test/java/org/apache/skywalking/oap/server/core/analysis/meter/function/sum/SumHistogramPercentileFunctionTest.java
index 75dbf407c2..d695e796fc 100644
--- a/oap-server/server-core/src/test/java/org/apache/skywalking/oap/server/core/analysis/meter/function/sum/SumHistogramPercentileFunctionTest.java
+++ b/oap-server/server-core/src/test/java/org/apache/skywalking/oap/server/core/analysis/meter/function/sum/SumHistogramPercentileFunctionTest.java
@@ -29,14 +29,14 @@ import org.apache.skywalking.oap.server.core.config.NamingControl;
 import org.apache.skywalking.oap.server.core.config.group.EndpointNameGrouping;
 import org.apache.skywalking.oap.server.core.storage.type.HashMapConverter;
 import org.apache.skywalking.oap.server.core.storage.type.StorageBuilder;
-import org.junit.AfterClass;
-import org.junit.Assert;
-import org.junit.BeforeClass;
-import org.junit.Test;
+import org.junit.jupiter.api.AfterAll;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.BeforeAll;
+import org.junit.jupiter.api.Test;
 
 import java.util.Map;
 
-import static org.junit.Assert.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 public class SumHistogramPercentileFunctionTest {
 
@@ -52,13 +52,13 @@ public class SumHistogramPercentileFunctionTest {
         90
     };
 
-    @BeforeClass
+    @BeforeAll
     public static void setup() {
         MeterEntity.setNamingControl(
             new NamingControl(512, 512, 512, new EndpointNameGrouping()));
     }
 
-    @AfterClass
+    @AfterAll
     public static void tearDown() {
         MeterEntity.setNamingControl(null);
     }
@@ -109,7 +109,7 @@ public class SumHistogramPercentileFunctionTest {
          *     250, 80 <- P90
          * </pre>
          */
-        Assert.assertArrayEquals(new int[] {
+        Assertions.assertArrayEquals(new int[] {
             100,
             250
         }, values);
@@ -251,4 +251,4 @@ public class SumHistogramPercentileFunctionTest {
             return new SumHistogramPercentileFunctionTest.PercentileFunctionInst();
         }
     }
-}
\ No newline at end of file
+}
diff --git a/oap-server/server-core/src/test/java/org/apache/skywalking/oap/server/core/analysis/meter/function/sumpermin/SumPerMinFunctionTest.java b/oap-server/server-core/src/test/java/org/apache/skywalking/oap/server/core/analysis/meter/function/sumpermin/SumPerMinFunctionTest.java
index 20721c4a87..b532d6945b 100644
--- a/oap-server/server-core/src/test/java/org/apache/skywalking/oap/server/core/analysis/meter/function/sumpermin/SumPerMinFunctionTest.java
+++ b/oap-server/server-core/src/test/java/org/apache/skywalking/oap/server/core/analysis/meter/function/sumpermin/SumPerMinFunctionTest.java
@@ -27,37 +27,36 @@ import org.apache.skywalking.oap.server.core.config.NamingControl;
 import org.apache.skywalking.oap.server.core.config.group.EndpointNameGrouping;
 import org.apache.skywalking.oap.server.core.storage.type.HashMapConverter;
 import org.apache.skywalking.oap.server.core.storage.type.StorageBuilder;
-import org.junit.AfterClass;
-import org.junit.Before;
-import org.junit.BeforeClass;
-import org.junit.Test;
-import org.junit.runner.RunWith;
+import org.junit.jupiter.api.AfterAll;
+import org.junit.jupiter.api.BeforeAll;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.extension.ExtendWith;
 import org.mockito.Mockito;
-import org.mockito.runners.MockitoJUnitRunner;
+import org.mockito.junit.jupiter.MockitoExtension;
 
 import java.util.Map;
 
-import static org.hamcrest.core.Is.is;
-import static org.junit.Assert.assertThat;
+import static org.assertj.core.api.AssertionsForClassTypes.assertThat;
 
-@RunWith(MockitoJUnitRunner.class)
+@ExtendWith(MockitoExtension.class)
 public class SumPerMinFunctionTest {
 
     private SumPerMinFunctionInst function;
 
-    @BeforeClass
+    @BeforeAll
     public static void setup() {
         MeterEntity.setNamingControl(
             new NamingControl(512, 512, 512, new EndpointNameGrouping()));
     }
 
-    @Before
+    @BeforeEach
     public void before() {
         function = new SumPerMinFunctionInst();
         function.setTimeBucket(TimeBucket.getMinuteTimeBucket(System.currentTimeMillis()));
     }
 
-    @AfterClass
+    @AfterAll
     public static void tearDown() {
         MeterEntity.setNamingControl(null);
     }
@@ -67,11 +66,11 @@ public class SumPerMinFunctionTest {
         long time1 = 1597113318673L;
         function.accept(MeterEntity.newService("sum_sync_time", Layer.GENERAL), time1);
         function.calculate();
-        assertThat(function.getValue(), is(time1));
+        assertThat(function.getValue()).isEqualTo(time1);
         long time2 = 1597113447737L;
         function.accept(MeterEntity.newService("sum_sync_time", Layer.GENERAL), time2);
         function.calculate();
-        assertThat(function.getValue(), is(time1 + time2));
+        assertThat(function.getValue()).isEqualTo(time1 + time2);
     }
 
     @Test
@@ -81,7 +80,7 @@ public class SumPerMinFunctionTest {
         function.accept(MeterEntity.newService("sum_sync_time", Layer.GENERAL), time1);
         function.accept(MeterEntity.newService("sum_sync_time", Layer.GENERAL), time2);
         function.calculate();
-        assertThat(function.getValue(), is(time1 + time2));
+        assertThat(function.getValue()).isEqualTo(time1 + time2);
     }
 
     @Test
@@ -94,7 +93,7 @@ public class SumPerMinFunctionTest {
         function.calculate();
         final SumPerMinFunction hourFunction = (SumPerMinFunction) function.toHour();
         hourFunction.calculate();
-        assertThat(hourFunction.getValue(), is((time1 + time2) / 60));
+        assertThat(hourFunction.getValue()).isEqualTo((time1 + time2) / 60);
     }
 
     @Test
@@ -103,8 +102,8 @@ public class SumPerMinFunctionTest {
         function.accept(MeterEntity.newService("sum_sync_time", Layer.GENERAL), time);
         LatestFunction function2 = Mockito.spy(LatestFunction.class);
         function2.deserialize(function.serialize().build());
-        assertThat(function2.getEntityId(), is(function.getEntityId()));
-        assertThat(function2.getTimeBucket(), is(function.getTimeBucket()));
+        assertThat(function2.getEntityId()).isEqualTo(function.getEntityId());
+        assertThat(function2.getTimeBucket()).isEqualTo(function.getTimeBucket());
     }
 
     @Test
@@ -120,7 +119,7 @@ public class SumPerMinFunctionTest {
         map.put(SumPerMinFunction.VALUE, map.get(SumPerMinFunction.VALUE));
 
         SumPerMinFunction function2 = storageBuilder.storage2Entity(new HashMapConverter.ToEntity(map));
-        assertThat(function2.getValue(), is(function.getValue()));
+        assertThat(function2.getValue()).isEqualTo(function.getValue());
     }
 
     private static class SumPerMinFunctionInst extends SumPerMinFunction {
@@ -129,4 +128,4 @@ public class SumPerMinFunctionTest {
             return new SumPerMinFunctionTest.SumPerMinFunctionInst();
         }
     }
-}
\ No newline at end of file
+}
diff --git a/oap-server/server-core/src/test/java/org/apache/skywalking/oap/server/core/analysis/meter/function/sumpermin/SumPerMinLabeledFunctionTest.java b/oap-server/server-core/src/test/java/org/apache/skywalking/oap/server/core/analysis/meter/function/sumpermin/SumPerMinLabeledFunctionTest.java
index 45c8b7920d..125700b88f 100644
--- a/oap-server/server-core/src/test/java/org/apache/skywalking/oap/server/core/analysis/meter/function/sumpermin/SumPerMinLabeledFunctionTest.java
+++ b/oap-server/server-core/src/test/java/org/apache/skywalking/oap/server/core/analysis/meter/function/sumpermin/SumPerMinLabeledFunctionTest.java
@@ -27,33 +27,32 @@ import org.apache.skywalking.oap.server.core.config.NamingControl;
 import org.apache.skywalking.oap.server.core.config.group.EndpointNameGrouping;
 import org.apache.skywalking.oap.server.core.storage.type.HashMapConverter;
 import org.apache.skywalking.oap.server.core.storage.type.StorageBuilder;
-import org.junit.AfterClass;
-import org.junit.Before;
-import org.junit.BeforeClass;
-import org.junit.Test;
-import org.junit.runner.RunWith;
+import org.junit.jupiter.api.AfterAll;
+import org.junit.jupiter.api.BeforeAll;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.extension.ExtendWith;
 import org.mockito.Mockito;
-import org.mockito.runners.MockitoJUnitRunner;
+import org.mockito.junit.jupiter.MockitoExtension;
 
 import java.util.Map;
 
-import static org.hamcrest.core.Is.is;
-import static org.junit.Assert.assertThat;
+import static org.assertj.core.api.AssertionsForClassTypes.assertThat;
 
-@RunWith(MockitoJUnitRunner.class)
+@ExtendWith(MockitoExtension.class)
 public class SumPerMinLabeledFunctionTest {
 
     private SumPerMinLabeledFunctionInst function;
     private DataTable table1;
     private DataTable table2;
 
-    @BeforeClass
+    @BeforeAll
     public static void setup() {
         MeterEntity.setNamingControl(
             new NamingControl(512, 512, 512, new EndpointNameGrouping()));
     }
 
-    @Before
+    @BeforeEach
     public void before() {
         function = new SumPerMinLabeledFunctionInst();
         function.setTimeBucket(TimeBucket.getMinuteTimeBucket(System.currentTimeMillis()));
@@ -68,7 +67,7 @@ public class SumPerMinLabeledFunctionTest {
         table2.put("400", 77L);
     }
 
-    @AfterClass
+    @AfterAll
     public static void tearDown() {
         MeterEntity.setNamingControl(null);
     }
@@ -77,10 +76,10 @@ public class SumPerMinLabeledFunctionTest {
     public void testAccept() {
         function.accept(MeterEntity.newService("sum_sync_time", Layer.GENERAL), table1);
         function.calculate();
-        assertThat(function.getValue(), is(table1));
+        assertThat(function.getValue()).isEqualTo(table1);
         function.accept(MeterEntity.newService("sum_sync_time", Layer.GENERAL), table2);
         function.calculate();
-        assertThat(function.getValue(), is(table1.append(table2)));
+        assertThat(function.getValue()).isEqualTo(table1.append(table2));
     }
 
     @Test
@@ -88,7 +87,7 @@ public class SumPerMinLabeledFunctionTest {
         function.accept(MeterEntity.newService("sum_sync_time", Layer.GENERAL), table1);
         function.accept(MeterEntity.newService("sum_sync_time", Layer.GENERAL), table2);
         function.calculate();
-        assertThat(function.getValue(), is(table1.append(table2)));
+        assertThat(function.getValue()).isEqualTo(table1.append(table2));
     }
 
     @Test
@@ -105,7 +104,7 @@ public class SumPerMinLabeledFunctionTest {
         for (String key : result.keys()) {
             result.put(key, result.get(key) / 60);
         }
-        assertThat(hourFunction.getValue(), is(result));
+        assertThat(hourFunction.getValue()).isEqualTo(result);
     }
 
     @Test
@@ -113,8 +112,8 @@ public class SumPerMinLabeledFunctionTest {
         function.accept(MeterEntity.newService("sum_sync_time", Layer.GENERAL), table1);
         SumPerMinLabeledFunction function2 = Mockito.spy(SumPerMinLabeledFunction.class);
         function2.deserialize(function.serialize().build());
-        assertThat(function2.getEntityId(), is(function.getEntityId()));
-        assertThat(function2.getTimeBucket(), is(function.getTimeBucket()));
+        assertThat(function2.getEntityId()).isEqualTo(function.getEntityId());
+        assertThat(function2.getTimeBucket()).isEqualTo(function.getTimeBucket());
     }
 
     @Test
@@ -130,7 +129,7 @@ public class SumPerMinLabeledFunctionTest {
         map.put(SumPerMinLabeledFunction.TOTAL, ((DataTable) map.get(SumPerMinLabeledFunction.TOTAL)).toStorageData());
 
         SumPerMinLabeledFunction function2 = storageBuilder.storage2Entity(new HashMapConverter.ToEntity(map));
-        assertThat(function2.getValue(), is(function.getValue()));
+        assertThat(function2.getValue()).isEqualTo(function.getValue());
     }
 
     private static class SumPerMinLabeledFunctionInst extends SumPerMinLabeledFunction {
@@ -139,4 +138,4 @@ public class SumPerMinLabeledFunctionTest {
             return new SumPerMinLabeledFunctionInst();
         }
     }
-}
\ No newline at end of file
+}
diff --git a/oap-server/server-core/src/test/java/org/apache/skywalking/oap/server/core/analysis/metrics/ApdexMetricsTest.java b/oap-server/server-core/src/test/java/org/apache/skywalking/oap/server/core/analysis/metrics/ApdexMetricsTest.java
index 0fb369eafb..ed59d1a579 100644
--- a/oap-server/server-core/src/test/java/org/apache/skywalking/oap/server/core/analysis/metrics/ApdexMetricsTest.java
+++ b/oap-server/server-core/src/test/java/org/apache/skywalking/oap/server/core/analysis/metrics/ApdexMetricsTest.java
@@ -20,15 +20,14 @@ package org.apache.skywalking.oap.server.core.analysis.metrics;
 
 import org.apache.skywalking.oap.server.core.remote.grpc.proto.RemoteData;
 import org.apache.skywalking.oap.server.core.storage.StorageID;
-import org.junit.Before;
-import org.junit.Test;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
 
-import static org.hamcrest.core.Is.is;
-import static org.junit.Assert.assertThat;
+import static org.assertj.core.api.AssertionsForClassTypes.assertThat;
 
 public class ApdexMetricsTest {
 
-    @Before
+    @BeforeEach
     public void setUp() {
         ApdexMetrics.setDICT(name -> name.equals("foo") ? 500 : 1000);
     }
@@ -38,47 +37,47 @@ public class ApdexMetricsTest {
         ApdexMetrics apdex = new ApdexMetricsImpl();
         apdex.combine(200, "foo", true);
         apdex.calculate();
-        assertThat(apdex.getValue(), is(10000));
+        assertThat(apdex.getValue()).isEqualTo(10000);
 
         apdex = new ApdexMetricsImpl();
         apdex.combine(1000, "foo", true);
         apdex.calculate();
-        assertThat(apdex.getValue(), is(5000));
+        assertThat(apdex.getValue()).isEqualTo(5000);
 
         apdex = new ApdexMetricsImpl();
         apdex.combine(2000, "foo", true);
         apdex.calculate();
-        assertThat(apdex.getValue(), is(5000));
+        assertThat(apdex.getValue()).isEqualTo(5000);
 
         apdex = new ApdexMetricsImpl();
         apdex.combine(200, "foo", true);
         apdex.combine(300, "bar", true);
         apdex.calculate();
-        assertThat(apdex.getValue(), is(10000));
+        assertThat(apdex.getValue()).isEqualTo(10000);
 
         apdex = new ApdexMetricsImpl();
         apdex.combine(200, "foo", true);
         apdex.combine(1500, "bar", true);
         apdex.calculate();
-        assertThat(apdex.getValue(), is(7500));
+        assertThat(apdex.getValue()).isEqualTo(7500);
 
         apdex = new ApdexMetricsImpl();
         apdex.combine(200, "foo", true);
         apdex.combine(300, "bar", false);
         apdex.calculate();
-        assertThat(apdex.getValue(), is(5000));
+        assertThat(apdex.getValue()).isEqualTo(5000);
 
         apdex = new ApdexMetricsImpl();
         apdex.combine(200, "foo", true);
         apdex.combine(1500, "bar", false);
         apdex.calculate();
-        assertThat(apdex.getValue(), is(5000));
+        assertThat(apdex.getValue()).isEqualTo(5000);
 
         apdex = new ApdexMetricsImpl();
         apdex.combine(200, "foo", true);
         apdex.combine(5000, "bar", true);
         apdex.calculate();
-        assertThat(apdex.getValue(), is(5000));
+        assertThat(apdex.getValue()).isEqualTo(5000);
     }
 
     @Test
@@ -99,7 +98,7 @@ public class ApdexMetricsTest {
 
         apdex1.combine(apdex2);
         apdex1.calculate();
-        assertThat(apdex1.getValue(), is(6500));
+        assertThat(apdex1.getValue()).isEqualTo(6500);
     }
 
     public class ApdexMetricsImpl extends ApdexMetrics {
diff --git a/oap-server/server-core/src/test/java/org/apache/skywalking/oap/server/core/analysis/metrics/CountMetricsTest.java b/oap-server/server-core/src/test/java/org/apache/skywalking/oap/server/core/analysis/metrics/CountMetricsTest.java
index 47837b3533..f703a5cc29 100644
--- a/oap-server/server-core/src/test/java/org/apache/skywalking/oap/server/core/analysis/metrics/CountMetricsTest.java
+++ b/oap-server/server-core/src/test/java/org/apache/skywalking/oap/server/core/analysis/metrics/CountMetricsTest.java
@@ -20,8 +20,8 @@ package org.apache.skywalking.oap.server.core.analysis.metrics;
 
 import org.apache.skywalking.oap.server.core.remote.grpc.proto.RemoteData;
 import org.apache.skywalking.oap.server.core.storage.StorageID;
-import org.junit.Assert;
-import org.junit.Test;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Test;
 
 public class CountMetricsTest {
     @Test
@@ -33,7 +33,7 @@ public class CountMetricsTest {
 
         impl.calculate();
 
-        Assert.assertEquals(18, impl.getValue());
+        Assertions.assertEquals(18, impl.getValue());
     }
 
     @Test
@@ -52,7 +52,7 @@ public class CountMetricsTest {
 
         impl.calculate();
 
-        Assert.assertEquals(36, impl.getValue());
+        Assertions.assertEquals(36, impl.getValue());
     }
 
     public class CountMetricsImpl extends CountMetrics {
diff --git a/oap-server/server-core/src/test/java/org/apache/skywalking/oap/server/core/analysis/metrics/DataTableTestCase.java b/oap-server/server-core/src/test/java/org/apache/skywalking/oap/server/core/analysis/metrics/DataTableTestCase.java
index ea370f9955..6ae524aa6a 100644
--- a/oap-server/server-core/src/test/java/org/apache/skywalking/oap/server/core/analysis/metrics/DataTableTestCase.java
+++ b/oap-server/server-core/src/test/java/org/apache/skywalking/oap/server/core/analysis/metrics/DataTableTestCase.java
@@ -17,15 +17,16 @@
 
 package org.apache.skywalking.oap.server.core.analysis.metrics;
 
-import org.junit.Assert;
-import org.junit.Before;
-import org.junit.Test;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 public class DataTableTestCase {
 
     private DataTable dataTable;
 
-    @Before
+    @BeforeEach
     public void init() {
         dataTable = new DataTable();
         dataTable.valueAccumulation("5", 500L);
@@ -37,7 +38,7 @@ public class DataTableTestCase {
 
     @Test
     public void toStorageData() {
-        Assert.assertEquals("1,100|2,200|5,500|6,600|7,700", dataTable.toStorageData());
+        assertEquals("1,100|2,200|5,500|6,600|7,700", dataTable.toStorageData());
     }
 
     @Test
@@ -45,11 +46,11 @@ public class DataTableTestCase {
         DataTable dataTable = new DataTable();
         dataTable.toObject("1,100|2,200|5,500|6,600|7,700");
 
-        Assert.assertEquals(100, dataTable.get("1").intValue());
-        Assert.assertEquals(200, dataTable.get("2").intValue());
-        Assert.assertEquals(500, dataTable.get("5").intValue());
-        Assert.assertEquals(600, dataTable.get("6").intValue());
-        Assert.assertEquals(700, dataTable.get("7").intValue());
+        assertEquals(100, dataTable.get("1").intValue());
+        assertEquals(200, dataTable.get("2").intValue());
+        assertEquals(500, dataTable.get("5").intValue());
+        assertEquals(600, dataTable.get("6").intValue());
+        assertEquals(700, dataTable.get("7").intValue());
     }
 
     @Test
@@ -57,6 +58,6 @@ public class DataTableTestCase {
         DataTable dataTable = new DataTable();
         dataTable.append(this.dataTable);
 
-        Assert.assertEquals("1,100|2,200|5,500|6,600|7,700", dataTable.toStorageData());
+        assertEquals("1,100|2,200|5,500|6,600|7,700", dataTable.toStorageData());
     }
 }
diff --git a/oap-server/server-core/src/test/java/org/apache/skywalking/oap/server/core/analysis/metrics/HeatMapMetricsTest.java b/oap-server/server-core/src/test/java/org/apache/skywalking/oap/server/core/analysis/metrics/HeatMapMetricsTest.java
index bd58c111a2..88ee32f12c 100644
--- a/oap-server/server-core/src/test/java/org/apache/skywalking/oap/server/core/analysis/metrics/HeatMapMetricsTest.java
+++ b/oap-server/server-core/src/test/java/org/apache/skywalking/oap/server/core/analysis/metrics/HeatMapMetricsTest.java
@@ -20,8 +20,8 @@ package org.apache.skywalking.oap.server.core.analysis.metrics;
 
 import org.apache.skywalking.oap.server.core.remote.grpc.proto.RemoteData;
 import org.apache.skywalking.oap.server.core.storage.StorageID;
-import org.junit.Assert;
-import org.junit.Test;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Test;
 
 public class HeatMapMetricsTest {
     private int step = 10; //ms
@@ -46,12 +46,12 @@ public class HeatMapMetricsTest {
         metricsMocker.combine(100, step, maxNumOfSteps);
 
         final DataTable dataset = metricsMocker.getDataset();
-        Assert.assertEquals(11, dataset.size());
+        Assertions.assertEquals(11, dataset.size());
 
-        Assert.assertEquals(1, dataset.get("20").intValue());
-        Assert.assertEquals(3, dataset.get("50").intValue());
-        Assert.assertEquals(1, dataset.get("60").intValue());
-        Assert.assertEquals(8, dataset.get("100").intValue());
+        Assertions.assertEquals(1, dataset.get("20").intValue());
+        Assertions.assertEquals(3, dataset.get("50").intValue());
+        Assertions.assertEquals(1, dataset.get("60").intValue());
+        Assertions.assertEquals(8, dataset.get("100").intValue());
     }
 
     @Test
@@ -78,12 +78,12 @@ public class HeatMapMetricsTest {
         metricsMocker.combine(metricsMocker1);
 
         final DataTable dataset = metricsMocker.getDataset();
-        Assert.assertEquals(11, dataset.size());
+        Assertions.assertEquals(11, dataset.size());
 
-        Assert.assertEquals(1, dataset.get("20").intValue());
-        Assert.assertEquals(3, dataset.get("50").intValue());
-        Assert.assertEquals(1, dataset.get("60").intValue());
-        Assert.assertEquals(8, dataset.get("100").intValue());
+        Assertions.assertEquals(1, dataset.get("20").intValue());
+        Assertions.assertEquals(3, dataset.get("50").intValue());
+        Assertions.assertEquals(1, dataset.get("60").intValue());
+        Assertions.assertEquals(8, dataset.get("100").intValue());
     }
 
     public class HistogramMetricsMocker extends HistogramMetrics {
diff --git a/oap-server/server-core/src/test/java/org/apache/skywalking/oap/server/core/analysis/metrics/LongAvgMetricsTest.java b/oap-server/server-core/src/test/java/org/apache/skywalking/oap/server/core/analysis/metrics/LongAvgMetricsTest.java
index 1efe2a7c19..97dee5d222 100644
--- a/oap-server/server-core/src/test/java/org/apache/skywalking/oap/server/core/analysis/metrics/LongAvgMetricsTest.java
+++ b/oap-server/server-core/src/test/java/org/apache/skywalking/oap/server/core/analysis/metrics/LongAvgMetricsTest.java
@@ -20,8 +20,8 @@ package org.apache.skywalking.oap.server.core.analysis.metrics;
 
 import org.apache.skywalking.oap.server.core.remote.grpc.proto.RemoteData;
 import org.apache.skywalking.oap.server.core.storage.StorageID;
-import org.junit.Assert;
-import org.junit.Test;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Test;
 
 public class LongAvgMetricsTest {
     @Test
@@ -31,7 +31,7 @@ public class LongAvgMetricsTest {
         impl.combine(24, 2);
         impl.combine(36, 3);
         impl.calculate();
-        Assert.assertEquals(12, impl.getValue());
+        Assertions.assertEquals(12, impl.getValue());
     }
 
     @Test
@@ -47,7 +47,7 @@ public class LongAvgMetricsTest {
         impl.combine(impl2);
 
         impl.calculate();
-        Assert.assertEquals(18, impl.getValue());
+        Assertions.assertEquals(18, impl.getValue());
     }
 
     public class LongAvgMetricsImpl extends LongAvgMetrics {
diff --git a/oap-server/server-core/src/test/java/org/apache/skywalking/oap/server/core/analysis/metrics/MaxLongMetricsTest.java b/oap-server/server-core/src/test/java/org/apache/skywalking/oap/server/core/analysis/metrics/MaxLongMetricsTest.java
index 0d11626c04..c9a42b53c1 100644
--- a/oap-server/server-core/src/test/java/org/apache/skywalking/oap/server/core/analysis/metrics/MaxLongMetricsTest.java
+++ b/oap-server/server-core/src/test/java/org/apache/skywalking/oap/server/core/analysis/metrics/MaxLongMetricsTest.java
@@ -20,8 +20,8 @@ package org.apache.skywalking.oap.server.core.analysis.metrics;
 
 import org.apache.skywalking.oap.server.core.remote.grpc.proto.RemoteData;
 import org.apache.skywalking.oap.server.core.storage.StorageID;
-import org.junit.Assert;
-import org.junit.Test;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Test;
 
 /**
  *
@@ -35,7 +35,7 @@ public class MaxLongMetricsTest {
         impl.combine(5);
         impl.combine(20);
         impl.calculate();
-        Assert.assertEquals(20, impl.getValue());
+        Assertions.assertEquals(20, impl.getValue());
     }
 
     @Test
@@ -49,7 +49,7 @@ public class MaxLongMetricsTest {
         impl2.combine(6);
 
         impl.combine(impl2);
-        Assert.assertEquals(10, impl.getValue());
+        Assertions.assertEquals(10, impl.getValue());
     }
 
     public class MaxLongMetricsImpl extends MaxLongMetrics {
diff --git a/oap-server/server-core/src/test/java/org/apache/skywalking/oap/server/core/analysis/metrics/MetricsTest.java b/oap-server/server-core/src/test/java/org/apache/skywalking/oap/server/core/analysis/metrics/MetricsTest.java
index ec7c141ea0..0d69fa4a96 100644
--- a/oap-server/server-core/src/test/java/org/apache/skywalking/oap/server/core/analysis/metrics/MetricsTest.java
+++ b/oap-server/server-core/src/test/java/org/apache/skywalking/oap/server/core/analysis/metrics/MetricsTest.java
@@ -20,8 +20,8 @@ package org.apache.skywalking.oap.server.core.analysis.metrics;
 
 import org.apache.skywalking.oap.server.core.remote.grpc.proto.RemoteData;
 import org.apache.skywalking.oap.server.core.storage.StorageID;
-import org.junit.Assert;
-import org.junit.Test;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Test;
 
 public class MetricsTest {
     @Test
@@ -29,13 +29,13 @@ public class MetricsTest {
         MetricsMocker mocker = new MetricsMocker();
 
         mocker.setTimeBucket(201809120511L);
-        Assert.assertEquals(2018091205L, mocker.toTimeBucketInHour());
-        Assert.assertEquals(20180912L, mocker.toTimeBucketInDay());
+        Assertions.assertEquals(2018091205L, mocker.toTimeBucketInHour());
+        Assertions.assertEquals(20180912L, mocker.toTimeBucketInDay());
 
         mocker = new MetricsMocker();
 
         mocker.setTimeBucket(2018091205L);
-        Assert.assertEquals(20180912L, mocker.toTimeBucketInDay());
+        Assertions.assertEquals(20180912L, mocker.toTimeBucketInDay());
     }
 
     @Test
@@ -49,7 +49,7 @@ public class MetricsTest {
         } catch (IllegalStateException e) {
             status = false;
         }
-        Assert.assertFalse(status);
+        Assertions.assertFalse(status);
 
         mocker = new MetricsMocker();
         mocker.setTimeBucket(20180912L);
@@ -60,7 +60,7 @@ public class MetricsTest {
         } catch (IllegalStateException e) {
             status = false;
         }
-        Assert.assertFalse(status);
+        Assertions.assertFalse(status);
 
         status = true;
         try {
@@ -68,7 +68,7 @@ public class MetricsTest {
         } catch (IllegalStateException e) {
             status = false;
         }
-        Assert.assertFalse(status);
+        Assertions.assertFalse(status);
     }
 
     public class MetricsMocker extends Metrics {
diff --git a/oap-server/server-core/src/test/java/org/apache/skywalking/oap/server/core/analysis/metrics/MinLongMetricsTest.java b/oap-server/server-core/src/test/java/org/apache/skywalking/oap/server/core/analysis/metrics/MinLongMetricsTest.java
index eb4dbfed1e..5d17c3c8a7 100644
--- a/oap-server/server-core/src/test/java/org/apache/skywalking/oap/server/core/analysis/metrics/MinLongMetricsTest.java
+++ b/oap-server/server-core/src/test/java/org/apache/skywalking/oap/server/core/analysis/metrics/MinLongMetricsTest.java
@@ -20,8 +20,8 @@ package org.apache.skywalking.oap.server.core.analysis.metrics;
 
 import org.apache.skywalking.oap.server.core.remote.grpc.proto.RemoteData;
 import org.apache.skywalking.oap.server.core.storage.StorageID;
-import org.junit.Assert;
-import org.junit.Test;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Test;
 
 public class MinLongMetricsTest {
 
@@ -32,7 +32,7 @@ public class MinLongMetricsTest {
         impl.combine(5);
         impl.combine(20);
         impl.calculate();
-        Assert.assertEquals(5, impl.getValue());
+        Assertions.assertEquals(5, impl.getValue());
 
         MinLongMetricsImpl impl2 = new MinLongMetricsImpl();
         impl2.combine(10);
@@ -40,7 +40,7 @@ public class MinLongMetricsTest {
         impl2.combine(10000);
         impl2.calculate();
 
-        Assert.assertEquals(0, impl2.getValue());
+        Assertions.assertEquals(0, impl2.getValue());
     }
 
     @Test
@@ -54,7 +54,7 @@ public class MinLongMetricsTest {
         impl2.combine(6);
 
         impl.combine(impl2);
-        Assert.assertEquals(2, impl.getValue());
+        Assertions.assertEquals(2, impl.getValue());
     }
 
     public class MinLongMetricsImpl extends MinLongMetrics {
diff --git a/oap-server/server-core/src/test/java/org/apache/skywalking/oap/server/core/analysis/metrics/PercentMetricsTest.java b/oap-server/server-core/src/test/java/org/apache/skywalking/oap/server/core/analysis/metrics/PercentMetricsTest.java
index 5f7024a627..d67fcaa86e 100644
--- a/oap-server/server-core/src/test/java/org/apache/skywalking/oap/server/core/analysis/metrics/PercentMetricsTest.java
+++ b/oap-server/server-core/src/test/java/org/apache/skywalking/oap/server/core/analysis/metrics/PercentMetricsTest.java
@@ -21,8 +21,8 @@ package org.apache.skywalking.oap.server.core.analysis.metrics;
 import org.apache.skywalking.oap.server.core.analysis.metrics.expression.StringMatch;
 import org.apache.skywalking.oap.server.core.remote.grpc.proto.RemoteData;
 import org.apache.skywalking.oap.server.core.storage.StorageID;
-import org.junit.Assert;
-import org.junit.Test;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Test;
 
 public class PercentMetricsTest {
     @Test
@@ -34,7 +34,7 @@ public class PercentMetricsTest {
 
         impl.calculate();
 
-        Assert.assertEquals(3333, impl.getValue());
+        Assertions.assertEquals(3333, impl.getValue());
 
         impl = new PercentMetricsImpl();
         impl.combine(new StringMatch().match(true, true));
@@ -43,7 +43,7 @@ public class PercentMetricsTest {
 
         impl.calculate();
 
-        Assert.assertEquals(6666, impl.getValue());
+        Assertions.assertEquals(6666, impl.getValue());
     }
 
     @Test
@@ -62,7 +62,7 @@ public class PercentMetricsTest {
 
         impl.calculate();
 
-        Assert.assertEquals(5000, impl.getValue());
+        Assertions.assertEquals(5000, impl.getValue());
     }
 
     public class PercentMetricsImpl extends PercentMetrics {
diff --git a/oap-server/server-core/src/test/java/org/apache/skywalking/oap/server/core/analysis/metrics/PercentileMetricsTest.java b/oap-server/server-core/src/test/java/org/apache/skywalking/oap/server/core/analysis/metrics/PercentileMetricsTest.java
index 56b95222c4..190c75f251 100644
--- a/oap-server/server-core/src/test/java/org/apache/skywalking/oap/server/core/analysis/metrics/PercentileMetricsTest.java
+++ b/oap-server/server-core/src/test/java/org/apache/skywalking/oap/server/core/analysis/metrics/PercentileMetricsTest.java
@@ -20,8 +20,8 @@ package org.apache.skywalking.oap.server.core.analysis.metrics;
 
 import org.apache.skywalking.oap.server.core.remote.grpc.proto.RemoteData;
 import org.apache.skywalking.oap.server.core.storage.StorageID;
-import org.junit.Assert;
-import org.junit.Test;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Test;
 
 public class PercentileMetricsTest {
     private int precision = 10; //ms
@@ -44,7 +44,7 @@ public class PercentileMetricsTest {
 
         metricsMocker.calculate();
 
-        Assert.assertArrayEquals(new int[] {
+        Assertions.assertArrayEquals(new int[] {
             70,
             90,
             90,
@@ -71,7 +71,7 @@ public class PercentileMetricsTest {
 
         metricsMocker.calculate();
 
-        Assert.assertArrayEquals(new int[] {
+        Assertions.assertArrayEquals(new int[] {
             90,
             90,
             90,
@@ -89,7 +89,7 @@ public class PercentileMetricsTest {
 
         metricsMocker.calculate();
 
-        Assert.assertArrayEquals(new int[] {
+        Assertions.assertArrayEquals(new int[] {
             90,
             110,
             110,
@@ -107,7 +107,7 @@ public class PercentileMetricsTest {
 
         metricsMocker.calculate();
 
-        Assert.assertArrayEquals(new int[] {
+        Assertions.assertArrayEquals(new int[] {
             0,
             0,
             0,
diff --git a/oap-server/server-core/src/test/java/org/apache/skywalking/oap/server/core/analysis/metrics/expression/ContainMatchTest.java b/oap-server/server-core/src/test/java/org/apache/skywalking/oap/server/core/analysis/metrics/expression/ContainMatchTest.java
index 148ec6e766..6237b31947 100644
--- a/oap-server/server-core/src/test/java/org/apache/skywalking/oap/server/core/analysis/metrics/expression/ContainMatchTest.java
+++ b/oap-server/server-core/src/test/java/org/apache/skywalking/oap/server/core/analysis/metrics/expression/ContainMatchTest.java
@@ -18,17 +18,20 @@
 
 package org.apache.skywalking.oap.server.core.analysis.metrics.expression;
 
+import org.junit.jupiter.api.Test;
+
 import java.util.Arrays;
-import org.junit.Assert;
-import org.junit.Test;
+
+import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 public class ContainMatchTest {
     @Test
     public void match() {
         ContainMatch containMatch = new ContainMatch();
-        Assert.assertFalse(containMatch.match(null, "http.method:GET"));
-        Assert.assertTrue(containMatch.match(Arrays.asList("http.method:GET", "http.method:POST"), "http.method:GET"));
-        Assert.assertFalse(
+        assertFalse(containMatch.match(null, "http.method:GET"));
+        assertTrue(containMatch.match(Arrays.asList("http.method:GET", "http.method:POST"), "http.method:GET"));
+        assertFalse(
             containMatch.match(Arrays.asList("http.method:GET", "http.method:POST"), "http.method:PUT"));
     }
-}
\ No newline at end of file
+}
diff --git a/oap-server/server-core/src/test/java/org/apache/skywalking/oap/server/core/analysis/metrics/expression/InMatchTest.java b/oap-server/server-core/src/test/java/org/apache/skywalking/oap/server/core/analysis/metrics/expression/InMatchTest.java
index 6597bf1db5..4501b43b89 100644
--- a/oap-server/server-core/src/test/java/org/apache/skywalking/oap/server/core/analysis/metrics/expression/InMatchTest.java
+++ b/oap-server/server-core/src/test/java/org/apache/skywalking/oap/server/core/analysis/metrics/expression/InMatchTest.java
@@ -18,29 +18,29 @@
 package org.apache.skywalking.oap.server.core.analysis.metrics.expression;
 
 import org.apache.skywalking.oap.server.core.source.RequestType;
-import org.junit.Assert;
-import org.junit.Test;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Test;
 
 public class InMatchTest {
 
     @Test
     public void testIn() {
-        Assert.assertTrue(new InMatch().match("a", new Object[] {
+        Assertions.assertTrue(new InMatch().match("a", new Object[] {
             "\"a\"",
             "\"b\""
         }));
-        Assert.assertFalse(new InMatch().match("c", new Object[] {
+        Assertions.assertFalse(new InMatch().match("c", new Object[] {
             "\"a\"",
             "\"b\""
         }));
 
-        Assert.assertTrue(
+        Assertions.assertTrue(
             new InMatch().match(RequestType.RPC, new Object[] {
                 RequestType.HTTP,
                 RequestType.DATABASE,
                 RequestType.RPC
             }));
-        Assert.assertFalse(
+        Assertions.assertFalse(
             new InMatch().match(RequestType.gRPC, new Object[] {
                                     RequestType.HTTP,
                                     RequestType.DATABASE,
@@ -48,23 +48,23 @@ public class InMatchTest {
                                 }
             ));
 
-        Assert.assertTrue(new InMatch().match(1, new long[] {
+        Assertions.assertTrue(new InMatch().match(1, new long[] {
             1,
             2,
             3
         }));
-        Assert.assertFalse(new InMatch().match(4, new long[] {
+        Assertions.assertFalse(new InMatch().match(4, new long[] {
             1,
             2,
             3
         }));
 
-        Assert.assertTrue(new InMatch().match(1L, new long[] {
+        Assertions.assertTrue(new InMatch().match(1L, new long[] {
             1,
             2,
             3
         }));
-        Assert.assertFalse(new InMatch().match(4L, new long[] {
+        Assertions.assertFalse(new InMatch().match(4L, new long[] {
             1,
             2,
             3
diff --git a/oap-server/server-core/src/test/java/org/apache/skywalking/oap/server/core/analysis/metrics/expression/LikeMatchTest.java b/oap-server/server-core/src/test/java/org/apache/skywalking/oap/server/core/analysis/metrics/expression/LikeMatchTest.java
index 0c09d26ccb..035b6e4325 100644
--- a/oap-server/server-core/src/test/java/org/apache/skywalking/oap/server/core/analysis/metrics/expression/LikeMatchTest.java
+++ b/oap-server/server-core/src/test/java/org/apache/skywalking/oap/server/core/analysis/metrics/expression/LikeMatchTest.java
@@ -18,10 +18,10 @@
 
 package org.apache.skywalking.oap.server.core.analysis.metrics.expression;
 
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertTrue;
+import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 public class LikeMatchTest {
     @Test
diff --git a/oap-server/server-core/src/test/java/org/apache/skywalking/oap/server/core/analysis/metrics/expression/NotContainMatchTest.java b/oap-server/server-core/src/test/java/org/apache/skywalking/oap/server/core/analysis/metrics/expression/NotContainMatchTest.java
index 0ecf1cf215..24a14a1387 100644
--- a/oap-server/server-core/src/test/java/org/apache/skywalking/oap/server/core/analysis/metrics/expression/NotContainMatchTest.java
+++ b/oap-server/server-core/src/test/java/org/apache/skywalking/oap/server/core/analysis/metrics/expression/NotContainMatchTest.java
@@ -18,18 +18,21 @@
 
 package org.apache.skywalking.oap.server.core.analysis.metrics.expression;
 
+import org.junit.jupiter.api.Test;
+
 import java.util.Arrays;
-import org.junit.Assert;
-import org.junit.Test;
+
+import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 public class NotContainMatchTest {
 
     @Test
     public void match() {
         NotContainMatch notContainMatch = new NotContainMatch();
-        Assert.assertFalse(notContainMatch.match(null, "http.method:GET"));
-        Assert.assertFalse(
+        assertFalse(notContainMatch.match(null, "http.method:GET"));
+        assertFalse(
             notContainMatch.match(Arrays.asList("http.method:GET", "http.method:POST"), "http.method:GET"));
-        Assert.assertTrue(notContainMatch.match(Arrays.asList("http.method:GET", "http.method:POST"), "http.method:PUT"));
+        assertTrue(notContainMatch.match(Arrays.asList("http.method:GET", "http.method:POST"), "http.method:PUT"));
     }
-}
\ No newline at end of file
+}
diff --git a/oap-server/server-core/src/test/java/org/apache/skywalking/oap/server/core/analysis/metrics/expression/NumberMatchTest.java b/oap-server/server-core/src/test/java/org/apache/skywalking/oap/server/core/analysis/metrics/expression/NumberMatchTest.java
index ea6c6edf85..eb81e93b0f 100644
--- a/oap-server/server-core/src/test/java/org/apache/skywalking/oap/server/core/analysis/metrics/expression/NumberMatchTest.java
+++ b/oap-server/server-core/src/test/java/org/apache/skywalking/oap/server/core/analysis/metrics/expression/NumberMatchTest.java
@@ -17,10 +17,10 @@
 
 package org.apache.skywalking.oap.server.core.analysis.metrics.expression;
 
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertTrue;
+import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 public class NumberMatchTest {
 
@@ -93,4 +93,4 @@ public class NumberMatchTest {
         assertFalse(match);
     }
 
-}
\ No newline at end of file
+}
diff --git a/oap-server/server-core/src/test/java/org/apache/skywalking/oap/server/core/analysis/metrics/expression/StringMatchTest.java b/oap-server/server-core/src/test/java/org/apache/skywalking/oap/server/core/analysis/metrics/expression/StringMatchTest.java
index e3b665feac..80310f9d39 100644
--- a/oap-server/server-core/src/test/java/org/apache/skywalking/oap/server/core/analysis/metrics/expression/StringMatchTest.java
+++ b/oap-server/server-core/src/test/java/org/apache/skywalking/oap/server/core/analysis/metrics/expression/StringMatchTest.java
@@ -18,10 +18,10 @@
 
 package org.apache.skywalking.oap.server.core.analysis.metrics.expression;
 
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertTrue;
+import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 public class StringMatchTest {
 
@@ -63,4 +63,4 @@ public class StringMatchTest {
         assertTrue(new StringMatch().match("a", "a"));
         assertFalse(new StringMatch().match("\"a\"", "ab"));
     }
-}
\ No newline at end of file
+}
diff --git a/oap-server/server-core/src/test/java/org/apache/skywalking/oap/server/core/cluster/OAPNodeCheckerTest.java b/oap-server/server-core/src/test/java/org/apache/skywalking/oap/server/core/cluster/OAPNodeCheckerTest.java
index 0e7192c853..c1ab69b247 100644
--- a/oap-server/server-core/src/test/java/org/apache/skywalking/oap/server/core/cluster/OAPNodeCheckerTest.java
+++ b/oap-server/server-core/src/test/java/org/apache/skywalking/oap/server/core/cluster/OAPNodeCheckerTest.java
@@ -21,8 +21,8 @@ package org.apache.skywalking.oap.server.core.cluster;
 import com.google.common.collect.Lists;
 import org.apache.skywalking.oap.server.core.CoreModuleConfig;
 import org.apache.skywalking.oap.server.core.remote.client.Address;
-import org.junit.Assert;
-import org.junit.Test;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Test;
 
 import java.util.ArrayList;
 import java.util.List;
@@ -32,13 +32,13 @@ public class OAPNodeCheckerTest {
     @Test
     public void hasIllegalNodeAddressWithNull() {
         boolean flag = OAPNodeChecker.hasIllegalNodeAddress(null);
-        Assert.assertFalse(flag);
+        Assertions.assertFalse(flag);
     }
 
     @Test
     public void hasIllegalNodeAddressWithEmptySet() {
         boolean flag = OAPNodeChecker.hasIllegalNodeAddress(Lists.newArrayList());
-        Assert.assertFalse(flag);
+        Assertions.assertFalse(flag);
     }
 
     @Test
@@ -47,7 +47,7 @@ public class OAPNodeCheckerTest {
         remoteInstances.add(new RemoteInstance(new Address("127.0.0.1", 8899, true)));
         remoteInstances.add(new RemoteInstance(new Address("123.23.4.2", 8899, true)));
         boolean flag = OAPNodeChecker.hasIllegalNodeAddress(remoteInstances);
-        Assert.assertTrue(flag);
+        Assertions.assertTrue(flag);
     }
 
     @Test
@@ -55,19 +55,19 @@ public class OAPNodeCheckerTest {
         List<RemoteInstance> remoteInstances = new ArrayList<>();
         remoteInstances.add(new RemoteInstance(new Address("123.23.4.2", 8899, true)));
         boolean flag = OAPNodeChecker.hasIllegalNodeAddress(remoteInstances);
-        Assert.assertFalse(flag);
+        Assertions.assertFalse(flag);
     }
 
     @Test
     public void unHealthWithEmptyInstance() {
         ClusterHealthStatus clusterHealthStatus = OAPNodeChecker.isHealth(Lists.newArrayList());
-        Assert.assertFalse(clusterHealthStatus.isHealth());
+        Assertions.assertFalse(clusterHealthStatus.isHealth());
     }
 
     @Test
     public void unHealthWithNullInstance() {
         ClusterHealthStatus clusterHealthStatus = OAPNodeChecker.isHealth(null);
-        Assert.assertFalse(clusterHealthStatus.isHealth());
+        Assertions.assertFalse(clusterHealthStatus.isHealth());
     }
 
     @Test
@@ -75,7 +75,7 @@ public class OAPNodeCheckerTest {
         List<RemoteInstance> remoteInstances = new ArrayList<>();
         remoteInstances.add(new RemoteInstance(new Address("192.168.0.1", 8892, false)));
         ClusterHealthStatus clusterHealthStatus = OAPNodeChecker.isHealth(remoteInstances);
-        Assert.assertFalse(clusterHealthStatus.isHealth());
+        Assertions.assertFalse(clusterHealthStatus.isHealth());
     }
 
     @Test
@@ -84,7 +84,7 @@ public class OAPNodeCheckerTest {
         remoteInstances.add(new RemoteInstance(new Address("192.168.0.1", 8892, true)));
         remoteInstances.add(new RemoteInstance(new Address("127.0.0.1", 8892, true)));
         ClusterHealthStatus clusterHealthStatus = OAPNodeChecker.isHealth(remoteInstances);
-        Assert.assertFalse(clusterHealthStatus.isHealth());
+        Assertions.assertFalse(clusterHealthStatus.isHealth());
     }
 
     @Test
@@ -92,7 +92,7 @@ public class OAPNodeCheckerTest {
         List<RemoteInstance> remoteInstances = new ArrayList<>();
         remoteInstances.add(new RemoteInstance(new Address("127.0.0.1", 8899, true)));
         ClusterHealthStatus clusterHealthStatus = OAPNodeChecker.isHealth(remoteInstances);
-        Assert.assertTrue(clusterHealthStatus.isHealth());
+        Assertions.assertTrue(clusterHealthStatus.isHealth());
     }
 
     @Test
@@ -101,7 +101,7 @@ public class OAPNodeCheckerTest {
         remoteInstances.add(new RemoteInstance(new Address("192.168.0.1", 8899, true)));
         remoteInstances.add(new RemoteInstance(new Address("192.168.0.2", 8899, false)));
         ClusterHealthStatus clusterHealthStatus = OAPNodeChecker.isHealth(remoteInstances);
-        Assert.assertTrue(clusterHealthStatus.isHealth());
+        Assertions.assertTrue(clusterHealthStatus.isHealth());
     }
 
     @Test
@@ -110,6 +110,6 @@ public class OAPNodeCheckerTest {
         remoteInstances.add(new RemoteInstance(new Address("192.168.0.1", 8892, false)));
         OAPNodeChecker.setROLE(CoreModuleConfig.Role.Receiver);
         ClusterHealthStatus clusterHealthStatus = OAPNodeChecker.isHealth(remoteInstances);
-        Assert.assertTrue(clusterHealthStatus.isHealth());
+        Assertions.assertTrue(clusterHealthStatus.isHealth());
     }
-}
\ No newline at end of file
+}
diff --git a/oap-server/server-core/src/test/java/org/apache/skywalking/oap/server/core/config/ComponentLibraryCatalogFileTest.java b/oap-server/server-core/src/test/java/org/apache/skywalking/oap/server/core/config/ComponentLibraryCatalogFileTest.java
index 4144a83f7d..6181490fc6 100644
--- a/oap-server/server-core/src/test/java/org/apache/skywalking/oap/server/core/config/ComponentLibraryCatalogFileTest.java
+++ b/oap-server/server-core/src/test/java/org/apache/skywalking/oap/server/core/config/ComponentLibraryCatalogFileTest.java
@@ -18,17 +18,17 @@
 
 package org.apache.skywalking.oap.server.core.config;
 
-import org.junit.Assert;
-import org.junit.Test;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Test;
 
 public class ComponentLibraryCatalogFileTest {
     @Test
     public void testInitAndSettings() {
         ComponentLibraryCatalogService service = new ComponentLibraryCatalogService();
-        Assert.assertEquals(1, service.getComponentId("Tomcat"));
-        Assert.assertEquals(7, service.getServerIdBasedOnComponent(30));
-        Assert.assertEquals(21, service.getServerIdBasedOnComponent(21));
-        Assert.assertEquals("Redis", service.getServerNameBasedOnComponent(30));
+        Assertions.assertEquals(1, service.getComponentId("Tomcat"));
+        Assertions.assertEquals(7, service.getServerIdBasedOnComponent(30));
+        Assertions.assertEquals(21, service.getServerIdBasedOnComponent(21));
+        Assertions.assertEquals("Redis", service.getServerNameBasedOnComponent(30));
     }
 
     /**
@@ -37,15 +37,15 @@ public class ComponentLibraryCatalogFileTest {
     @Test
     public void testPriority() {
         ComponentLibraryCatalogService service = new ComponentLibraryCatalogService();
-        Assert.assertEquals(false, service.compare(service.getComponentId("Unknown"), service.getComponentId("tcp")));
-        Assert.assertEquals(false, service.compare(service.getComponentId("tcp"), service.getComponentId("tls")));
-        Assert.assertEquals(false, service.compare(service.getComponentId("tls"), service.getComponentId("rpc")));
-        Assert.assertEquals(false, service.compare(service.getComponentId("rpc"), service.getComponentId("http")));
-        Assert.assertEquals(false, service.compare(service.getComponentId("http"), service.getComponentId("https")));
-        Assert.assertEquals(false, service.compare(service.getComponentId("https"), service.getComponentId("SpringMVC")));
+        Assertions.assertEquals(false, service.compare(service.getComponentId("Unknown"), service.getComponentId("tcp")));
+        Assertions.assertEquals(false, service.compare(service.getComponentId("tcp"), service.getComponentId("tls")));
+        Assertions.assertEquals(false, service.compare(service.getComponentId("tls"), service.getComponentId("rpc")));
+        Assertions.assertEquals(false, service.compare(service.getComponentId("rpc"), service.getComponentId("http")));
+        Assertions.assertEquals(false, service.compare(service.getComponentId("http"), service.getComponentId("https")));
+        Assertions.assertEquals(false, service.compare(service.getComponentId("https"), service.getComponentId("SpringMVC")));
 
         // Equal priority
-        Assert.assertEquals(false, service.compare(service.getComponentId("Dubbo"), service.getComponentId("SpringMVC")));
-        Assert.assertEquals(false, service.compare(service.getComponentId("SpringMVC"), service.getComponentId("Dubbo")));
+        Assertions.assertEquals(false, service.compare(service.getComponentId("Dubbo"), service.getComponentId("SpringMVC")));
+        Assertions.assertEquals(false, service.compare(service.getComponentId("SpringMVC"), service.getComponentId("Dubbo")));
     }
 }
diff --git a/oap-server/server-core/src/test/java/org/apache/skywalking/oap/server/core/config/group/EndpointGroupingRuleReaderTest.java b/oap-server/server-core/src/test/java/org/apache/skywalking/oap/server/core/config/group/EndpointGroupingRuleReaderTest.java
index b9bf3b7f55..56d56742bc 100644
--- a/oap-server/server-core/src/test/java/org/apache/skywalking/oap/server/core/config/group/EndpointGroupingRuleReaderTest.java
+++ b/oap-server/server-core/src/test/java/org/apache/skywalking/oap/server/core/config/group/EndpointGroupingRuleReaderTest.java
@@ -19,8 +19,8 @@
 package org.apache.skywalking.oap.server.core.config.group;
 
 import org.apache.skywalking.oap.server.library.util.StringFormatGroup;
-import org.junit.Assert;
-import org.junit.Test;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Test;
 
 public class EndpointGroupingRuleReaderTest {
     @Test
@@ -32,13 +32,13 @@ public class EndpointGroupingRuleReaderTest {
         final EndpointGroupingRule rule = reader.read();
 
         StringFormatGroup.FormatResult formatResult = rule.format("serviceA", "/prod/123");
-        Assert.assertTrue(formatResult.isMatch());
-        Assert.assertEquals("/prod/{id}", formatResult.getName());
+        Assertions.assertTrue(formatResult.isMatch());
+        Assertions.assertEquals("/prod/{id}", formatResult.getName());
 
         formatResult = rule.format("serviceA", "/prod/");
-        Assert.assertFalse(formatResult.isMatch());
+        Assertions.assertFalse(formatResult.isMatch());
 
         formatResult = rule.format("serviceB", "/prod/123");
-        Assert.assertFalse(formatResult.isMatch());
+        Assertions.assertFalse(formatResult.isMatch());
     }
 }
diff --git a/oap-server/server-core/src/test/java/org/apache/skywalking/oap/server/core/config/group/EndpointNameGroupingRuleWatcherTest.java b/oap-server/server-core/src/test/java/org/apache/skywalking/oap/server/core/config/group/EndpointNameGroupingRuleWatcherTest.java
index b393eea755..ddf3a10087 100644
--- a/oap-server/server-core/src/test/java/org/apache/skywalking/oap/server/core/config/group/EndpointNameGroupingRuleWatcherTest.java
+++ b/oap-server/server-core/src/test/java/org/apache/skywalking/oap/server/core/config/group/EndpointNameGroupingRuleWatcherTest.java
@@ -18,15 +18,16 @@
 
 package org.apache.skywalking.oap.server.core.config.group;
 
-import java.io.FileNotFoundException;
 import org.apache.skywalking.oap.server.configuration.api.ConfigChangeWatcher;
 import org.apache.skywalking.oap.server.core.CoreModule;
 import org.apache.skywalking.oap.server.library.module.ModuleDefine;
 import org.apache.skywalking.oap.server.library.module.ModuleProvider;
 import org.apache.skywalking.oap.server.library.module.ModuleStartException;
 import org.apache.skywalking.oap.server.library.module.ServiceNotProvidedException;
-import org.junit.Assert;
-import org.junit.Test;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Test;
+
+import java.io.FileNotFoundException;
 
 public class EndpointNameGroupingRuleWatcherTest {
     @Test
@@ -70,7 +71,7 @@ public class EndpointNameGroupingRuleWatcherTest {
                     return new String[0];
                 }
             }, endpointNameGrouping);
-        Assert.assertEquals("/prod/{id}", endpointNameGrouping.format("serviceA", "/prod/123"));
+        Assertions.assertEquals("/prod/{id}", endpointNameGrouping.format("serviceA", "/prod/123"));
 
         watcher.notify(new ConfigChangeWatcher.ConfigChangeEvent(
             "# Licensed to the Apache Software Foundation (ASF) under one or more\n" +
@@ -105,9 +106,9 @@ public class EndpointNameGroupingRuleWatcherTest {
             , ConfigChangeWatcher.EventType.MODIFY
         ));
 
... 6624 lines suppressed ...