Cypress学习文档

沉淀cypress对常用html组件定位的文档


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) =&gt; { connection.query(query, (error, results) =&gt; { if (error) reject(error); else { connection.end(); // console.log(results) return resolve(results); } }); }); } module.exports = (on, config) =&gt; { // Usage: cy.task('queryDb', query) on("task", { queryDb: query =&gt; { 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 =&gt; { expect(count).to.have.lengthOf(1); });</code></pre> <h1>3.结合多环境(详见Best Practise-&gt;多环境运行)情况下插件的使用</h1> <p>问题描述:db访问和多环境配置,涉及多处插件的调用;主要是不再使用cypress.json这个默认配置文件,特做以下说明:</p> <ul> <li>测试代码中db请求的调用 <pre><code>after(() =&gt; { 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) =&gt; { cy.task( "querySysOrgDB",{'query':`SELECT * FROM organization WHERE name = "${orgName}";`,"obj":obj} ).then(results =&gt; { cy.log(results); }) })</code></pre></li> <li> <p>plugin/index.js中的配置为: querySysOrgDB函数与2.1步骤中相同,</p> <pre><code>module.exports = (on,config) =&gt; { //针对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>

页面列表

ITEM_HTML