2017-06-23 5 views
1

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 
+0

はサービス遅延のようです。非同期サービスコールがあると、これが起こる可能性があります – Aravind

+0

私は同じことを処理していますが、今は57個の仕様があります。同じドッカーベースのテストコンテナは開発用ラップトップで正常に動作しますが、Jenkinsドッカーノードで実行されると、そのタイムアウトの問題が発生するたびに同じ場所で失敗します。 先週私は使用しているセレンとクロムドライバのバージョンを更新しましたが、テストは失敗しましたが、後で失敗したのと同じ理由で失敗しました。 (元々は失敗していた仕様は問題ありませんでした) – anjunatl

+0

@anjunatl、これが非同期仕様を扱うこの方法を試すことができれば助かります。 https://jasmine.github.io/2.4/introduction.html#section-Asynchronous_Support。 私はこれを試しました。 Dockerコンテナを通過するテストの確率が増加しました。しかし、やはり完全な証明ではありません。テストは35回中2回失敗しました。 –

答えて

0

を実行する機能テストのファイルは、あなたがホストの/dev/shmに取り付けるボリュームを試してみましたコンテナ?どうやらドッカー内部クロムまたはFirefoxでクラッシュからセレンを停止する既知の回避策だ

https://github.com/SeleniumHQ/docker-selenium#running-the-images

。セレンのクラッシュはすぐには分かりませんでしたが、代わりにJasmineのタイムアウトで表現されました。

関連する問題

 関連する問題