我已经在'Cypress.env.json'文件中设置了环境变量,在运行cypress测试时,它成功读取了Cypress.env变量。但是,为了更加注重安全性,而不是对值进行“硬编码”,我的团队要求我将此变量保留为单独的“参数”,该参数从Windows 10环境变量中读取。我该如何实现?如果有人可以对此提供建议,那将真的很有帮助。
{
"QA_Server": "https://sometestingsite.com",
"username": "testQA",
"password": "Password1234!"
}
答案 0 :(得分:4)
来自赛普拉斯文档here:
您计算机上以CYPRESS_
或cypress_
开头的任何环境变量都将自动添加并提供给您。
有冲突的值将覆盖cypress.json
和cypress.env.json
文件中的值。
在添加环境变量时,Cypress将剥离CYPRESS_
。
从命令行导出cypress env变量:
export CYPRESS_HOST=laura.dev.local
export cypress_api_server=http://localhost:8888/api/v1/
如果您使用的是Windows,则可以使用set
或setx
命令设置环境变量。
在测试文件中,您可以这样称呼:
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}`);
});