Pytest + Playwright
通过之前的学习发现,Playwright 可以帮助生成 Pytest 代码。Pytest 目前是 Python 中最流行的测试框架之一,具有简洁易读的语法和丰富的插件生态系统,通过组织和运行测试用例进行单元测试。结合 Playwright,可以利用 Pytest 的强大功能和易用性编写自动化测试脚本。
生成对应的 Pytest 代码后,需要安装 pytest-playwright 插件:
pip install pytest-playwright
就可用测试用例的形式运行相应的 Pytest 代码:
如果不能运行,可以检查下编译器是否设置成使用 Pytest 的方式运行,Settings - Tools - Python Integrated Tools里,设置成 Pytest:
Playwright + Pytest 的优点有很多,包括:
跨平台性:Playwright 支持多种浏览器和操作系统,可以轻松地进行跨浏览器和跨平台的测试。Pytest 也是跨平台的测试框架,因此结合 Pytest 和 Playwright 可以实现跨平台的自动化测试。
强大的断言和报告功能:Pytest 提供了丰富的断言函数和灵活的报告功能,可以轻松地编写详细的测试断言,并生成易于阅读的测试报告。结合 Playwright,可以对页面元素进行准确的断言,确保页面的功能和性能符合预期。
并行测试:Pytest 支持并行测试执行,可以加速测试过程,提高测试效率。结合 Playwright,可以在多个浏览器实例中并行执行测试用例,进一步提高测试的效率。
灵活性和可扩展性:Pytest 提供了丰富的插件系统和定制选项,可以根据项目的需求定制测试流程和报告格式。结合 Playwright,可以定制各种测试环境和配置选项,满足不同项目的需求。
总的来说,结合 Pytest 和 Playwright 可以实现灵活、高效和可靠的自动化测试,帮助开发团队快速迭代和交付高质量的软件产品。
Page Object Model(页面对象模型)
一个完整的测试项目,需要搭建相应的自动化测试框架,框架应便于维护和更新。考虑使用Page Object Model(页面对象模型),POM是一种在自动化测试中广泛使用的设计模式,将页面或应用程序的各个页面抽象为对象,以便于测试用例的编写和维护。
POM把元素定位和元素操作分离,每个页面都被抽象为一个对象,该对象封装了该页面的所有元素和操作。这样一来,测试用例不再直接与页面元素交互,而是通过调用页面对象的方法来执行操作。这种分层的设计使得测试用例更加清晰、可维护,并提高了测试代码的重用性。
首先根据自己的测试用例,可以使用selector定位到页面上的元素。简单以登录页面为例,将登录页面分为page部分放置此页面对象,并且补齐调用此类元素的方法,我们将这些元素提取到我们的login_page.py页面中:
class LoginPage:
def __init__(self, page: Page):
self.page = page self.usernameInput = page.get_by_placeholder("請輸入用戶名/手機登錄")
self.passwordInput = page.get_by_placeholder("請輸入登錄密碼")
self.rememberNameCheckbox = page.get_by_text("記住用戶名")
self.loginBtn = page.get_by_role("button", name="登錄")
self.usernameTip = page.locator("div").filter(has_text="系统提示 请输入要登录的用户名").nth(3)
self.passwordTip = page.locator("div").filter(has_text="系统提示 请输入密码").nth(3)
self.wrongTip = page.locator("div").filter(has_text="系统提示 登录失败,请检查您输入的账号和密码").nth(3)def navigate(self):
self.page.goto("https://某登录页面")def fill_username(self, username):
self.usernameInput.fill(username)def fill_password(self, password):
self.passwordInput.fill(password)def click_remember_user(self):
self.rememberNameCheckbox.click()def click_login_btn(self):
self.loginBtn.click()
再通过测试用例中的测试登录用例来调取此页面的方法,并补充相应测试用例,例如在test_login.py:
from pages.login_page import LoginPage
from playwright.sync_api import expect
import pytestclass TestLogin:
# 登录
@pytest.fixture(autouse=True)
def start_for_each(self, page):
print("for each--start:打开登录页面")
self.login = LoginPage(page)
self.login.navigate()
yield
print("for each--end:后置操作")def test_login_1(self):
# 用户名为空,点击注册
self.login.fill_username('')
self.login.fill_password('123456')
self.login.click_login_btn()
#断言
expect(self.login.usernameTip).to_be_visible()def test_login_2(self):
# 用户名大于30字符/用户密码错误
self.login.fill_username('usernameusernameusernameusernameusernameusername')
self.login.fill_password('123456')
self.login.click_login_btn()
#断言
expect(self.login.wrongTip).to_be_visible()def test_login_3(self):
# 密码为空不允许登录
self.login.fill_username('123')
self.login.fill_password('')
self.login.click_login_btn()
#断言
expect(self.login.passwordTip).to_be_visible()def test_login_4(self):
# 用户名及密码登录正确
self.login.fill_username('xxx')
self.login.fill_password('xxxx')
self.login.click_login_btn()
#断言
expect(self.login.page).to_have_title("首页")
点击运行,可运行相应的测试用例。
其中,@pytest.fixture(autouse=True):是一个Fixture装饰器,它告诉Pytest这个Fixture将会在每个测试用例执行前自动运行,而不需要显式地在测试用例中调用。
print("for each--start:打开登录页面"):这是Fixture函数的开始部分,它会在每个测试用例执行前打印一条消息,表示开始执行Fixture操作。
yield:在Fixture函数中,yield关键字之前的代码部分被称为Fixture的设置部分,在yield之后的部分被称为Fixture的后置操作。这里的yield允许测试用例在执行前和执行后执行操作。
print("for each--end:后置操作"):这是Fixture函数的后置操作部分,它会在每个测试用例执行后打印一条消息,表示结束执行Fixture操作。
这段代码的作用是在每个测试用例执行前打开登录页面,并在测试用例执行后进行必要的清理操作。Fixture函数的autouse参数确保它会自动在每个测试用例执行前后执行。
Allure
为了能更好的可视化我们的测试结果,可以考虑使用Allure报告对测试结果进行交互式浏览和分析,用户可以轻松地查看和过滤测试结果,快速定位问题,提高了测试结果的可读性和可操作性。
首先我们可以根据自己的电脑系统下载对应的Allure,将 allure 的bin目录添加到Path中:
export PATH="/usr/local/allure/bin:$PATH"
source 配置文件后检查allure版本是否已经被更新:
allure --version
有对应版本号显示说明安装成功。
接下来安装allure-pytest库,用来生成 allure 的测试结果:
pip install allure-pytest
Allure生成测试结果
通过pytest,可以通过指定--alluredir参数来指定测试结果的输出目录。例如:
pytest --alluredir=./results
Allure生成测试报告
当测试运行完毕后,可以使用 allure 命令行工具来生成报告,执行以下命令:
allure generate ./results -o ./report
查看报告:可以打开生成的 Allure 报告,查看测试结果和详细的测试报告。选择index.html文件,可以使用任何浏览器打开报告:
综上,将pytest 和 Allure 结合使用,通过在 pytest 测试用例中添加 Allure 的注解和标记,可以生成符合 Allure 格式的测试报告。这样就可以利用 pytest 运行测试,并通过 Allure 生成美观的测试报告,方便测试结果的查看和分析。