1

機能テストにインターンを使用しています。そのようなテストの 1 つは、管理者アカウントにログインする必要があります。

registerSuite({
    name: 'login',

    'login': function() {
        return this.remote
            .get(URL)
            .findById('username')
                .click()
                .pressKeys(USER.ADMIN.USERNAME)
                .end()
            .findById('password')
                .click()
                .pressKeys(USER.ADMIN.PASSWORD)
                .pressKeys('\n')
                .end()
            .findByCssSelector('.login-welcome')
                .getVisibleText()
            .then(function(text) {
                assert.strictEqual(text, USER.ADMIN.NAME, 'User should now be logged in');
            });
    }
});

問題は、このパスワードがプレーン テキストとして渡されることです。ここでは、BrowserStack に表示されています。

00:19 | 0 | Send a sequence of key strokes to the active element. | password

SauceLabs でも同じです。

COMMAND: POST keys
PARAMETERS: {"value":["password"]}

問題は、これらのテストへのアクセスが制限されていないという事実にあります。これらのテストは、他の部門の担当者が表示する必要があります。

それがなくても、テスト アカウントのパスワードが侵害された場合に、攻撃者が他のすべてへの管理者アクセスを突然取得することは望ましくありません。

コマンドでパスワードがプレーンテキストとして保存/表示されないようにする方法はありますか?

私のチームは現在、機能テストの実行中にのみ機能するように、これらのアカウントをアクティブ化/非アクティブ化する別のスクリプトを実行するというアイデアを楽しんでいますが、誰かがより良い解決策を思いついたかどうかを確認したかった.

4

2 に答える 2

2

リモート ブラウザーに送信されるキーストロークを非表示にしたり、フレームワーク ログのテストから除外したりする組み込みの方法はありません。テスト フレームワークの観点からは、それらは単なるキーストロークであり、パスワードではありません。

もちろん、この状況に対処する理想的な方法は、ターゲット アプリケーションのテスト展開を使用することです。これは、より安全であり、テストをより細かく制御できるためです。それが無理だとしても…。

ログインせずにブラウザにパスワードを取得する 1 つの可能性は、パスワードを入力する挿入された script タグを介してブラウザにスクリプトをロードさせることです。基本的には、パスワード フィールドを見つけて値を入力する外部スクリプトが必要です。機能テストでは、スクリプト タグをブラウザーに挿入し、次のように読み込まれるまで待つ必要があります。

return this.remote
    .get(URL)
    .findById('username')
        .click()
        .pressKeys(USER.ADMIN.USERNAME)
        .end()
    .executeAsync(function (done) {
        window._intern_done = done;
        var script = document.createElement('script');
        script.src = '/path/to/password_script.js';
        document.head.appendChild(script);
    })
    .findByCssSelector('.login-welcome')
    // continue testing

スクリプト自体は次のようになります。

(function () {
    // set the password
    var passwordField = document.getElementById('password');
    passwordField.value = 'secret password';
    // clean up the _intern_done global we set in the executeAsync block
    var done = window._intern_done;
    delete window._intern_done;
    // let Intern know we're done
    done();
})();
于 2015-11-22T16:21:30.967 に答える