pytest
pytest 简介
pytest 是 Python 的测试框架,以简洁的语法和强大的功能著称。支持单元测试、功能测试和复杂集成测试,具有丰富的插件生态系统。
安装 pytest
通过 pip 安装:
pip install pytest
验证安装:
pytest --version
编写第一个测试
创建一个文件 test_sample.py,内容如下:
def test_addition():
assert 1 + 1 == 2
运行测试:
pytest test_sample.py
测试发现规则
pytest 自动发现以下文件:
- 文件名以
test_开头或_test结尾。 - 测试函数以
test_开头。 - 测试类以
Test开头(方法名以test_开头)。
断言用法
直接使用 Python 的 assert 语句:
assert value == expected
pytest 提供详细的断言失败信息,例如列表或字典比较。
参数化测试
使用 @pytest.mark.parametrize 标记多组输入:
import pytest
@pytest.mark.parametrize("a,b,expected", [(1, 2, 3), (0, 0, 0)])
def test_add(a, b, expected):
assert a + b == expected
Fixture 功能
Fixture 用于提供测试依赖的资源,通过 @pytest.fixture 定义:
import pytest
@pytest.fixture
def sample_data():
return {"key": "value"}
def test_data(sample_data):
assert sample_data["key"] == "value"
临时目录和文件
使用 tmp_path Fixture(内置):
def test_create_file(tmp_path):
file = tmp_path / "test.txt"
file.write_text("content")
assert file.read_text() == "content"
测试覆盖率
安装覆盖率插件并运行:
pip install pytest-cov
pytest --cov=my_module tests/
常用命令行选项
-v: 显示详细输出。-k EXPRESSION: 按名称筛选测试。-m MARKER: 运行特定标记的测试(如@pytest.mark.slow)。--lf: 仅运行上次失败的测试。
插件推荐
pytest-xdist: 并行测试。pytest-mock: 集成unittest.mock。pytest-asyncio: 异步测试支持。
调试技巧
使用 --pdb 在测试失败时进入调试器:
pytest --pdb test_sample.py
参考文档
selenium使用手册
Selenium 手册概述
Selenium 是一个开源的自动化测试工具,主要用于 Web 应用程序的测试。它支持多种编程语言(如 Python、Java、C# 等)和浏览器,提供丰富的 API 用于模拟用户操作。以下是 Selenium 的主要组件和核心功能。
Selenium 核心组件
Selenium WebDriver
WebDriver 是 Selenium 的核心组件,提供与浏览器的直接交互接口。它通过各浏览器的驱动程序(如 ChromeDriver、GeckoDriver)控制浏览器行为。
- 支持多语言绑定(Python、Java 等)。
- 提供元素定位、表单操作、页面导航等功能。
Selenium Grid
用于并行执行测试,支持在多台机器和不同浏览器上同时运行测试用例,提升测试效率。
Selenium IDE
浏览器插件形式的录制与回放工具,适合快速生成测试脚本,但功能较基础。
Python 环境下的 Selenium 使用
安装 Selenium
通过 pip 安装 Selenium 库:
pip install selenium
配置浏览器驱动
下载对应浏览器的驱动(如 ChromeDriver),并将其路径添加到系统环境变量或代码中指定路径:
from selenium import webdriver
driver = webdriver.Chrome(executable_path='path/to/chromedriver')
基本操作示例
# 打开网页
driver.get("https://www.example.com")
# 定位元素并输入文本
search_box = driver.find_element_by_name("q")
search_box.send_keys("Selenium")
# 点击按钮
submit_button = driver.find_element_by_id("submit")
submit_button.click()
# 关闭浏览器
driver.quit()
元素定位方法
Selenium 提供多种元素定位方式,常用方法包括:
- ID :
find_element_by_id("id_value") - Name :
find_element_by_name("name_value") - XPath :
find_element_by_xpath("//input[@class='class_name']") - CSS Selector :
find_element_by_css_selector("input.class_name")
示例
# 通过 XPath 定位
element = driver.find_element_by_xpath("//div[@id='content']/p[1]")
# 通过 CSS 选择器定位
element = driver.find_element_by_css_selector("div.content > p")
常用操作与高级功能
等待机制
-
隐式等待 :全局设置等待时间。
driver.implicitly_wait(10) # 单位:秒 -
显式等待 :针对特定条件等待。
from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC element = WebDriverWait(driver, 10).until( EC.presence_of_element_located((By.ID, "target_id")) )
浏览器操作
# 窗口最大化
driver.maximize_window()
# 后退/前进
driver.back()
driver.forward()
# 截图保存
driver.save_screenshot("screenshot.png")
常见问题与调试
元素未找到
-
检查元素是否在 iframe 中,需切换到对应 iframe:
driver.switch_to.frame("frame_id") -
确保页面加载完成(使用等待机制)。
浏览器兼容性问题
- 使用最新版本的驱动程序和浏览器。
- 对于跨浏览器测试,结合 Selenium Grid。
扩展资源
- 官方文档 :Selenium Documentation
- GitHub 仓库 :SeleniumHQ
- 浏览器驱动下载 :
通过以上内容,可以快速掌握 Selenium 的基本用法和核心功能,适用于自动化测试和 Web 数据抓取等场景。

结合 pytest 和 Selenium 的详细步骤
安装必要的依赖库。确保已安装 Python 和 pip,并通过以下命令安装 pytest 和 selenium:
pip install pytest selenium
下载与浏览器匹配的 WebDriver。例如,使用 Chrome 浏览器需下载 ChromeDriver 并将其路径添加到系统环境变量中。
创建测试目录结构
初始化项目目录结构。建议按以下方式组织:
project/
├── tests/
│ ├── __init__.py
│ ├── conftest.py
│ └── test_web.py
├── pytest.ini
└── requirements.txt
编写 conftest.py 配置
在 conftest.py 中定义 Selenium WebDriver 的 fixture,供所有测试用例共享:
import pytest
from selenium import webdriver
@pytest.fixture(scope="session")
def browser():
driver = webdriver.Chrome()
yield driver
driver.quit()
编写测试用例示例
在 test_web.py 中编写实际测试逻辑,以下示例测试百度搜索功能:
def test_baidu_search(browser):
browser.get("https://www.baidu.com")
search_box = browser.find_element("id", "kw")
search_box.send_keys("pytest selenium")
search_box.submit()
assert "pytest" in browser.title
配置 pytest 运行参数
在 pytest.ini 中添加基础配置:
[pytest]
addopts = -v --html=report.html
testpaths = tests
运行测试并生成报告
执行以下命令运行测试并生成 HTML 报告:
pytest
高级用法示例
实现页面对象模型(Page Object)增强可维护性。创建 pages/search_page.py:
class SearchPage:
def __init__(self, browser):
self.browser = browser
def search(self, keyword):
self.browser.find_element("id", "kw").send_keys(keyword)
self.browser.find_element("id", "su").click()
更新测试用例使用 Page Object:
from pages.search_page import SearchPage
def test_page_object(browser):
browser.get("https://www.baidu.com")
page = SearchPage(browser)
page.search("pytest")
assert "pytest" in browser.title
处理常见异常
添加显式等待解决元素加载问题:
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
def test_with_wait(browser):
browser.get("https://www.baidu.com")
element = WebDriverWait(browser, 10).until(
EC.presence_of_element_located(("id", "kw"))
)
element.send_keys("selenium")
以上步骤涵盖了从环境搭建到高级用法的完整流程,可根据实际需求调整浏览器类型、等待策略和报告生成方式。