顶部右侧自定义内容
顶部左侧自定义内容
当前位置:首页 > 我的文章 > 正文

Python自动化测试指南

作者:neal发布时间:2025-03-24 17:05分类: 我的文章 浏览:142评论:0


导读:1. 自动化测试类型 在开始之前,先了解常见的自动化测试类型: 单元测试(Unit Testing):测试代码的最小单元(如函数、类)。 集成测试(Integration Tes...

1. 自动化测试类型

在开始之前,先了解常见的自动化测试类型:

  • 单元测试(Unit Testing):测试代码的最小单元(如函数、类)。
  • 集成测试(Integration Testing):测试多个模块的协作。
  • 端到端测试(E2E Testing):模拟用户操作,测试完整流程(如 Web 应用、移动应用)。
  • API 测试:验证 API 的请求和响应。
  • 性能测试:评估系统在高负载下的表现。

2. Python 自动化测试常用框架

(1) 单元测试框架

  • unittest(Python 内置)

    • 基于 JUnit 设计,支持测试用例、测试套件、断言等。
    • 示例:
      python

    复制

    import unittest
    
    def add(a, b):
        return a + b
    
    class TestMath(unittest.TestCase):
        def test_add(self):
            self.assertEqual(add(2, 3), 5)
    
    if __name__ == '__main__':
        unittest.main()
  • pytest

    • 更简洁灵活,支持参数化测试、插件扩展。
    • 示例:
      python

    复制

    def add(a, b):
        return a + b
    
    def test_add():
        assert add(2, 3) == 5
    • 运行命令:pytest test_math.py

(2) Web 自动化测试

  • Selenium

    • 用于浏览器自动化,支持 Chrome、Firefox 等。
    • 示例:
      python

    复制

    from selenium import webdriver
    
    driver = webdriver.Chrome()
    driver.get("https://www.google.com")
    search_box = driver.find_element("name", "q")
    search_box.send_keys("Python自动化测试")
    search_box.submit()
    driver.quit()
  • Playwright(推荐)

    • 新一代浏览器自动化工具,支持多浏览器、无头模式、网络拦截等。
    • 示例:
      python

    复制

    from playwright.sync_api import sync_playwright
    
    with sync_playwright() as p:
        browser = p.chromium.launch()
        page = browser.new_page()
        page.goto("https://www.google.com")
        page.fill("input[name=q]", "Python自动化测试")
        page.press("input[name=q]", "Enter")
        browser.close()

(3) API 测试

  • requests + pytest

    • 发送 HTTP 请求并验证响应。
    • 示例:
      python

    复制

    import requests
    
    def test_api_status_code():
        response = requests.get("https://api.example.com/users")
        assert response.status_code == 200
  • FastAPI TestClient(针对 FastAPI 应用)

    • 示例:
      python

    复制

    from fastapi.testclient import TestClient
    from myapp.main import app
    
    client = TestClient(app)
    
    def test_read_item():
        response = client.get("/items/1")
        assert response.status_code == 200

(4) 移动端测试

  • Appium
    • 支持 Android 和 iOS 应用的自动化测试。
    • 示例代码类似 Selenium。

3. 测试最佳实践

  • 保持测试独立:每个测试用例不依赖其他测试结果。
  • 清晰的命名:测试函数名应描述测试目标(如 test_login_with_invalid_password)。
  • 数据驱动测试:使用参数化测试(如 @pytest.mark.parametrize)覆盖多组输入。
  • Mock 外部依赖:使用 unittest.mockpytest-mock 模拟数据库、API 调用等。
  • 持续集成(CI):将测试集成到 CI/CD 流程(如 GitHub Actions、Jenkins)。

4. 常用工具和库

  • 覆盖率报告:使用 coverage 库生成代码覆盖率报告。
    • 命令:coverage run -m pytest && coverage report
  • 测试报告:使用 pytest-html 生成 HTML 测试报告。
    • 命令:pytest --html=report.html
  • 环境管理:用 virtualenvpoetry 隔离项目依赖。

5. 示例:完整的 pytest + Selenium 测试

python

复制

# test_web.py
import pytest
from selenium import webdriver

@pytest.fixture(scope="module")
def browser():
    driver = webdriver.Chrome()
    yield driver
    driver.quit()

def test_google_search(browser):
    browser.get("https://www.google.com")
    search_box = browser.find_element("name", "q")
    search_box.send_keys("Python自动化测试")
    search_box.submit()
    assert "Python自动化测试" in browser.title

运行命令:

bash

复制

pytest test_web.py -v

6. 持续集成(CI)示例

在 GitHub Actions 中配置自动化测试:

yaml

复制

# .github/workflows/tests.yml
name: Python Tests

on: [push]

jobs:
  test:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2
      - name: Set up Python
        uses: actions/setup-python@v2
        with:
          python-version: '3.9'
      - name: Install dependencies
        run: pip install -r requirements.txt
      - name: Run tests
        run: pytest

标签:


发表评论: