杰瑞科技汇

python web开发与接口测试

第一部分:Python Web 开发

Python 因其简洁的语法、强大的框架和丰富的库,成为 Web 开发的首选语言之一。

python web开发与接口测试-图1
(图片来源网络,侵删)

核心概念

在开始之前,需要理解几个基本概念:

  • Web 框架:提供了一套基础设施和库,让你不必从零开始处理 HTTP 请求、路由、模板渲染等复杂工作,它就像是汽车的底盘和引擎,你只需要在上面安装车身(业务逻辑)和车轮(功能模块)即可。
  • WSGI (Web Server Gateway Interface):Python Web 服务器和 Web 框架之间的标准接口,它定义了服务器如何与框架通信,使得你可以灵活地搭配不同的服务器和框架。
  • ASGI (Asynchronous Server Gateway Interface):WSGI 的异步版本,支持异步编程,能更好地处理高并发请求,是现代 Python Web 开发的趋势。

主流 Web 框架

a. Django

  • 特点:功能全面的“大而全”框架,遵循“包含电池”(Batteries-Included)的理念。
  • 内置组件
    • ORM(对象关系映射):让你用 Python 类来操作数据库,无需写原生 SQL。
    • 后台管理系统:自动生成一个功能强大的后台管理界面。
    • 用户认证系统:内置用户注册、登录、权限管理等功能。
    • 路由系统:清晰优雅的 URL 配置。
    • 模板引擎:用于生成 HTML 页面。
  • 适用场景内容管理系统企业级网站社交网络等需要快速开发、功能复杂的后端项目。
  • 哲学:明确、快速、实用、安全。

b. Flask

  • 特点:轻量级、灵活的“微框架”(Micro-framework)。
  • 核心思想:只提供最核心的功能,其他功能(如数据库访问、用户认证等)通过扩展来实现。
  • 优点
    • 简单易学,上手快。
    • 灵活性高,开发者可以自由选择所需的库和工具。
    • 适合构建小型应用、API 服务和作为更大项目的后端。
  • 适用场景RESTful API小型 Web 应用微服务原型验证
  • 哲学:简单、灵活、易于扩展。

c. FastAPI

  • 特点:一个现代、快速的(高性能)Web 框架,用于构建 API。
  • 核心优势
    • 高性能:基于 Starlette 和 Pydantic,性能与 Node.js 和 Go 相当。
    • 自动 API 文档:基于 OpenAPI (Swagger) 规范,自动生成交互式 API 文档。
    • 原生异步支持:完美利用 Python 的 async/await 语法,处理高并发效率极高。
    • 数据验证:使用 Pydantic 进行请求数据的解析和验证,代码简洁且类型安全。
  • 适用场景构建高性能 API微服务、是现代 Python Web 开发的首选,尤其是在对性能要求高的场景。

开发流程示例 (以 Flask 为例)

安装 Flask

pip install Flask

创建一个简单的应用 (app.py)

from flask import Flask
# 创建一个 Flask 应用实例
app = Flask(__name__)
# 定义路由和视图函数
# @app.route 是一个装饰器,将 URL 路径 '/' 映射到 hello_world 函数
@app.route('/')
def hello_world():
    return '<h1>Hello, World!</h1>'
@app.route('/user/<username>')
def show_user_profile(username):
    # f-string 用于格式化字符串
    return f'<h1>Hello, {username}!</h1>'
# 运行应用
if __name__ == '__main__':
    # debug=True 会在代码修改后自动重载服务器,并显示调试信息
    app.run(debug=True)

运行应用

python web开发与接口测试-图2
(图片来源网络,侵删)
python app.py

然后在浏览器中访问 http://127.0.0.1:5000/http://127.0.0.1:5000/user/Alice


第二部分:Python 接口测试

接口测试是确保不同软件系统之间能够正确、稳定通信的关键环节,Python 凭借其丰富的测试库,是进行接口测试的利器。

接口测试的核心要素

  • 发送请求:向指定的 URL 发送 HTTP 请求(GET, POST, PUT, DELETE 等)。
  • 设置请求头:如 Content-Type: application/jsonAuthorization: Bearer <token> 等。
  • 传递请求体:对于 POST/PUT 请求,通常需要传递 JSON 或表单数据。
  • 验证响应
    • 状态码:如 200 (成功), 201 (已创建), 400 (请求错误), 401 (未授权), 404 (未找到), 500 (服务器内部错误)。
    • 响应体:检查返回的 JSON 数据是否符合预期,关键字段的值是否正确。
    • 响应头:检查返回的 Content-Type 等头信息是否正确。

主要工具和库

a. requests

这是 Python 中最流行、最易用的 HTTP 库,是进行接口测试的基础。

安装:

python web开发与接口测试-图3
(图片来源网络,侵删)
pip install requests

示例:测试上面 Flask 应用的接口

import requests
import json
# 定义基础 URL
base_url = "http://127.0.0.1:5000"
# 1. 测试 GET / 接口
def test_home_page():
    response = requests.get(f"{base_url}/")
    print(f"Status Code: {response.status_code}")
    print(f"Response Text: {response.text}")
    assert response.status_code == 200
    assert "Hello, World!" in response.text
    print("✅ / 接口测试通过")
# 2. 测试 GET /user/<username> 接口
def test_user_profile():
    username = "Alice"
    response = requests.get(f"{base_url}/user/{username}")
    print(f"\nStatus Code: {response.status_code}")
    print(f"Response Text: {response.text}")
    assert response.status_code == 200
    assert f"Hello, {username}!" in response.text
    print(f"✅ /user/{username} 接口测试通过")
# 3. 模拟发送 JSON 数据 (创建一个新用户)
def test_create_user():
    # 请求头
    headers = {
        'Content-Type': 'application/json'
    }
    # 请求体
    payload = {
        "username": "Bob",
        "email": "bob@example.com"
    }
    # 发送 POST 请求
    response = requests.post(
        f"{base_url}/api/users",  # 假设我们有一个这样的 API
        headers=headers,
        data=json.dumps(payload)  # 将 Python 字典转换为 JSON 字符串
    )
    print(f"\nStatus Code: {response.status_code}")
    print(f"Response JSON: {response.json()}")
    assert response.status_code == 201 # 假设创建成功返回 201
    assert response.json()['username'] == "Bob"
    print("✅ 创建用户接口测试通过")
if __name__ == "__main__":
    # 确保 Flask 应用正在运行
    test_home_page()
    test_user_profile()
    # test_create_user() # 需要你的 Flask 应用中有对应的 POST 接口

b. pytest 框架

pytest 是一个非常强大和流行的 Python 测试框架,它让测试代码更简洁、更易于组织和扩展,是 requests 的最佳拍档。

安装:

pip install pytest

优点

  • 简单语法:只需创建 test_ 开头的文件,test_ 开头或 _test 结尾的函数即可被识别为测试用例。
  • 强大的断言:提供清晰的断言失败信息。
  • Fixture(夹具):可以定义可重用的测试设置和清理代码,非常强大。
  • 丰富的插件生态:如 pytest-html (生成报告), pytest-xdist (并行执行) 等。

使用 pytest 重构上面的测试:

# 文件名: test_api.py
import requests
import pytest
# 使用 fixture 来管理基础 URL 和会话
@pytest.fixture(scope="module")
def api_url():
    return "http://127.0.0.1:5000"
@pytest.fixture(scope="module")
def session():
    # 创建一个会话对象,可以复用 TCP 连接,提高性能
    with requests.Session() as s:
        yield s
def test_home_page(session, api_url):
    response = session.get(f"{api_url}/")
    assert response.status_code == 200
    assert "Hello, World!" in response.text
def test_user_profile(session, api_url):
    username = "Alice"
    response = session.get(f"{api_url}/user/{username}")
    assert response.status_code == 200
    assert f"Hello, {username}!" in response.text
# 可以使用 parametrize 来参数化测试,避免重复代码
@pytest.mark.parametrize("username, expected_text", [
    ("Charlie", "Hello, Charlie!"),
    ("David", "Hello, David!")
])
def test_parametrized_user_profile(session, api_url, username, expected_text):
    response = session.get(f"{api_url}/user/{username}")
    assert response.status_code == 200
    assert expected_text in response.text
# 运行测试: pytest

运行测试:在终端中进入 test_api.py 所在目录,执行 pytest

c. Postman / Apifox (图形化工具)

虽然不是 Python 库,但它们是接口测试领域不可或缺的工具。

  • 用途:图形化界面,方便手动测试、管理、组织和分享 API。
  • 与 Python 结合:可以将 Postman 的测试脚本导出为 Python 代码(requests 格式),实现自动化测试向手动测试的无缝衔接。

第三部分:Web 开发与接口测试的结合

在实际工作中,这两个领域是紧密相连的。

  1. 开发驱动测试:Web 开发者编写 API 代码后,会立即使用 requests + pytest 编写单元测试或集成测试,确保自己写的接口逻辑正确。
  2. 测试驱动开发:在编写业务代码之前,先编写测试用例(基于尚未存在的 API),这些测试一开始会失败,然后开发者编写代码让测试通过,这有助于设计出更清晰、更健壮的 API。
  3. 持续集成/持续部署:当代码被推送到 Git 仓库时,CI/CD 系统(如 Jenkins, GitLab CI, GitHub Actions)会自动拉取代码,运行 pytest 等测试套件,如果所有测试(包括接口测试)都通过,代码才会被部署到生产环境,这是保证软件质量的关键环节。
  4. 端到端测试:除了测试独立的 API,还会使用工具(如 Selenium)模拟真实用户在浏览器中的操作,从 UI 层面触发 API 调用,验证整个业务流程的通畅性。

总结与学习路径建议

特性 Web 开发 接口测试
核心目标 构建和运行 Web 应用/API 验证 API 的正确性和稳定性
主要工具 Django, Flask, FastAPI requests, pytest, Postman
关键技能 框架使用、数据库、业务逻辑、部署 发送请求、断言、组织测试用例、报告生成
关系 被测对象 测试执行者

学习路径建议:

  1. 打好 Python 基础:熟悉语法、数据结构、函数、面向对象编程。
  2. 入门 Web 开发
    • Flask 开始,理解路由、请求、响应、模板等基本概念。
    • 尝试构建一个简单的个人博客或待办事项应用。
  3. 掌握接口测试
    • 学习使用 requests 库发送各种类型的 HTTP 请求。
    • 学习使用 pytest 组织测试用例,理解 fixture 的强大之处。
    • 为你之前用 Flask 写的应用编写完整的 pytest 测试套件。
  4. 深入与扩展
    • Web 开发:学习数据库集成、用户认证、RESTful API 设计、部署(如 Docker, Gunicorn)。
    • 接口测试:学习模拟登录(处理 Cookie/Token)、性能测试、API 自动化测试框架(如 HttpRunner)、与 CI/CD 工具集成。
  5. 选择方向
    • 如果你对构建系统、解决复杂业务问题更感兴趣,可以专注于 Web 后端开发
    • 如果你对质量保证、系统稳定性、流程优化充满热情,可以专注于 测试开发,这是一个非常紧缺且高薪的岗位。

通过 Python,你可以同时掌握构建系统和保障系统质量这两项核心技能,这在软件开发领域非常有价值。

分享:
扫描分享到社交APP
上一篇
下一篇