代码之家  ›  专栏  ›  技术社区  ›  mmar

如何使用量角器conf传递命令行参数

  •  1
  • mmar  · 技术社区  · 6 年前

    我们有一个量角器黄瓜框架作为e2e测试。到目前为止,我们使用conf文件,静态地提到conf json中的环境细节。我想传递用户定义的参数与量角器配置文件如下所示。

    protractor protractor_conf.js -DbrowserName=chrome -DexecPlatform=(native/sauce)
    

    我想把这个论点放在配置文件并在“能力”部分下替换。我在网上找不到合适的细节,如有任何帮助/建议,将不胜感激。

    3 回复  |  直到 6 年前
        1
  •  2
  •   Raj Sahoo    6 年前

    您可以在 配置文件 文件,然后传递 从命令行。

       // The params object will be passed directly to the Protractor instance,
       // and can be accessed from your test as browser.params. It is an arbitrary
       // object and can contain anything you may need in your test.
       // This can be changed via the command line as:
       //   --params.environment.Browser "Firefox"
    
    params: {
      environment: {
       browser: 'Chrome',
       execPlatform: 'sauce',
       password: 'default'
      }
    }
    

    现在我们可以从命令行传递arugs

    protractor conf.js --parameters.environment.browser= Firefox --parameters.environment.execPlatform=sauce --parameters.environment.password=password123
    

    接下来,还可以在spec文件中引用这些参数。

    describe('describe some test', function() {
      it('describe some step', function() {
        $('.password').sendKeys(browser.params.login.password);
       });
    });
    

    设置参数有多种好处。

    • 如果我们知道我们将在多个spec文件(即登录电子邮件和密码)中使用相同的值,那么参数对于消除不必要的重复非常有用。
    • 能够在运行时更改参数值可以更容易地使用不同的数据运行相同的测试。
    • 增加安全性在你的规范文件中硬编码密码不是一个好方法。参数使您能够将它们排除在外,而是在运行时提供它们。
        2
  •  0
  •   yong    6 年前

    process

    // protractor conf.js
    
    var readParamsFromCli = function() {
    
        var paramsPair = process.argv.slice(3).filter(function(it){
            return it.startsWith('-D');
        });
    
        var params = {};
    
        paramsPair.forEach(function(pair){
            var parts = pair.split('=');
            var name = parts[0].trim().replace('-D', '');
            var value = parts[1] && parts[1].trim() || true;
            params[name] = value;
        });
    
    
        return params;
    };
    
    var params = readParamsFromCli();
    
    var capbilities = {
        browserName: params.browserName || 'chrome',
        platform: params.execPlatform
    };
    
    exports.config = {
        ...
        capbilities: capbilities
    
    };
    

    然后您可以按如下方式运行案例:

    protractor protractor_conf.js -DbrowserName=chrome -DexecPlatform=native
    
        3
  •  0
  •   bgerth    6 年前

    您可以将配置拆分为多个配置文件。例如

    const baseConf = require('./protractor.conf').config;
    
    exports.config = Object.assign({
      capabilities: {
        browserName: 'chrome'
      }
    }, baseConf);
    
        4
  •  0
  •   Kentonbmax    6 年前

    这与第二个示例类似,但直接使用配置文件。

    const args = require('minimist')(process.argv.slice(2));
    exports.config = {
      //your config stuff
      baseUrl: args.Url ? args.URL : <your default>,
      capabilities: {
       'browserName': 'chrome',
       chromeOptions: {
         args: [args.Options]
        },
       }
    }
    

    然后在你的包.json脚本如下:

    "e2e": "protractor protractor.conf.js --Url=http://test.com" --Options=--headless