cypress 框架
参考文章:https://juejin.im/post/5aaa24caf265da23870e8f44
1.登录测试用例:
describe('登录测试', () => {
it('登录页面', () => {
// 提交输入表单并点击提交按钮
cy.visit('http://192.168.1.218:8084/#/login');
cy.get('input').eq(0).type('admin');
cy.get('input').eq(1).type('123456');
// cy.get('button').eq(0).click();
cy.get('button').click();
// cy.contains('测试病人new');
// 验证是否被重定向--区分大小写
cy.url({timeout:3000 }).should('includes', 'Homepage');
});
});
2. 退出测试用例:
describe('退出测试', () => {
// 在每次测试前登录:
beforeEach(() => {
cy.login('admin', '123456');
});
it('点击设置,再点击退出来退出系统', () => {
// 确认不在登录页面,在首页
cy.url().should('not.contains', 'login');
cy.get('div[class="el-dropdown"]').click();
cy.
get('li[class="el-dropdown-menu__item"]')
// .eq(1)
// .get('li') // 多重get无效
.eq(2)
.click();
cy.url().should('contains', 'login');
// 确认 退出后能否访问需登录的页面
cy.visit('http://192.168.1.218:8084/#/Homepage');
cy.url().should('contains', 'login');
// cy.pause();
setTimeout(() => {
console.log(0);
cy.wait(100);
// ??? 时间设置比较小的时候就会出错,还没退出--可能的原因:cy.click(),visit()等操作是异步的
// 如果外层没有setTimeout,assert会最先执行
assert.isNull(sessionStorage.getItem('userId'), 'userId is undefined');
}, 0);
});
// it('test', () => {
// // 确认localStorage是否被清除
// console.log(sessionStorage.getItem('userId'));
// assert.isUndefined(sessionStorage.getItem('userId'), 'userId is undefined');
// });
});
3.commands.js中的login方法:
Cypress.Commands.add('login', (username, password) => {
// 向后端发出POST请求
cy
.request({
url:'http://192.168.1.218:8084/wechat/login/check',
method:'POST',
body: {
username,
password,
},
form:true,
})
.then(resp => {
// console.log(resp);
// console.log(JSON.parse(resp.body).data.id);
// 断言来自服务器的响应
expect(resp.status).to.eq(200);
expect(JSON.parse(resp.body).code).to.eq(0);
sessionStorage.setItem('userId', JSON.parse(resp.body).data.id); // 用户id
// expect(resp.body).to.have.property('data');
// 我们所有的private路径都会检查存在redux store上的auth token,所以让我们把它传递到那里
// 到仪表盘
cy.visit('http://192.168.1.218:8084/#/Homepage');
});
});