1. Skip over图片,字体等
执行上面code,耗时:
我们可以将页面中的图片,字体等的其它内容摘除,页面只加载出我们测试需要的内容会大大缩减自动化脚本的执行时间。
import pytest
from models.playwright_page import PlaywrightPage
from playwright.sync_api import Browser, Page, BrowserContext, expect, Route
NOT_ALLOWED_RESOURCES = (
"image", "font", "stylesheet", "media"
)
def on_route(route: Route):
if route.request.resource_type in NOT_ALLOWED_RESOURCES:
route.abort()
else:
route.continue_()
@pytest.fixture(autouse=True)
def skip_resources(page: Page):
page.route("**", on_route)
def test_docs_link(page: Page):
homepage = PlaywrightPage(page)
homepage.visit_docs()
expect(homepage.page).to_have_url("https://playwright.dev/python/docs/intro")
def test_docs_search(page: Page):
query = "assertions"
homepage = PlaywrightPage(page)
homepage.search(query)
expect(homepage.search_results()).to_contain_text(
"List of assertions"
)
执行时页面显示为:
耗时:
2. Disable页面上Javascript的执行
js被load,但不执行。如果不想load,可以用标题一中的方法,将script加入到skip名单中:
NOT_ALLOWED_RESOURCES = ( "image", "font", "stylesheet", "media", "script" )
from playwright.sync_api import sync_playwright
from time import perf_counter
with sync_playwright() as playwright:
browser = playwright.chromium.launch(
headless=False,slow_mo=500
)
context = browser.new_context()
page = context.new_page()
page.goto(
"https://www.scrapethissite.com/pages/ajax-javascript/",
)
link = page.get_by_role("link", name="2015")
link.click()
print("Loading oscars for 2015...")
start = perf_counter()
first_table_data = page.locator("td.film-title").first
first_table_data.wait_for(timeout=4_000)
time_taken = perf_counter() - start
print(f"...movies are loaded, in {round(time_taken, 2)}s!")
browser.close()
更新上述code的context:
context = browser.new_context( java_script_enabled=False )
单击2015后,加载符号没有显示,因为我们将JS disabled了。
控制台报错:
所以,如果我们的测试需要Javascript执行,一定不要将其disabled。
3. 自动化脚本的并行执行
文件建构:
这几个文件将会一个一个的被执行:
我们也可以一次run多个,要做到这一点,我们可以利用我们CPU的线程,因为现代CPU可以发布多个线程。
首先,我们需要下载pytest-xdist
Run:
可以看到,同时起了12个workers,6个test同时执行完毕。
如果我们想要修改workers的数量,可以以以下方式执行:
可以看到,按照我们的设置,同时起了3个workers,6个test分两次执行完毕。