在Eclipse中高效運行HTTP / REST集成測試

最近,我有機會使用由我親愛的Holger Staudacher編寫的OSGi-JAX-RS-Connector庫。 通過連接器,您可以通過將@Path注釋的類型注冊為OSGi服務來輕松發布資源-實際上,它工作得很好。

對于我來說,使用普通的JUnit測試編寫驅動的服務類測試是很自然的事,但提供附加的集成測試也很重要。 這些測試允許檢查此類服務的運行時可用性和功能。 為了提供后者,我使用了Holger編寫的另一個小助手– restfuse ,它是用于自動HTTP / REST測試的JUnit擴展。

該場景看起來像這樣:

服務

@Path( '/message' )
public class SampleService {@GET@Produces( MediaType.TEXT_PLAIN )public String getMessage() {return 'Hello World';}
}

一個JUnit測試用例

public class SampleServiceTest {@Testpublic void testGetMessage() {SampleService service = new SampleService();String message = service.getMessage();assertEquals( 'Hello World', message );}
}

服務注冊

<?xml version='1.0' encoding='UTF-8'?>
<scr:componentxmlns:scr='http://www.osgi.org/xmlns/scr/v1.1.0'name='SampleService'><implementation class='sample.SampleService'/><service><provide interface='sample.SampleService'/></service>
</scr:component>

Restfuse集成測試

@RunWith( HttpJUnitRunner.class )
public class SampleServiceHttpTest {@Rulepublic Destination destination= new Destination( 'http://localhost:9092' );@Contextprivate Response response;@HttpTest( method = Method.GET, path = '/services/message' )public void checkMessage() {String body = response.getBody( String.class );assertOk( response );assertEquals( MediaType.TEXT_PLAIN, response.getType() );assertEquals( 'HelloWorld', body );}
}

正在運行的服務

盡管所有這些工作都非常簡單,但是它以某種方式使我感到困惑,即在我能夠執行集成測試之前,首先要在本地運行集成測試才能啟動服務器。 由于忙于手頭的任務,我經常忘記啟動服務器,遇到連接超時等問題。

但是我通過使用PDE JUnit啟動配置找到了解決方案,因為可以在運行測試的過程中將這樣的配置設置為啟動服務器。

為此,創建并選擇一個包含所有要運行1的集成測試的測試套件。

…之后切換到主標簽并選擇無頭模式...

…最后但并非最不重要的一點是配置服務器使用的程序參數,在我們的案例中,該參數主要涉及端口定義。

“插件”選項卡中的捆綁軟件選擇包含與用于獨立運行服務器的osgi啟動配置相同的捆綁軟件,以及JUnit,PDE JUnit,restfuse捆綁軟件及其依賴項。 所選的測試套件可能如下所示:

@RunWith( Suite.class )
@SuiteClasses( {SampleServiceHttpTest.class
} )
public class AllRestApiIntegrationTestSuite {public static String BASE_URL= 'http://localhost:'+ System.getProperty( 'org.osgi.service.http.port' );
}

唯一不尋常的是BASE_URL常量定義。 如上所述,測試運行的服務器端口在啟動配置中指定為程序參數。 但是Restfuse測試需要在目標規則定義期間提供端口。 使用上述方法可以在不影響測試的情況下更改配置中的端口。 只需將常量用作定義中的參數,如下面的代碼段2 3所示

@Rulepublic Destination destination= new Destination( BASE_URL );

這個簡單的設置效果很好,并改善了我在本地運行集成測試的工作流程。 將啟動配置保存在共享項目中后,您的團隊成員就可以輕松地重用啟動配置。

今天就這樣,反饋一如既往地受到高度贊賞。 順便說一句,霍爾格答應我寫一篇文章,介紹如何將上述內容集成到基于Maven / tycho的版本4中 -請繼續關注

  1. 當然,您也可以使用運行選定項目,程序包或源文件夾的所有測試的可能性,但是出于我們的目的,使用套件方法并運行單個測試用例是可以的
  2. 在現實世界中,您可能會為常量定義提供一個單獨的類,以避免將測試耦合到套件。 為了簡化起見,我在這里略過。
  3. 請注意,使用靜態導入包含BASE_URL,以提高代碼段的可讀性
  4. Holger信守諾言,請參閱: http : //eclipsesource.com/blogs/2012/09/11/running-httprest-integration-tests-in-an-eclipse-tycho-build/


參考:來自JCG合作伙伴 Frank Appel的Code Affine博客在Eclipse中有效地運行HTTP / REST集成測試 。

翻譯自: https://www.javacodegeeks.com/2012/11/running-httprest-integration-tests-efficiently-in-eclipse.html

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

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

相關文章

Eclipse安裝TestNG插件

Eclipse安裝TestNG插件 TestNG是什么? TestNG按照其文檔的定義是&#xff1a; TestNG是一個測試框架&#xff0c;其靈感來自JUnit和NUnit的&#xff0c;但引入了一些新的功能&#xff0c;使其功能更強大&#xff0c;使用更方便。 TestNG是一個開源自動化測試框架;TestNG表示下…

basicdatasourcefactory mysql_Java基礎-DBCP連接池(BasicDataSource類)詳解

Java基礎-DBCP連接池(BasicDataSource類)詳解作者&#xff1a;尹正杰版權聲明&#xff1a;原創作品&#xff0c;謝絕轉載&#xff01;否則將追究法律責任。實際開發中“獲得連接”或“釋放資源”是非常消耗系統資源的兩個過程&#xff0c;為了解決此類性能問題&#xff0c;通常…

生物神經網絡衍生出的算法

一個生物神經網絡的基本結構&#xff1a; 生物神經網絡由大量神經元組成&#xff0c;這些神經元之間通過突觸相互連接。神經元可以接收來自其他神經元的信號&#xff0c;并根據信號的強度和類型來調整自己的輸出信號。這種神經元之間的相互連接和信號傳遞形成了生物神經網絡的基…

echart實例數據 本地加載_JVM 類加載概述

來源&#xff1a;SegmentFault 思否社區作者&#xff1a;又壞又迷人JVM簡介JVM是Java Virtual Machine(Java虛擬機)的縮寫&#xff0c;JVM是一種用于計算設備的規范&#xff0c;它是一個虛構出來的計算機&#xff0c;是通過在實際的計算機上仿真模擬各種計算機功能來實現的。Ja…

JPA / Hibernate:基于版本的樂觀并發控制

本文是Hibernate和JPA中基于版本的樂觀并發控制的簡介。 這個概念已經很老了&#xff0c;上面已經寫了很多東西&#xff0c;但是無論如何我都看到了它被重新發明&#xff0c;誤解和濫用。 我在編寫它只是為了傳播知識&#xff0c;并希望引起人們對并發控制和鎖定的興趣。 用例…

高可用集群搭建

高可用集群搭建  創建hadoop賬戶 創建hadoop賬戶&#xff08;#注意&#xff0c;接下來的操作均在hadoop賬戶下運行&#xff09; # useradd hadoop # passwd hadoopsu - hadoopmkdir soft disk1 disk2mkdir -p disk{1,2}/dfs/{dn,nn}mkdir -p disk{1,2}/nodemgr/local 將本地目…

scrt如何切換成英文版_英文版SecureCRT顯示亂碼解決

英文版SecureCRT顯示亂碼解決系統環境&#xff1a;CentOS&#xff15;.&#xff16;以前Linux都是默認安裝在英文環境下&#xff0c;用英文版的SecureCRT查看系統內容輸出的也都是英文的&#xff0c;不會出現亂碼問題。今天同事在服務器安裝時默認選擇了簡體中文&#xff0c;這…

java try catch_Java捕獲異常

大家好&#xff0c;歡迎來到樂字節小樂的Java技術分享園地在Java中&#xff0c;凡是可能拋出異常的語句&#xff0c;都可以用try ... catch捕獲。把可能發生異常的語句放在try { ... }中&#xff0c;然后使用catch捕獲對應的Exception及其子類。多catch語句可以使用多個catch語…

haproxy文件操作

import os #導入os模塊def search(): #定義查找函數 with open(haproxy.txt,r) as f: #只讀方式打開文件 value input(請輸入您…

多語言持久性:帶有MongoDB和Derby的EclipseLink

從現在開始&#xff0c;多語種持久性一直是新聞。 從2011年底開始&#xff0c;在著名的Fowler帖子的推動下&#xff0c;我看到了更多更好的主意。 最新的一個是公司內部的學生項目&#xff0c;我們在其中使用Scala作為后端數據&#xff0c;將數據持久存儲到MongoDB&#xff0c;…

web前端開發最佳實踐--(筆記之JavaScript最佳實踐)

如何避免全局變量污染&#xff1f; 避免定義全局變量或全局函數用一個變量進行封裝&#xff0c;并返回外部需要訪問的接口如何寫出高維護的js代碼 配置數據和代碼邏輯分離 如&#xff1a; 改成&#xff1a; ---用js模板mustachehandlebarsjsMVC的數據模式 model&#xff1a;數據…

yum mysql5.7位置_CentOS yum 安裝 Mysql5.7

1 Steps for a Fresh Installation of MySQL# wget https://dev.mysql.com/get/mysql57-community-release-el6-9.noarch.rpm# yum localinstall mysql57-community-release-el6-9.noarch.rpm以上步驟其實是把 MySQL Yum repository 添加到了系統的 repository list 里去了。ll…

HTML/CSS基礎知識(四)

WEB標準和W3C的理解與認識 Web標準是一系列標準的集合。 網頁主要由三部分組成&#xff1a;結構&#xff08;Structure&#xff09;、表現&#xff08;Presentation&#xff09;和行為&#xff08;Behavior&#xff09;。 對應的標準也分三方面&#xff1a;結構化標準語言主要包…

python做一個系統代碼_python初學者,用python3實現基本的學生管理系統代碼實例...

這篇文章分享了管理系統&#xff0c;python學生管理系統的使用&#xff0c;這篇文章非常詳細地介紹了通過示例代碼實現的學生管理系統&#xff0c;該系統對每個人的研究或工作都有一定的參考學習價值。 這個是用python實現的基本的增刪改查的學生管理系統吧&#xff0c;其中主要…

Python入門筆記

Python變量和數據類型 數據類型 print語句 注釋 Python的注釋以 # 開頭&#xff0c;后面的文字直到行尾都算注釋 # 這一行全部都是注釋... print hello # 這也是注釋 什么是變量 定義字符串 字符串可以用或者""括起來表示。 如果字符串本身包含怎么辦&#xff1f;比如…

1058. 選擇題(20)

原題: https://www.patest.cn/contests/pat-b-practise/1058 思路: 本題主要就是怎么讀取數據的問題, 一定要注意scanf函數匹配到 空格或者回車會結束當前變量的賦值, 并且會丟棄這個空格或回車. 關于如何判斷一項答題是否正確, 可以采用循環一個一個判斷, 也可拼成 字符串用st…

使用Spring和Hibernate進行集成測試有多酷

我有罪&#xff0c;直到現在才寫集成測試&#xff08;至少針對數據庫相關事務&#xff09;。 因此&#xff0c;為了消除內感&#xff0c;我閱讀了如何在周末以最少的努力實現這一目標。 提供了一個小示例&#xff0c;描述了如何使用Spring和Hibernate輕松實現這一目標。 通過集…

假設mysql數據表t1有字段_使用ROMA Connect集成數據

概述ROMA Connect支持接入多種類型的數據源&#xff0c;并通過數據集成任務實現源端到目標端的數據集成轉換。ROMA Connect支持相同結構數據之間進行集成轉換&#xff0c;也支持異構數據之間進行集成轉換。本章節通過完成一個SQL Server到MySQL的數據集成配置樣例&#xff0c;幫…

vue-wechat-title

html中的title安裝&#xff1a;npm install vue-wechat-title --save1.在mian.js中//網頁titleimport VueTitle from vue-wechat-title Vue.use(VueTitle);2. 路由中加下 title { path: /, component: Index, meta: { title: 首頁 } }3. 在app.vue 中修改 router-view &a…

如何保證input的輸入值不會隨著提交 而變空_如何對web界面的應用進行測試?

一、輸入框&#xff1a;1、字符型輸入框&#xff1a;&#xff08;1&#xff09;字符型輸入框&#xff1a;英文全角、英文半角、數字、空或者空格、特殊字符“~&#xff01;#&#xffe5;%……&*&#xff1f;[]{}”特別要注意單引號和&符號。禁止直接輸入特殊字符時&…