编程学习网 > 编程语言 > Python > Python Playwright:多页面应用自动化测试指南!
2024
09-09

Python Playwright:多页面应用自动化测试指南!

对于多页面应用(Multi-Page Applications, MPAs)的自动化测试,使用Playwright可以帮助你更高效地模拟用户的交互行为,并验证应用的功能。Playwright 是一个多浏览器库,支持 Chromium、Firefox 和 WebKit(Safari),并且可以在多种语言中使用,包括 Python。

下面是一个Python Playwright用于多页面应用自动化测试的指南,包括设置环境、编写测试用例、并行执行测试以及生成测试报告等内容。
1. 环境搭建
首先,确保安装了Python环境,并安装Playwright库。可以使用pip来安装Playwright的Python包:
1pip install playwright
然后初始化Playwright,下载支持的浏览器:
1playwright install
2. 编写测试用例
Playwright提供了一系列API来模拟用户的操作,例如点击、填写表单、上传文件等。以下是一个简单的例子,展示如何使用Playwright进行基本的页面导航和元素交互。
示例:登录流程测试
假设我们有一个登录页面,需要填写用户名和密码,然后点击登录按钮进入下一个页面。
import asyncio2from playwright.async_api import Playwright, async_playwright345async def run(playwright: Playwright) -> None:6    browser = await playwright.chromium.launch()7    context = await browser.new_context()8    page = await context.new_page()910    # 导航到登录页面11    await page.goto('https://example.com/login')1213    # 输入用户名和密码14    await page.fill('input[name="username"]', 'your_username')15    await page.fill('input[name="password"]', 'your_password')1617    # 点击登录按钮18    await page.click('button:has-text("Login")')1920    # 等待页面跳转21    await page.wait_for_url('https://example.com/dashboard')2223    # 断言是否成功登录24    assert "Dashboard" in page.title()2526    await browser.close()2728async def main():29    async with async_playwright() as playwright:30        await run(playwright)3132asyncio.run(main())

3. 并行执行测试
为了加速测试执行,可以并行地在多个页面或多个浏览器实例中运行测试。Playwright支持这种并行化。
示例:并行测试
import asyncio2from playwright.async_api import Playwright, async_playwright345async def run_test(page):6    await page.goto('https://example.com/login')7    await page.fill('input[name="username"]', 'your_username')8    await page.fill('input[name="password"]', 'your_password')9    await page.click('button:has-text("Login")')10    await page.wait_for_url('https://example.com/dashboard')11    assert "Dashboard" in page.title()121314async def main():15    async with async_playwright() as playwright:16        browser = await playwright.chromium.launch()17        contexts = await browser.new_contexts(3)  # 创建3个上下文18        page
 = [context.new_page() for context in contexts]1920        tasks = [run_test(page) for page in pages]21        await asyncio.gather(*tasks)2223        await browser.close()2425asyncio.run(main())
4. 生成测试报告
为了更好地跟踪测试结果,可以使用测试报告工具。Playwright支持生成测试报告,例如使用pytest-playwright插件来生成报告。
首先安装pytest和pytest-playwright:
1pip install pytest pytest-playwright
然后编写测试用例,并使用pytest来运行测试:
import pytest2from playwright.sync_api import Page, expect345def test_login(page: Page):6    page.goto('https://example.com/login')7    page.fill('input[name="username"]', 'your_username')8    page.fill('input[name="password"]', 'your_password')9    page.click('button:has-text("Login")')10    expect(page).to_have_url('https://example.com/dashboard')
运行测试并生成报告:
1pytest --headed --slowmo 100 --report test_report.html test_login.py
这将生成一个名为test_report.html的测试报告文件。
5. 捕获调试信息
在测试过程中,如果出现问题,可以使用Playwright提供的截图和录制功能来捕获调试信息。
示例:捕获截图
import asyncio2from playwright.async_api import Playwright, async_playwright345async def run(playwright: Playwright) -> None:6    browser = await playwright.chromium.launch()7    context = await browser.new_context()8    page = await context.new_page()910    await page.goto('https://example.com/login')11    await page.fill('input[name="username"]', 'your_username')12    await page.fill('input[name="password"]', 'your_password')13    await page.click('button:has-text("Login")')14    await page.wait_for_url('https://example.com/dashboard')1516    # 捕获当前页面的截图17    await page.screenshot(path='login_success.png')1819    await browser.close()2021async def main():22    async with async_playwright() as playwright:23        await run(playwright)2425asyncio.run(main())
6. 数据驱动测试
对于需要大量测试数据的情况,可以采用数据驱动的方法来编写测试用例。这样可以减少代码的重复,并使测试更加灵活。
示例:数据驱动测试
假设我们有一个CSV文件test_data.csv,其中包含了多个登录测试用例:
1username,password
2user1,pass1
3user2,pass2
我们可以使用Pandas来读取数据,并编写一个数据驱动的测试用例:

import pandas as pd2import asyncio

from playwright.async_api import Playwright, async_playwright

async def run_test(playwright: Playwright, username, password):

browser = await playwright.chromium.launch()

context = await browser.new_context()

 page = await context.new_page()

await page.goto('https://example.com/login')

await page.fill('input[name="username"]', username)

await page.fill('input[name="password"]', password)

await page.click('button:has-text("Login")')

await page.wait_for_url('https://example.com/dashboard')

assert "Dashboard" in page.title()

await browser.close()

async def main():

async with async_playwright() as playwright:

data = pd.read_csv('test_data.csv')

for _, row in data.iterrows():

await run_test(playwright, row['username'], row['password'])

asyncio.run(main())

通过以上步骤,你可以使用Playwright在Python中编写高效、可靠的多页面应用自动化测试。这些测试不仅可以帮助验证应用的功能,还可以提高开发和测试的效率。
以上就是Python Playwright:多页面应用自动化测试指南!的详细内容,想要了解更多Python教程欢迎持续关注编程学习网。

扫码二维码 获取免费视频学习资料

Python编程学习

查 看2022高级编程视频教程免费获取