自动化是现代软件开发和测试的关键部分。它可以节省时间、减少人工错误并确保跨流程的一致性。 Pytest 框架是 Python 中最流行、最强大的自动化任务工具之一,特别是在测试方面。它轻量级、易于使用,并提供大量插件和内置功能来简化自动化过程。
在本文中,我们将探索使用 Pytest 框架自动化任务的最佳方法。我们将通过三个实际示例来演示 Pytest 如何有效地自动化不同类型的任务。
为什么使用 Pytest?
在深入研究示例之前,我们先讨论一下为什么 Pytest 是任务自动化的绝佳选择:
简单性:Pytest 具有简单简洁的语法,可以轻松编写和阅读测试用例。
可扩展性:通过广泛的插件和挂钩,Pytest 可以扩展以支持不同的测试需求。
Fixtures:Pytest提供了fixtures,这是一个强大的功能,用于设置测试的前提条件或状态,增强可重用性。
集成:Pytest 与其他工具(包括 CI/CD 平台)很好地集成,实现端到端自动化。
示例 1:使用 Pytest 自动化 API 测试
API 是许多应用程序的支柱,确保其可靠性至关重要。 Pytest 与 requests 库一起可以轻松实现 API 测试的自动化。
第 1 步:安装所需的库
首先,确保您安装了 Pytest 和 requests 库:
pip install pytest 请求
第2步:编写测试脚本
让我们自动向公共 API(例如 JSONPlaceholder)发送一个简单的 GET 请求,这是一个用于测试的假在线 REST API。
`导入请求
导入 pytest
BASE_URL = "https://jsonplaceholder.typicode.com"
@pytest.fixture
def api_client():
# 该装置提供了一个用于发出 API 请求的会话对象
session = requests.Session()
收益会话
session.close()
def test_get_posts(api_client):
# 发送 GET 请求来获取帖子
响应 = api_client.get(f"{BASE_URL}/posts")
# 断言
断言response.status_code == 200
断言 len(response.json()) > 0,“未找到帖子”`
说明:
Fixture (api_client):这个fixture设置了一个可重用的会话来发出HTTP请求,确保我们不需要每次都创建一个新的会话。
测试函数 (test_get_posts):此函数向 /posts 端点发送 GET 请求并验证:
状态码为200,表示成功。
回复中至少包含一篇帖子。
第 3 步:运行测试
要执行测试,请运行以下命令:
狂欢
复制代码
pytest -v test_api.py
为什么这有效
该测试简洁且可重用,利用 Pytest 的装置来处理设置和拆卸。
Pytest 的输出显示哪些测试通过或失败,从而可以轻松跟踪 API 随着时间的推移的可靠性。
示例 2:使用 Pytest 和 Selenium 自动化 Web UI 测试
Web UI 测试可确保应用程序的前端按预期运行。 Pytest 可以与 Selenium 结合来有效地自动化这些任务。
第 1 步:安装所需的库
安装 Pytest、Selenium 和 WebDriver Manager:
pip install pytest selenium webdriver-manager
第2步:编写测试脚本
以下是如何自动化一个简单的 Web UI 测试来验证 Google 上的搜索功能:
`导入 pytest
从 selenium 导入 webdriver
从 selenium.webdriver.common.by 导入 By
从 selenium.webdriver.common.keys 导入密钥
从 webdriver_manager.chrome 导入 ChromeDriverManager
@pytest.fixture
def browser():
# 设置 Chrome WebDriver
driver = webdriver.Chrome(ChromeDriverManager().install())
产量驱动因素
driver.quit()
def test_google_search(浏览器):
# 导航至 Google
browser.get("https://www.google.com")`{% endraw %}
# Find the search box and enter a query search_box = browser.find_element(By.NAME, "q") search_box.send_keys("Pytest Automation") search_box.send_keys(Keys.RETURN) # Assert that results are shown results = browser.find_elements(By.CSS_SELECTOR, "div.g") assert len(results) > 0, "No search results found"
说明:
夹具(浏览器):此夹具使用 webdriver-manager 设置 Chrome WebDriver 实例,并确保每次测试后正确关闭它。
测试函数(test_google_search):该函数:
打开 Google 主页。
搜索“Pytest 自动化”。
断言搜索至少返回一个结果。
第 3 步:运行测试
使用以下命令执行测试:
{% raw %}pytest -v test_ui.py
Mengapa Ini Berfungsi
Lekapan Pytest menguruskan contoh penyemak imbas, menjadikan persediaan ujian dan pembongkaran bersih dan cekap.
Menggunakan Selenium, skrip berinteraksi dengan halaman web seperti pengguna sebenar, memastikan UI berfungsi seperti yang diharapkan.
Contoh 3: Mengautomasikan Pengesahan Data dengan Pytest dan Panda
Pengesahan data adalah penting dalam kejuruteraan data, analisis dan proses ETL. Pytest boleh mengautomasikan tugasan pengesahan data menggunakan perpustakaan panda.
Langkah 1: Pasang Perpustakaan Diperlukan
Pastikan Pytest dan Panda dipasang:
pip pasang panda pytest
Langkah 2: Tulis Skrip Ujian
Mari kita mengautomasikan tugas di mana kita mengesahkan bahawa set data memenuhi syarat tertentu (cth., tiada nilai nol, jenis data yang betul, dll.).
`import pytest
import panda sebagai pd
@pytest.fixture
def sample_data():
# Buat sampel DataFrame
data = {
"nama": ["Alice", "Bob", "Charlie", "David"],
"umur": [25, 30, 35, 40],
"e-mel": ["alice@example.com", "bob@example.com", Tiada, "david@example.com"]
}
df = pd.DataFrame(data)
kembalikan df
def test_data_not_null(sample_data):
# Semak sama ada terdapat sebarang nilai nol dalam DataFrame
assert sample_data.isnull().sum().sum() == 0, "Data mengandungi nilai nol"
jenis_lajur_usia_ujian(data_sampel):
# Sahkan bahawa lajur 'umur' adalah daripada jenis integer
assert sample_data['age'].dtype == 'int64', "Lajur umur bukan jenis integer"`
Penjelasan:
Lekapan (sample_data): Lekapan ini menyediakan sampel DataFrame, mensimulasikan set data yang boleh digunakan semula dalam berbilang ujian.
Fungsi Ujian (test_data_not_null): Ujian ini menyemak sama ada terdapat sebarang nilai nol dalam DataFrame dan gagal jika ada yang ditemui.
Fungsi Ujian (test_age_column_type): Ujian ini mengesahkan bahawa lajur umur adalah daripada jenis integer, memastikan ketekalan data.
Langkah 3: Jalankan Ujian
Jalankan ujian dengan:
pytest -v test_data.py
Mengapa Ini Berfungsi
Fleksibiliti Pytest membolehkan ujian berpusatkan data, memastikan set data memenuhi kriteria yang dijangkakan.
Lekapan memudahkan untuk menyediakan dan mengubah suai data ujian tanpa menduplikasi kod.
Amalan Terbaik untuk Mengautomasikan Tugas dengan Pytest
Gunakan Lekapan untuk Persediaan dan Teardown: Lekapan membantu mengurus persediaan dan mengoyak dengan cekap, menjadikan ujian anda modular dan boleh digunakan semula.
Pemalam Leverage: Pytest mempunyai pelbagai pemalam (cth., pytest-html untuk laporan HTML, pytest-xdist untuk pelaksanaan selari) untuk meningkatkan usaha automasi anda.
Ujian Parameter: Gunakan @pytest.mark.parametrize untuk menguji berbilang set data atau input, mengurangkan pertindihan kod.
Sepadukan dengan Talian Paip CI/CD: Sepadukan ujian Pytest dengan alatan CI/CD seperti Jenkins atau GitHub Actions untuk ujian berterusan.
Kesimpulan
Pytest ialah alat yang berkuasa untuk mengautomasikan pelbagai tugas, daripada ujian API dan UI web kepada pengesahan data. Kesederhanaannya, digabungkan dengan fleksibiliti dan sokongan pemalam yang meluas, menjadikannya pilihan yang sangat baik untuk pembangun dan jurutera QA. Dengan memanfaatkan ciri Pytest seperti lekapan, parameterisasi dan penyepaduan dengan saluran paip CI/CD, anda boleh membina rangka kerja automasi yang teguh, boleh diselenggara dan berskala.
Jika anda ingin mengautomasikan aliran kerja anda atau meningkatkan proses ujian anda, Pytest ialah titik permulaan yang bagus. Selamat mencuba!
Atas ialah kandungan terperinci Automatikkan tugas anda Menggunakan Pytest: Panduan praktikal dengan contoh. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!