開(kāi)發(fā)者測(cè)試(3)-采用精準(zhǔn)測(cè)試工具對(duì)springcloud微服務(wù)應(yīng)用進(jìn)行穿透測(cè)試【星云精準(zhǔn)測(cè)試】

1、微服務(wù)簡(jiǎn)介
 
  微服務(wù)英文名稱Microservice,Microservice架構(gòu)模式就是將整個(gè)Web應(yīng)用組織為一系列小的Web服務(wù)。這些小的Web服務(wù)可以獨(dú)立地編譯及部署,并通過(guò)各自暴露的API接口相互通訊。它們彼此相互協(xié)作,作為一個(gè)整體為用戶提供功能,卻可以獨(dú)立地運(yùn)行。
 
2、Spring Cloud項(xiàng)目簡(jiǎn)介
 
  Spring Cloud是基于Spring Boot的一整套實(shí)現(xiàn)微服務(wù)的框架。提供了微服務(wù)開(kāi)發(fā)所需的配置管理、服務(wù)發(fā)現(xiàn)、斷路器、只能路由、微代理、控制總線、全局鎖、決策競(jìng)選、分布式會(huì)話和集群狀態(tài)管理等組件。
 
3、前期準(zhǔn)備工作
 
3.1配置jdk

 

image
image

image

 
3.2配置tomcat
 
image

image

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

 
如若做修改,請(qǐng)按本地maven實(shí)際路徑填寫。
 
4、Spring Cloud的環(huán)境
 
 Spring Cloud源碼
 IntelliJ IDEA(以下簡(jiǎn)稱“idea”)
 MySQL
 JDK8
 Tomcat7
 Maven
 
4.1安裝環(huán)境
 
 注:IntelliJ IDEA和JDK的安裝和安裝包就用自己現(xiàn)有的就可以,星云測(cè)試將提供MySQL和Nodejs的安裝包,但必須前提是用戶自己的本機(jī)上不存在安裝的MySQL和Nodejs。
 
4.1.1腳本一鍵安裝mysql和nodejs
 
1、 打開(kāi)TT_Soft文件夾
image

 
2、以管理員身份運(yùn)行TeststarsSoftInstall.exe
image

 
3、等待自動(dòng)安裝完成,關(guān)閉窗口
image

 
4、使用net start mysql 命令啟動(dòng)MySQL服務(wù)
image

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

 
5、配置Spring Cloud
 
5.1 idea創(chuàng)建eureka服務(wù)注冊(cè)中心
 
以下簡(jiǎn)稱“8000”項(xiàng)目。
新建項(xiàng)目:
image

 
idea新建spring boot項(xiàng)目,選擇Spring Initializr,也可以在https://start.spring.io上創(chuàng)建再導(dǎo)入本地:
image

 
修改group等相關(guān)信息:
image

 
注意右上角的spring boot的版本選擇:
image

 
直接點(diǎn)擊完成即可:
image

 
到此,一個(gè)springboot項(xiàng)目就完成了。
接下來(lái)要做的是配置一個(gè)eureka服務(wù)注冊(cè)中心。
此項(xiàng)目的pom.xml添加以下內(nèi)容:

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

啟動(dòng)代碼中添加@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意思是不讓服務(wù)中心注冊(cè)自己):

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/

啟動(dòng)該eureka server:

image

 
看到下面的LOG表明Eureka服務(wù)端啟動(dòng)成功:
image

 
打開(kāi)谷歌瀏覽器(因IDEA中的默認(rèn)設(shè)置),訪問(wèn)https://localhsot:8000/可看到微服務(wù)的查看面板:
image

 
至此,服務(wù)注冊(cè)中心已配置完成,接下來(lái)進(jìn)行服務(wù)的注冊(cè)操作。
 
5.2 idea創(chuàng)建服務(wù)提供者
 
以下簡(jiǎn)稱“8001”項(xiàng)目。
 
創(chuàng)建一個(gè)Eureka-Client客戶端也就是服務(wù)提供者客戶端在向注冊(cè)中心會(huì)提供一些元數(shù)據(jù),例如主機(jī)和端口,URL,主頁(yè)等。Eureka server從每個(gè)client實(shí)例接收心跳消息。如果心跳超時(shí),則通常將該實(shí)例從注冊(cè)server中刪除。
 
按照上面的創(chuàng)建方式創(chuàng)建項(xiàng)目springcloud-provider-demo:
 
啟動(dòng)代碼中添加@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/

編寫一個(gè)簡(jiǎn)單的controller。注意編寫的controller一定要在啟動(dòng)類目錄級(jí)別或下層。不然不會(huì)加載。
項(xiàng)目啟動(dòng)類的同級(jí)目錄下新建包:controller,添加類:HelloWorld,如下所示:


image
  
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();
    }
}

啟動(dòng)項(xiàng)目SpringcloudProviderDemoApplication;
 
在瀏覽器中刷新界面:https://localhsot:8000/ 查看Eureka信息面板服務(wù)信息,可看到已顯示存在一個(gè)8001的服務(wù):
 

image

 
點(diǎn)擊圖中綠色字體部分,顯示如下圖:
image

 
8001接口后加參數(shù)/test/test訪問(wèn),注:test可為任意字符,顯示如下圖所示:
image

 
5.3 idea創(chuàng)建消費(fèi)者
 
以下簡(jiǎn)稱“8002”項(xiàng)目。
 
以下是在https://start.spring.io上創(chuàng)建再導(dǎo)入idea中的方式:
 
image

image

image

 
pom.xml添加以下內(nèi)容:

<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/

啟動(dòng)代碼中添加@EnableDiscoveryClient,并加入RestTemplate的bean,RestTemplate是spring用來(lái)操作rest資源的類,使用了模板模式。同時(shí)注意注解@LoadBalanced,只需要這個(gè)注解就可以為RestTemplate整合ribbon,從而實(shí)現(xiàn)負(fù)載均衡。而eureka和ribbon配合使用時(shí)會(huì)將服務(wù)名自動(dòng)映射成微服務(wù)的網(wǎng)絡(luò)地址。使得可伸縮性增強(qiáng)。如下所示:

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也是可以的,但是這樣的話?cǎi)詈隙仁潜容^高的,如果服務(wù)提供者的地址發(fā)生了變化那這個(gè)消費(fèi)者就不能正常運(yùn)行了。由于集成了ribbon,所以這里可以換成服務(wù)名。
 
項(xiàng)目啟動(dòng)類的同級(jí)目錄下新建包:controller,添加類:Test,如下所示:
 

image

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);
    }
}

啟動(dòng)項(xiàng)目SpringcloudCustomerDemoApplication;
 
在瀏覽器中的刷新頁(yè)面:https://localhsot:8000/  查看Eureka信息面板服務(wù)信息可看到多了一個(gè)服務(wù),如下圖8002綠色字體部分所示:

image

 
點(diǎn)擊圖中綠色字體部分:
image

 
添加參數(shù)/test/aaa,注:aaa可為任意字符:
image

 
6、測(cè)試項(xiàng)目
6.1下載工具及工具配置
6.1.1從官網(wǎng)上下載星云測(cè)試工具:http://www.teststars.cc/
 
image

 
下載以后進(jìn)行配置。
6.1.2星云測(cè)試服務(wù)端的配置
TTLangage.config配置項(xiàng)說(shuō)明:
image

 
1、 運(yùn)行下的星云測(cè)試server目錄中ThreadingTestServer.exe,在右下的圖表中點(diǎn)注冊(cè)信息,查看其時(shí)間,星云測(cè)試有兩個(gè)月的體驗(yàn),若超過(guò)兩個(gè)月,發(fā)生KEY過(guò)期,請(qǐng)聯(lián)系星云測(cè)試的工作人員,并提交服務(wù)端中的序列碼。
 
image

 
image

2、聯(lián)系星云工作人員獲取當(dāng)前服務(wù)器的key.key文件,替換到星云的server目錄下;
 
3、啟動(dòng)server目錄下的ThreadingTestServer.exe后會(huì)自動(dòng)打開(kāi)同級(jí)目錄下的ThreadingTestServerFront.exe,看到自動(dòng)彈出下面窗口后,表示連接正常。
 

image

 
6.1.3星云測(cè)試客戶端的配置
注:星云測(cè)試在線客戶端的連接需要訪問(wèn)端口17262/17263.登陸之前需要保證網(wǎng)絡(luò)連接不存在限制。
打開(kāi)客戶端之前需要修改TTClient文件夾下的Server.cfg文件,配置localIP項(xiàng)為可以與服務(wù)端正常數(shù)據(jù)通信的本機(jī)IP地址。配置localIP原因是:在客戶端需要接收來(lái)自服務(wù)端傳來(lái)的動(dòng)態(tài)數(shù)據(jù),配置本地的IP地址服務(wù)端才能把數(shù)據(jù)傳到客戶端中。
 
配置IP地址完成后雙擊運(yùn)行TTClient\TT.exe文件進(jìn)入星云測(cè)試客戶端。選擇文件->登錄,輸入星云測(cè)試服務(wù)端的IP地址以及自己的用戶名和密碼即可登錄。如下圖所示:
 
image

 
6.1.4星云測(cè)試云報(bào)表平臺(tái)服務(wù)啟動(dòng)
 
1、運(yùn)行星云測(cè)試TTWeb目錄下的bin\redis-2.4.5-win32-win64\32bit中的redis-server.exe:
image

 
2、運(yùn)行星云測(cè)試TTWeb目錄下的startTTwebserver.bat:
image

 
image

 
訪問(wèn)網(wǎng)頁(yè)報(bào)表網(wǎng)頁(yè)IP地址:3000
 
6.2創(chuàng)建工程和版本并編譯
 
1、登錄客戶端
 
2、選中待插裝的空版本,版本處于解鎖狀態(tài)(解鎖狀態(tài):右鍵-解鎖狀態(tài))
 
3、修改javaForWindows目錄下的Server.cfg配置文件,[SERVER] ip填寫實(shí)際ip地址,修改[PROPERTY]字段,與客戶端目錄下的Server.cfg同步:
 
image

 
4、修改javaForWindows目錄下的ComplierPath.xml配置文件:
同一個(gè)版本下可添加多個(gè)子模塊即proname,proname不能重復(fù),一個(gè)子模塊下可以配置多個(gè)工程路徑。
 
proName:子模塊名稱
 
project_path:測(cè)試程序源碼文件路徑
 
class_path:測(cè)試程序class文件路徑
 
注:因?yàn)轫?xiàng)目8002關(guān)聯(lián)著8001,所以這里需要編譯8001和8002兩個(gè)模塊。如下圖:
image

 
5、修改javaForWindows目錄下tt_windows文件夾下Server.ini配置文件,
ip設(shè)置為客戶端所在的ip地址:
 
image

6、在javaForWindows文件根目錄,打開(kāi)命令行運(yùn)行autoCompiler.jar進(jìn)行編譯:
jre\bin\java.exe -jar autoCompile.jar –e D:\J2EE_Enterprise_key_64bit0814\CompileToolsPkg\javaForWindows
 
注:-e后面的參數(shù)為ComplierPath.xml文件的目錄。
編譯成功如下圖所示:
 
image

 
image

 
7、在客戶端查看數(shù)據(jù),選中之前新建的空版本,右鍵點(diǎn)擊重新加載版本數(shù)據(jù)。
image

 
由于測(cè)試的時(shí)候需要運(yùn)行插裝后的代碼(編譯完成后會(huì)在java目錄同層生成src-instru目錄,src-instru目錄即為編譯插裝后的源碼);
具體操作:先將源碼目錄下未插裝的java目錄重命名為pre_java,再將編譯插裝生成的src-instru目錄命名為java。
為使函數(shù)覆蓋率可視視圖代碼部分顯示正常,需要手動(dòng)修改源碼路徑:右鍵版本,點(diǎn)擊修改源碼路徑,選擇到pre_java目錄即可。
image

6.3測(cè)試前準(zhǔn)備
 
6.3.1添加數(shù)據(jù)傳輸配置文件

數(shù)據(jù)傳輸配置文件是保證運(yùn)行的數(shù)據(jù)可以回傳到星云服務(wù)器的。配置方法是在具體的客戶測(cè)試環(huán)境下的usr/local/bin文件夾下新建配置文件config.cfg 文件內(nèi)容如下:
 
state=1
IP=(IP值寫星云測(cè)試服務(wù)端IP,注意要大寫)
(如果發(fā)布環(huán)境是windows環(huán)境,需要在C盤根目錄下配置上述文件)
 
6.3.2 agent啟動(dòng)項(xiàng)目
 
使用星云測(cè)試提供的agent包啟動(dòng)項(xiàng)目有以下兩種方式:
6.3.2.1 idea開(kāi)發(fā)工具的項(xiàng)目啟動(dòng)項(xiàng)中添加agent參數(shù)
 
注:8001項(xiàng)目和8002項(xiàng)目中均需要作如下配置:

image

 
VM options一項(xiàng)添加如下配置,jar文件按星云測(cè)試提供的agent解壓縮文件的絕對(duì)路徑填寫:
image

 
修改點(diǎn)擊Apply、OK;
插樁代碼的運(yùn)行需要添加星云測(cè)試提供的jar包,需要修改pom.xml文件來(lái)引入jar,加入到兩個(gè)<dependencies>之間,加入的代碼如下:
 
systemPath按JavaParser-j2ee.jar和jeromq-0.3.0-SNAPSHOT.jar的絕對(duì)路徑填寫:

 <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項(xiàng)目做完以上操作修改后,idea中依次運(yùn)行8000、8001、8002項(xiàng)目,啟動(dòng)項(xiàng)目成功如下圖:


image

 
image

 
image

6.3.2.2 jar包的啟動(dòng)命令中添加agent參數(shù)
 
首先正常啟動(dòng)8000項(xiàng)目;
 
插樁代碼的運(yùn)行需要添加星云測(cè)試提供的jar包:
 
idea中直接引入星云測(cè)試提供的jar包,操作如下圖所示:
 

image

 
image

 
image

 
image

引入jar包后,在idea中對(duì)8001和8002項(xiàng)目進(jìn)行打包:clean->package:
 

image

 
其次分別打開(kāi)兩個(gè)DOS窗口,輸入以下帶有agent參數(shù)的命令,啟動(dòng)8001和8002項(xiàng)目:
 
java -javaagent:D:\0823zoa-agent-1.6.2\zoa-bootstrap-1.6.2.jar -jar D:\springcloud-provider-demo\springcloud-provider-demo\target\springcloud-provider-demo-0.0.1-SNAPSHOT.jar
 
java -javaagent:D:\0823zoa-agent-1.6.2\zoa-bootstrap-1.6.2.jar -jar D:\springcloud-customer-demo\target\springcloud-customer-demo-0.0.1-SNAPSHOT.jar
 
D:\0823zoa-agent-1.6.2\zoa-bootstrap-1.6.2.jar =agent路徑;
D:\springcloud-provider-demo\springcloud-provider-demo\target\springcloud-provider-demo-0.0.1-SNAPSHOT.jar =項(xiàng)目路徑;
 
出現(xiàn)以下界面表示項(xiàng)目啟動(dòng)成功:
image

 
6.3.3設(shè)置cookie
 
打開(kāi)谷歌瀏覽器(因idea中默認(rèn)設(shè)置的是谷歌瀏覽器),輸入網(wǎng)址:http://localhost:8000打開(kāi)eureka服務(wù)注冊(cè)中心;可以看到已經(jīng)面板上已顯示8001和8002:
 
image

 
點(diǎn)擊8002對(duì)應(yīng)的綠色字體部分進(jìn)入8002對(duì)應(yīng)的界面:
image

 
image

1、在項(xiàng)目URL后加參數(shù)teststars.jsp,訪問(wèn)頁(yè)面進(jìn)行cookie設(shè)置:
 

image

 
2、點(diǎn)擊setcookie進(jìn)行設(shè)置,設(shè)置成功頁(yè)面如下:
image

 
注:為了區(qū)分測(cè)試,設(shè)置的用戶名與星云客戶端當(dāng)前登錄用戶名要保持一致。
查看控制臺(tái)打印信息可知,username設(shè)置成功:
 
image

 
7、測(cè)試結(jié)果
7.1示波器波形展示
先選中測(cè)試用例,再點(diǎn)擊開(kāi)始后就可以進(jìn)行相應(yīng)的測(cè)試工作了,測(cè)試的時(shí)候示波器可以收到動(dòng)態(tài)數(shù)據(jù)并以波形圖的方式展示出來(lái)。
 
image

 
刷新數(shù)據(jù),因?yàn)?002關(guān)聯(lián)著8001,所以這里可以看到,測(cè)試8002,8001也被覆蓋到:
image

 
image

上圖是一個(gè)spring cloud微服務(wù)架構(gòu)下兩個(gè)節(jié)點(diǎn)的調(diào)用圖,當(dāng)從第一層入口組件訪問(wèn)后,入口組件向后調(diào)用下一層節(jié)點(diǎn)的時(shí)候,后一層節(jié)點(diǎn)的運(yùn)行線程自動(dòng)取到了前一層節(jié)點(diǎn)的用戶信息,并且加入到了第二層節(jié)點(diǎn)的運(yùn)行線程控件,這樣通過(guò)精準(zhǔn)測(cè)試示波器(登錄用戶標(biāo)識(shí)和請(qǐng)求標(biāo)識(shí)一致)就可以收到兩個(gè)節(jié)點(diǎn)的數(shù)據(jù)。并且實(shí)現(xiàn)在多個(gè)用戶同時(shí)訪問(wèn)分布式應(yīng)用得時(shí)候,不同用戶出發(fā)的數(shù)據(jù)會(huì)自動(dòng)分離并路由到對(duì)應(yīng)的示波器并最終對(duì)應(yīng)到用例上。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容