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