首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >Cypress:跨多个API测试重用auth令牌

Cypress:跨多个API测试重用auth令牌
EN

Stack Overflow用户
提问于 2019-11-23 06:19:01
回答 3查看 18.2K关注 0票数 11

我有一个Rest,它生成一个令牌。此会话令牌跨多个REST作为授权标记使用。我使用这个作为参考:jwt/cypress/integration/spec.js

但是,在该示例中,生成令牌的函数嵌入到测试中。我试图创建一个应该在本地存储的自定义命令,但是测试没有对它进行检测。注意,自定义命令中没有包含任何返回值。

我在support/commands.js下面的代码

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
let identity
Cypress.Commands.add('postToken', () => {
    cy.request({
        method: 'POST',
        url: Cypress.env('api_identity_url'), //get from cypress.env.json
        form: true, //sets to application/x-www-form-urlencoded
        body: {
            grant_type: 'client_credentials',
            scope: 'xero_all-apis'
        },
        auth: {
            username: Cypress.env('api_identity_username'),
            password: Cypress.env('api_identity_password')
        }
    })
        .its('body')
        .then((response) => {
            identity = response
            window.localStorage.setItem('identity', JSON.stringify(identity))
            cy.log(identity.access_token)
        })
})

我的测试

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
context('Check token details', () => {
  it('Check token', () => {
      cy.postToken()
      const bToken = window.localStorage.getItem('identity')
      cy.log(bToken)
  })
})

当我运行测试时,日志显示“identity”的null值。但是,它显示了自定义命令中的当前值,我尝试使用cy.log(identity.access_token)使用cy.writeFile,但我认为这不是一个干净的方法。必须有某种方式可以在函数和不同类之间传递数据。

示例JSON格式:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
{
  "token": "<this is the value I would like to use for other API's authorisation bearer token>",
  "expires_in": 1200,
  "token_type": "Bearer"
}
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2019-11-24 02:23:11

您可以使用cypress.本地存储.命令包在测试之间持久化localStorage。

support/commands.js

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import "cypress-localstorage-commands";

Cypress.Commands.add('postToken', () => {
  cy.request({
    method: 'POST',
    url: Cypress.env('api_identity_url'), //get from cypress.env.json
    form: true, //sets to application/x-www-form-urlencoded
    body: {
      grant_type: 'client_credentials',
      scope: 'xero_all-apis'
    },
    auth: {
      username: Cypress.env('api_identity_username'),
      password: Cypress.env('api_identity_password')
    }
  })
  .its('body')
  .then(identity => {
    cy.setLocalStorage("identity_token", identity.token);
  });
});

在你的测试中:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
describe("postToken", ()=> {
  before(() => {
    cy.postToken();
    cy.saveLocalStorage();
  });

  beforeEach(() => {
    cy.restoreLocalStorage();
  });

  it("should exist identity in localStorage", () => {
    cy.getLocalStorage("identity_token").should("exist");
    cy.getLocalStorage("identity_token").then(token => {
      console.log("Identity token", token);
    });
  });

  it("should still exist identity in localStorage", () => {
    cy.getLocalStorage("identity_token").should("exist");
    cy.getLocalStorage("identity_token").then(token => {
      console.log("Identity token", token);
    });
  });
});
票数 13
EN

Stack Overflow用户

发布于 2019-11-29 03:46:28

谢谢哈维尔给我看了cypress-localstorage-commands的包裹。我开始使用它。在此之前,我通常会得到这样的登录令牌。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
describe('Record audit', () => {
    let token = null;

    before(() => {
        cy.login().then((responseToken) => { // or postToken() in your case
            token = responseToken;
        });
    });

    it('I can use the token here', () => {
        cy.log(token);
    });
});

唯一的区别是我的login命令返回令牌。代码中应该是这样的

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// commands.js

.then((response) => {
    identity = response
    window.localStorage.setItem('identity', JSON.stringify(identity))
    cy.log(identity.access_token)
    return identity.access_token
})
票数 0
EN

Stack Overflow用户

发布于 2020-11-27 15:01:04

我在commmand.js中使用了这段代码

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
var headers_login = new Headers()
headers_login.append('Content-Type', 'application/json')

Cypress.Commands.add('get_token', (username, password)=>{
var token = ""
cy.request({
    method: 'POST',
    url: Cypress.env("api") + "users/getToken",
    failOnStatusCode: false,
    json: true,
    form: true,
    body: {username: username, password: password},
    headers: headers_login
 }).then((json) => {
    //cy.setLocalStorage('token', json.body.response.data.token)   
    token = json.body.response.data.token
    return token;
 }) }) 

在测试中添加以下代码

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
describe('test', ()=>{
 before(()=>{
    cy.get_token('username', 'password').then(youToken => {
        cy.visit('/', {
             onBeforeLoad: function (window) {
                window.localStorage.setItem('token', youToken);
             }
         })
     }) 
     cy.close_welcome()        
 })
 it('test 001', ()=>{
       // contain test 
 })})
afterEach(()=>{cy.clearLocalStorage('token')})
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59008563

复制
相关文章
django-google-auth google令牌(二)
Google令牌+扫码器(如果手机只安装Google令牌App扫码失败,请安装扫码器)
Autooooooo
2020/11/09
7250
django-google-auth google令牌(二)
Cypress系列(90)- Cypress.Cookies 命令详解以及如何跨测试用例共享 Cookies
https://www.cnblogs.com/poloyy/category/1768839.html
小菠萝测试笔记
2020/11/26
2.5K0
Cypress系列(90)- Cypress.Cookies 命令详解以及如何跨测试用例共享 Cookies
“前.NET Core时代”如何实现跨平台代码重用 ——程序集重用
除了在源代码层面实现共享(“前.NET Core时代”如何实现跨平台代码重用 ——源文件重用)之外,我们还可以跨平台共享同一个程序集,这种独立于具体平台的“中性”程序集通过创建一种名为“可移植类库(PCL: Portable Class Library)”项目来实现。为了让读者朋友们对PCL的实现机制具有充分的认识,我们先来讨论一个被我称为“程序集动态绑定”的话题。 目录 一、何谓程序集动态绑定? 二、程序集一致性 三、程序集重定向 四、类型的转移 五、可移植类库(PCL) 一、何谓程序集动态绑定? 我
蒋金楠
2018/01/15
1.2K0
“前.NET Core时代”如何实现跨平台代码重用 ——程序集重用
集成测试 Cypress 配置
之前小伙伴写了一个性能上报的 SDK,近期做重构了之后要兼容 script import 方式的引入,同时还要引入 Google 新推出的性能衡量指标,肉眼可见随着该项目的发展,项目体积、文件数量都会与日俱增。在此大背景下,我尝试了 Cypress 添加了集成测试。
子润先生
2021/06/28
1.4K0
简化跨微服务重用,API 标准化过程中的左移法
作者 | Thiyagarajan Kamaraj 译者 | 平川 策划 | 丁晓昀 什么是 API 标准化? API 设计就是创建一个有效的接口,使你可以更好地维护和实现 API,同时使消费者能够轻松地使用这个 API。 一致的 API 设计意味着,在组织或团队中对所有 API 及其公开的资源进行标准化设计。它是开发人员、架构师和技术作者共同遵守的蓝图,可以保证在 API 使用过程中品牌和体验的一致性。风格指南旨在确保 API 设计和实现方式的一致性,组织就是用它来标准化设计。下面是比较流行
深度学习与Python
2023/03/29
5300
简化跨微服务重用,API 标准化过程中的左移法
Cypress简易入门教程
1)安装node.js(https://nodejs.org/en/download/),根据版本选择32位或64位。
顾翔
2020/06/18
5.5K0
Cypress系列(41)- Cypress 的测试报告
https://www.cnblogs.com/poloyy/category/1768839.html
小菠萝测试笔记
2020/07/27
2.1K0
集成测试 Cypress 配置
之前小伙伴写了一个性能上报的 SDK,近期做重构了之后要兼容 script import 方式的引入,同时还要引入 Google 新推出的性能衡量指标,肉眼可见随着该项目的发展,项目体积、文件数量都会与日俱增。在此大背景下,我尝试了 Cypress 添加了集成测试。
上山打老虎了
2022/06/15
1K0
集成测试 Cypress 配置
你不知道的Cypress系列(15) -- 支持跨域访问了!
说起Cypress,读者朋友们应该对“下一代Web端自动化测试技术”,“弯道超车首选”等等早已烂熟于心了。Cypress独特的运行机制(运行在浏览器内)也使得它吊打Webdriver之类的UI自动化测试工具。但是Cypress并不是完美无瑕,我们在使用Cypress做自动化测试时,经常会提的一个问题就是,Cypress不支持跨域访问,而我的测试需要跨域怎么办?
iTesting
2022/04/28
2.6K0
你不知道的Cypress系列(15) -- 支持跨域访问了!
“前.NET Core时代”如何实现跨平台代码重用 ——源文件重用
微软在2002年推出了第一个版本的 .NET Framework,这是一个主要面向Windows 桌面(Windows Forms)和服务器(ASP.NET Web Forms)的基础框架。在此之后,PC的霸主地位不断受到其他设备的挑战甚至取代,为此微软根据设备自身的需求对.NET Framework作了相应的简化和改变,不断推出了针对具体设备类型的.NET Framework,主流的包括Windows Phone、Windows Store、Silverlight和Xbox等,它们分别对移动、平板和游戏设
蒋金楠
2018/01/15
8720
“前.NET Core时代”如何实现跨平台代码重用 ——源文件重用
Cypress系列(56)- 避免访问多个站点
https://www.cnblogs.com/poloyy/category/1768839.html
小菠萝测试笔记
2020/09/28
9580
Cypress系列(56)- 避免访问多个站点
Cypress系列(72)- 详解 Module API
https://www.cnblogs.com/poloyy/category/1768839.html
小菠萝测试笔记
2020/10/30
5920
Cypress系列(72)- 详解 Module API
Cypress测试断言的使用
断言是测用例的必要组成部分,Cypress支持多种断言,其中包括BDD(expect/should)和TDD(assert)格式断言。
wencheng
2021/01/05
1.8K0
Cypress测试断言的使用
javascript jquery ajax动态提交多个参数 api测试
为了方便自己测试rest api,所以做了一个动态参数的页面。大家有需要的话,就各取所需吧。 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>API测试</title> <script type="
用户1258909
2018/07/03
1.5K0
从理论到工具:带你全面了解自动化测试框架
软件行业正迈向自主、快速、高效的未来。为了跟上这个高速前进的生态系统的步伐,必须加快应用程序的交付时间,但不能以牺牲质量为代价。快速实现质量是必要的,因此质量保证得到了很多关注。为了满足卓越的质量和更快的上市时间的需求,自动化测试将被优先考虑。对于微型、小型和中型企业(SMEs)来说,自动化自身的测试过程是非常必要的,而最关键的方面是选择正确的自动化测试框架。
陈哥聊测试
2020/10/19
1.6K0
从理论到工具:带你全面了解自动化测试框架
Cypress系列(58)- 停用条件测试
https://www.cnblogs.com/poloyy/category/1768839.html
小菠萝测试笔记
2020/09/28
1.3K0
通过GiHub 查找 API 密钥、令牌和密码
关键词: Passwords api_key “api keys” authorization_bearer: oauth auth authentication client_secret api_token: “api token” client_id password user_password user_pass passcode client_secret secret password hash OTP user auth
Khan安全团队
2022/05/17
1.1K0
通过GiHub 查找 API 密钥、令牌和密码
自动化测试框架
为了适应快速发展的行业生态系统的步伐,必须加快应用程序交付时间,而且必须不能以质量为代价。在更短的时间内达到质量的目的至关重要,因此质量保障倍受关注。为了满足对卓越质量和更快迭代的要求,越来越多的企业引入自动化,并将优先进行自动化测试。敏捷开发模型使其测试过程自动化变得越来越必要,但是最关键的方面是选择正确的测试自动化框架。
FunTester
2020/09/27
2.2K0
点击加载更多

相似问题

Cypress + API auth

110

cypress api自动化测试中如何获取、存储和重用firebase令牌

122

在多个测试套件中Cypress重用测试用例

25

如何跨多个规范/测试文件组织/构造具有可重用功能的Cypress测试

20

跨多个系统测试可重用组件/服务

13
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文