Python与PyCharm实战:构建接口自动化测试工具全面指南

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

目录

  1. 环境准备

  2. 创建项目结构

  3. 安装依赖库

  4. 编写测试用例表格

  5. 编写工具模块

  6. ExcelReader 模块

  7. Logger 模块(可选)

  8. 编写测试脚本

  9. 运行测试并生成报告

  10. 运行结果截图

  11. 导出测试报告

  12. 常见问题与解决

  13. 总结

环境准备

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 请求头 请求体
    获取所有帖子 GET https://************/posts {} {}
    创建新帖子 POST https://************/posts {"Content-Type": "application/json"} {"title": "foo", "body": "bar", "userId": 1}
    更新现有帖子 PUT https://************/posts/1 {"Content-Type": "application/json"} {"id": 1, "title": "foo", "body": "bar", "userId": 1}
    删除帖子 DELETE https://************/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 进行单元测试并生成测试报告。

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

  • 欢迎交流与讨论!

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

    作者:立刻&坚持

    物联沃分享整理
    物联沃-IOTWORD物联网 » Python与PyCharm实战:构建接口自动化测试工具全面指南

    发表回复