From c721a7c65585a56ae10b548f54f148afbd5245b8 Mon Sep 17 00:00:00 2001 From: floraachy <1622042529@qq.com> Date: Fri, 25 Oct 2024 14:41:33 +0800 Subject: [PATCH] Implement #1 --- conftest.py | 116 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 116 insertions(+) create mode 100644 conftest.py diff --git a/conftest.py b/conftest.py new file mode 100644 index 0000000..ab84eab --- /dev/null +++ b/conftest.py @@ -0,0 +1,116 @@ +""" +# coding=utf-8 +@Time:2024/7/3 11:16 +@Auth:jiafeng +@File:conftest.py +""" + +import os +import shutil +import time + +import pytest +import allure +from playwright.sync_api import sync_playwright + +from CBB.pages.login_page import LoginPage +from CBB.setting import login_base_dir, RunConfig +from CBB.utils.read_file import load_yaml + + +# 导入pytest的fixture装饰器以及request对象,用于定义fixture函数和访问测试上下文 +@pytest.fixture(scope="function") +def init_browser(request, browser_type=RunConfig.browser[0]): + """ + 初始化浏览器驱动并打开基础URL,根据指定的浏览器类型(默认从配置中读取)。 + 支持的浏览器类型有:Chromium, Firefox, WebKit。 + + 参数: + - request: pytest请求对象,用于注册清理函数 + - browser_type: 字符串,默认为从RunConfig获取的第一个浏览器类型 + + 函数功能细节: + 1. 初始化Playwright实例以与浏览器交互。 + 2. 根据browser_type参数选择并启动相应的浏览器实例,禁用无头模式并最大化窗口。 + 3. 配置新浏览器上下文以录制视频,设定视频保存目录及尺寸。 + 4. 在新上下文中创建页面,供测试使用。 + 5. 定义清理函数fin,用于测试结束时执行资源清理及视频录制文件处理。 + 6. 使用yield关键字,在执行测试前返回页面和上下文对象;测试后自动调用fin进行清理工作。 + """ + # 初始化Playwright + playwright = sync_playwright().start() + + # 根据浏览器类型启动对应浏览器 + if browser_type == 'chromium': + browser = playwright.chromium.launch(headless=False, args=['--start-maximized']) + elif browser_type == 'firefox': + browser = playwright.firefox.launch(headless=False, args=['--start-maximized']) + elif browser_type == 'webkit': + browser = playwright.webkit.launch(headless=False, args=['--start-maximized']) + else: + # 如果提供的浏览器类型不受支持,则抛出错误 + raise ValueError("不支持的浏览器类型。支持的浏览器: chromium, firefox, webkit.") + + # 配置浏览器上下文以录制视频 + context = browser.new_context(no_viewport=True, + record_video_dir="videos/", + record_video_size={"width": 1280, "height": 720}) + + # 在新上下文中创建页面 + page = context.new_page() + + def fin(): + # 清理操作:尝试获取视频路径,关闭浏览器上下文和浏览器,停止Playwright + try: + video_path = page.video.path() + except Exception as e: + video_path = None + + context.close() + browser.close() + playwright.stop() + + # 将录制的视频附加到Allure测试报告中 + if video_path: + allure.attach.file(video_path, name="test_video", attachment_type=allure.attachment_type.MP4) + + # 注册清理函数,确保测试结束后执行fin + request.addfinalizer(fin) + + # 返回页面和上下文给测试函数使用 + yield page, context + + +@allure.title("登录成功测试用例") +@allure.step("操作步骤: 登录") +@pytest.fixture(scope="function") +def test_login_success(init_browser): + """ + 进行登录操作,并验证登录成功 + """ + page, context = init_browser + login_page = LoginPage(page) + + # 从配置文件中读取登录URL + login_url = load_yaml(path=login_base_dir, key='baseUrl') + with allure.step(f"打开登录页面:{login_url}"): + page.goto(login_url) + + # 从配置文件中读取用户名和密码 + # username = load_yaml(path='config.yaml', key='username') + # password = load_yaml(path='config.yaml', key='password') + # with allure.step("输入用户名"): + login_page.enter_username('wjf') + # with allure.step("输入密码"): + login_page.enter_password('6') + # with allure.step("点击登录按钮"): + login_page.click_login_button() + page.wait_for_timeout(1000) # 等待1秒钟以确保页面加载完成 + + # 确认登录成功 + with allure.step("验证登录成功"): + assert login_page.is_logged_in() + + yield page, context + +