Angular2アプリケーション用の分度器を使用して6回のe2eテストを書きました。 テストは私のWindows 10システムでうまく動作します。テストは一貫しており、常に合格しています。Dockerの分度器テスト - jasmine.DEFAULT_TIMEOUT_INTERVALで指定されたタイムアウト時間内に非同期コールバックが呼び出されなかった
CentOSドッカーコンテナで同じテストを実行しようとしています。 テストに一貫性がありません。彼らは失敗し続けます。
私は
エラーというエラーを取得:タイムアウト - 非同期コールバックはjasmine.DEFAULT_TIMEOUT_INTERVALで指定されたタイムアウト内で呼び出されませんでしたが。
私はタイムアウトを増やし、必要な場所にbrowser.wait(存在するまで)を与えました。ドッカー(CPU-3、Memory-3328MB)に割り当てられたコンピューティングリソースを増やしました。何も働いていないようです。
// Protractor configuration file, see link for more information
const { SpecReporter } = require('jasmine-spec-reporter');
exports.config = {
allScriptsTimeout: 11000,
specs: [
'./e2e/**/*.e2e-spec.ts'
],
capabilities: {
'browserName': 'chrome',
'chromeOptions': {
'args': [ '--no-sandbox']
}
},
directConnect: false,
baseUrl: 'http://localhost:3200/',
framework: 'jasmine2',
jasmineNodeOpts: {
showColors: true,
defaultTimeoutInterval: 30000,
print: function() {
// NOOP
}
},
beforeLaunch: function() {
require('ts-node').register({
project: 'e2e/tsconfig.e2e.json'
});
},
onPrepare() {
browser.driver.manage().window().maximize();
jasmine.getEnv().addReporter(new SpecReporter({ spec: { displayStacktrace: true } }));
}
};
テストの一つ
// create a user and he should be able to login after creation
it('should add a new user and log him in successfully',() => {
browser.wait(until.presenceOf(userCreate.forename, 5000, 'Timed out'));
const forename = 'newUserFore' + generateRandom.generateRandom();
const surename = 'newUserSur' + generateRandom.generateRandom();
const username = 'newUserUser2' + generateRandom.generateRandom();
const password = '[email protected]' + generateRandom.generateRandom();
userCreate.addUserWithPassword(forename, surename, username, password);
// select language
userCreate.selectDropdownByNumber(userCreate.mylang, 1);
// select role
userCreate.selectDropdownByNumber(userCreate.myrole, 1);
// click add
userCreate.addUserButton.click();
browser.wait(until.presenceOf(userCreate.successMessage, 5000, 'Timed out'));
expect(userCreate.successMessage.getText()).toContain('User saved successfully!');
// cancelbutton
userCreate.cancelbutton.click();
browser.wait(until.presenceOf(userOverview.addUserButton, 5000, 'Timed out'));
// logout
indexPage = homePage.menu.navigateTo(MenuOption.LOGOUT, until);
// click on login button on first page
loginPage = indexPage.loginButtonClickedOnBasePage();
// login with the credentials
browser.wait(until.presenceOf(loginPage.loginTitle, 5000, 'Timed out'));
loginPage.login(username, password);
browser.wait(until.presenceOf(menu, 5000, 'Timed out'));
expect(menu.isDisplayed()).toBe(true);
});
私が最初にサーバを起動して、UI
#!/usr/bin/env bash
echo "API: Ensuring the port $API_SERVER_PORT is freed."
fuser -k -n tcp $API_SERVER_PORT
echo " Starting the server in detached mode. This will take about 5 minutes the first time "
cd ../api && mvn spring-boot:run -D server.port=$API_SERVER_PORT >> api-start.log 2>&1 &
# Wait for the server to come up..
while ! (ncat -w 1 127.0.0.1 $API_SERVER_PORT </dev/null >/dev/null 2>&1); do sleep 1; done
echo "Server started on port $API_SERVER_PORT"
echo "UI: Ensuring the port $UI_SERVER_PORT is freed."
fuser -k -n tcp $UI_SERVER_PORT
npm start >> ui-start.log 2>&1 &
while ! (ncat -w 1 127.0.0.1 $UI_SERVER_PORT </dev/null >/dev/null 2>&1); do sleep 1; done
echo "Angular app is running on port $UI_SERVER_PORT , startup logs is in start.log".
protractor container.protractor.conf.js
はサービス遅延のようです。非同期サービスコールがあると、これが起こる可能性があります – Aravind
私は同じことを処理していますが、今は57個の仕様があります。同じドッカーベースのテストコンテナは開発用ラップトップで正常に動作しますが、Jenkinsドッカーノードで実行されると、そのタイムアウトの問題が発生するたびに同じ場所で失敗します。 先週私は使用しているセレンとクロムドライバのバージョンを更新しましたが、テストは失敗しましたが、後で失敗したのと同じ理由で失敗しました。 (元々は失敗していた仕様は問題ありませんでした) – anjunatl
@anjunatl、これが非同期仕様を扱うこの方法を試すことができれば助かります。 https://jasmine.github.io/2.4/introduction.html#section-Asynchronous_Support。 私はこれを試しました。 Dockerコンテナを通過するテストの確率が増加しました。しかし、やはり完全な証明ではありません。テストは35回中2回失敗しました。 –