Playwright

Playwright 为现代网络应用程序提供可靠的端到端测试

开始

import re
from playwright.sync_api import Page, expect, sync_playwright

# https://playwright.dev/python/docs/writing-tests

def test_has_title(page: Page):
    page.goto("https://playwright.dev/")

    # Expect a title "to contain" a substring.
    expect(page).to_have_title(re.compile("Playwright"))
    # 如果成功会继续往下走,如果失败会抛出异常

def test_get_started_link(page: Page):
    page.goto("https://playwright.dev/")

    # Click the get started link.
    page.get_by_role("link", name="Get started").click()

    # Expects page to have a heading with the name of Installation.
    expect(page.get_by_role("heading", name="Installation")).to_be_visible()

运行方式有两种,包括使用 pytest ,或者通过 mian 函数调用

关于 pytest

  • 在命令行中运行 pytest 时会自动调用,或者使用 vscode 插件进行测试,文件名必须以 test_ 开头或者 _test 结尾

  • 要在有头模式下运行测试,请使用 --headed 标志,其他 CLI 参数参考文档

  • 要记录轨迹,pytest --tracing on,生成的轨迹文件在 test-results 目录下,要查看轨迹,playwright show-trace trace.zip

关于通过 mian 函数调用

操纵浏览器

实例1:截图

实例2:百度搜索

自动生成测试代码

使用 codegen 命令运行测试生成器,后跟要为其生成测试的网站的 URL。URL 是可选的,如果省略,可以直接在浏览器窗口中添加

在浏览器中运行 codegen 并执行操作。Playwright 会自动生成交互代码。代码生成器会分析渲染的页面,并推荐最佳定位器,优先考虑角色、文本和测试 ID 定位器。当多个元素与某个定位器匹配时,生成器会对其进行改进,使其能够唯一地标识目标元素,从而减少测试失败和不稳定的情况。

使用代理

https://www.cnblogs.com/longronglang/p/18263434

异步写法

1、同步的优点:

  • 代码结构简单易懂,不需要学习async/await语法

  • 适用于小规模或简单任务

  • 调试和理解同步代码更简单

2、异步的优点:

  • 能更高效地利用系统资源,避免阻塞等待IO

  • 对于长时间操作如网络请求更高效

  • 可以支持并发执行多个任务

  • 对于大规模和复杂系统更有利

3、区别

  • 对于小任务和学习用途,同步代码结构更简单。

  • 对于需要长时间IO等待的任务(如网络请求),使用异步可以更高效。

  • 对于需要支持高并发的系统(如网站),使用异步模型可以支持更多并发连接。

  • 多线程同步会带来锁的问题,而异步避免了锁的使用。

  • 异步的FUTURE模式也更易于扩展性好,支持动态增加回调函数。

4、总结

  • 小任务用同步

  • 长时间IO任务用异步

  • 高并发系统用异步

  • 以后的功能扩展考虑异步更灵活

一般来说对于现代化系统,异步编程模型将是主流趋势。但同步在某些场景也同样易用。选择时要根据具体需求来权衡。

最后更新于