javascript
Spring Boot微服务的黑匣子测试是如此简单
當我需要進行原型設計,概念驗證或在空閑時間使用一些新技術時,開始新項目對于Maven來說總是有點煩人。 不得不說,設置Maven項目并不難,您可以使用Maven原型。 但是原型通常是過時的。 誰想玩舊技術? 因此,我總是以自己想玩的依賴關系為最終結局。 花費的時間不是很有效。
但是,比起Spring Boot來了我的方式。 我戀愛了。 在過去的幾個月中,我至少創建了50個小型操場項目,并使用Spring Boot制作了原型。 在工作中也將其合并。 它非常適合原型,學習,微服務,Web,批處理,企業,消息流或命令行應用程序。 您必須是恐龍,或是盲目不去為下一個Spring項目評估Spring Boot。 當您完成評估后,便會繼續努力。 我承諾。
我覺得有必要強調一下Spring Boot微服務的黑匣子測試有多么容易。 黑匣子測試指的是無需戳入任何應用程序工件的測試。 這種測試也可以稱為集成測試。 您還可以執行性能或壓力測試方式,以進行演示。
Spring Boot Microservice通常是帶有嵌入式Tomcat的Web應用程序。 因此它從命令行作為JAR執行。 可以將Spring Boot項目轉換為WAR工件,該工件可以托管在共享Servlet容器中 。 但是我們現在不想要那樣。 當微服務擁有自己的嵌入式容器時,效果會更好。
我使用現有的Spring REST服務指南作為測試目標。 重點主要放在測試項目上,因此以“ Hello World” REST應用程序為例很方便。 我希望在您的計算機上設置并安裝以下兩個常用工具:
- Maven 3
- 吉特
因此,我們需要下載源代碼并將JAR工件安裝到我們的本地存儲庫中。 我將使用命令行下載并安裝微服務。 讓我們進入下載源代碼的目錄。 使用以下命令:
git clone git@github.com:spring-guides/gs-rest-service.git cd gs-rest-service/complete mvn clean install如果一切順利,那么現在將Spring Boot微服務JAR工件安裝在我們的本地Maven存儲庫中。 在認真的Java開發中,寧愿將其安裝到共享存儲庫中(例如Artifactory,Nexus等)。 安裝我們的微服務后,我們可以專注于測試項目。 它也是基于Maven和Spring Boot的。
黑匣子測試將通過從Maven存儲庫下載工件來實現(無論它是本地的還是遠程的都無所謂)。 Maven依賴插件可以通過以下方式幫助我們:
<plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-dependency-plugin</artifactId><executions><execution><id>copy-dependencies</id><phase>compile</phase><goals><goal>copy-dependencies</goal></goals><configuration><includeArtifactIds>gs-rest-service</includeArtifactIds><stripVersion>true</stripVersion></configuration></execution></executions> </plugin>默認情況下,它將微服務工件下載到target/dependency目錄。 如您所見,它已掛接到Maven生命周期的compile階段,因此在test階段可以使用下載的工件。 從版本信息中刪除了工件版本。 我們使用最新版本。 它使測試過程中JAR工件的使用更加容易。
精通Maven的讀者可能會注意到缺少插件版本。 Spring Boot驅動的項目繼承自名為spring-boot-starter-parent父Maven項目。 。 它包含主要Maven插件的版本。 這是Spring Boot的自以為是的方面之一。 我喜歡它,因為它提供了穩定的依賴關系矩陣。 您可以根據需要更改版本。
當文件系統中有工件時,就可以開始測試。 我們需要能夠從命令行執行JAR文件。 我通過這種方式使用標準的Java ProcessBuilder :
public class ProcessExecutor {public Process execute(String jarName) throws IOException {Process p = null;ProcessBuilder pb = new ProcessBuilder("java", "-jar", jarName);pb.directory(new File("target/dependency"));File log = new File("log");pb.redirectErrorStream(true);pb.redirectOutput(Redirect.appendTo(log));p = pb.start();return p;} }此類基于給定的文件名執行給定的進程JAR。 位置被硬編碼到target/dependency目錄中,其中maven-dependency-plugin定位了我們的工件。 標準和錯誤輸出將重定向到文件。 測試所需的下一個類是DTO(數據傳輸對象)。 這是簡單的POJO,將用于從JSON反序列化。 我使用Lombok項目來減少getter,setter,hashCode和equals所需的樣板代碼。
@Data @AllArgsConstructor @NoArgsConstructor public class Greeting {private long id;private String content; }測試本身如下所示:
public class BlackBoxTest {private static final String RESOURCE_URL = "http://localhost:8080/greeting";@Testpublic void contextLoads() throws InterruptedException, IOException {Process process = null;Greeting actualGreeting = null;try {process = new ProcessExecutor().execute("gs-rest-service.jar");RestTemplate restTemplate = new RestTemplate();waitForStart(restTemplate);actualGreeting = restTemplate.getForObject(RESOURCE_URL, Greeting.class);} finally {process.destroyForcibly();}Assert.assertEquals(new Greeting(2L, "Hello, World!"), actualGreeting);}private void waitForStart(RestTemplate restTemplate) {while (true) {try {Thread.sleep(500);restTemplate.getForObject(RESOURCE_URL, String.class);return;} catch (Throwable throwable) {// ignoring errors}}} }它首先執行Spring Boot微服務進程,然后等待它啟動。 要驗證微服務是否已啟動,它將HTTP請求發送到期望的URL。 首次成功響應后,該服務即可進行測試。 微服務應為HTTP GET請求發送簡單的問候語JSON響應。 在測試結束時,已驗證了從JSON到我們的Greeting DTO的反序列化。
- 源代碼在Github上共享 。
翻譯自: https://www.javacodegeeks.com/2014/12/black-box-testing-of-spring-boot-microservice-is-so-easy.html
總結
以上是生活随笔為你收集整理的Spring Boot微服务的黑匣子测试是如此简单的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 安卓自拍杆怎么设置(安卓自拍杆)
- 下一篇: (ftp命令linux)