App下載

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

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

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

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

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

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

使用 Maven 構建

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

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

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

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

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

使用通用構建工具的缺點

使用常見構建工具的一些可能的缺點包括:

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

使用 JUnit 規(guī)則

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

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

    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ī)則可以使構建代碼保持簡單。您只需創(chuàng)建一個新的測試任務和源集的標準 Maven 設置。
  • 你可以使用 IDE 以及通過構建來運行它。
  • 沒有外部依賴。

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

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

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

使用 Arquillian

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

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

使用 Arquillian 的一些好處包括:

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

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

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

結束語

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


0 人點贊