栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

「自动化测试」playwright 前端自动化——网络请求,用户鉴权的封装

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

「自动化测试」playwright 前端自动化——网络请求,用户鉴权的封装

一 、网络请求的封装
class RequestCommon {
	readonly request: APIRequestContext;
    readonly browser: Browser;

    constructor (request: APIRequestContext, browser: Browser) {
        this.request = request;
        this.browser = browser;
    }

    
    public async getCookies (): Promise {
        const browserContext = await this.browser.newContext();
        return (await browserContext.storageState()).cookies;
    }

    
    public async post (url: string, options?: PostOptions): Promise {
        const csrfToken = await this.getCsrfToken();
        return this.request.post(`${baseUrl.default}${url}`, {
            ignoreHTTPSErrors: true,
            ...options,
            headers: {
                'content-type': 'application/json',
                ...options?.headers
            }
        });
    }
}

封装一个类通过传入的 fixtures 控制,确保发送请求的request,和browser都是当前页面下的,以避免对于多浏览器跑不同用户场景下的cookies不同导致权限不同

使用方法:

test('验证导出告警成功', async ({page, request, browser}) => {
    const requestCommonInstance = new RequestCommon(request, browser);
    const res = await requestCommonInstance.post('xxxUrl', { data })
}

优化ts类型约束及提示,通过自定义泛型工具获取函数第二个参数类型

export type GetSecondArgs = T extends (_: any, arg: infer R) => any ? R : any;
// post请求配置参数 获取APIRequestContext里的post函数类型的第二个配置参数
type PostOptions = GetSecondArgs;
二、用户鉴权相关: 第一步
const config: PlaywrightTestConfig = {
    
    globalSetup: require.resolve('./global-setup/index.ts')
}
第二步

在当前目录global-setup/index.ts文件中

import { chromium } from '@playwright/test';
import { LoginPageModel } from '../modules/login/models';

export default async function globalSetup () {
	// 不打开浏览器走一遍
    const browser = await chromium.launch({
        headless: true
    });
    // 忽略https不安全报错
    const page = await browser.newPage({
        ignoreHTTPSErrors: true
    });

    const loginInstance = new LoginPageModel(page);
    await loginInstance.gotoLogin();

    await loginInstance.login();
    await loginInstance.assertLoginSuccess();
	
	// 走完一遍登录流程后保存状态到adminStorageState.json文件中

    // Save signed-in state to 'adminStorageState.json'.
    await page.context().storageState({ path: 'adminStorageState.json' });

    await browser.close();
}
第三步

在页面中使用即可做到保存用户状态

import { test } from '@playwright/test';
test.use({ storageState: 'adminStorageState.json' });
暑期编程PK赛 得CSDN机械键盘等精美礼品!
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1017240.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号