Javascript Cypress:我们如何在Cypress中使用承载令牌写入GET请求?
我有两个请求:一个是POST请求,另一个是get请求。首先,我通过post获得用户访问令牌,而在另一种情况下,我使用这个访问令牌来获得登录。我的代码不起作用 我正在使用Windows7和Cypress3.3.5 我的代码:Javascript Cypress:我们如何在Cypress中使用承载令牌写入GET请求?,javascript,networking,get,request,cypress,Javascript,Networking,Get,Request,Cypress,我有两个请求:一个是POST请求,另一个是get请求。首先,我通过post获得用户访问令牌,而在另一种情况下,我使用这个访问令牌来获得登录。我的代码不起作用 我正在使用Windows7和Cypress3.3.5 我的代码: var value; describe("Login operation", () => { it("Login Request with post method", () => { cy.request({
var value;
describe("Login operation", () => {
it("Login Request with post method", () => {
cy.request({
method:'POST',
url:'https://odms.baitussalam.org:8445/api/v1/auth/login',
body: {
"userName": "faizanj",
"password": "abc"
}
})
.then(function(response){
this.value = response.body.accessToken;
console.log("Value "+this.value);
expect(response.body.name).to.equal('Faizan');
expect(response.status).to.equal(200);
});
});
it('Second test case', function() {
var authHeader='bearer ${'+this.value+'}';
const options = {
method: 'GET',
url: `https://odms.baitussalam.org:8445/api/v1/qurbani-representative`,
headers:{
authorization:authHeader,
}};
cy.request(options)
.then((response)=>{
expect(response.status).to.equal(200);6+9
});
});
});
问题是,您正在尝试在测试用例之间使用变量集,而该变量集已经重置为存储令牌,您需要使用全局变量(不建议),或者创建一些登录命令,在您需要访问令牌之前将调用这些命令。例如:
Cypress.Commands.Add('login',(用户名,密码)=>{
赛义德请求({
方法:'POST',
网址:'https://odms.baitussalam.org:8445/api/v1/auth/login',
正文:{
用户名,
密码,
}
})
.as('loginResponse')
。然后((响应)=>{
Cypress.env('token',response.body.accessToken);//要么是这个,要么是某个全局变量,但请记住,这只在一个测试用例中起作用
返回响应;
})
.its(“状态”)
.should('eq',200);
})
然后,在使用Cypress.env('token')
之前,无论何时需要登录用户
例如:
description('测试令牌',()=>{
在每个之前(()=>{
cy.login();
});
它('测试请求',()=>{
const token=Cypress.env('token');
const authorization=`bearer${token}';
常量选项={
方法:“GET”,
网址:`https://odms.baitussalam.org:8445/api/v1/qurbani-代表`,
标题:{
授权,
}};
cy.request(选项)
.its(“状态”)
.should('eq',200);
})
});
您可以进一步覆盖所有请求,向其添加令牌,如下所示:
Cypress.Commands.overwrite('request',(originalFn,…选项)=>{
常量optionObject=选项[0];
const token=Cypress.env('token');
if(!!令牌和选项对象===对象(选项对象)){
optionsObject.headers={
授权:“持票人”+代币,
…选项Object.headers,
};
返回原始alfn(选项对象);
}
返回原始值(…选项);
});
那么上面的示例将如下所示:
description('测试令牌',()=>{
在每个之前(()=>{
cy.login();
});
它('测试请求',()=>{
cy.request(选项)
.its(“状态”)
.should('eq',200);
})
});
尝试在第二次测试中放置一个console.log(this.value)
,查看标题是否使用了该值。我认为您不需要在值前面添加这个。
,但您可以这样确认。请求覆盖似乎不起作用。如果我和cy.request(url,{Headers:{Authorization:'Bearer'+token})一起执行,它会工作。请给出建议。@a2441918如果您正确设置了Cypress.env('token'),您可以尝试调试
在overwrite中,如果您需要在cy.request
中单独添加它,它可能是空的。如果是这种情况,您需要在运行任何cy.request之前运行cy.login();
(如上定义)