pytest结合pymysql实现数据库数据驱动

一、selenium读取mysql中数据

获得数据库连接
查询数据获得数据库连接
查询数据

二、创建数据库,表,向表中插入数据。

连接数据库
mysql -u root -p
查看现有的数据库
show databases; 
创建数据库
create database testing_db;
使用创建的数据库
use testing_db;
创建表
create table user_tbl(id int primary key auto_increment,username varchar(20),pwd varchar(20));
查看表结构
desc user_tb1;
向表中插入数据
insert into user_tbl(username,pwd)values('tom','123');
insert into user_tbl(username,pwd)values('rose','666');
insert into user_tbl(username,pwd)values('tina','888');
查询表中数据
select id,username,pwd from user_tbl;

三、pymysql执行sql数据,获取数据库表中数据,pytest参数化拿到数据,传递给用例执行

代码示例:

import pymysql

import pytest

"""
安装pymysql模块
获得数据库连接
查询数据

"""
conn = pymysql.connect(
    user='root',
    passwd='88888888',
    host='localhost',
    port=3306,
    db='testing_db'
)


def get_data():
    sql = "select id,username,
<think>嗯,用户想用Python和pytest搭建一个完整的接口自动化测试框架,需要包含数据的前后置处理、数据库交互、日志记录和报告生成。首先,我得理清楚每个部分应该怎么实现,同时结合pytest的特性。 首先,项目结构的话,参考引用[4]里的框架结构,可能需要分目录存放不同模块。比如common放工具类,testcase放测试用例,还有配置文件等。然后数据处理部分,用户提到了数据驱动pytest有parametrize装饰器,可以直接用,这样测试数据可以分开管理,比如用JSON或者YAML文件。数据的前后置处理可以用fixture,比如在conftest.py里定义,这样每个测试用例前后都能执行一些操作。 数据库交互的话,可能需要用第三方库,比如pymysql或者SQLAlchemy。这部分应该封装成单独的模块,放在common里,方便调用。同时,确保测试前后数据库的状态,比如用fixture连接和关闭数据库,或者在每个测试用例前后做数据清理。 日志记录方面,pytest本身有日志功能,但用户可能需要更详细的记录。可以用Python的logging模块,配置日志格式和输出文件。在conftest.py里初始化日志,确保每个测试用例的日志都能记录到文件中。 报告生成的话,pytest常用的插件有pytest-html和Allure。安装这些插件后,配置生成HTML报告或者Allure报告,可以在命令行参数里添加选项,或者在pytest.ini里配置默认生成。 然后需要考虑测试框架的可维护性,比如引用[2]提到的测试数据和脚本分离,数据驱动设计。这样数据变化时不需要改代码。另外,接口关联处理可能需要用到fixture来传递token之类的参数,比如登录后的token传递给其他测试用例。 还有异常处理和断言,确保测试失败时能捕获异常并记录日志。数据库操作后需要做数据清理,避免测试数据污染。可能要用到fixture的teardown功能,或者使用pytest的finalizer。 最后,整合所有部分,检查依赖项,比如requirements.txt里列出需要的库,方便安装。可能还需要持续集成,比如用Jenkins或者GitHub Actions来运行测试框架。 可能用户还希望知道具体的代码示例,比如如何写一个测试用例,使用数据驱动,处理数据库,记录日志,生成报告。需要分步骤解释,确保结构清晰,用户能一步步跟着做。同时,要注意代码的封装和复用,比如公共方法放在common目录下,测试用例只关注业务逻辑。 可能遇到的问题包括数据库连接配置的安全性,比如不把密码明文写在代码里,而是通过环境变量或者配置文件。还有测试用例的独立性,确保每个用例不依赖其他用例的状态,使用事务回滚或者测试前后的数据清理。 总之,需要按照功能模块逐一拆解,结合pytest的特性,利用fixture、参数化、插件等,构建一个结构清晰、易于维护的自动化测试框架。</think>### 分步构建接口自动化测试框架指南 #### 一、项目结构规划 根据引用[4]的框架结构建议,建议按以下方式组织目录: ``` ProjectName/ ├── common/ # 公共封装库 │ ├── api_client.py # 接口请求封装 │ ├── db_utils.py # 数据库操作封装 │ └── logger.py # 日志模块 ├── testcase/ # 测试用例库 │ └── test_api.py # 接口测试模块 ├── data/ # 测试数据 │ └── test_data.json ├── config/ # 配置文件 │ ├── config.yaml │ └── pytest.ini ├── reports/ # 测试报告 ├── conftest.py # 全局fixture配置 └── requirements.txt # 依赖库列表 ``` #### 二、数据处理实现 1. **数据驱动测试** ```python # testcase/test_api.py import pytest @pytest.mark.parametrize("username,password", [ ("admin", "123456"), ("test", "654321") ]) def test_login(api_client, username, password): response = api_client.post("/login", data={"user": username, "pwd": password}) assert response.status_code == 200 ``` 2. **前后置处理** ```python # conftest.py import pytest @pytest.fixture def setup_data(): # 前置操作:创建测试数据 test_data = {"id": 1, "name": "test_item"} yield test_data # 后置操作:清理数据 delete_test_data(test_data["id"]) ``` #### 三、数据库交互封装 ```python # common/db_utils.py import pymysql class DBUtils: def __init__(self, config): self.conn = pymysql.connect(**config) def execute_query(self, sql): with self.conn.cursor() as cursor: cursor.execute(sql) return cursor.fetchall() def close(self): self.conn.close() # 使用fixture管理数据库连接 @pytest.fixture(scope="session") def db_connection(): db = DBUtils(config.db_config) yield db db.close() ``` #### 四、日志记录实现 ```python # common/logger.py import logging import sys def setup_logger(name=__name__): logger = logging.getLogger(name) logger.setLevel(logging.INFO) formatter = logging.Formatter( "%(asctime)s - %(name)s - %(levelname)s - %(message)s" ) # 控制台输出 console_handler = logging.StreamHandler(sys.stdout) console_handler.setFormatter(formatter) # 文件输出 file_handler = logging.FileHandler("test.log") file_handler.setFormatter(formatter) logger.addHandler(console_handler) logger.addHandler(file_handler) return logger # 在conftest.py中全局配置 @pytest.fixture(scope="session", autouse=True) def init_logging(): return setup_logger() ``` #### 五、报告生成配置 1. 安装依赖 ```bash pip install pytest-html allure-pytest ``` 2. 生成HTML报告 ```bash pytest --html=reports/report.html ``` 3. 生成Allure报告 ```bash pytest --alluredir=reports/allure_results allure serve reports/allure_results ``` #### 六、框架整合与优化 1. **配置管理**(config/config.yaml): ```yaml base_url: "https://api.example.com" db_config: host: "localhost" user: "test" password: "secret" database: "testdb" ``` 2. **依赖管理**(requirements.txt): ``` pytest>=7.0.0 requests>=2.25.1 PyYAML>=6.0 pymysql>=1.0.2 pytest-html>=3.2.0 allure-pytest>=2.12.0 ``` 3. **异常处理增强**: ```python # common/api_client.py import requests class APIClient: def __init__(self, base_url): self.session = requests.Session() self.base_url = base_url def request(self, method, endpoint, **kwargs): try: response = self.session.request( method, f"{self.base_url}{endpoint}", **kwargs ) response.raise_for_status() return response except requests.exceptions.RequestException as e: logger.error(f"请求失败: {str(e)}") raise ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值