App下載

Java 為 Liberty 編寫功能測試的 3 種方法

糖果味的夏天 2021-09-15 10:34:53 瀏覽數(shù) (2208)
反饋

功能測試描述系統(tǒng)的功能并測試系統(tǒng)的功能是否按預(yù)期工作。功能測試通常通過為功能提供特定輸入并驗證輸出是否與預(yù)期相符來完成。由于功能測試是黑盒測試的一種形式,因此你可以在不了解應(yīng)用程序內(nèi)部部分的情況下測試軟件的功能。

使用 Liberty 進行功能測試的三種方法

使用 IBM WebSphere Liberty 和 Open Liberty 進行功能測試的方法有很多種。本文涵蓋了我認為最適合這些平臺的 3 種方法:

  1. 使用構(gòu)建腳本/工具來啟動和停止 Liberty 服務(wù)器
  2. 使用 JUnit 規(guī)則啟動和停止 Liberty 服務(wù)器
  3. 使用 Arquillian 啟動和停止 Liberty 服務(wù)器

使用 Maven 構(gòu)建

Liberty 支持最常見的構(gòu)建工具,例如 Maven、Gradle 和 Ant。你可以使用這些工具中的任何一個來對你的應(yīng)用程序運行測試,但本文重點介紹 Maven。

使用 Maven 等構(gòu)建系統(tǒng)構(gòu)建應(yīng)用程序的一個好處是,你可以將其配置為運行一組自動化測試。war插件擴展了Java插件,提供了測試任務(wù)。你可以為正在運行的應(yīng)用程序服務(wù)器之外的各個代碼單元編寫測試(單元測試),也可以編寫它們來調(diào)用在服務(wù)器上運行的應(yīng)用程序(集成測試)。

使用通用構(gòu)建工具的優(yōu)勢

使用 Maven、Ant 或 Gradle 等構(gòu)建工具的一些好處包括:

  • 它使 Java 代碼保持簡單;JUnit 測試類中不需要特殊的設(shè)置代碼。
  • 你正在測試的工件是包含配置和構(gòu)建生成的應(yīng)用程序 WAR 的用戶目錄,因此它正在密切測試生產(chǎn)工件。
  • 遠程部署工件(例如,在云中)并針對該部署運行測試非常簡單,而無需更改測試代碼。

使用通用構(gòu)建工具的缺點

使用常見構(gòu)建工具的一些可能的缺點包括:

  • 對 Maven 插件(或其他構(gòu)建工具插件)有額外的依賴性。
  • 你只能從構(gòu)建工具自動運行測試。如果不先手動啟動服務(wù)器,就不能從 Eclipse(或其他 IDE)中執(zhí)行此操作。

使用 JUnit 規(guī)則

使用 JUnit ClassRule 允許您使用 Liberty 系統(tǒng)編程接口 (SPI) 從你的代碼中控制你的 Liberty 服務(wù)器。從這里,你可以配置服務(wù)器,同時還可以啟動和停止服務(wù)器。

下面的示例是我們從測試類中以編程方式啟動和停止 Liberty 服務(wù)器的示例:

    public class RuleFunctionalTest {

        @ClassRule
        public static ExternalResource serverResource = new ServerResource();


        public static class ServerResource extends ExternalResource {


            private final Server server;


            public ServerResource() {
                String usrDir = System.getProperty("liberty.usr.dir");
                String serverName = System.getProperty("liberty.server.name");
                ServerBuilder sb = new ServerBuilder();
                server = sb.setName(serverName).setUserDir(new File(usrDir)).build();
            }

            @Override
            protected void before() throws Throwable {
                Future<Result> startReturnCode = server.start();
                Result result = startReturnCode.get();
                assertEquals(true, result.successful());
            }

            @Override
            protected void after() {
                Future<Result> stopReturnCode = server.stop();
                try {
                    Result result = stopReturnCode.get();
                    assertEquals(true, result.successful());
                } catch (InterruptedException | ExecutionException e) {
                    e.printStackTrace();
                    fail("Caught exception stopping server" + e.getMessage());
                }
            }
        }
    }

使用 JUnit 規(guī)則的優(yōu)勢

使用 JUnit 規(guī)則的一些好處包括:

  • 使用 JUnit 規(guī)則可以使構(gòu)建代碼保持簡單。您只需創(chuàng)建一個新的測試任務(wù)和源集的標(biāo)準(zhǔn) Maven 設(shè)置。
  • 你可以使用 IDE 以及通過構(gòu)建來運行它。
  • 沒有外部依賴。

使用 JUnit 規(guī)則的缺點

使用 JUnit 規(guī)則的一些缺點包括:

  • 使用此規(guī)則會使 Java 代碼復(fù)雜化,因為它負責(zé)啟動和停止 Liberty 服務(wù)器以及運行測試。
  • 部署到不同的位置比較困難,因為這都是通過 Java API 完成的。
  • 你需要構(gòu)建一個功能齊全的 Liberty 用戶目錄結(jié)構(gòu),包括你的服務(wù)器配置和應(yīng)用程序。在此示例中,這非常適合這種情況,因為這已經(jīng)是構(gòu)建的輸出,但情況并非總是如此。

使用 Arquillian

在 Libery 中進行功能測試的最后一種技術(shù)是使用Arquillian,這是一個測試框架,可為你的 Java 應(yīng)用程序開發(fā)自動化的功能、集成和驗收測試。Arquillian 為您設(shè)置測試環(huán)境并處理應(yīng)用程序服務(wù)器生命周期,以便你可以專注于編寫測試。

使用 Arquillian 進行功能測試的優(yōu)勢

使用 Arquillian 的一些好處包括:

  • 它允許您使用 ShrinkWrap 通過測試創(chuàng)建和部署測試存檔。在運行測試之前,無需構(gòu)建功能齊全的 Liberty 服務(wù)器。
  • 你可以使用 IDE 以及通過構(gòu)建運行 Arquillian。
  • Arquillian 是功能最豐富的選項。例如,你可以針對多個容器(應(yīng)用程序服務(wù)器)和遠程服務(wù)器運行測試。
  • 將應(yīng)用程序的正確 URL 傳遞給測試,因此可以更靈活地控制測試環(huán)境的端口號等。

使用 Arquillian 進行功能測試的缺點

  • Arquillian 仍然需要定義一個骨架服務(wù)器,它必須進入主服務(wù)器運行時安裝位置(不支持單獨的用戶目錄)。
  • 你正在測試的應(yīng)用程序是由 Arquillian 通過 ShrinkWrap 工具創(chuàng)建的。你不會部署此實際應(yīng)用程序或擁有此服務(wù)器配置。

結(jié)束語

如果你已經(jīng)在構(gòu)建 Liberty 用戶目錄,那么使用構(gòu)建工具或 JUnit 規(guī)則來啟動和停止服務(wù)器的簡單性很有吸引力。但是,如果你希望能夠準(zhǔn)確控制部署的內(nèi)容,或者你??想針對多個容器進行測試,那么 Arquillian 提供了這些功能。


0 人點贊