基于Spring開發的DUBBO服務接口測試

???????????? 基于Spring開發的DUBBO服務接口測試

?

知識共享主要內容:

1、 Dubbo相關概念和架構,以及dubbo服務程序開發步驟。

2、 基于Spring開發框架的dubbo服務接口測試相關配置。

3、 spring test+junit和spring test+TestNG兩種測試框架腳本編寫方法。

?

一、??????? DUBBODUBBO架構

1、????????? 什么是dubbo?DUBBO是一個分布式服框架,致力于提供高性能和透明化的RPC遠程服務調用方案,是阿里巴巴SOA化治理方案的核心框架,每天為2,000+個服務提供3,000,000,000+次訪問量支持,并被廣泛應用于阿里巴巴集團的各成員站點。

2、????????? DUBBO架構:

??????

二、??????? Dubbo程序發過(提供者,服者,配置文件)

  1. 服務提供者:

1)?????? 定義服務接口

2)?????? 定義接口實現類

3)?????? Spring配置聲明暴露服務:

????

4)?????? 加載Spring配置

?????

  1. 服務消費者:

5)?????? Spring配置引用遠程服務

??????

6)?????? 加載Spring配置,并調用遠程服務

u? ClassPathXmlApplicationContext加載配置,然后用getBean方法獲取遠程代理。

?????

u? 用IOC注入:測試腳本是用這種方式的。

?

三、??????? Dubbo服務接口測試環境準備

1、??? POM.xml引入對應service應用jar依賴。

比如:

dependency>
??? <groupId>com.XXXX.basisdata</groupId>
??? <artifactId>basisdata-bankbill-common-facade</artifactId>
??? <version>1.1.0</version>
</dependency>

2、??? Dubbo服務spring配置

u? 由于測試過程是遠程調用接口的過程,所以只需要進行消費方spring配置。

u? 由于阿里云dubbo應用的測試環境屬于外網,本地機器需將請求通過公網機器的端口轉發給測試環境,需要在公網IPTable配置映射。

u? 沒有經過注冊中心,所以不用配置注冊中心。

Spring-dubbo配置文件只需對每個service如下配置:

<dubbo:reference interface="com.xxx.xxx.xxx.service.BillDetailService" id="billDetailService" url="dubbo://121.43.177.8:20100" timeout="10000"/>
然后在spring-context.xml加入引入資源配置即可。
<import resource="spring-secret.xml" /> 
?

四、??????? 腳本設計結構

  1. 創建測試類公共父類,繼承AbstractTestNGSpringContextTests或者AbstractJUnit4SpringContextTests。
  2. 創建測試類,繼承父類,編寫相應代碼。

???????

五、??????? 腳本兩種基本編寫方法:

1、??? 繼承AbstractJUnit4SpringContextTests方法。

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = {"classpath:/spring-context.xml"})
@Configuration
public class BaseJunit4Test extends AbstractJUnit4SpringContextTests {
}
?

2、??? 繼承AbstractTestNGSpringContextTests方法。

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = {"classpath:/spring-context.xml"})
@Configuration
public class BaseTestNGTest extends AbstractTestNGSpringContextTests {
}
?????????????? 測試類繼承BaseTestNGTest即可。

六、??????? 數據驅動兩種基本編寫方法:

1、 基于Junit數據驅動。

u? 父類配置:

  • @RunWith(Parameterized.class)
    @ContextConfiguration(locations = {"classpath:/spring-context.xml"})
    @Configuration
    public class BaseJunit4Test extends AbstractJUnit4SpringContextTests {
    ??? protected TestContextManager testContextManager;
    ??? @Before
    ??? public void setUpContext() throws Exception {
    ??????? this.testContextManager = new TestContextManager(getClass());
    ??????? this.testContextManager.prepareTestInstance(this);
    ??? }
    }

u? 接口測試類需編寫一個構造類和一個由@Parameterized.Parameters參數數據方法

@Parameterized.Parameters
public static Collection<Integer[]> getTestParameters(){
//
//??????? List<Integer[]> list = new ArrayList<Integer[]>();
//??????? list.add(new Integer[]{2000998248});? //expected,valueOne,valueTwo
//??????? list.add(new Integer[]{2000020021});
//??????? list.add(new Integer[]{2001999335});
//??????? String st=list.toString();
//??????? System.out.println("list值:" + st);
//??????? return list;
//??? }

List<Integer[]> list = new ArrayList<Integer[]>();

list? =Arrays.asList(new ??Integer[][]{{2000998248},{2000020021},{2001999335}});
return list;
}
  • 構造方法:
  • public TestSelectListByUserId2(Integer userid){
    ??? this.testUser = userid;
    }

2、 基于TESTNG數據驅動。

u? 父類配置:

@ContextConfiguration(locations = {"classpath:/spring-context.xml"})
@Configuration
public class BaseTestNGTest extends AbstractTestNGSpringContextTests{
}

u? 測試接口類需加一個由@DataProvider(name = "集合標識")注解的數據收集的方法,并將@Test(dataProvider="集合標識")給需要用參數的測試方法。

數據收集方法:
@DataProvider(name = "testdata")
public Object[][] dataprovide()throws IOException{
System.out.println("dataprovide方法執行");
//??????? return new Object[][]{{2000020013,2},{2001000138,0},{2001000139,2}};
Object[][] testData =ExcelHandle.readXlsx(excel, "工作表2");
return testData;
}

u? 測試方法:

?????? @Test(dataProvider="testdata")
public void test_case_1(HashMap<String, String> map) throws Exception {
operatorUserId=Integer.valueOf(map.get("userId"));
exceptedvalue =Integer.valueOf(map.get("excepted"));
????????//++++++++++++++實際值+++++++++++++
Integer actual_value =
billService.getUserEmailNameCount(operatorUserId);

//預期值
Integer excepted_value =get_excepted_value(operatorUserId);
//++++++++++++++驗證+++++++++++++
Assert.assertEquals(actual_value,exceptedvalue);
}

?

轉載于:https://www.cnblogs.com/ceshi2016/p/6527210.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/253206.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/253206.shtml
英文地址,請注明出處:http://en.pswp.cn/news/253206.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

ioctl之FIONREAD

在學習ioctl 時常常跟 read, write 混淆。其實 ioctl 是用來設置硬件控制寄存器&#xff0c;或者讀取硬件狀態寄存器的數值之類的。 而read,write 是把數據丟入緩沖區&#xff0c;硬件的驅動從緩沖區讀取數據一個個發送或者把接收的數據送入緩沖區。 ioctl(keyFd, FIONREAD, &a…

電感基礎與選型介紹

電感是一種常見的被動元件&#xff0c;常用在LC振蕩電路、中低頻的濾波電路&#xff0c;DCDC能量轉換電路中&#xff0c;其應用頻率一般不超過50MHz。 1.電感的主要作用 通直流&#xff0c;阻交流阻交流變化&#xff0c;保持電流穩定----楞次定律濾波 2.電感的主要分類 3.電…

[題解]Codeforces Round #519 - B. Lost Array

【題目】 B. Lost Array 【描述】 Bajtek有一個數組x[0],x[1],...,x[k-1]但被搞丟了&#xff0c;但他知道另一個n1長的數組a&#xff0c;有a[0]0&#xff0c;對i1,2,...,n。由此可以找到數組x[0],x[1],...,x[k-1]的一些可能情況&#xff0c;即滿足這個關系的數組x[0],x[1],...,…

Python正則替換字符串函數re.sub用法示例(1)

本文實例講述了Python正則替換字符串函數re.sub用法。分享給大家供大家參考&#xff0c;具體如下&#xff1a; python re.sub屬于python正則的標準庫,主要是的功能是用正則匹配要替換的字符串然后把它替換成自己想要的字符串的方法re.sub 函數進行以正則表達式為基礎的替換工作…

LeetCode 24 Swap Nodes in Pairs (交換相鄰節點)

題目鏈接&#xff1a; https://leetcode.com/problems/swap-nodes-in-pairs/?tabDescriptionProblem: 交換相鄰的兩個節點如上圖所示&#xff0c;遞歸進行交換。從最尾端開始&#xff0c;當最尾端只有一個節點時&#xff0c;停止交換否則執行 swap(head.next) 參考代碼&#x…

Netra基于Rdk平臺的軟件框架設計

Netra&#xff08;DM8168&#xff09;處理器是個多核處理器&#xff0c;每個核之間相互獨立卻又相互關聯&#xff0c;如何高效簡潔地利用每個核完成一套系統功能是非常關鍵的&#xff0c;RDK這套軟件平臺就是針對這種多核平臺設計的一套多通道視頻應用方案&#xff0c;主要用于…

電感嘯叫原因與應對措施

大部分硬件工程師應該都遇到過,PCBA上電后出現“滋滋滋”的叫聲,其聲響或大或小,或時有時無,或深沉或刺耳,或變化無常者皆有。該現象我們稱為“嘯叫”,一般分為電感嘯叫和電容嘯叫。 其中電感嘯叫最為常見,尤其在DCDC電路中,大部分是因為 器件參數選擇不合理 導致的。…

ASP.NET Web API 記錄請求響應數據到日志的一個方法

原文:ASP.NET Web API 記錄請求響應數據到日志的一個方法原文&#xff1a;http://blog.bossma.cn/dotnet/asp-net-web-api-log-request-response/ ASP.NET Web API 記錄請求響應數據到日志的一個方法 REST風格的服務架構已經成為越來越多人的選擇&#xff0c;之前我用過WCF來實…

Nginx + php

Nginx php 目前有兩種方式1.nginx apache nginx 負責靜態內容、反向代理和保持連接&#xff0c;apache則負責處理動態內容。 2.nginx fastcgi php-fpm一、nginx apache 采用Nginx前端Apache后端的服務器架構&#xff0c;這樣可以很好地結合了Nginx高并發和靜態頁面高效率以…

Android Fragment完全解析,關于碎片你所需知道的一切

我們都知道&#xff0c;Android上的界面展示都是通過Activity實現的&#xff0c;Activity實在是太常用了&#xff0c;我相信大家都已經非常熟悉了&#xff0c;這里就不再贅述。 但是Activity也有它的局限性&#xff0c;同樣的界面在手機上顯示可能很好看&#xff0c;在平板上就…

圖像--攝像頭組成與基本參數

基本組成 Sensor: 圖象傳感器 FPC: 電路板 IR:紅外濾波片 Holder:基座 Lens:鏡頭 其他 核心部件&#xff1a;1- SENSOR 2- LENS Sensor參數 類別 指標 參考 備注 Sensor 廠家 sony 三星 OV 格科微由原廠提供完整規格書和型號 低像素需要注意 分辨率 0.3MP (VGA)模組…

1.I2C協議

1.I2C協議2條雙向串行線&#xff0c;一條數據線SDA&#xff0c;一條時鐘線SCL。SDA傳輸數據是大端傳輸&#xff0c;每次傳輸8bit&#xff0c;即一字節。支持多主控(multimastering)&#xff0c;任何時間點只能有一個主控。總線上每個設備都有自己的一個addr&#xff0c;共7個bi…

聯想啟天M715E安裝硬盤保護系統和網絡同傳

現還是學生&#xff0c;雖然大四課上的少&#xff0c;實驗室去的也不勤了&#xff0c;但指導老師有事吩咐&#xff0c;還是要辦好的。 沈老師榮升軟件實驗室主任&#xff0c;學校給了2個機房&#xff0c;一個70臺聯想啟天M715E&#xff0c;一個30臺新的70臺新主機&#xff08;配…

圖像--攝像頭數據輸出格式與傳輸接口

一、 數據輸出格式 RAW data 格式: CMOS 在將光信號轉換為電信號時的電平高低的原始記錄&#xff0c;單純地將沒有進行任何處理的圖像數據&#xff0c;即攝像元件直接得到的電信號進行數字化處理而得到的。 每個pixel只能感光R光或者B光或者G光&am…

計算機入門與學習回憶(一)

這個回憶&#xff0c;不是記錄什么成功&#xff0c;而記錄一些失敗的經歷。 大約初中還是高中的時候&#xff0c;就玩過計算機。那是一個很冷的冬天的晚上&#xff0c;一臺華南計算機所造的仿APPLE II的計算機。 這臺計算機很簡陋&#xff0c;只有一個主機&#xff0c;沒有屏幕…

怎么建立微信生態用戶增長模型?

微信最新數據及中國網民最新數據概述截止到2018年&#xff0c;移動網民用戶增長放緩&#xff0c;接近人口大盤。微信作為全國移動網民的一款超級應用&#xff0c;在移動網民的***率超過90%。微信最近一年的新增用戶主要來自中老年用戶群體和鄉鎮用戶群體***。易觀最新發布的8月…

數據庫設計的三大范式

三大范式是為了了更好的設計數據庫 1. 所謂第一范式&#xff08;1NF&#xff09;是指在關系模型中&#xff0c;對列添加的一個規范要求&#xff0c;所有的列都應該是原子性的&#xff0c;即數據庫表的每一列都是不可分割的原子數據項&#xff0c;而不能是集合&#xff0c;數組&…

圖像-攝像頭驅動流程

驅動架構 在Kernel層用camera的驅動將其驅動起來以后&#xff0c;將硬件驅動接口交給Hal&#xff1b; 上層的camera應用程序在andriod實時系統的虛擬機中&#xff0c;加載留給camera公用的庫文 件&#xff0c;調用Hal層的接口來控制camera硬件來實現功能。 驅動流程 打開came…

第四章

選擇結構&#xff08;二&#xff09; 學習本章會用到的單詞&#xff1a; case&#xff1a;實例&#xff0c;情形&#xff0c;情況 switch&#xff1a;轉換&#xff0c;切換&#xff0c;開關 default&#xff1a;系統默認值&#xff0c;違約&#xff0c;預設。缺省 exit&#xf…

tensorflow的一些函數

1.tf.constant(value,dtypeNone,shapeNone,nameConst) 注意這個函數創造的是一個常數tensor&#xff0c;而不是一個具體的常數 value:即可以是list&#xff0c;也可以是value dtype:對應生成的tensor里的元素的類型 # Constant 1-D Tensor populated with value list.tensor t…