天天看點

關于 SAP UI5 應用的自動化測試方法

測試作為確定 UI5 應用程式開發投資的一種手段已經變得越來越普遍。

為了進一步推動這個問題,讓我們評估 UI5 中最突出的端到端測試架構。

關于 SAP UI5 應用的自動化測試方法

所有這三個都允許測試面向使用者的功能,“像使用者一樣”操作 UI5 應用程式:與 UI 元素互動。

UIVeri5 和 wdi5 都可以遠端控制浏覽器。 也就是說,它們有一個不同于 UI5 應用程式的運作時。 是以,兩者都需要一個(網絡)伺服器,以便連接配接到運作測試中的 UI5 應用程式。

OPA5 的不同之處在于它與 UI5 應用程式共享相同的運作時——它與被測 UI5 應用程式相鄰工作,而不是分開。

(QUnit 不在本文中,因為我們專注于運作面向使用者的測試,而不是純粹的功能測試。)

此外,wdi5 允許在移動裝置上測試混合應用程式。 它可以連接配接到 iOS、Android 和 Electron 上使用cordova 封裝的UI5 應用程式,并運作與基于浏覽器的應用程式相同的測試。

OPA5

OPA5 自帶 UI5,不需要額外的安裝步驟。 然而它的設定并不直覺,混合了 OPA5 的基本 QUnit,并且需要幾個包含級别。

下面是一些例子:

webapp/test/integration/opaTests.qunit.html:

<!-- ... -->
    <script src="opaTests.qunit.js"></script>
</head>
<body>
    <div id="qunit"></div>
    <!-- ... -->
      
sap.ui.getCore().attachInit(function () {
    "use strict";

    sap.ui.require([
        // all test suites aggregated in here
        "test/Sample/test/integration/AllJourneys"
    ], function () {
        // `OPA5`'s mama :)
        QUnit.start();
    });
});
      
sap.ui.define(["sap/ui/test/opaQunit", "./pages/Main", "./pages/Other"], function (opaTest) {
    "use strict";

    QUnit.module("Binding Journey");

    QUnit.module("Other view: PeopleList: items aggregation");

    opaTest("bound status", function (Given, When, Then) {
        Given.iStartMyApp();

        When.onTheAppPage.iPressTheNavButton();

        Then.onTheOtherView.iShouldSeeTheList().and.theListShouldBeBound();
    });
// ...
      

使用下面的 url 啟動:

http://localhost:1081/test/integration/opaTests.qunit.html

uiveri5

UIVeri5 需要 Node.js >=8 并通過标準 npm 指令 npm install @ui5/uiveri5 安裝。

然後通過配置檔案和包含測試代碼的檔案進行設定——確定兩者都在同一個檔案 sys 檔案夾中。

配置檔案:

exports.config = {

   profile: "integration",

   baseUrl: "http://localhost:1081/index.html"

};

1

2

3

4

然後可以啟動 UIVeri5

首先啟動網絡伺服器:yarn dev(或yarn start:ci)

yarn test:uiveri5

OPA5 速度快于 UIVeri5,因為它與 UI5 共享運作時,進而節省了基礎設施開銷,例如啟動浏覽器本身。然而,當需要更進階的測試行為時,它很快就會達到其極限,例如 UI5 控件之間的交叉互動或對 UI5 控件以外的元素進行操作。此外,嵌套的 waitFor 操作感覺很笨拙。

使用 UIVeri5,可以真正以外部使用者的身份操作 UI,包括 UI5 控件之外的元素和功能。但是 UIVeri5 的核心(Protractor、WebdriverJS)感覺已經過時了,核心元素之間的連接配接代碼有時會缺少最後的實作裡程(例如不可能在 conf.js 中設定日志級别?!)。某些限制,例如套件名稱(描述)和檔案名之間的強制關聯也會增加這種印象。不幸的是,在測試時控件上隻有 UI5 API 方法的一個子集可用。此外,文檔似乎是零散的——但在文檔中有點隐藏,UIVeri5 具有預建構的身份驗證器,其中包括 SAP Cloud Platform SAP ID。

繼續閱讀