量角器在脚本运行命令中传递参数

时间:2018-05-10 10:34:46

标签: jasmine protractor

我需要在运行脚本的命令中传递凭据。

目前,我正在使用量角器文件中的以下部分:

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=''"
  },

(或任何变化)但它失败了 - 我无法在运行脚本期间更新params,我需要在代码中写下凭证(我觉得有点不安全)

我发现了类似Protractor needs password for login => insecure?的问题,但有关Google Auth问题的问题

有什么想法吗?

2 个答案:

答案 0 :(得分:1)

您需要删除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环境自动化这些测试,您可以将它们作为秘密变量添加到那里(如果您有这个选项)并且它们将始终准备就绪并等待。在每次构建期间都不需要手动设置它们。

答案 1 :(得分:0)

我没有在命令行的参数上看到配置文件。您必须指定配置文件: 例如:量角器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=''"
  },