Cypress接口自动化3-定义公共函数获取token给其它接口调用
- 2021-09-18 17:00:00
- wencheng
- 转贴:
- 微信公众号
- 2617
前言
在做接口自动化过程中会把获取token的方法定义公共函数去调用,token分为2种一种登录成功后获得token只使用一次失效,另外一种登录成功后再规定时间可以使用token超时失效。token只使用一次失效
在commands.js中添加获取token的方法
//全局定义获取token Cypress.Commands.add('token', function () { cy.request({ url: "http://api.keyou.site:8000/user/login/", method: 'POST', headers: {"Content-Type": "application/json"}, body: {"username": 'keyou1', "password": '123456'} }) .its('body.token').as('token') .then(function () { cy.wrap(sessionStorage.setItem("Token", this.token)); }) cy.log("返回的token:" + sessionStorage.getItem("Token")) })在测试用例中调用beforeEach获取tokeo保证每次请求都会获取一个新的token
describe("获取公共接口共其它接口使用", function () { beforeEach("获取token", function () { cy.token() }) it("获取用户信息", function () { var token = sessionStorage.getItem("Token") cy.request({ url: "/configures/", method: 'GET', headers: {"Content-Type": "application/json", "authorization": "JWT " + token}, body: {"page": 1, "size": 10, "ordering": 1} }).then(function (resp) { expect(resp.status).to.eq(200) expect(resp.body.count).to.eq(3) cy.log(resp.body) }) }) })
将token写入txt一次请求全局复用
如果token有时间限制,那我们可以把token存到txt文件中,通过读取txt文件拿值。这样可以完成一次token请求,完成所有接口的复用。token写入txt中
Cypress.Commands.add('token_txt', function () { cy.request({ url: "http://api.keyou.site:8000/user/login/", method: 'POST', headers: {"Content-Type": "application/json"}, body: {"username": 'keyou1', "password": '123456'} }) .its('body.token').as('token') .then(function () { const token = this.token cy.writeFile('cypress/cypress_files/demo.txt', token) }) })
通过before调用一次token并给多个接口复用
describe("txt取token", function () { before("获取token", function () { cy.token_txt() cy.readFile('cypress/cypress_files/demo.txt').then((token) => {}).as('token') }) it("获取用户信息", function () { cy.log(this.token) cy.request({ url: "/configures/", method: 'GET', headers: {"Content-Type": "application/json", "authorization": "JWT " + this.token}, }).then(function (resp) { expect(resp.status).to.eq(200) expect(resp.body.count).to.eq(6) cy.log(resp.body) }) }) it("返回所有项目ID和名称", function () { cy.log(this.token) cy.request({ url: "/projects/names/", method: 'GET', headers: {"Content-Type": "application/json", "authorization": "JWT " + this.token}, body: {"page": 1, "size": 10, "ordering": 1} }).then(function (resp) { expect(resp.status).to.eq(200) expect(resp.body[0].id).to.eq(1) expect(resp.body[0].name).to.eq('自动化测试平台项目') cy.log(resp.body) }) }) })
发表评论
联系我们
- 联系人:阿道
- 联系方式:17762006160
- 地址:青岛市黄岛区长江西路118号青铁广场18楼