【问题标题】:How to set environment variables like test environment for playwright-cucumber js如何设置环境变量,如 playwright-cucumber js 的测试环境
【发布时间】:2021-08-10 17:54:10
【问题描述】:

我一直在使用 Playwright 和 Cucumber 来实现 React Web 应用程序的 e2e 自动化。这个 repo 一直是我的起点,而且效果很好。

但是,我正在寻找有关如何在不同的测试环境(如开发或 QA)上运行这些测试的指针,以便目标 url 和其他参数根据通过的环境而有所不同。例如 -

if (env == dev){
       baseurl = dev_url
       }
else{
      baseurl = qa_url
       }

Cucumber 文档提到了 World parameter - 这个 issue 看起来像一个类似的问题,但是我对为此任务传递不同的 JSON 持怀疑态度。

这只能在 Cucumber 级别实现,还是有 Playwright 或 Node 的方式来做到这一点?

【问题讨论】:

    标签: javascript node.js cucumberjs playwright


    【解决方案1】:

    由于您已经在使用 cucumber,请像这样定义您的 world 文件: 首先,您可以将属性文件分离为:properties-dev.json 和 properties-qa.json。下面的代码基于我们传入 defaultOptions 对象的 env 读取属性文件,并将整个属性文件数据存储到“this”中。在你的 hooks 文件中使用 'this' 并调用 this.keyNameForUrl 来获取特定于环境的 url。

    注意:“this”只能在 world 和 hooks 文件中访问(参考 //https://github.com/cucumber/cucumber-js/blob/master/docs/support_files/world.md)。如果您在其他文件中需要此数据,请创建一个单独的类并在其中声明所有公共静态变量。在 Hooks BeforeAll 函数中,将 'this' 中的值重新分配给类中创建的静态变量。

    import { setWorldConstructor } from 'cucumber';
    const fs = require('fs');
    
    const defaultOptions = {
        env: 'qa'
    };
    
    function processOptions(options) {
        let envFile = 'properties-' + options.env + '.json';
        let environment = JSON.parse(fs.readFileSync(envFile));
        return Object.assign(options, environment);
    }
    
    function World(input) {
        this.World = input;
        });
    
        Object.assign(this, processOptions(Object.assign(defaultOptions, options)), options);
    }
    
    setWorldConstructor(World);
    
    // https://github.com/cucumber/cucumber-js/blob/master/docs/support_files/world.md
    

    【讨论】:

      猜你喜欢
      • 2014-09-29
      • 2023-03-06
      • 2020-02-14
      • 1970-01-01
      • 1970-01-01
      • 2019-07-02
      • 2019-03-24
      • 2016-08-11
      相关资源
      最近更新 更多