【问题标题】:Trouble passing Jenkins parameters to run Protractor scripts传递 Jenkins 参数以运行量角器脚本时遇到问题
【发布时间】:2020-02-20 22:54:42
【问题描述】:

我目前正在使用 2 个配置文件来使用 Jenkins 运行我的 Protractor 脚本。

devConfig.ts and prodConfig.ts

这些具有开发凭据和 URL 以及产品凭据和 URL。

我有两个运行不同命令的 Jenkins 作业

npm run tsc && protractor tmp/devConfig.js --suite devRegression
npm run tsc && protractor tmp/devConfig.js --suite prodRegression

不是有两个配置文件,怎么可能合二为一呢?通过传递 URL、Creds、Suite 和 Browser 的参数?

我能够在 Jenkins 上进行设置:

这会导致

但我无法将它们传递回量角器脚本。有没有一种直接的方法来构造这些参数并将它们传递给量角器?

【问题讨论】:

  • 你为什么开始考虑创建一个配置文件?两个配置是很平常的事情。不需要使系统更复杂。
  • @oleksii 不同意,我的规则 - 如果我在项目的任何地方有两次相同的代码,我做错了。结果 - 14 个应用程序的一个配置文件,每个 4 个环境,每个环境一个数据文件 - 14*4,浏览器和操作系统组合的所有可能性,可选视频录制等
  • 在这种情况下我不会认为系统更复杂,而是更灵活,这是任何项目的进步

标签: jenkins automation protractor automated-tests


【解决方案1】:

量角器方面请查看this page

根据它的内容,在你的conf.js

module.exports = {
  params: {
    login: {
      email: 'default',
      password: 'default'
    }
  },
    //  * other config options *
}

您可以在 CMD 中将任何参数传递给它,如下所示:

protractor --baseUrl='http://some.server.com' conf.js --parameters.login.email=example@gmail.com 
--parameters.login.password=foobar

所以你最终会在你的规范中包含这个:

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

对于 Jenkins,只需按如下方式构建命令:

protractor --baseUrl=${url} conf.js --parameters.login.email=${email}
--parameters.login.password=${password}

如果您只想传递一个参数,另一种方法是在您的 config.js 中添加对象,并映射所有相关参数,如下所示:

let param_mapping = {
    prod: {
        url: "https://prod.app.com",
        email: "prod@gmail.com",
        password: "Test1234"
    },
    dev: {
        url: "https://dev.app.com",
        email: "dev@gmail.com",
        password: "Test1234"
    },
    stage: {
        url: "https://stage.app.com",
        email: "stage@gmail.com",
        password: "Test1234"
    }
};

let parameters = param_mapping[process.ENV.CUSTOM_ENV];

exports.config = {
    baseUrl: parameters.url,
    params: parameters,
    // ...
};

然后使用环境变量启动您的进程:

CUSTOM_ENV=dev protractor protractor.conf.js

请注意,我现在还没有测试这个特定的代码,但我不久前测试了逻辑,所以这可以是你的方法

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多