我的编程空间,编程开发者的网络收藏夹
学习永远不晚

python中playwright结合pytest执行用例的实现

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

python中playwright结合pytest执行用例的实现

playwright结合Pytest为您的 Web 应用程序编写端到端的测试。

安装pytest插件


C:\Users\lifeng01>pip install pytest-playwright
Collecting pytest-playwright
  Using cached pytest_playwright-0.2.2-py3-none-any.whl (9.8 kB)
Requirement already satisfied: pytest in d:\python\python37\lib\site-packages (from pytest-playwright) (6.2.5)
Requirement already satisfied: playwright>=1.13 in d:\python\python37\lib\site-packages (from pytest-playwright) (1.17.0)
Requirement already satisfied: python-slugify in d:\python\python37\lib\site-packages (from pytest-playwright) (5.0.2)
Requirement already satisfied: pytest-base-url in d:\python\python37\lib\site-packages (from pytest-playwright) (1.4.2)
Requirement already satisfied: typing-extensions in d:\python\python37\lib\site-packages (from playwright>=1.13->pytest-playwright) (3.7.4.3)
Requirement already satisfied: pyee>=8.0.1 in d:\python\python37\lib\site-packages (from playwright>=1.13->pytest-playwright) (8.2.2)
Requirement already satisfied: websockets>=8.1 in d:\python\python37\lib\site-packages (from playwright>=1.13->pytest-playwright) (9.1)
Requirement already satisfied: greenlet>=1.0.0 in d:\python\python37\lib\site-packages (from playwright>=1.13->pytest-playwright) (1.0.0)
Requirement already satisfied: atomicwrites>=1.0 in d:\python\python37\lib\site-packages (from pytest->pytest-playwright) (1.3.0)
Requirement already satisfied: attrs>=19.2.0 in d:\python\python37\lib\site-packages (from pytest->pytest-playwright) (19.3.0)
Requirement already satisfied: py>=1.8.2 in d:\python\python37\lib\site-packages (from pytest->pytest-playwright) (1.9.0)
Requirement already satisfied: toml in d:\python\python37\lib\site-packages (from pytest->pytest-playwright) (0.10.0)
Requirement already satisfied: colorama in d:\python\python37\lib\site-packages (from pytest->pytest-playwright) (0.4.3)
Requirement already satisfied: pluggy<2.0,>=0.12 in d:\python\python37\lib\site-packages (from pytest->pytest-playwright) (0.13.1)
Requirement already satisfied: packaging in d:\python\python37\lib\site-packages (from pytest->pytest-playwright) (20.9)
Requirement already satisfied: importlib-metadata>=0.12 in d:\python\python37\lib\site-packages (from pytest->pytest-playwright) (1.7.0)
Requirement already satisfied: iniconfig in d:\python\python37\lib\site-packages (from pytest->pytest-playwright) (1.0.1)
Requirement already satisfied: requests>=2.9 in d:\python\python37\lib\site-packages (from pytest-base-url->pytest-playwright) (2.25.0)
Requirement already satisfied: text-unidecode>=1.3 in d:\python\python37\lib\site-packages (from python-slugify->pytest-playwright) (1.3)
Requirement already satisfied: zipp>=0.5 in d:\python\python37\lib\site-packages (from importlib-metadata>=0.12->pytest->pytest-playwright) (3.1.0)
Requirement already satisfied: urllib3<1.27,>=1.21.1 in d:\python\python37\lib\site-packages (from requests>=2.9->pytest-base-url->pytest-playwright) (1.26.2)
Requirement already satisfied: certifi>=2017.4.17 in d:\python\python37\lib\site-packages (from requests>=2.9->pytest-base-url->pytest-playwright) (2020.4.5.1)
Requirement already satisfied: idna<3,>=2.5 in d:\python\python37\lib\site-packages (from requests>=2.9->pytest-base-url->pytest-playwright) (2.9)
Requirement already satisfied: chardet<4,>=3.0.2 in d:\python\python37\lib\site-packages (from requests>=2.9->pytest-base-url->pytest-playwright) (3.0.4)
Requirement already satisfied: pyparsing>=2.0.2 in d:\python\python37\lib\site-packages (from packaging->pytest->pytest-playwright) (2.4.7)
Installing collected packages: pytest-playwright
Successfully installed pytest-playwright-0.2.2

编写测试用例


import pytest
from playwright.sync_api import Page
 
 
def test_baidu_com(page: Page):
 
    page.goto("https://www.baidu.com")
    # xpath定位输入框,输入文本内容
    page.fill('//*[@id="kw"]', "秦时明月")
    # css点位点击“百度一下”按钮
    page.click('#su')
    # 打印title名称
    print(page.title)
 
 
if __name__ == '__main__':
    pytest.main(["-v", "test_baidu_example.py"])

名词解释:

test_baidu_com(page: Page):自动完成配置类型 ( page是pytest_playwright插件提供的一个夹函数,page指定到类型为Page,Page是playwright库提供的一个类,page指定类型为Page就可以调用Page类中的一些列方法 )

命令行输入命令执行:


PS F:\project_gitee\Test\playwrightProject\cases> pytest --browser chromium --video on
================================================================================== test session starts ==================================================================================
platform win32 -- Python 3.7.7, pytest-6.2.5, py-1.9.0, pluggy-0.13.1
rootdir: F:\project_gitee\Test\playwrightProject\cases
plugins: allure-pytest-2.9.43, anyio-3.3.4, base-url-1.4.2, clarity-1.0.1, cov-2.8.1, emoji-0.2.0, forked-1.3.0, html-3.1.1, lazy-fixture-0.6.3, metadata-1.11.0, pikachu-0.1.0, playwrigh
t-0.2.2, rerunfailures-9.1.1, xdist-2.2.1
collected 1 item                                                            
 
test_baidu_example.py .                                                                                                                                                           [100%]
 
=================================================================================== 1 passed in 1.97s ===================================================================================

命令行常用基础命令:


# 运行测试
pytest 
 
# 开启页面运行
pytest --headed
 
# 指定浏览器运行
pytest --browser firefox
 
# 开启页面运行并指定浏览器运行
pytest --headed --browser firefox
 
# 指定两个浏览器运行,优先运行火狐再运行谷歌
pytest --browser firefox --browser chromium
 
# 使用浏览器频道,支持谷歌浏览器(我的电脑其他浏览器是报错的)
pytest --browser-channel chromium
 
# 用慢动作运行测试
pytest --slowmo 100
 
# 指定谷歌浏览器,开启记录每次测试的轨迹(生成一个.zip包,存放在test-results文件夹中)
pytest --browser chromium --tracing on(on:开;off:关)
 
# 指定谷歌浏览器,开启每次测试录制视频(生成一个.webm包,存放在test-results文件夹中)
pytest --browser chromium --video on(on:开;off:关)
 
# 指定谷歌浏览器,开启每次测试后是否自动截屏(生成一个.png图片,存放在test-results文件夹中)
pytest --browser chromium --screenshot on

通过浏览器跳过测试:


import pytest
from playwright.sync_api import Page
 
 
@pytest.mark.skip_browser("firefox")
def test_baidu_com(page: Page):
 
    page.goto("https://www.baidu.com")
    # xpath定位输入框,输入文本内容
    page.fill('//*[@id="kw"]', "秦时明月")
    # css点位点击“百度一下”按钮
    page.click('#su')
    # 打印title名称
    print(page.title)
 
 
if __name__ == '__main__':
    pytest.main(["-v", "test_baidu_example.py"])

在特定浏览器上运行:


import pytest
from playwright.sync_api import Page
 
 
@pytest.mark.only_browser("chromium")
def test_baidu_com(page: Page):
 
    page.goto("https://www.baidu.com")
    # xpath定位输入框,输入文本内容
    page.fill('//*[@id="kw"]', "秦时明月")
    # css点位点击“百度一下”按钮
    page.click('#su')
    # 打印title名称
    print(page.title)
 
 
if __name__ == '__main__':
    pytest.main(["-v", "test_baidu_example.py"])

忽略 HTTPS 错误和设置自定义视口大小

第一种是写在conftest.py中,然后直接运行测试用例:


# conftest.py
 
import pytest
 
 
@pytest.fixture(scope="session")
def browser_context_args(browser_context_args):
    return {
        **browser_context_args,
        "ignore_https_errors": True,
    }
 
 
@pytest.fixture(scope="session")
def browser_context_args(browser_context_args):
    return {
        **browser_context_args,
        "viewport": {
            "width": 1920,
            "height": 1080,
        }
    }

测试用例写法如下(最好这样写,不然运行就报错,作者已采坑):


import pytest
from playwright.sync_api import Page
 
 
def test_example(page: Page):
    page.goto("http://www.baidu.com")
    assert page.title() == "百度一下,你就知道"
 
    page.close()
 
 
if __name__ == '__main__':
    pytest.main(["-v", "test_example.py"])

命令行运行测试用例:


PS F:\project_gitee\Test\playwrightProject\cases> pytest --headed --browser chromium
================================================================================== test session starts ==================================================================================
platform win32 -- Python 3.7.7, pytest-6.2.5, py-1.9.0, pluggy-0.13.1
rootdir: F:\project_gitee\Test\playwrightProject\cases
plugins: allure-pytest-2.9.43, anyio-3.3.4, asyncio-0.16.0, base-url-1.4.2, clarity-1.0.1, cov-2.8.1, emoji-0.2.0, forked-1.3.0, html-3.1.1, lazy-fixture-0.6.3, metadata-1.11.0, pikachu-
0.1.0, playwright-0.2.2, rerunfailures-9.1.1, xdist-2.2.1
collected 1 item                                                                                                                                                                         
 
test_example.py .                                                                                                                                                                  [100%]
 
=================================================================================== 1 passed in 2.39s ===================================================================================

第二种是直接在用例中增加指定参数即可:


import pytest
from playwright.sync_api import sync_playwright
 
 
def test_example():
    with sync_playwright() as p:
        browser = p.chromium.launch(headless=False)
        page = browser.new_context(
            ignore_https_errors=True,
            viewport={
                "width": 1920,
                "height": 1040,
            }
        )
        page = page.new_page()
        page.goto("http://www.baidu.com")
        assert page.title() == "百度一下,你就知道"
        browser.close()
 
 
if __name__ == '__main__':
    pytest.main(["-v", "test_example.py"])

名词解释:
p.chromium.launch(headless=False):headless=False是开启有页面运行(默认是True,也就是无头浏览器)

第三种是模拟手机浏览器


# conftest.py
 
import pytest
 
 
@pytest.fixture(scope="session")
def browser_context_args(browser_context_args, playwright):
    iphone_11 = playwright.devices['iPhone 11 Pro']
    return {
        **browser_context_args,
        **iphone_11,
    }

测试用例写法如下(最好这样写,不然运行就报错,作者已采坑):


import pytest
from playwright.sync_api import Page
 
 
def test_example(page: Page):
    page.goto("http://www.baidu.com")
    assert page.title() == "百度一下,你就知道"
 
    page.close()
 
 
if __name__ == '__main__':
    pytest.main(["-v", "test_example.py"])

命令行运行测试用例:


PS F:\project_gitee\Test\playwrightProject\cases> pytest --headed --browser chromium
================================================================================== test session starts ==================================================================================
platform win32 -- Python 3.7.7, pytest-6.2.5, py-1.9.0, pluggy-0.13.1
rootdir: F:\project_gitee\Test\playwrightProject\cases
plugins: allure-pytest-2.9.43, anyio-3.3.4, asyncio-0.16.0, base-url-1.4.2, clarity-1.0.1, cov-2.8.1, emoji-0.2.0, forked-1.3.0, html-3.1.1, lazy-fixture-0.6.3, metadata-1.11.0, pikachu-
0.1.0, playwright-0.2.2, rerunfailures-9.1.1, xdist-2.2.1
collected 1 item                                                                                                                                                                         
 
test_example.py F                                                                                                                                                                  [100%]
 
======================================================================================= FAILURES ========================================================================================
________________________________________________________________________________ test_example[chromium] _________________________________________________________________________________
 
page = <Page url='https://m.baidu.com/?from=844b&vit=fps'>
 
    def test_example(page: Page):
        page.goto("http://www.baidu.com")
>       assert page.title() == "百度一下,你就知道"
E       AssertionError: assert '百度一下' == '百度一下,你就知道'
E         - 百度一下,你就知道
E         + 百度一下
 
test_example.py:15: AssertionError
================================================================================ short test summary info ================================================================================
FAILED test_example.py::test_example[chromium] - AssertionError: assert '百度一下' == '百度一下,你就知道'
=================================================================================== 1 failed in 3.14s ===================================================================================

这里运行后,打开的web页面,是一个手机形状的页面,仿的是手机浏览器(代码中指定的是iPhone 11 Pro)

持久上下文

它的意思就是打开一个web页面,会在这个web页面开多个新标签页面去执行测试用例。

例如:我有两个测试用例需要执行,如果使用持久上下文,就会打开一个web页面,然后web页面的第一个标签页运行第一个测试用例,第二个标签页运行第二个测试用例,直到把所有测试用例运行完了,关闭整个web页面,结束。

当然,如果你没有使用持久上下文,那就是打开web页面执行第一个测试用例,执行完第一个测试用例关闭web页面,然后再打开web页面执行第二个测试用例,执行完第二个测试用例关闭web页面,结束。


import pytest
from playwright.sync_api import BrowserType
from typing import Dict
 
@pytest.fixture(scope="session")
def context(
    browser_type: BrowserType,
    browser_type_launch_args: Dict,
    browser_context_args: Dict
):
    context = browser_type.launch_persistent_context("./data", **{
        **browser_type_launch_args,
        **browser_context_args,
        "locale": "de-DE",
    })
 
    yield context
 
    context.close()

名词解释:

  • ./data用户数据目录的路径,它存储浏览器会话数据,如cookie和本地存储。
  • browser_type_launch_args如果没有设置值,返回的就是一个空字典;它里面的参数就是和p.chromium.launch()中的传参一致的,此处了解下,后面具体介绍。
  • browser_context_args如果没有设置值,返回的就是一个空字典;它里面的参数就和context = browser.new_context()中的传参一致的,此处了解下,后面具体介绍。
  • locale指定用户区域设置,例如' en-GB '、' de-DE '等。

命令行运行测试用例:


PS F:\project_gitee\Test\playwrightProject\cases> pytest --headed --browser chromium
================================================================================== test session starts ==================================================================================
platform win32 -- Python 3.7.7, pytest-6.2.5, py-1.9.0, pluggy-0.13.1
rootdir: F:\project_gitee\Test\playwrightProject\cases
plugins: allure-pytest-2.9.43, anyio-3.3.4, asyncio-0.16.0, base-url-1.4.2, clarity-1.0.1, cov-2.8.1, emoji-0.2.0, forked-1.3.0, html-3.1.1, lazy-fixture-0.6.3, metadata-1.11.0, pikachu-
0.1.0, playwright-0.2.2, rerunfailures-9.1.1, xdist-2.2.1
collected 2 items                                                                                                                                                                        
 
test_baidu_example.py .                                                                                                                                                            [ 50%]
test_example.py .                                                                                                                                                                  [100%]
 
=================================================================================== 2 passed in 3.12s ===================================================================================

必须知晓问题:

上述文章中的browser_type_launch_args和browser_context_args都是pytest_playwright插件提供的测试夹会话:
展示pytest_playwright插件部分源码:


@pytest.fixture(scope="session")
def browser_type_launch_args(pytestconfig: Any) -> Dict:
    launch_options = {}
    headed_option = pytestconfig.getoption("--headed")
    if headed_option:
        launch_options["headless"] = False
    browser_channel_option = pytestconfig.getoption("--browser-channel")
    if browser_channel_option:
        launch_options["channel"] = browser_channel_option
    slowmo_option = pytestconfig.getoption("--slowmo")
    if slowmo_option:
        launch_options["slow_mo"] = slowmo_option
    return launch_options
 
 
@pytest.fixture(scope="session")
def browser_context_args(
    pytestconfig: Any,
    playwright: Playwright,
    device: Optional[str],
) -> Dict:
    context_args = {}
    if device:
        context_args.update(playwright.devices[device])
    base_url = pytestconfig.getoption("--base-url")
    if base_url:
        context_args["base_url"] = base_url
 
    video_option = pytestconfig.getoption("--video")
    capture_video = video_option in ["on", "retain-on-failure"]
    if capture_video:
        context_args["record_video_dir"] = artifacts_folder.name
 
    return context_args

 到此这篇关于python中playwright结合pytest执行用例的实现的文章就介绍到这了,更多相关playwright pytest执行用例内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

python中playwright结合pytest执行用例的实现

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

python中playwright结合pytest执行怎么实现

这篇文章主要讲解了“python中playwright结合pytest执行怎么实现”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“python中playwright结合pytest执行怎么实现
2023-06-25

如何用Python程序执行讨论Python实现基本的框架与结构

本篇文章给大家分享的是有关如何用Python程序执行讨论Python实现基本的框架与结构,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。执行Python程序的相关过程中时,你会发
2023-06-17

java利用Future实现多线程执行与结果聚合的代码怎么写

java利用Future实现多线程执行与结果聚合的代码怎么写,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。场景网站智能问答场景,需要对多个分类查询,结果聚合展示由于每种分类
2023-06-22

Android中的Shape和Selector的结合使用实例

一:在Android程序开发中,我们经常会去用到Shape这个东西去定义各种各样的形状,首先我们了解一下Shape下面有哪些标签,都代表什么意思: (1).solid:填充 android:color指定填充的颜色 (2).gradie
2022-06-06

使用任务计划功能结合shutdown命令让Win7实现定时自动执行

大家在使用电脑的时候可能会遇到一些需要无人值守让电脑自行执行任务后定时关机的情形,在Win7系统中,我们可以使用“python任务计划”设置功能结合shutdown命令灵活设置任务计划,让Win7系统实现定时自动执行
2023-06-04

C#使用Task实现执行并行任务的原理的示例详解

Task是一个表示异步操作的类,它提供了一种简单、轻量级的方式来创建多线程应用程序。本文就来和大家聊聊在C#中如何使用Task执行并行任务吧
2023-05-14

Android中ViewPager实现滑动条及与Fragment结合的实例教程

自主实现滑动指示条 先上一个基本效果图:1.XML布局 布局代码如下:
2022-06-06

Python实现桶排序与快速排序算法结合应用示例

本文实例讲述了Python实现桶排序与快速排序算法结合应用的方法。分享给大家供大家参考,具体如下:#-*- coding: UTF-8 -*- import numpy as np from QuickSort import QuickSo
2022-06-04

Docker命令让普通用户能够执行的实现示例

这篇文章给大家分享的是有关Docker命令让普通用户能够执行的实现示例的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。安装完docker一般就会有docker用户组第二步、将当前用户添加到docker组sudo g
2023-06-14

利用Python实现智能合约的示例详解

智能合约是一种由计算机程序编写的自动化合约,它可以在没有第三方干预的情况下执行交易和契约条款。这篇文章主要介绍了如何利用Python实现智能合约,需要的可以参考一下
2023-05-14

js promise 中使用 setTimeout 实现暂停执行的效果

这篇文章主要介绍了js promise 中使用 setTimeout 实现暂停执行的,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
2023-05-17

Java中调用Python的实现示例

本文主要介绍了Java中调用Python的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
2023-05-18

Python实现调用jar或执行java代码的方法详解

这篇文章主要介绍了Python实现调用jar或执行java代码的方法,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
2022-12-21

python中文分词,使用结巴分词对python进行分词(实例讲解)

在采集美女站时,需要对关键词进行分词,最终采用的是python的结巴分词方法。 中文分词是中文文本处理的一个基础性工作,结巴分词利用进行中文分词。 其基本实现原理有三点: 1.基于Trie树结构实现高效的词图扫描,生成句子中汉字所有可能成词
2022-06-04

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录