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

如何在Playwright-API框架中为多角色配置专属的setWorldConstructor

多角色Cookie动态切换方案

针对你的Playwright-Typescript+Cucumber API自动化框架,要实现不同角色(买家/卖家/代理)的专属Cookie传递,可以通过以下方式修改代码:

1. 调整环境变量配置

在你的环境配置文件(如.env)中,为每个角色单独配置Cookie:

BUYER_COOKIE="buyer专属的Cookie内容"
SELLER_COOKIE="seller专属的Cookie内容"
AGENT_COOKIE="agent专属的Cookie内容"

2. 修改ScenarioWorld类,支持角色参数

更新world.ts,让初始化请求上下文时可以接收角色参数,并根据角色加载对应Cookie:

import playwright, {APIRequestContext} from "playwright";
import { World,IWorldOptions,setWorldConstructor } from "@cucumber/cucumber";
import { GlobalAPIResponseVariables, GlobalConfig } from "../../env/global";
import { env } from "../../env/parseEnv";

export type Api = {
 request: APIRequestContext
}

// 定义角色与Cookie的映射
const ROLE_COOKIES: Record<string, string> = {
    buyer: env('BUYER_COOKIE'),
    seller: env('SELLER_COOKIE'),
    agent: env('AGENT_COOKIE')
};

export class ScenarioWorld extends World{
    constructor(options: IWorldOptions){    
        super(options);
        this.globalAPIResponseVariables ={}
        this.globalConfig = options.parameters as GlobalConfig
    }
    globalConfig : GlobalConfig
    globalAPIResponseVariables:GlobalAPIResponseVariables
    api!: Api 

    // 调整init方法,接收角色参数
    async init(role: string): Promise<Api>{
        const request = await this.newRequest(role)
        this.api = {request }
        return this.api
    }
    
    // 修改newRequest,根据角色获取对应Cookie
    private newRequest = async (role: string): Promise<APIRequestContext> =>{
        // 校验角色是否存在
        const cookie = ROLE_COOKIES[role];
        if (!cookie) {
            throw new Error(`未配置角色【${role}】对应的Cookie,请检查环境变量`);
        }

        const request = await playwright.request.newContext({
            extraHTTPHeaders : {
                'Content-type':'application/json;charset=UTF-8',
                "Cookie": cookie
            }
        })
        return request
    }
}

setWorldConstructor(ScenarioWorld)

3. 在Cucumber步骤中指定角色

在你的步骤定义文件中,根据场景需求传入对应角色,初始化请求上下文:

方式1:固定角色的步骤

import { Given } from '@cucumber/cucumber';

Given('买家初始化API请求上下文', async function () {
    await this.init('buyer');
});

Given('卖家初始化API请求上下文', async function () {
    await this.init('seller');
});

Given('代理初始化API请求上下文', async function () {
    await this.init('agent');
});

方式2:动态角色参数(更灵活)

import { Given } from '@cucumber/cucumber';

Given('{string}初始化API请求上下文', async function (role: string) {
    await this.init(role.toLowerCase()); // 统一转为小写,避免大小写问题
});

对应的.feature文件步骤可以写成:

Feature: 多角色API测试
  Scenario: 买家查询订单
    Given 买家初始化API请求上下文
    When 买家调用查询订单接口
    Then 返回订单列表

  Scenario: 卖家管理商品
    Given 卖家初始化API请求上下文
    When 卖家调用创建商品接口
    Then 商品创建成功

关键说明

  • 每个场景开始前,通过init(role)创建对应角色的请求上下文,后续所有API请求都会自动携带该角色的Cookie
  • 若新增角色,只需在.env中添加对应Cookie,并在ROLE_COOKIES映射中新增条目即可,无需修改核心逻辑

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 11:55:41