Cypress.io如何读取Windows环境变量?

时间:2018-09-20 01:36:20

标签: javascript cypress

我已经在'Cypress.env.json'文件中设置了环境变量,在运行cypress测试时,它成功读取了Cypress.env变量。但是,为了更加注重安全性,而不是对值进行“硬编码”,我的团队要求我将此变量保留为单独的“参数”,该参数从Windows 10环境变量中读取。我该如何实现?如果有人可以对此提供建议,那将真的很有帮助。

{
"QA_Server": "https://sometestingsite.com",
"username": "testQA",
"password": "Password1234!"
}

2 个答案:

答案 0 :(得分:4)

来自赛普拉斯文档here

您计算机上以CYPRESS_cypress_开头的任何环境变量都将自动添加并提供给您。

有冲突的值将覆盖cypress.jsoncypress.env.json文件中的值。

在添加环境变量时,Cypress将剥离CYPRESS_

从命令行导出cypress env变量:

export CYPRESS_HOST=laura.dev.local

export cypress_api_server=http://localhost:8888/api/v1/

如果您使用的是Windows,则可以使用setsetx命令设置环境变量。

在测试文件中,您可以这样称呼:

Cypress.env()             // {HOST: "laura.dev.local", api_server: "http://localhost:8888/api/v1"}
Cypress.env("HOST")       // "laura.dev.local"
Cypress.env("api_server") // "http://localhost:8888/api/v1/"

答案 1 :(得分:1)

您可以直接从Windows env变量中读取它。 为此,请将cy.exec与echo一起使用。如果您在CMD'echo%appdata%'中运行,它将打印路径。我把cy.exec包装为

cy.runExec = (js) => {
  cy.log(`--- runnnig node ${js}`);
  cy.exec(js, { failOnNonZeroExit: false }).then((z) => {
    if (z.stderr != undefined) {
      cy.log(`--- stderr`);
      let lines = z.stderr.split("\n");
      for (let n in lines) cy.log(`--- ${n}: ${lines[n]}`);
    }
    if (z.stdout != undefined) {
      cy.log(`--- stdout`);
      let lines = z.stdout.split("\n");
      for (let n in lines) cy.log(`--- ${n}: ${lines[n]}`);
    }      
  });
};

,如果将其称为cy.runExec('echo %appdata%'),它将在cypress输出中打印相同的路径,您可以修改此方法以仅获取stdout。您还可以使用cy.wrap(...)。as(...)保存该值,以后再获取。

这是直接呼叫:

cy.getWinEnv = (s) => {
  cy.exec(`echo %${s}%`, { failOnNonZeroExit: false }).then((z) => {
    let out = z.stdout != undefined ? z.stdout : "undefined";
    cy.wrap(out).as(s);
    //do not: return out;
  });
};

用法:

//read %appdata%
cy.getWinEnv("appdata");

//log %appdata% in cypress
cy.get("@appdata").then((x) => cy.log(`--- ${x}`));

又一次更新-如果您添加“ cypress-promise”软件包,则可以直接通过async / await调用...

cy.getWinEnvEx = async (s) => {
  var out = "undefined yet";
  await cy.exec(`echo %${s}%`, { failOnNonZeroExit: false }).then((z) => {
    if (z == null) {
      cy.log("--- output is null");
    } else {      
      out = z.stdout != undefined ? z.stdout : "undefined";
      //cy.log(`--- z.stdout ${out}`);
    }
  });
  return out;
};

...

it("list windows variables", async () => {
  let z = await cy.getWinEnvEx("USERPROFILE");
  cy.log(`--- USERPROFILE ${z}`);
});