DB访问支持
<p>说明:该mysql模块在EnOS Cypress中已经默认在基础镜像中安装,无需单独配置</p>
<h1>1. 环境安装</h1>
<p>安装命令:
<code>npm install --save-dev mysqljs/mysql</code></p>
<h1>2. 项目中配置与使用</h1>
<h2>2.1 plugins/index.js文件配置</h2>
<pre><code class="language-javascript">const mysql = require("mysql");
function queryTestDb(query, config) {
// creates a new mysql connection using credentials from cypress.json env's
const connection = mysql.createConnection(config.env.db);
// start connection to db
connection.connect();
// exec query + disconnect to db as a Promise
return new Promise((resolve, reject) => {
connection.query(query, (error, results) => {
if (error) reject(error);
else {
connection.end();
// console.log(results)
return resolve(results);
}
});
});
}
module.exports = (on, config) => {
// Usage: cy.task('queryDb', query)
on("task", {
queryDb: query => {
return queryTestDb(query, config);
}
});
};</code></pre>
<h2>2.2 cypress.json文件配置</h2>
<pre><code class="language-json"> "db": {
"host": "127.0.0.1",
"user": "YOUR_USERNAME",
"password": "YOUR_PASSWORD"
}</code></pre>
<h2>2.3 测试用例中使用</h2>
<pre><code class="language-javascript">cy.task("queryDb",`SELECT * FROM SCHEMA_NAME.TABLE_NAME WHERE COLUMNS_NAME='VALUE'`);</code></pre>
<p>有结果判断的使用方式:</p>
<pre><code class="language-javascript"> cy.task(
"queryDb",
`SELECT * FROM SCHEMA_NAME.TABLE_NAME WHERE COLUMNS_NAME='VALUE'`
).then(count => {
expect(count).to.have.lengthOf(1);
});</code></pre>
<h1>3.结合多环境(详见Best Practise->多环境运行)情况下插件的使用</h1>
<p>问题描述:db访问和多环境配置,涉及多处插件的调用;主要是不再使用cypress.json这个默认配置文件,特做以下说明:</p>
<ul>
<li>测试代码中db请求的调用
<pre><code>after(() => {
cy.clearTestOrgData(orgName,Cypress.config('sysOrgDB'));
})</code></pre>
<p>其中:Cypress.config()为获取cypress配置文件;并<strong>以参数形式将db对象</strong>传入。
多环境的配置文件为(以beta环境的配置文件为例、config/cypress.beta.json):
涉及db的配置为:</p>
<pre><code>"sysOrgDB": {
"host": "10.65.101.248",
"port": 3306,
"user": "envision",
"password": "Envisi0n4321!",
"database": "ecp_cmdb"
}</code></pre></li>
<li>以Commands.add形式封装的函数为(注意传入参数的调用方式):
<pre><code>Cypress.Commands.add('clearTestOrgData', (orgName,obj) => {
cy.task(
"querySysOrgDB",{'query':`SELECT * FROM organization WHERE name = "${orgName}";`,"obj":obj}
).then(results => {
cy.log(results);
})
})</code></pre></li>
<li>
<p>plugin/index.js中的配置为:
querySysOrgDB函数与2.1步骤中相同,</p>
<pre><code>module.exports = (on,config) => {
//针对db请求的plugin
on("task", {
querySysOrgDB({query,obj}){
return queryTestDb(query, obj);
}
});
//指定一个环境变量,如没有指定,则使用 cypress.beta.json
const file = config.env.configFile || 'beta'
return getConfigurationByFile(file);
}</code></pre>
<h1>4. Reference</h1>
<p>[1.] <a href="https://github.com/mysqljs/mysql">npm mysql官方github </a>
[2.] <a href="https://gist.github.com/fityanos/0a345e9e9de498b6c629f78e6b2835f5">cypress连接db的github地址:mysql_cypress_connection</a>
[3.] <a href="https://docs.cypress.io/api/commands/task#Usage">cy.task函数及插件使用</a></p>
</li>
</ul>