Транспортир передает параметры в команду запуска скрипта - PullRequest
0 голосов
/ 10 мая 2018

Мне нужно передать учетные данные в команде, выполняющей скрипт.

Сейчас я использую в файле транспортира следующую часть:

onPrepare: function () {
    jasmine.getEnv().addReporter(new SpecReporter({
        spec: {
            displayStacktrace: true
        }
    }));
    if (browser.params.Url == 'http://devel/') {
        browser.params.webmaster='abc';
        browser.params.webmaspass='foo';
    }
    //(other environments)
    else {
        console.log('-------------error during log in');
    }*/
}

и все работало нормально, но мне нужно изменить его - я не могу передать учетные данные таким образом. Я думал об изменении его на:

    if (browser.params.Url == 'http://devel/') {
        browser.params.webmaster='';
        browser.params.webmaspass='';
    }

и запустите скрипт, используя

npm run dev-script --browser.params.Url='http://devel/' --browser.params.webmaster='abc' --browser.params.webmaspass='foo'

где package.json У меня есть:

"scripts": {
    "test": "echo \"Error: no test specified\" && exit 1",
     "dev-script": "protractor --params.Url=http://devel/ --browser.params.webmaster='' --browser.params.webmaspass=''"
  },

(или любой другой вариант) Но это не удается - я не могу обновить параметры во время выполнения скрипта, мне нужно записать учетные данные в коде (который я считаю немного небезопасным)

Я обнаружил такие проблемы, как Для Protractor требуется пароль для входа => небезопасно? но это о проблемах Google Auth

Есть идеи?

Ответы [ 3 ]

0 голосов
/ 11 мая 2018

Что я сделал здесь, так это создал сценарии в моем package.json:

scripts: {
    "automation-test": "concurrently --raw --kill-others \"./node_modules/.bin/webdriver-manager start\" \"sleep 5 && ./node_modules/.bin/protractor configuration/protractor.config.js\"",
    "automation:pending": "TAGS=@pending npm run automation-test"
}

И в моем protractor.conf.js я просто назначил значение переменной, чтобы использовать ее в своей конфигурации.,Вот так:

let tags = process.env.TAGS;

Тогда команда, которую я запускаю, выглядит так:

npm run automation:pending

, но я мог бы также передать теги так:

npm run automation-test TAGS=@pending
0 голосов
/ 11 мая 2018

Я не видел файл конфигурации по параметрам командной строки.Вы должны указать файл конфигурации: пример: protractor config.js --params ......

Сделайте это в вашем файле скрипта: Я добавил файл конфигурациипосле команды транспортир

"scripts": {
    "test": "echo \"Error: no test specified\" && exit 1",
     "dev-script": "protractor config.js --params.Url=http://devel/ --browser.params.webmaster='' --browser.params.webmaspass=''"
  },
0 голосов
/ 10 мая 2018

Вам необходимо удалить присвоение переменной в onPrepare. Вы перезаписываете то, что вы передаете из командной строки, устанавливая это в пустую строку.

Когда вы передаете их из командной строки, они будут доступны для объекта params. Нет необходимости устанавливать их снова в вашем onPrepare. Добавьте console.log() в ваш onPrepare, и вы увидите.

Запустите его из командной строки следующим образом: protractor conf.js --params.webmaster=abc --params.webmaspass=foo --params.url=http://devel/

Опять же, если вы зарегистрируете их в своем onPrepare, вы увидите, что он работает. То, как вы сейчас это делаете, вы просто перезаписываете значения, передаваемые через командную строку.

onPrepare: function () {
    jasmine.getEnv().addReporter(new SpecReporter({
        spec: {
            displayStacktrace: true
        }
    }));
    if (browser.params.Url == 'http://devel/') {
        consoel.log(browser.params.webmaster) //should be abc
        console.log(browser.params.webmaspass) //should be foo
    }
    //(other environments)
    else {
        console.log('-------------error during log in');
    }*/
}

Еще один способ сделать это - установить некоторые переменные среды перед выполнением теста, а затем получить к ним доступ в своих скриптах, используя process.env.envVariableName или ${envVariableName}. Оба способа будут работать.

set DEVEL_WEBMASTER=abc
set DEVEL_WEBMASPASS=foo

onPrepare: function () {
    jasmine.getEnv().addReporter(new SpecReporter({
        spec: {
            displayStacktrace: true
        }
    }));
    if (browser.params.Url == 'http://devel/') {
        browser.params.webmaster=process.env.DEVEL_WEBMASTER;
        browser.params.webmaspass=process.env.DEVEL_WEBMASPASS;
    }
    //(other environments)
    else {
        console.log('-------------error during log in');
    }*/
}

Просто помните, что если вы используете этот метод, вам придется устанавливать переменные для каждого сеанса. Если вы планируете автоматизировать эти тесты с использованием среды CI, вы можете просто добавить их туда в качестве секретных переменных (если у вас есть такая опция), и они всегда будут готовы и ждут. Там не будет необходимости устанавливать их вручную во время каждой сборки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...