javascript
Spring Boot微服务的黑匣子测试是如此简单
當(dāng)我需要進(jìn)行原型設(shè)計(jì),概念驗(yàn)證或在空閑時(shí)間使用一些新技術(shù)時(shí),開始新項(xiàng)目對(duì)于Maven來說總是有點(diǎn)煩人。 不得不說,設(shè)置Maven項(xiàng)目并不難,您可以使用Maven原型。 但是原型通常是過時(shí)的。 誰想玩舊技術(shù)? 因此,我總是以自己想玩的依賴關(guān)系為最終結(jié)局。 花費(fèi)的時(shí)間不是很有效。
但是,比起Spring Boot來了我的方式。 我戀愛了。 在過去的幾個(gè)月中,我至少創(chuàng)建了50個(gè)小型操場(chǎng)項(xiàng)目,并使用Spring Boot制作了原型。 在工作中也將其合并。 它非常適合原型,學(xué)習(xí),微服務(wù),Web,批處理,企業(yè),消息流或命令行應(yīng)用程序。 您必須是恐龍,或是盲目不去為下一個(gè)Spring項(xiàng)目評(píng)估Spring Boot。 當(dāng)您完成評(píng)估后,便會(huì)繼續(xù)努力。 我承諾。
我覺得有必要強(qiáng)調(diào)一下Spring Boot微服務(wù)的黑匣子測(cè)試有多么容易。 黑匣子測(cè)試指的是無需戳入任何應(yīng)用程序工件的測(cè)試。 這種測(cè)試也可以稱為集成測(cè)試。 您還可以執(zhí)行性能或壓力測(cè)試方式,以進(jìn)行演示。
Spring Boot Microservice通常是帶有嵌入式Tomcat的Web應(yīng)用程序。 因此它從命令行作為JAR執(zhí)行。 可以將Spring Boot項(xiàng)目轉(zhuǎn)換為WAR工件,該工件可以托管在共享Servlet容器中 。 但是我們現(xiàn)在不想要那樣。 當(dāng)微服務(wù)擁有自己的嵌入式容器時(shí),效果會(huì)更好。
我使用現(xiàn)有的Spring REST服務(wù)指南作為測(cè)試目標(biāo)。 重點(diǎn)主要放在測(cè)試項(xiàng)目上,因此以“ Hello World” REST應(yīng)用程序?yàn)槔芊奖恪?我希望在您的計(jì)算機(jī)上設(shè)置并安裝以下兩個(gè)常用工具:
- Maven 3
- 吉特
因此,我們需要下載源代碼并將JAR工件安裝到我們的本地存儲(chǔ)庫中。 我將使用命令行下載并安裝微服務(wù)。 讓我們進(jìn)入下載源代碼的目錄。 使用以下命令:
git clone git@github.com:spring-guides/gs-rest-service.git cd gs-rest-service/complete mvn clean install如果一切順利,那么現(xiàn)在將Spring Boot微服務(wù)JAR工件安裝在我們的本地Maven存儲(chǔ)庫中。 在認(rèn)真的Java開發(fā)中,寧愿將其安裝到共享存儲(chǔ)庫中(例如Artifactory,Nexus等)。 安裝我們的微服務(wù)后,我們可以專注于測(cè)試項(xiàng)目。 它也是基于Maven和Spring Boot的。
黑匣子測(cè)試將通過從Maven存儲(chǔ)庫下載工件來實(shí)現(xiàn)(無論它是本地的還是遠(yuǎn)程的都無所謂)。 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>默認(rèn)情況下,它將微服務(wù)工件下載到target/dependency目錄。 如您所見,它已掛接到Maven生命周期的compile階段,因此在test階段可以使用下載的工件。 從版本信息中刪除了工件版本。 我們使用最新版本。 它使測(cè)試過程中JAR工件的使用更加容易。
精通Maven的讀者可能會(huì)注意到缺少插件版本。 Spring Boot驅(qū)動(dòng)的項(xiàng)目繼承自名為spring-boot-starter-parent父Maven項(xiàng)目。 。 它包含主要Maven插件的版本。 這是Spring Boot的自以為是的方面之一。 我喜歡它,因?yàn)樗峁┝朔€(wěn)定的依賴關(guān)系矩陣。 您可以根據(jù)需要更改版本。
當(dāng)文件系統(tǒng)中有工件時(shí),就可以開始測(cè)試。 我們需要能夠從命令行執(zhí)行JAR文件。 我通過這種方式使用標(biāo)準(zhǔn)的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;} }此類基于給定的文件名執(zhí)行給定的進(jìn)程JAR。 位置被硬編碼到target/dependency目錄中,其中maven-dependency-plugin定位了我們的工件。 標(biāo)準(zhǔn)和錯(cuò)誤輸出將重定向到文件。 測(cè)試所需的下一個(gè)類是DTO(數(shù)據(jù)傳輸對(duì)象)。 這是簡(jiǎn)單的POJO,將用于從JSON反序列化。 我使用Lombok項(xiàng)目來減少getter,setter,hashCode和equals所需的樣板代碼。
@Data @AllArgsConstructor @NoArgsConstructor public class Greeting {private long id;private String content; }測(cè)試本身如下所示:
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}}} }它首先執(zhí)行Spring Boot微服務(wù)進(jìn)程,然后等待它啟動(dòng)。 要驗(yàn)證微服務(wù)是否已啟動(dòng),它將HTTP請(qǐng)求發(fā)送到期望的URL。 首次成功響應(yīng)后,該服務(wù)即可進(jìn)行測(cè)試。 微服務(wù)應(yīng)為HTTP GET請(qǐng)求發(fā)送簡(jiǎn)單的問候語JSON響應(yīng)。 在測(cè)試結(jié)束時(shí),已驗(yàn)證了從JSON到我們的Greeting DTO的反序列化。
- 源代碼在Github上共享 。
翻譯自: https://www.javacodegeeks.com/2014/12/black-box-testing-of-spring-boot-microservice-is-so-easy.html
總結(jié)
以上是生活随笔為你收集整理的Spring Boot微服务的黑匣子测试是如此简单的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 安卓自拍杆怎么设置(安卓自拍杆)
- 下一篇: 从浏览器端JavaScript代码进行服