Cypress接口自动化3-定义公共函数获取token给其它接口调用

2021-09-18 17:00:00
wencheng
转贴:
微信公众号
2486


前言

在做接口自动化过程中会把获取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)
      })
  })
}) 

cypress-2

将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)
      })
  })
})

cypress-2

发表评论
评论通过审核后显示。
联系我们
  • 联系人:阿道
  • 联系方式: 17762006160
  • 地址:青岛市黄岛区长江西路118号青铁广场18楼