接口自动化测试:Pytest+Yaml+Allure框架及数据库断言

作者:谁偷走了我的奶酪2024.01.17 23:47浏览量:25

简介:本文将介绍如何使用Pytest、Yaml和Allure框架进行接口自动化测试,并使用数据库断言来验证数据的正确性。我们将通过实例演示如何设置测试环境、编写测试用例、运行测试以及生成报告。

在接口自动化测试中,我们常常需要用到一些测试工具和框架来提高测试效率和准确性。其中,Pytest是一个非常流行的Python测试框架,它具有简单易用、灵活多变的特点。Yaml则是一种常用的配置文件格式,可以方便地定义测试数据和参数。Allure是一个开源的测试报告工具,可以生成美观且易于阅读的测试报告。在本篇文章中,我们还将介绍如何使用数据库断言来验证接口数据的正确性。
首先,我们需要安装所需的依赖包。可以使用以下命令安装Pytest、Allure和数据库驱动:

  1. pip install pytest allure-pytest
  2. # 安装数据库驱动,根据实际情况选择相应的数据库驱动
  3. # 如:pip install pymysql

接下来,我们需要编写一个测试用例。假设我们要测试一个用户管理接口,可以编写如下的测试用例:

  1. import pytest
  2. import pymysql
  3. from pytest_allure import AllureReport
  4. from requests import get, post, put, delete
  5. import yaml
  6. import os
  7. from flask import Flask, jsonify
  8. from flask_sqlalchemy import SQLAlchemy
  9. # 初始化 Flask 应用和数据库连接
  10. app = Flask(__name__)
  11. app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql://root:password@localhost/testdb'
  12. db = SQLAlchemy(app)
  13. # 定义测试数据和参数
  14. test_data = yaml.safe_load(open('test_data.yaml'))
  15. # 定义测试用例
  16. @pytest.mark.parametrize('method, url, data, expected', test_data)
  17. def test_user_management(method, url, data, expected):
  18. # 发送 HTTP 请求并获取响应
  19. response = getattr(requests, method)(url, json=data)
  20. assert response.status_code == expected['status_code']
  21. assert response.json() == expected['response']
  22. # 验证数据库数据是否正确
  23. db_data = db.session.query(User).filter_by(id=expected['id']).first()
  24. assert db_data.name == expected['response']['name']
  25. assert db_data.age == expected['response']['age']

在上面的测试用例中,我们使用了 Pytest 的参数化功能来从 Yaml 文件中读取测试数据。每个测试用例对应一个 HTTP 请求,包括请求方法、URL、请求数据和预期响应。我们还使用了数据库断言来验证接口返回的数据是否正确写入数据库。具体来说,我们查询数据库中的用户数据,然后将其与预期的响应数据进行比较。如果数据不一致,测试将失败。
接下来,我们可以运行测试并生成 Allure 报告。可以使用以下命令运行测试:

  1. pipeline=$(cat <<EOF
  2. [pytest]
  3. addopts = -v -s --alluredir=/tmp/allure-results
  4. junitxml = /tmp/allure-results/junit.xml
  5. EOF
  6. )
  7. allure serve /tmp/allure-results