You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@skywalking.apache.org by ke...@apache.org on 2020/10/29 06:39:10 UTC

[skywalking] branch master updated: Add percentile tests in e2e test. (#5737)

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

kezhenxu94 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 c95a913  Add percentile tests in e2e test. (#5737)
c95a913 is described below

commit c95a9134925cbe8101dc72dbaca38269eb3dc3b1
Author: Humbertzhang <50...@qq.com>
AuthorDate: Thu Oct 29 14:38:49 2020 +0800

    Add percentile tests in e2e test. (#5737)
---
 .../skywalking/e2e/controller/UserController.java  | 15 ++++++++--
 .../skywalking/e2e/controller/UserController.java  | 16 +++++++++--
 .../apache/skywalking/e2e/lua/LuaController.java   |  5 +++-
 test/e2e/e2e-test/docker/go/Dockerfile.go          |  2 +-
 test/e2e/e2e-test/docker/lua/Dockerfile.nginx      |  2 +-
 test/e2e/e2e-test/docker/lua/nginx.conf            | 10 +++----
 .../test/java/org/apache/skywalking/e2e/GOE2E.java |  9 ++++++
 .../java/org/apache/skywalking/e2e/GatewayE2E.java |  9 ++++++
 .../java/org/apache/skywalking/e2e/LuaE2E.java     |  9 ++++++
 .../java/org/apache/skywalking/e2e/PHPE2E.java     |  9 ++++++
 .../java/org/apache/skywalking/e2e/PythonE2E.java  | 10 +++++++
 .../org/apache/skywalking/e2e/kafka/KafkaE2E.java  | 10 +++++++
 .../apache/skywalking/e2e/simple/SimpleE2E.java    | 32 ++++++++++++++--------
 .../apache/skywalking/e2e/storage/StorageE2E.java  | 11 ++++++++
 .../src/test/resources/expected/go/topo.yml        |  2 +-
 15 files changed, 127 insertions(+), 24 deletions(-)

diff --git a/test/e2e/e2e-service-consumer/src/main/java/org/apache/skywalking/e2e/controller/UserController.java b/test/e2e/e2e-service-consumer/src/main/java/org/apache/skywalking/e2e/controller/UserController.java
index 21379de..7d94ff7 100644
--- a/test/e2e/e2e-service-consumer/src/main/java/org/apache/skywalking/e2e/controller/UserController.java
+++ b/test/e2e/e2e-service-consumer/src/main/java/org/apache/skywalking/e2e/controller/UserController.java
@@ -20,6 +20,7 @@ package org.apache.skywalking.e2e.controller;
 
 import com.google.common.base.Strings;
 import java.util.Optional;
+import java.util.Random;
 import java.util.stream.Collectors;
 import java.util.stream.Stream;
 import lombok.RequiredArgsConstructor;
@@ -38,9 +39,13 @@ public class UserController {
 
     private final E2EConfiguration configuration;
 
+    private final int sleepMin = 500;
+
+    private final int sleepMax = 1000;
+
     @PostMapping("/info")
     public String info() throws InterruptedException {
-        Thread.sleep(1000L);
+        Thread.sleep(randomSleepLong(sleepMin, sleepMax));
 
         Optional<ResponseEntity<String>> optionalResponseEntity = Stream.of(
             Strings.nullToEmpty(configuration.getProviderBaseUrl()).split(","))
@@ -55,10 +60,16 @@ public class UserController {
 
     @PostMapping("/users")
     public Object createAuthor(@RequestBody final User user) throws InterruptedException {
-        Thread.sleep(1000L);
+        Thread.sleep(randomSleepLong(sleepMin, sleepMax));
 
         return Stream.of(Strings.nullToEmpty(configuration.getProviderBaseUrl()).split(","))
                      .map(baseUrl -> restTemplate.postForEntity(baseUrl + "/users", user, User.class))
                      .collect(Collectors.toList());
     }
+
+    private long randomSleepLong(int min, int max) {
+        Random rand = new Random();
+        int randomNumber = rand.nextInt((max - min) + 1) + min;
+        return randomNumber;
+    }
 }
diff --git a/test/e2e/e2e-service-provider/src/main/java/org/apache/skywalking/e2e/controller/UserController.java b/test/e2e/e2e-service-provider/src/main/java/org/apache/skywalking/e2e/controller/UserController.java
index a9aed42..b3ed941 100644
--- a/test/e2e/e2e-service-provider/src/main/java/org/apache/skywalking/e2e/controller/UserController.java
+++ b/test/e2e/e2e-service-provider/src/main/java/org/apache/skywalking/e2e/controller/UserController.java
@@ -25,19 +25,31 @@ import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RestController;
 
+import java.util.Random;
+
 @RestController
 @RequiredArgsConstructor
 @SuppressWarnings("SameReturnValue")
 public class UserController {
     private final UserRepo userRepo;
+    private final int sleepMin = 500;
+    private final int sleepMax = 1000;
 
     @PostMapping("/info")
-    public String info() {
+    public String info() throws InterruptedException {
+        Thread.sleep(randomSleepLong(sleepMin, sleepMax));
         return "whatever";
     }
 
     @PostMapping("/users")
-    public User createAuthor(@RequestBody final User user) {
+    public User createAuthor(@RequestBody final User user) throws InterruptedException {
+        Thread.sleep(randomSleepLong(sleepMin, sleepMax));
         return userRepo.save(user);
     }
+
+    private long randomSleepLong(int min, int max) {
+        Random rand = new Random();
+        int randomNumber = rand.nextInt((max - min) + 1) + min;
+        return randomNumber;
+    }
 }
diff --git a/test/e2e/e2e-service-provider/src/main/java/org/apache/skywalking/e2e/lua/LuaController.java b/test/e2e/e2e-service-provider/src/main/java/org/apache/skywalking/e2e/lua/LuaController.java
index 28cd19f..4e11cf3 100644
--- a/test/e2e/e2e-service-provider/src/main/java/org/apache/skywalking/e2e/lua/LuaController.java
+++ b/test/e2e/e2e-service-provider/src/main/java/org/apache/skywalking/e2e/lua/LuaController.java
@@ -28,6 +28,7 @@ import org.springframework.web.client.RestTemplate;
 import java.net.MalformedURLException;
 import java.net.URISyntaxException;
 import java.net.URL;
+import java.util.concurrent.TimeUnit;
 
 @RestController
 @RequiredArgsConstructor
@@ -43,7 +44,9 @@ public class LuaController {
     }
 
     @PostMapping("/nginx/end/info")
-    private String nginxEnd() throws MalformedURLException, URISyntaxException {
+    private String nginxEnd() throws InterruptedException {
+        TimeUnit.SECONDS.sleep(1);
+
         return TraceContext.getCorrelation("entry").orElse("")
             + "_" + TraceContext.getCorrelation("nginx").orElse("");
     }
diff --git a/test/e2e/e2e-test/docker/go/Dockerfile.go b/test/e2e/e2e-test/docker/go/Dockerfile.go
index 1ddc2dc..61338a8 100644
--- a/test/e2e/e2e-test/docker/go/Dockerfile.go
+++ b/test/e2e/e2e-test/docker/go/Dockerfile.go
@@ -15,7 +15,7 @@
 
 FROM golang:1.12 AS builder
 
-ARG COMMIT_HASH=140002c944931ebc0e8e1ea6f7dca128108cf4e7
+ARG COMMIT_HASH=38c3b84741dd6c0609965e9df0fcc633915d3ea5
 ARG GO2SKY_CODE=${COMMIT_HASH}.tar.gz
 ARG GO2SKY_CODE_URL=https://github.com/SkyAPM/go2sky/archive/${GO2SKY_CODE}
 
diff --git a/test/e2e/e2e-test/docker/lua/Dockerfile.nginx b/test/e2e/e2e-test/docker/lua/Dockerfile.nginx
index 8c8bfb2..3307bcf 100644
--- a/test/e2e/e2e-test/docker/lua/Dockerfile.nginx
+++ b/test/e2e/e2e-test/docker/lua/Dockerfile.nginx
@@ -15,7 +15,7 @@
 
 FROM openresty/openresty
 
-ENV COMMIT_HASH=b4700215abf5797279e7613ab96d8141a89d0b48
+ENV COMMIT_HASH=cda47ae0a507ab86a378a298325c3c94d9a773c2
 
 WORKDIR /usr/share/skywalking-nginx-lua
 
diff --git a/test/e2e/e2e-test/docker/lua/nginx.conf b/test/e2e/e2e-test/docker/lua/nginx.conf
index 09669ca..59b0004 100644
--- a/test/e2e/e2e-test/docker/lua/nginx.conf
+++ b/test/e2e/e2e-test/docker/lua/nginx.conf
@@ -23,7 +23,7 @@ events {
 
 http {
     resolver local=on ipv6=off;
-    lua_package_path "/usr/share/skywalking-nginx-lua/lib/skywalking/?.lua;;";
+    lua_package_path "/usr/share/skywalking-nginx-lua/lib/?.lua;;";
     # Buffer represents the register inform and the queue of the finished segment
     lua_shared_dict tracing_buffer 100m;
 
@@ -36,7 +36,7 @@ http {
         -- Instance means the number of Nginx deployment, does not mean the worker instances
         metadata_buffer:set('serviceInstanceName', 'User_Service_Instance_Name')
 
-        require("client"):startBackendTimer("http://oap:12800")
+        require("skywalking.client"):startBackendTimer("http://oap:12800")
     }
 
     log_format sw_trace escape=json "$uri $request_body";
@@ -47,17 +47,17 @@ http {
         location /nginx/info {
 
             rewrite_by_lua_block {
-                require("tracer"):start("User_Service_Name", {nginx = "nginx_value"})
+                require("skywalking.tracer"):start("User_Service_Name", {nginx = "nginx_value"})
             }
 
             proxy_pass http://provider-end:9090/nginx/end/info;
 
             body_filter_by_lua_block {
-                require("tracer"):finish()
+                require("skywalking.tracer"):finish()
             }
 
             log_by_lua_block {
-                require("tracer"):prepareForReport()
+                require("skywalking.tracer"):prepareForReport()
             }
         }
     }
diff --git a/test/e2e/e2e-test/src/test/java/org/apache/skywalking/e2e/GOE2E.java b/test/e2e/e2e-test/src/test/java/org/apache/skywalking/e2e/GOE2E.java
index 504bf90..c488537 100644
--- a/test/e2e/e2e-test/src/test/java/org/apache/skywalking/e2e/GOE2E.java
+++ b/test/e2e/e2e-test/src/test/java/org/apache/skywalking/e2e/GOE2E.java
@@ -55,11 +55,14 @@ import org.junit.jupiter.api.BeforeAll;
 import org.testcontainers.containers.DockerComposeContainer;
 
 import static org.apache.skywalking.e2e.metrics.MetricsMatcher.verifyMetrics;
+import static org.apache.skywalking.e2e.metrics.MetricsMatcher.verifyPercentileMetrics;
 import static org.apache.skywalking.e2e.metrics.MetricsQuery.ALL_ENDPOINT_METRICS;
+import static org.apache.skywalking.e2e.metrics.MetricsQuery.ALL_ENDPOINT_MULTIPLE_LINEAR_METRICS;
 import static org.apache.skywalking.e2e.metrics.MetricsQuery.ALL_INSTANCE_METRICS;
 import static org.apache.skywalking.e2e.metrics.MetricsQuery.ALL_SERVICE_INSTANCE_RELATION_CLIENT_METRICS;
 import static org.apache.skywalking.e2e.metrics.MetricsQuery.ALL_SERVICE_INSTANCE_RELATION_SERVER_METRICS;
 import static org.apache.skywalking.e2e.metrics.MetricsQuery.ALL_SERVICE_METRICS;
+import static org.apache.skywalking.e2e.metrics.MetricsQuery.ALL_SERVICE_MULTIPLE_LINEAR_METRICS;
 import static org.apache.skywalking.e2e.metrics.MetricsQuery.ALL_SERVICE_RELATION_CLIENT_METRICS;
 import static org.apache.skywalking.e2e.metrics.MetricsQuery.ALL_SERVICE_RELATION_SERVER_METRICS;
 import static org.apache.skywalking.e2e.utils.Times.now;
@@ -209,6 +212,9 @@ public class GOE2E extends SkyWalkingTestAdapter {
             instanceRespTimeMatcher.verify(serviceMetrics);
             LOGGER.info("{}: {}", metricName, serviceMetrics);
         }
+        for (String metricName : ALL_SERVICE_MULTIPLE_LINEAR_METRICS) {
+            verifyPercentileMetrics(graphql, metricName, service.getKey(), startTime);
+        }
     }
 
     private void verifyInstancesMetrics(Instances instances) throws Exception {
@@ -253,6 +259,9 @@ public class GOE2E extends SkyWalkingTestAdapter {
 
                 LOGGER.info("{}: {}", metricName, metrics);
             }
+            for (String metricName : ALL_ENDPOINT_MULTIPLE_LINEAR_METRICS) {
+                verifyPercentileMetrics(graphql, metricName, endpoint.getKey(), startTime);
+            }
         }
     }
 
diff --git a/test/e2e/e2e-test/src/test/java/org/apache/skywalking/e2e/GatewayE2E.java b/test/e2e/e2e-test/src/test/java/org/apache/skywalking/e2e/GatewayE2E.java
index 84de65c..2b3f330 100755
--- a/test/e2e/e2e-test/src/test/java/org/apache/skywalking/e2e/GatewayE2E.java
+++ b/test/e2e/e2e-test/src/test/java/org/apache/skywalking/e2e/GatewayE2E.java
@@ -55,11 +55,14 @@ import org.junit.jupiter.api.BeforeAll;
 import org.testcontainers.containers.DockerComposeContainer;
 
 import static org.apache.skywalking.e2e.metrics.MetricsMatcher.verifyMetrics;
+import static org.apache.skywalking.e2e.metrics.MetricsMatcher.verifyPercentileMetrics;
 import static org.apache.skywalking.e2e.metrics.MetricsQuery.ALL_ENDPOINT_METRICS;
+import static org.apache.skywalking.e2e.metrics.MetricsQuery.ALL_ENDPOINT_MULTIPLE_LINEAR_METRICS;
 import static org.apache.skywalking.e2e.metrics.MetricsQuery.ALL_INSTANCE_METRICS;
 import static org.apache.skywalking.e2e.metrics.MetricsQuery.ALL_SERVICE_INSTANCE_RELATION_CLIENT_METRICS;
 import static org.apache.skywalking.e2e.metrics.MetricsQuery.ALL_SERVICE_INSTANCE_RELATION_SERVER_METRICS;
 import static org.apache.skywalking.e2e.metrics.MetricsQuery.ALL_SERVICE_METRICS;
+import static org.apache.skywalking.e2e.metrics.MetricsQuery.ALL_SERVICE_MULTIPLE_LINEAR_METRICS;
 import static org.apache.skywalking.e2e.metrics.MetricsQuery.ALL_SERVICE_RELATION_CLIENT_METRICS;
 import static org.apache.skywalking.e2e.metrics.MetricsQuery.ALL_SERVICE_RELATION_SERVER_METRICS;
 import static org.apache.skywalking.e2e.utils.Yamls.load;
@@ -213,6 +216,9 @@ public class GatewayE2E extends SkyWalkingTestAdapter {
                 LOGGER.info("verifying endpoint {}, metrics: {}", endpoint, metricName);
                 verifyMetrics(graphql, metricName, endpoint.getKey(), startTime);
             }
+            for (String metricName : ALL_ENDPOINT_MULTIPLE_LINEAR_METRICS) {
+                verifyPercentileMetrics(graphql, metricName, endpoint.getKey(), startTime);
+            }
         }
     }
 
@@ -221,6 +227,9 @@ public class GatewayE2E extends SkyWalkingTestAdapter {
             LOGGER.info("verifying service {}, metrics: {}", service, metricName);
             verifyMetrics(graphql, metricName, service.getKey(), startTime);
         }
+        for (String metricName : ALL_SERVICE_MULTIPLE_LINEAR_METRICS) {
+            verifyPercentileMetrics(graphql, metricName, service.getKey(), startTime);
+        }
     }
 
     private void verifyServiceInstanceRelationMetrics(final List<Call> calls) throws Exception {
diff --git a/test/e2e/e2e-test/src/test/java/org/apache/skywalking/e2e/LuaE2E.java b/test/e2e/e2e-test/src/test/java/org/apache/skywalking/e2e/LuaE2E.java
index 48ebc1d..58a2788 100644
--- a/test/e2e/e2e-test/src/test/java/org/apache/skywalking/e2e/LuaE2E.java
+++ b/test/e2e/e2e-test/src/test/java/org/apache/skywalking/e2e/LuaE2E.java
@@ -59,11 +59,14 @@ import org.springframework.http.ResponseEntity;
 import org.testcontainers.containers.DockerComposeContainer;
 
 import static org.apache.skywalking.e2e.metrics.MetricsMatcher.verifyMetrics;
+import static org.apache.skywalking.e2e.metrics.MetricsMatcher.verifyPercentileMetrics;
 import static org.apache.skywalking.e2e.metrics.MetricsQuery.ALL_ENDPOINT_METRICS;
+import static org.apache.skywalking.e2e.metrics.MetricsQuery.ALL_ENDPOINT_MULTIPLE_LINEAR_METRICS;
 import static org.apache.skywalking.e2e.metrics.MetricsQuery.ALL_INSTANCE_METRICS;
 import static org.apache.skywalking.e2e.metrics.MetricsQuery.ALL_SERVICE_INSTANCE_RELATION_CLIENT_METRICS;
 import static org.apache.skywalking.e2e.metrics.MetricsQuery.ALL_SERVICE_INSTANCE_RELATION_SERVER_METRICS;
 import static org.apache.skywalking.e2e.metrics.MetricsQuery.ALL_SERVICE_METRICS;
+import static org.apache.skywalking.e2e.metrics.MetricsQuery.ALL_SERVICE_MULTIPLE_LINEAR_METRICS;
 import static org.apache.skywalking.e2e.metrics.MetricsQuery.ALL_SERVICE_RELATION_CLIENT_METRICS;
 import static org.apache.skywalking.e2e.metrics.MetricsQuery.ALL_SERVICE_RELATION_SERVER_METRICS;
 import static org.apache.skywalking.e2e.utils.Yamls.load;
@@ -239,6 +242,9 @@ public class LuaE2E extends SkyWalkingTestAdapter {
 
                 LOGGER.info("{}: {}", metricName, metrics);
             }
+            for (String metricName : ALL_ENDPOINT_MULTIPLE_LINEAR_METRICS) {
+                verifyPercentileMetrics(graphql, metricName, endpoint.getKey(), startTime);
+            }
         }
     }
 
@@ -256,6 +262,9 @@ public class LuaE2E extends SkyWalkingTestAdapter {
             instanceRespTimeMatcher.verify(serviceMetrics);
             LOGGER.info("{}: {}", metricName, serviceMetrics);
         }
+        for (String metricName : ALL_SERVICE_MULTIPLE_LINEAR_METRICS) {
+            verifyPercentileMetrics(graphql, metricName, service.getKey(), startTime);
+        }
     }
 
     private void verifyServiceInstanceRelationMetrics(final List<Call> calls) throws Exception {
diff --git a/test/e2e/e2e-test/src/test/java/org/apache/skywalking/e2e/PHPE2E.java b/test/e2e/e2e-test/src/test/java/org/apache/skywalking/e2e/PHPE2E.java
index 2a5dcb8..47f06dc 100644
--- a/test/e2e/e2e-test/src/test/java/org/apache/skywalking/e2e/PHPE2E.java
+++ b/test/e2e/e2e-test/src/test/java/org/apache/skywalking/e2e/PHPE2E.java
@@ -56,11 +56,14 @@ import org.junit.jupiter.api.BeforeAll;
 import org.testcontainers.containers.DockerComposeContainer;
 
 import static org.apache.skywalking.e2e.metrics.MetricsMatcher.verifyMetrics;
+import static org.apache.skywalking.e2e.metrics.MetricsMatcher.verifyPercentileMetrics;
 import static org.apache.skywalking.e2e.metrics.MetricsQuery.ALL_ENDPOINT_METRICS;
+import static org.apache.skywalking.e2e.metrics.MetricsQuery.ALL_ENDPOINT_MULTIPLE_LINEAR_METRICS;
 import static org.apache.skywalking.e2e.metrics.MetricsQuery.ALL_INSTANCE_METRICS;
 import static org.apache.skywalking.e2e.metrics.MetricsQuery.ALL_SERVICE_INSTANCE_RELATION_CLIENT_METRICS;
 import static org.apache.skywalking.e2e.metrics.MetricsQuery.ALL_SERVICE_INSTANCE_RELATION_SERVER_METRICS;
 import static org.apache.skywalking.e2e.metrics.MetricsQuery.ALL_SERVICE_METRICS;
+import static org.apache.skywalking.e2e.metrics.MetricsQuery.ALL_SERVICE_MULTIPLE_LINEAR_METRICS;
 import static org.apache.skywalking.e2e.metrics.MetricsQuery.ALL_SERVICE_RELATION_CLIENT_METRICS;
 import static org.apache.skywalking.e2e.metrics.MetricsQuery.ALL_SERVICE_RELATION_SERVER_METRICS;
 import static org.apache.skywalking.e2e.utils.Yamls.load;
@@ -231,6 +234,9 @@ public class PHPE2E extends SkyWalkingTestAdapter {
 
                 LOGGER.info("{}: {}", metricName, metrics);
             }
+            for (String metricName : ALL_ENDPOINT_MULTIPLE_LINEAR_METRICS) {
+                verifyPercentileMetrics(graphql, metricName, endpoint.getKey(), startTime);
+            }
         }
     }
 
@@ -248,6 +254,9 @@ public class PHPE2E extends SkyWalkingTestAdapter {
             instanceRespTimeMatcher.verify(serviceMetrics);
             LOGGER.info("{}: {}", metricName, serviceMetrics);
         }
+        for (String metricName : ALL_SERVICE_MULTIPLE_LINEAR_METRICS) {
+            verifyPercentileMetrics(graphql, metricName, service.getKey(), startTime);
+        }
     }
 
     private void verifyServiceInstanceRelationMetrics(final List<Call> calls) throws Exception {
diff --git a/test/e2e/e2e-test/src/test/java/org/apache/skywalking/e2e/PythonE2E.java b/test/e2e/e2e-test/src/test/java/org/apache/skywalking/e2e/PythonE2E.java
index 6a0d08d..3efdee5 100644
--- a/test/e2e/e2e-test/src/test/java/org/apache/skywalking/e2e/PythonE2E.java
+++ b/test/e2e/e2e-test/src/test/java/org/apache/skywalking/e2e/PythonE2E.java
@@ -58,11 +58,14 @@ import java.util.List;
 import java.util.stream.Collectors;
 
 import static org.apache.skywalking.e2e.metrics.MetricsMatcher.verifyMetrics;
+import static org.apache.skywalking.e2e.metrics.MetricsMatcher.verifyPercentileMetrics;
 import static org.apache.skywalking.e2e.metrics.MetricsQuery.ALL_ENDPOINT_METRICS;
+import static org.apache.skywalking.e2e.metrics.MetricsQuery.ALL_ENDPOINT_MULTIPLE_LINEAR_METRICS;
 import static org.apache.skywalking.e2e.metrics.MetricsQuery.ALL_INSTANCE_METRICS;
 import static org.apache.skywalking.e2e.metrics.MetricsQuery.ALL_SERVICE_INSTANCE_RELATION_CLIENT_METRICS;
 import static org.apache.skywalking.e2e.metrics.MetricsQuery.ALL_SERVICE_INSTANCE_RELATION_SERVER_METRICS;
 import static org.apache.skywalking.e2e.metrics.MetricsQuery.ALL_SERVICE_METRICS;
+import static org.apache.skywalking.e2e.metrics.MetricsQuery.ALL_SERVICE_MULTIPLE_LINEAR_METRICS;
 import static org.apache.skywalking.e2e.metrics.MetricsQuery.ALL_SERVICE_RELATION_CLIENT_METRICS;
 import static org.apache.skywalking.e2e.metrics.MetricsQuery.ALL_SERVICE_RELATION_SERVER_METRICS;
 import static org.apache.skywalking.e2e.utils.Times.now;
@@ -224,6 +227,9 @@ public class PythonE2E extends SkyWalkingTestAdapter {
 
                 LOGGER.info("{}: {}", metricName, metrics);
             }
+            for (String metricName : ALL_ENDPOINT_MULTIPLE_LINEAR_METRICS) {
+                verifyPercentileMetrics(graphql, metricName, endpoint.getKey(), startTime);
+            }
         }
     }
 
@@ -241,6 +247,10 @@ public class PythonE2E extends SkyWalkingTestAdapter {
             instanceRespTimeMatcher.verify(serviceMetrics);
             LOGGER.info("{}: {}", metricName, serviceMetrics);
         }
+
+        for (String metricName : ALL_SERVICE_MULTIPLE_LINEAR_METRICS) {
+            verifyPercentileMetrics(graphql, metricName, service.getKey(), startTime);
+        }
     }
 
     private void verifyServiceInstanceRelationMetrics(final List<Call> calls) throws Exception {
diff --git a/test/e2e/e2e-test/src/test/java/org/apache/skywalking/e2e/kafka/KafkaE2E.java b/test/e2e/e2e-test/src/test/java/org/apache/skywalking/e2e/kafka/KafkaE2E.java
index 7a0283a..91a69b2 100644
--- a/test/e2e/e2e-test/src/test/java/org/apache/skywalking/e2e/kafka/KafkaE2E.java
+++ b/test/e2e/e2e-test/src/test/java/org/apache/skywalking/e2e/kafka/KafkaE2E.java
@@ -58,12 +58,15 @@ import org.junit.jupiter.api.BeforeAll;
 import org.testcontainers.containers.DockerComposeContainer;
 
 import static org.apache.skywalking.e2e.metrics.MetricsMatcher.verifyMetrics;
+import static org.apache.skywalking.e2e.metrics.MetricsMatcher.verifyPercentileMetrics;
 import static org.apache.skywalking.e2e.metrics.MetricsQuery.ALL_ENDPOINT_METRICS;
+import static org.apache.skywalking.e2e.metrics.MetricsQuery.ALL_ENDPOINT_MULTIPLE_LINEAR_METRICS;
 import static org.apache.skywalking.e2e.metrics.MetricsQuery.ALL_INSTANCE_JVM_METRICS;
 import static org.apache.skywalking.e2e.metrics.MetricsQuery.ALL_INSTANCE_METRICS;
 import static org.apache.skywalking.e2e.metrics.MetricsQuery.ALL_SERVICE_INSTANCE_RELATION_CLIENT_METRICS;
 import static org.apache.skywalking.e2e.metrics.MetricsQuery.ALL_SERVICE_INSTANCE_RELATION_SERVER_METRICS;
 import static org.apache.skywalking.e2e.metrics.MetricsQuery.ALL_SERVICE_METRICS;
+import static org.apache.skywalking.e2e.metrics.MetricsQuery.ALL_SERVICE_MULTIPLE_LINEAR_METRICS;
 import static org.apache.skywalking.e2e.metrics.MetricsQuery.ALL_SERVICE_RELATION_CLIENT_METRICS;
 import static org.apache.skywalking.e2e.metrics.MetricsQuery.ALL_SERVICE_RELATION_SERVER_METRICS;
 import static org.apache.skywalking.e2e.metrics.MetricsQuery.ALL_SO11Y_LABELED_METRICS;
@@ -300,6 +303,9 @@ public class KafkaE2E extends SkyWalkingTestAdapter {
 
                 LOGGER.info("{}: {}", metricName, metrics);
             }
+            for (String metricName : ALL_ENDPOINT_MULTIPLE_LINEAR_METRICS) {
+                verifyPercentileMetrics(graphql, metricName, endpoint.getKey(), startTime);
+            }
         }
     }
 
@@ -317,6 +323,10 @@ public class KafkaE2E extends SkyWalkingTestAdapter {
             instanceRespTimeMatcher.verify(serviceMetrics);
             LOGGER.info("{}: {}", metricName, serviceMetrics);
         }
+
+        for (String metricName : ALL_SERVICE_MULTIPLE_LINEAR_METRICS) {
+            verifyPercentileMetrics(graphql, metricName, service.getKey(), startTime);
+        }
     }
 
     private void verifyServiceInstanceRelationMetrics(final List<Call> calls) throws Exception {
diff --git a/test/e2e/e2e-test/src/test/java/org/apache/skywalking/e2e/simple/SimpleE2E.java b/test/e2e/e2e-test/src/test/java/org/apache/skywalking/e2e/simple/SimpleE2E.java
index c7e4f7c..790da62 100644
--- a/test/e2e/e2e-test/src/test/java/org/apache/skywalking/e2e/simple/SimpleE2E.java
+++ b/test/e2e/e2e-test/src/test/java/org/apache/skywalking/e2e/simple/SimpleE2E.java
@@ -18,9 +18,6 @@
 
 package org.apache.skywalking.e2e.simple;
 
-import java.util.List;
-import java.util.stream.Collectors;
-
 import lombok.extern.slf4j.Slf4j;
 import org.apache.skywalking.e2e.annotation.ContainerHostAndPort;
 import org.apache.skywalking.e2e.annotation.DockerCompose;
@@ -59,17 +56,23 @@ import org.junit.jupiter.api.AfterAll;
 import org.junit.jupiter.api.BeforeAll;
 import org.testcontainers.containers.DockerComposeContainer;
 
+import java.util.List;
+import java.util.stream.Collectors;
+
 import static org.apache.skywalking.e2e.metrics.MetricsMatcher.verifyMetrics;
+import static org.apache.skywalking.e2e.metrics.MetricsMatcher.verifyPercentileMetrics;
 import static org.apache.skywalking.e2e.metrics.MetricsQuery.ALL_ENDPOINT_METRICS;
-import static org.apache.skywalking.e2e.metrics.MetricsQuery.ALL_INSTANCE_METRICS;
+import static org.apache.skywalking.e2e.metrics.MetricsQuery.ALL_ENDPOINT_MULTIPLE_LINEAR_METRICS;
 import static org.apache.skywalking.e2e.metrics.MetricsQuery.ALL_INSTANCE_JVM_METRICS;
+import static org.apache.skywalking.e2e.metrics.MetricsQuery.ALL_INSTANCE_METRICS;
 import static org.apache.skywalking.e2e.metrics.MetricsQuery.ALL_SERVICE_INSTANCE_RELATION_CLIENT_METRICS;
 import static org.apache.skywalking.e2e.metrics.MetricsQuery.ALL_SERVICE_INSTANCE_RELATION_SERVER_METRICS;
 import static org.apache.skywalking.e2e.metrics.MetricsQuery.ALL_SERVICE_METRICS;
+import static org.apache.skywalking.e2e.metrics.MetricsQuery.ALL_SERVICE_MULTIPLE_LINEAR_METRICS;
 import static org.apache.skywalking.e2e.metrics.MetricsQuery.ALL_SERVICE_RELATION_CLIENT_METRICS;
 import static org.apache.skywalking.e2e.metrics.MetricsQuery.ALL_SERVICE_RELATION_SERVER_METRICS;
-import static org.apache.skywalking.e2e.metrics.MetricsQuery.ALL_SO11Y_LINER_METRICS;
 import static org.apache.skywalking.e2e.metrics.MetricsQuery.ALL_SO11Y_LABELED_METRICS;
+import static org.apache.skywalking.e2e.metrics.MetricsQuery.ALL_SO11Y_LINER_METRICS;
 import static org.apache.skywalking.e2e.utils.Times.now;
 import static org.apache.skywalking.e2e.utils.Yamls.load;
 
@@ -133,7 +136,7 @@ public class SimpleE2E extends SkyWalkingTestAdapter {
     public void tearDown() {
         trafficController.stop();
     }
-     
+
     @RetryableTest
     void services() throws Exception {
         List<Service> services = graphql.services(new ServicesQuery().start(startTime).end(now()));
@@ -195,7 +198,7 @@ public class SimpleE2E extends SkyWalkingTestAdapter {
 
         verifyServiceInstanceRelationMetrics(topology.getCalls());
     }
-    
+
     @RetryableTest
     void so11y() throws Exception {
         List<Service> services = graphql.services(new ServicesQuery().start(startTime).end(now()));
@@ -218,7 +221,7 @@ public class SimpleE2E extends SkyWalkingTestAdapter {
                         new ReadMetricsQuery().stepByMinute().metricsName(metricsName)
                             .serviceName(service.getLabel()).instanceName(instance.getLabel())
                     );
-    
+
                     LOGGER.info("{}: {}", metricsName, instanceMetrics);
                     final AtLeastOneOfMetricsMatcher instanceRespTimeMatcher = new AtLeastOneOfMetricsMatcher();
                     final MetricsValueMatcher greaterThanZero = new MetricsValueMatcher();
@@ -232,7 +235,7 @@ public class SimpleE2E extends SkyWalkingTestAdapter {
                         new ReadMetricsQuery().stepByMinute().metricsName(metricsName)
                             .serviceName(service.getLabel()).instanceName(instance.getLabel())
                     );
-    
+
                     LOGGER.info("{}: {}", metricsName, instanceMetrics);
                     Metrics allValues = new Metrics();
                     for (ReadMetrics readMetrics : instanceMetrics) {
@@ -295,7 +298,7 @@ public class SimpleE2E extends SkyWalkingTestAdapter {
             for (String metricsName : ALL_INSTANCE_JVM_METRICS) {
                 LOGGER.info("verifying service instance response time: {}", instance);
                 final Metrics instanceJVMMetrics = graphql.metrics(
-                        new MetricsQuery().stepByMinute().metricsName(metricsName).id(instance.getKey())
+                    new MetricsQuery().stepByMinute().metricsName(metricsName).id(instance.getKey())
                 );
 
                 LOGGER.info("instance jvm metrics: {}", instanceJVMMetrics);
@@ -332,6 +335,9 @@ public class SimpleE2E extends SkyWalkingTestAdapter {
 
                 LOGGER.info("{}: {}", metricName, metrics);
             }
+            for (String metricName : ALL_ENDPOINT_MULTIPLE_LINEAR_METRICS) {
+                verifyPercentileMetrics(graphql, metricName, endpoint.getKey(), startTime);
+            }
         }
     }
 
@@ -339,7 +345,7 @@ public class SimpleE2E extends SkyWalkingTestAdapter {
         for (String metricName : ALL_SERVICE_METRICS) {
             LOGGER.info("verifying service {}, metrics: {}", service, metricName);
             final Metrics serviceMetrics = graphql.metrics(
-                new MetricsQuery().stepByMinute().metricsName(metricName).id(service.getKey())
+                    new MetricsQuery().stepByMinute().metricsName(metricName).id(service.getKey())
             );
             LOGGER.info("serviceMetrics: {}", serviceMetrics);
             final AtLeastOneOfMetricsMatcher instanceRespTimeMatcher = new AtLeastOneOfMetricsMatcher();
@@ -349,6 +355,10 @@ public class SimpleE2E extends SkyWalkingTestAdapter {
             instanceRespTimeMatcher.verify(serviceMetrics);
             LOGGER.info("{}: {}", metricName, serviceMetrics);
         }
+
+        for (String metricName : ALL_SERVICE_MULTIPLE_LINEAR_METRICS) {
+            verifyPercentileMetrics(graphql, metricName, service.getKey(), startTime);
+        }
     }
 
     private void verifyServiceInstanceRelationMetrics(final List<Call> calls) throws Exception {
diff --git a/test/e2e/e2e-test/src/test/java/org/apache/skywalking/e2e/storage/StorageE2E.java b/test/e2e/e2e-test/src/test/java/org/apache/skywalking/e2e/storage/StorageE2E.java
index d9da649..899dd60 100644
--- a/test/e2e/e2e-test/src/test/java/org/apache/skywalking/e2e/storage/StorageE2E.java
+++ b/test/e2e/e2e-test/src/test/java/org/apache/skywalking/e2e/storage/StorageE2E.java
@@ -70,11 +70,14 @@ import org.junit.jupiter.api.Test;
 import org.testcontainers.containers.DockerComposeContainer;
 
 import static org.apache.skywalking.e2e.metrics.MetricsMatcher.verifyMetrics;
+import static org.apache.skywalking.e2e.metrics.MetricsMatcher.verifyPercentileMetrics;
 import static org.apache.skywalking.e2e.metrics.MetricsQuery.ALL_ENDPOINT_METRICS;
+import static org.apache.skywalking.e2e.metrics.MetricsQuery.ALL_ENDPOINT_MULTIPLE_LINEAR_METRICS;
 import static org.apache.skywalking.e2e.metrics.MetricsQuery.ALL_INSTANCE_METRICS;
 import static org.apache.skywalking.e2e.metrics.MetricsQuery.ALL_SERVICE_INSTANCE_RELATION_CLIENT_METRICS;
 import static org.apache.skywalking.e2e.metrics.MetricsQuery.ALL_SERVICE_INSTANCE_RELATION_SERVER_METRICS;
 import static org.apache.skywalking.e2e.metrics.MetricsQuery.ALL_SERVICE_METRICS;
+import static org.apache.skywalking.e2e.metrics.MetricsQuery.ALL_SERVICE_MULTIPLE_LINEAR_METRICS;
 import static org.apache.skywalking.e2e.metrics.MetricsQuery.ALL_SERVICE_RELATION_CLIENT_METRICS;
 import static org.apache.skywalking.e2e.metrics.MetricsQuery.ALL_SERVICE_RELATION_SERVER_METRICS;
 import static org.apache.skywalking.e2e.metrics.MetricsQuery.ALL_SO11Y_LINER_METRICS;
@@ -342,6 +345,10 @@ public class StorageE2E extends SkyWalkingTestAdapter {
 
                 LOGGER.info("{}: {}", metricName, metrics);
             }
+
+            for (String metricName : ALL_ENDPOINT_MULTIPLE_LINEAR_METRICS) {
+                verifyPercentileMetrics(graphql, metricName, endpoint.getKey(), startTime);
+            }
         }
     }
 
@@ -359,6 +366,10 @@ public class StorageE2E extends SkyWalkingTestAdapter {
             instanceRespTimeMatcher.verify(serviceMetrics);
             LOGGER.info("{}: {}", metricName, serviceMetrics);
         }
+
+        for (String metricName : ALL_SERVICE_MULTIPLE_LINEAR_METRICS) {
+            verifyPercentileMetrics(graphql, metricName, service.getKey(), startTime);
+        }
     }
 
     private void verifyServiceInstanceRelationMetrics(final List<Call> calls) throws Exception {
diff --git a/test/e2e/e2e-test/src/test/resources/expected/go/topo.yml b/test/e2e/e2e-test/src/test/resources/expected/go/topo.yml
index ab3a5e4..255b2ca 100644
--- a/test/e2e/e2e-test/src/test/resources/expected/go/topo.yml
+++ b/test/e2e/e2e-test/src/test/resources/expected/go/topo.yml
@@ -24,7 +24,7 @@ nodes:
     isReal: true
   - id: Z28yc2t5.1
     name: go2sky
-    type: http
+    type: GoHttpServer
     isReal: true
   - id: ZTJlLXNlcnZpY2UtamF2YS1wcm92aWRlcg==.1
     name: e2e-service-java-provider