【星云测试】开发者测试(3)-采用精准测试工具对springcloud微服务应用进行穿透测试

本文涉及的产品
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
云原生网关 MSE Higress,422元/月
注册配置 MSE Nacos/ZooKeeper,118元/月
简介: 微服务英文名称Microservice,Microservice架构模式就是将整个Web应用组织为一系列小的Web服务。这些小的Web服务可以独立地编译及部署,并通过各自暴露的API接口相互通讯。它们彼此相互协作,作为一个整体为用户提供功能,却可以独立地运行。  

1、微服务简介
 
  微服务英文名称Microservice,Microservice架构模式就是将整个Web应用组织为一系列小的Web服务。这些小的Web服务可以独立地编译及部署,并通过各自暴露的API接口相互通讯。它们彼此相互协作,作为一个整体为用户提供功能,却可以独立地运行。

2、Spring Cloud项目简介
 
  Spring Cloud是基于Spring Boot的一整套实现微服务的框架。提供了微服务开发所需的配置管理、服务发现、断路器、只能路由、微代理、控制总线、全局锁、决策竞选、分布式会话和集群状态管理等组件。

3、前期准备工作
 
3.1配置jdk
 


 
3.2配置tomcat
 


3.3配置maven
 
注:本文中Jetbrain的IDEA工具是集成了Maven的,如下图所示:
 

 
如若做修改,请按本地maven实际路径填写。
 
4、Spring Cloud的环境
 
 Spring Cloud源码
 IntelliJ IDEA(以下简称“idea”)
 MySQL
 JDK8
 Tomcat7
 Maven
 
4.1安装环境
 
 注:IntelliJ IDEA和JDK的安装和安装包就用自己现有的就可以,星云测试将提供MySQL和Nodejs的安装包,但必须前提是用户自己的本机上不存在安装的MySQL和Nodejs。
 
4.1.1脚本一键安装mysql和nodejs
 
1、 打开TT_Soft文件夹

 
2、以管理员身份运行TeststarsSoftInstall.exe

 
3、等待自动安装完成,关闭窗口

 
4、使用net start mysql 命令启动MySQL服务

 
5、使用node –v查看node版本

 
5、配置Spring Cloud
 
5.1 idea创建eureka服务注册中心
 
以下简称“8000”项目。
新建项目:

 
idea新建spring boot项目,选择Spring Initializr,也可以在https://start.spring.io上创建再导入本地:

 
修改group等相关信息:

 
注意右上角的spring boot的版本选择:

 
直接点击完成即可:

 
到此,一个springboot项目就完成了。
接下来要做的是配置一个eureka服务注册中心。
此项目的pom.xml添加以下内容:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter</artifactId>
</dependency>

启动代码中添加@EnableEurekaServer注解和import...,如下所示:

package com.teststars.springclouddemo;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;

@EnableEurekaServer
@SpringBootApplication
public class SpringcloudDemoApplication {

   public static void main(String[] args) {
      SpringApplication.run(SpringcloudDemoApplication.class, args);
   }
}

修改application.properties(加eureka.client.register-with-eureka=false和eureka.client.fetch-registry=false意思是不让服务中心注册自己):
 

server.port=8000
eureka.instance.hostname=localhost
eureka.client.register-with-eureka=false
eureka.client.fetch-registry=false
eureka.client.service-url.defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/

 
启动该eureka server:

 
看到下面的LOG表明Eureka服务端启动成功:

 
打开谷歌浏览器(因IDEA中的默认设置),访问https://localhsot:8000/可看到微服务的查看面板:

 
至此,服务注册中心已配置完成,接下来进行服务的注册操作。
 
5.2 idea创建服务提供者
 
以下简称“8001”项目。
 
创建一个Eureka-Client客户端也就是服务提供者客户端在向注册中心会提供一些元数据,例如主机和端口,URL,主页等。Eureka server从每个client实例接收心跳消息。如果心跳超时,则通常将该实例从注册server中删除。
 
按照上面的创建方式创建项目springcloud-provider-demo:
 
启动代码中添加@EnableDiscoveryClient和import...,如下所示:

package com.teststars.springcloudproviderdemo;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;

@EnableDiscoveryClient
@SpringBootApplication
public class SpringcloudProviderDemoApplication {

   public static void main(String[] args) {
      SpringApplication.run(SpringcloudProviderDemoApplication.class, args);
   }
}

修改application.properties:

server.port=8001
spring.application.name=springcloud-server
eureka.client.service-url.defaultZone: http://localhost:8000/eureka/

编写一个简单的controller。注意编写的controller一定要在启动类目录级别或下层。不然不会加载。
项目启动类的同级目录下新建包:controller,添加类:HelloWorld,如下所示:

  
package com.teststars.springcloudproviderdemo.controller;

import org.springframework.web.bind.annotation.*;

@RestController
public class HelloWorld {
    @GetMapping("/test/{id}")
    public String test(@PathVariable String id){
        return "hello"+id.toString();
    }
}

 
启动项目SpringcloudProviderDemoApplication;
 
在浏览器中刷新界面:https://localhsot:8000/ 查看Eureka信息面板服务信息,可看到已显示存在一个8001的服务:
 

 
点击图中绿色字体部分,显示如下图:

 
8001接口后加参数/test/test访问,注:test可为任意字符,显示如下图所示:

 
5.3 idea创建消费者
 
以下简称“8002”项目。
 
以下是在https://start.spring.io上创建再导入idea中的方式:
 

![](http://i2.51cto.com/images/blog/201809/04/5f0e721f34434af40b5217d54db3a5e6.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)
 

pom.xml添加以下内容:
 

<dependency>
   <groupId>org.springframework.cloud</groupId>
   <artifactId>spring-cloud-starter-ribbon</artifactId>
</dependency>

 
修改application.properties:
 

server.port=8002
spring.application.name=springcloud-customer
eureka.client.service-url.defaultZone: http://localhost:8000/eureka/

启动代码中添加@EnableDiscoveryClient,并加入RestTemplate的bean,RestTemplate是spring用来操作rest资源的类,使用了模板模式。同时注意注解@LoadBalanced,只需要这个注解就可以为RestTemplate整合ribbon,从而实现负载均衡。而eureka和ribbon配合使用时会将服务名自动映射成微服务的网络地址。使得可伸缩性增强。如下所示: 

package com.teststars.springcloudcustomerdemo;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.client.loadbalancer.LoadBalanced;
import org.springframework.context.annotation.Bean;
import org.springframework.web.client.RestTemplate;

@EnableDiscoveryClient
@SpringBootApplication
public class SpringcloudCustomerDemoApplication {

   public static void main(String[] args) {
      SpringApplication.run(SpringcloudCustomerDemoApplication.class, args);
   }
   @Bean
   @LoadBalanced
   public RestTemplate restTemplate(){
      return new RestTemplate();
   }
}

 
编写controller,这里restTemplate.getForObject中的url换成http://localhost:8001/test也是可以的,但是这样的话耦合度是比较高的,如果服务提供者的地址发生了变化那这个消费者就不能正常运行了。由于集成了ribbon,所以这里可以换成服务名。
 
项目启动类的同级目录下新建包:controller,添加类:Test,如下所示:
 

package com.teststars.springcloudcustomerdemo.controller;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;

@RestController
public class Test {
    @Autowired
    private RestTemplate restTemplate;

    @GetMapping("/test/{id}")
    public String test(@PathVariable String id){
        return this.restTemplate.getForObject("http://SPRINGCLOUD-SERVER/test/"+id,String.class);
    }
}

 
启动项目SpringcloudCustomerDemoApplication;
 
在浏览器中的刷新页面:https://localhsot:8000/  查看Eureka信息面板服务信息可看到多了一个服务,如下图8002绿色字体部分所示:

 
点击图中绿色字体部分:

 
添加参数/test/aaa,注:aaa可为任意字符:

 
6、测试项目
6.1下载工具及工具配置
6.1.1从官网上下载星云测试工具:http://www.teststars.cc/
 

 
下载以后进行配置。
6.1.2星云测试服务端的配置
TTLangage.config配置项说明:

 
1、 运行下的星云测试server目录中ThreadingTestServer.exe,在右下的图表中点注册信息,查看其时间,星云测试有两个月的体验,若超过两个月,发生KEY过期,请联系星云测试的工作人员,并提交服务端中的序列码。
 

 

 

2、联系星云工作人员获取当前服务器的key.key文件,替换到星云的server目录下;
 
3、启动server目录下的ThreadingTestServer.exe后会自动打开同级目录下的ThreadingTestServerFront.exe,看到自动弹出下面窗口后,表示连接正常。
 

 ![](http://i2.51cto.com/images/blog/201809/04/9bae5db73f3bc767720d29f378171ec9.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)
  

6.1.3星云测试客户端的配置
注:星云测试在线客户端的连接需要访问端口17262/17263.登陆之前需要保证网络连接不存在限制。
打开客户端之前需要修改TTClient文件夹下的Server.cfg文件,配置localIP项为可以与服务端正常数据通信的本机IP地址。配置localIP原因是:在客户端需要接收来自服务端传来的动态数据,配置本地的IP地址服务端才能把数据传到客户端中。
 
配置IP地址完成后双击运行TTClientTT.exe文件进入星云测试客户端。选择文件->登录,输入星云测试服务端的IP地址以及自己的用户名和密码即可登录。如下图所示:
 

 
6.1.4星云测试云报表平台服务启动
 
1、运行星云测试TTWeb目录下的binredis-2.4.5-win32-win6432bit中的redis-server.exe:

 
2、运行星云测试TTWeb目录下的startTTwebserver.bat:

 

 
访问网页报表网页IP地址:3000
 
6.2创建工程和版本并编译
 
1、登录客户端
 
2、选中待插装的空版本,版本处于解锁状态(解锁状态:右键-解锁状态)
 
3、修改javaForWindows目录下的Server.cfg配置文件,[SERVER] ip填写实际ip地址,修改[PROPERTY]字段,与客户端目录下的Server.cfg同步:
 

 
4、修改javaForWindows目录下的ComplierPath.xml配置文件:
同一个版本下可添加多个子模块即proname,proname不能重复,一个子模块下可以配置多个工程路径。
 
proName:子模块名称
 
project_path:测试程序源码文件路径
 
class_path:测试程序class文件路径
 
注:因为项目8002关联着8001,所以这里需要编译8001和8002两个模块。如下图:

 
5、修改javaForWindows目录下tt_windows文件夹下Server.ini配置文件,
ip设置为客户端所在的ip地址:
 

6、在javaForWindows文件根目录,打开命令行运行autoCompiler.jar进行编译:
jrebinjava.exe -jar autoCompile.jar –e D:J2EE_Enterprise_key_64bit0814CompileToolsPkgjavaForWindows
 
注:-e后面的参数为ComplierPath.xml文件的目录。
编译成功如下图所示:
 

 

 
7、在客户端查看数据,选中之前新建的空版本,右键点击重新加载版本数据。

 
由于测试的时候需要运行插装后的代码(编译完成后会在java目录同层生成src-instru目录,src-instru目录即为编译插装后的源码);
具体操作:先将源码目录下未插装的java目录重命名为pre_java,再将编译插装生成的src-instru目录命名为java。
为使函数覆盖率可视视图代码部分显示正常,需要手动修改源码路径:右键版本,点击修改源码路径,选择到pre_java目录即可。

6.3测试前准备
 
6.3.1添加数据传输配置文件

 
数据传输配置文件是保证运行的数据可以回传到星云服务器的。配置方法是在具体的客户测试环境下的usr/local/bin文件夹下新建配置文件config.cfg 文件内容如下:
 
state=1
IP=(IP值写星云测试服务端IP,注意要大写)
(如果发布环境是windows环境,需要在C盘根目录下配置上述文件)
 
6.3.2 agent启动项目
 
使用星云测试提供的agent包启动项目有以下两种方式:
6.3.2.1 idea开发工具的项目启动项中添加agent参数
 
注:8001项目和8002项目中均需要作如下配置:

 
VM options一项添加如下配置,jar文件按星云测试提供的agent解压缩文件的绝对路径填写:

 
修改点击Apply、OK;
插桩代码的运行需要添加星云测试提供的jar包,需要修改pom.xml文件来引入jar,加入到两个之间,加入的代码如下:
 
systemPath按JavaParser-j2ee.jar和jeromq-0.3.0-SNAPSHOT.jar的绝对路径填写:
 

 <dependency>
   <groupId>com.zoa</groupId>
   <artifactId>JavaParser-ZMQ</artifactId>
   <version>1.0</version>
   <scope>system</scope>
   <systemPath>D:\J2EE_Enterprise_key_64bit0814\client\MQ\JavaParser-j2ee.jar</systemPath>
</dependency>
<dependency>
   <groupId>com.zoa</groupId>
   <artifactId>jeromq</artifactId>
   <version>1.0</version>
   <scope>system</scope>
   <systemPath>D:\J2EE_Enterprise_key_64bit0814\client\MQ\jeromq-0.3.0-SNAPSHOT.jar</systemPath></dependency>

8001和8002项目做完以上操作修改后,idea中依次运行8000、8001、8002项目,启动项目成功如下图:

 

 ![](http://i2.51cto.com/images/blog/201809/04/cfe53231a1dc376d7e94fdad62d7dc5f.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)

6.3.2.2 jar包的启动命令中添加agent参数
 
首先正常启动8000项目;
 
插桩代码的运行需要添加星云测试提供的jar包:
 
idea中直接引入星云测试提供的jar包,操作如下图所示:
 

 

 ![](http://i2.51cto.com/images/blog/201809/04/9759854378329fa332926a0047b26784.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)
  ![](http://i2.51cto.com/images/blog/201809/04/4e568075d8b7362e81b62142c8a5a8ae.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)

引入jar包后,在idea中对8001和8002项目进行打包:clean->package:
 

 
其次分别打开两个DOS窗口,输入以下带有agent参数的命令,启动8001和8002项目:
 
java -javaagent:D:0823zoa-agent-1.6.2zoa-bootstrap-1.6.2.jar -jar D:springcloud-provider-demospringcloud-provider-demotargetspringcloud-provider-demo-0.0.1-SNAPSHOT.jar
 
java -javaagent:D:0823zoa-agent-1.6.2zoa-bootstrap-1.6.2.jar -jar D:springcloud-customer-demotargetspringcloud-customer-demo-0.0.1-SNAPSHOT.jar
 
D:0823zoa-agent-1.6.2zoa-bootstrap-1.6.2.jar =agent路径;
D:springcloud-provider-demospringcloud-provider-demotargetspringcloud-provider-demo-0.0.1-SNAPSHOT.jar =项目路径;
 
出现以下界面表示项目启动成功:

 
6.3.3设置cookie
 
打开谷歌浏览器(因idea中默认设置的是谷歌浏览器),输入网址:http://localhost:8000打开eureka服务注册中心;可以看到已经面板上已显示8001和8002:
 

 
点击8002对应的绿色字体部分进入8002对应的界面:

 

 

1、在项目URL后加参数teststars.jsp,访问页面进行cookie设置:
 

 
2、点击setcookie进行设置,设置成功页面如下:

 
注:为了区分测试,设置的用户名与星云客户端当前登录用户名要保持一致。
查看控制台打印信息可知,username设置成功:
 

 
7、测试结果
7.1示波器波形展示
先选中测试用例,再点击开始后就可以进行相应的测试工作了,测试的时候示波器可以收到动态数据并以波形图的方式展示出来。
 

 
刷新数据,因为8002关联着8001,所以这里可以看到,测试8002,8001也被覆盖到:

 

 

上图是一个spring cloud微服务架构下两个节点的调用图,当从第一层入口组件访问后,入口组件向后调用下一层节点的时候,后一层节点的运行线程自动取到了前一层节点的用户信息,并且加入到了第二层节点的运行线程控件,这样通过精准测试示波器(登录用户标识和请求标识一致)就可以收到两个节点的数据。并且实现在多个用户同时访问分布式应用得时候,不同用户出发的数据会自动分离并路由到对应的示波器并最终对应到用例上。

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
11天前
|
Java 对象存储 开发者
解析Spring Cloud与Netflix OSS:微服务架构中的左右手如何协同作战
Spring Cloud与Netflix OSS不仅是现代微服务架构中不可或缺的一部分,它们还通过不断的技术创新和社区贡献推动了整个行业的发展。无论是对于初创企业还是大型组织来说,掌握并合理运用这两套工具,都能极大地提升软件系统的灵活性、可扩展性以及整体性能。随着云计算和容器化技术的进一步普及,Spring Cloud与Netflix OSS将继续引领微服务技术的发展潮流。
25 0
|
9天前
|
负载均衡 Java 网络架构
实现微服务网关:Zuul与Spring Cloud Gateway的比较分析
实现微服务网关:Zuul与Spring Cloud Gateway的比较分析
21 5
|
8天前
|
前端开发 API 微服务
SpringCloud微服务之间使用Feign调用不通情况举例
SpringCloud微服务之间使用Feign调用不通情况举例
40 2
|
10天前
|
Java 对象存储 开发者
故障隔离与容错处理:Hystrix在Spring Cloud和Netflix OSS中的应用
故障隔离与容错处理:Hystrix在Spring Cloud和Netflix OSS中的应用
27 3
|
11天前
|
Java API 对象存储
微服务魔法启动!Spring Cloud与Netflix OSS联手,零基础也能创造服务奇迹!
这段内容介绍了如何使用Spring Cloud和Netflix OSS构建微服务架构。首先,基于Spring Boot创建项目并添加Spring Cloud依赖项。接着配置Eureka服务器实现服务发现,然后创建REST控制器作为API入口。为提高服务稳定性,利用Hystrix实现断路器模式。最后,在启动类中启用Eureka客户端功能。此外,还可集成其他Netflix OSS组件以增强系统功能。通过这些步骤,开发者可以更高效地构建稳定且可扩展的微服务系统。
28 1
|
23天前
|
存储 搜索推荐 数据库
MarkLogic在微服务架构中的应用:提供服务间通信和数据共享的机制
随着微服务架构的发展,服务间通信和数据共享成为关键挑战。本文介绍MarkLogic数据库在微服务架构中的应用,阐述其多模型支持、索引搜索、事务处理及高可用性等优势,以及如何利用MarkLogic实现数据共享、服务间通信、事件驱动架构和数据分析,提升系统的可伸缩性和可靠性。
22 5
|
23天前
|
运维 Cloud Native Devops
云原生架构的崛起与实践云原生架构是一种通过容器化、微服务和DevOps等技术手段,帮助应用系统实现敏捷部署、弹性扩展和高效运维的技术理念。本文将探讨云原生的概念、核心技术以及其在企业中的应用实践,揭示云原生如何成为现代软件开发和运营的主流方式。##
云原生架构是现代IT领域的一场革命,它依托于容器化、微服务和DevOps等核心技术,旨在解决传统架构在应对复杂业务需求时的不足。通过采用云原生方法,企业可以实现敏捷部署、弹性扩展和高效运维,从而大幅提升开发效率和系统可靠性。本文详细阐述了云原生的核心概念、主要技术和实际应用案例,并探讨了企业在实施云原生过程中的挑战与解决方案。无论是正在转型的传统企业,还是寻求创新的互联网企业,云原生都提供了一条实现高效能、高灵活性和高可靠性的技术路径。 ##
29 3
|
23天前
|
监控 Java Nacos
SpringCloud基础5——微服务保护、Sentinel
sentinel、雪崩问题、流量控制、隔离和降级、授权规则、规则持久化
SpringCloud基础5——微服务保护、Sentinel
|
23天前
|
JavaScript 前端开发 Java
一文让你了解微服务契约测试
谈到微服务,大家都想到契约测试,到底什么是契约测试呢,为什么要使用契约测试呢,关于这样的文章很多,本文将结合Spring Boot让你了解微服务契约测试。
15 0
一文让你了解微服务契约测试
|
28天前
|
Cloud Native 持续交付 云计算
云原生之旅:从传统应用到容器化微服务
随着数字化转型的浪潮不断推进,企业对IT系统的要求日益提高。本文将引导你了解如何将传统应用转变为云原生架构,重点介绍容器化和微服务的概念、优势以及实施步骤,旨在帮助读者掌握将应用迁移到云平台的关键技巧,确保在云计算时代保持竞争力。
22 5
下一篇
无影云桌面