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

前言

更多内容关注公众号:自动化测试 To share

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

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家的支持。

 

posted @ 2021-04-08 22:27  wen-cheng  阅读(544)  评论(0编辑  收藏  举报