使用 Python 和 PyCharm 构建接口自动化测试工具:完整实战教程

作为一名测试工程师,接口自动化测试是必备技能之一。本文将详细介绍如何使用 Python 结合 PyCharm,构建一个支持上传用例表格、执行测试用例、生成 HTML 测试报告,并且可以导出测试报告的接口自动化测试工具。

目录

  1. 环境准备

  2. 创建项目结构

  3. 安装依赖库

  4. 编写测试用例表格

  5. 编写工具模块

    • ExcelReader 模块

    • Logger 模块(可选)

  6. 编写测试脚本

  7. 运行测试并生成报告

  8. 运行结果截图

  9. 导出测试报告

  10. 常见问题与解决

  11. 总结

环境准备

1. 安装 Python

首先,确保你的电脑上安装了 Python 3.6 及以上版本。

  • 官方下载地址:Python 官网下载

安装完成后,在命令行中输入以下命令,验证安装是否成功:

bash

python --version

2. 安装 PyCharm

接下来,安装 PyCharm 作为开发工具。

  • 官方下载地址:PyCharm 官网下载

建议选择 专业版(Professional),以获得完整的功能支持。

创建项目结构

在 PyCharm 中创建一个新的项目,命名为 api_test_tool。项目的目录结构如下:

api_test_tool/
├── test_cases/                # 存放测试用例表格
│   └── test_cases.xlsx
├── reports/                   # 存放测试报告
│   └── (测试报告将生成在此)
├── utils/                     # 工具模块
│   ├── __init__.py
│   ├── excel_reader.py        # Excel 读取模块
│   └── logger.py              # 日志模块
├── tests/                     # 存放测试脚本
│   └── test_api.py
├── requirements.txt           # 依赖库列表
└── README.md                  # 项目说明文件

安装依赖库

在项目的根目录下创建 requirements.txt 文件,写入以下内容:

requests
openpyxl
pytest
pytest-html

通过 PyCharm 安装依赖

  1. 打开 PyCharm,进入 Terminal(终端)窗口。

  2. (可选)创建并激活虚拟环境,以避免影响全局的 Python 环境:

    bash

    python -m venv venv
    source venv/bin/activate        # Mac/Linux
    venv\Scripts\activate           # Windows
    
  3. 安装依赖库:

    bash

    pip install -r requirements.txt
    

验证安装

输入以下命令,查看已安装的库:

bash

pip list

确保 requestsopenpyxlpytestpytest-html 均已安装。

编写测试用例表格

test_cases/ 目录下创建 test_cases.xlsx,按照以下格式编写测试用例:

用例名称请求方法URL请求头请求体
获取所有帖子GEThttps://************/posts{}{}
创建新帖子POSThttps://************/posts{"Content-Type": "application/json"}{"title": "foo", "body": "bar", "userId": 1}
更新现有帖子PUThttps://************/posts/1{"Content-Type": "application/json"}{"id": 1, "title": "foo", "body": "bar", "userId": 1}
删除帖子DELETEhttps://************/posts/1{}{}

注意事项

  • 第一行为表头,不会被读取为测试用例。

  • 确保请求头和请求体是合法的 JSON 字符串。

编写工具模块

1. excel_reader.py 模块

负责读取 Excel 表格中的测试用例。

python

# utils/excel_reader.py

import openpyxl

class ExcelReader:
    def __init__(self, file_path):
        self.file_path = file_path

    def get_test_cases(self):
        workbook = openpyxl.load_workbook(self.file_path)
        sheet = workbook.active
        test_cases = []
        for row in sheet.iter_rows(min_row=2, values_only=True):
            test_case = {
                'name': row[0],
                'method': row[1],
                'url': row[2],
                'headers': eval(row[3]),
                'data': eval(row[4])
            }
            test_cases.append(test_case)
        return test_cases

2. logger.py 模块(可选)

用于日志记录,便于调试与追踪。

python

# utils/logger.py

import logging

def setup_logger():
    logger = logging.getLogger('api_test')
    logger.setLevel(logging.INFO)

    fh = logging.FileHandler('api_test.log')
    fh.setLevel(logging.INFO)

    ch = logging.StreamHandler()
    ch.setLevel(logging.INFO)

    formatter = logging.Formatter('%(asctime)s - %(levelname)s - %(message)s')
    fh.setFormatter(formatter)
    ch.setFormatter(formatter)

    logger.addHandler(fh)
    logger.addHandler(ch)

    return logger

编写测试脚本

创建测试脚本 test_api.py,放在 tests/ 目录下。

python

# tests/test_api.py

import os
import sys
import pytest
import requests

# 设置项目路径,确保可以导入模块
project_path = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
sys.path.append(project_path)

from utils.excel_reader import ExcelReader
from utils.logger import setup_logger

# 初始化日志
logger = setup_logger()

# 获取测试用例
excel_file = os.path.join(project_path, 'test_cases', 'test_cases.xlsx')
reader = ExcelReader(excel_file)
test_cases = reader.get_test_cases()

@pytest.mark.parametrize('case', test_cases)
def test_api(case):
    logger.info(f"执行用例:{case['name']}")
    response = requests.request(
        method=case['method'],
        url=case['url'],
        headers=case['headers'],
        json=case['data']
    )
    logger.info(f"状态码:{response.status_code}")
    logger.info(f"响应体:{response.text}")

    # 根据实际情况进行断言,这里简单判断状态码
    if case['method'] == 'POST':
        assert response.status_code == 201, f"期望状态码201,实际得到{response.status_code}"
    elif case['method'] == 'DELETE':
        assert response.status_code == 200 or response.status_code == 204, f"期望状态码200或204,实际得到{response.status_code}"
    else:
        assert response.status_code == 200, f"期望状态码200,实际得到{response.status_code}"

运行测试并生成报告

在 PyCharm 中运行测试

  1. 打开 PyCharm 的终端(Terminal),确保已激活虚拟环境。

  2. 进入项目根目录,运行以下命令:

    bash

    pytest tests/ --html=reports/report.html --self-contained-html
    

命令参数说明

  • tests/:指定测试脚本所在目录。

  • --html=reports/report.html:指定生成的报告文件路径。

  • --self-contained-html:生成自包含的 HTML 文件,便于分享与查看。

查看测试报告

测试完成后,打开 reports/report.html,即可查看详细的测试报告。

运行结果截图

1. 运行执行

运行>_Terminal

bash

pytest tests/ --html=reports/report.html --self-contained-html

查看报告

  • 点击底部链接地址(以实际为主)

    bash

    file:///C:/Users/Lenovo/api_test_tool/reports/report.html 

2. 点击选择一个浏览器浏览(可选)

3. 运行成功截图

导出测试报告

  • HTML 报告:生成的报告位于 reports/report.html,可以直接打开或分享。

  • 其他格式:如需生成 XML 格式的报告,可使用参数 --junitxml=reports/report.xml

常见问题与解决

1. 无法读取测试用例

  • 解决方案:确保 test_cases.xlsx 存在且未被其他程序占用。检查 Excel 文件的内容格式是否正确。(必要时把test_cases文件夹删除,重新创建然后把复制粘贴用例贴进去)

2. 依赖库缺失

  • 解决方案:一定要确保依赖库全部已经导入成功,在Pycharm中File(顶部)-Settings-Python Interpreter-+(进行搜索对应库)。上文requirements.txt的库

3. 运行项目老是出现各种路径或库的找不到

  • 解决方案:创建项目建议一定要选择“New environment using”,不要沿用以前项目“Previously configured interpreter”,原因是导致各种不兼容和配置错误

总结

通过本教程,我们一步一步地构建了一个功能完善的接口自动化测试工具。我们涵盖了环境配置、项目结构搭建、代码编写、测试执行到报告生成的完整流程。

对于测试工程师来说,这不仅是实践自动化测试的好机会,也是深入理解测试流程和 Python 编程的有效途径。

你的收获:

  • 学会了如何使用 Python 读取 Excel 测试用例。

  • 掌握了使用 requests 库发送 HTTP 请求的方法。

  • 了解了如何使用 pytest 进行单元测试并生成测试报告。

  • 熟悉了项目的组织结构和模块化编程的思想。

欢迎交流与讨论!

如果你在实现过程中遇到任何问题,或者有更好的建议,欢迎在评论区留言。让我们共同进步!

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值