You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Karate UI中用单个Chrome驱动实例执行多测试用例并复用登录状态

解决方案

1. 全局钩子+共享浏览器实例(适配多数Web自动化框架)

  • 在全局前置钩子(如beforeAll/beforeSuite,依测试框架而定)中完成登录逻辑,同时将浏览器实例挂载到全局对象(比如Node.js的global,或框架提供的上下文对象)。
  • 所有测试场景直接调用全局实例执行操作,无需重复初始化驱动。
  • 在全局后置钩子(如afterAll/afterSuite)中执行登出并关闭浏览器实例。

示例代码(WebdriverIO 场景):

// wdio.conf.js
exports.config = {
  // 其他配置项...
  beforeSession: async (config, capabilities, specs) => {
    // 初始化驱动并完成登录
    await driver.init();
    await driver.url('https://your-login-domain.com');
    await driver.$('#username').setValue('test-user');
    await driver.$('#password').setValue('test-pass');
    await driver.$('#submit-btn').click();
    // 确认登录成功后进入后续流程
    await driver.waitUntil(() => driver.$('#dashboard').isDisplayed());
  },
  afterSession: async (config, capabilities, specs) => {
    // 执行登出操作
    await driver.$('#logout-btn').click();
    // 销毁会话
    await driver.deleteSession();
  },
  // 禁用测试用例间的浏览器重启
  restartBrowserBetweenTests: false,
};

2. 测试套件分组+会话信息传递

若框架不支持全局钩子,可将所有需复用登录状态的用例归为同一测试套件:

  • 在套件的before钩子中完成登录,保存会话标识(如Cookie、LocalStorage 数据)。
  • 套件内每个测试用例执行前,自动注入已保存的会话信息,跳过重复登录。
  • 在套件的after钩子中执行登出并清理资源。

示例代码(Mocha 场景):

describe('登录后统一执行测试场景', function() {
  let sessionCookies;
  let driver;

  before(async function() {
    // 初始化驱动并完成登录
    driver = await new Builder().forBrowser('chrome').build();
    await driver.get('https://your-login-domain.com');
    // 登录操作逻辑...
    // 保存会话Cookie
    sessionCookies = await driver.manage().getCookies();
  });

  beforeEach(async function() {
    // 注入Cookie维持登录状态
    await driver.manage().deleteAllCookies();
    for (const cookie of sessionCookies) {
      await driver.manage().addCookie(cookie);
    }
    await driver.get('https://your-test-page.com');
  });

  it('测试场景1:验证用户信息展示', async function() {
    // 测试逻辑(已处于登录状态)
    const userInfo = await driver.$('#user-info').getText();
    assert.equal(userInfo, 'test-user');
  });

  it('测试场景2:执行权限操作', async function() {
    // 测试逻辑(已处于登录状态)
    await driver.$('#admin-action').click();
    await driver.waitUntil(() => driver.$('success-alert').isDisplayed());
  });

  after(async function() {
    // 执行登出
    await driver.get('https://your-logout-domain.com');
    // 关闭驱动
    await driver.quit();
  });
});

3. 浏览器会话复用(基于浏览器参数)

部分浏览器支持通过指定用户数据目录复用会话,比如 Chrome 的user-data-dir参数:

  • 启动浏览器时指定固定的用户数据目录,让浏览器自动保存登录状态到本地。
  • 所有测试用例复用该目录启动浏览器,无需重复登录。
  • 测试结束后在全局钩子中执行登出,可选清理用户数据目录。

示例代码(Selenium Python 场景):

from selenium import webdriver
from selenium.webdriver.chrome.options import Options

chrome_options = Options()
# 指定用户数据目录,实现会话复用
chrome_options.add_argument("--user-data-dir=./chrome-session-data")

driver = webdriver.Chrome(options=chrome_options)

# 首次启动完成登录,后续启动自动复用状态
driver.get("https://your-login-domain.com")
# 登录操作逻辑...

# 执行所有测试场景
# ...

# 最后执行登出并关闭浏览器
driver.get("https://your-logout-domain.com")
driver.quit()

内容的提问来源于stack exchange,提问作者piyush kedar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.24 13:42:40