如何使用 hypothesis-extra-sqlalchemy 在 Python 中对 SQLAlchemy 进行属性测试

2023-04-13 00:00:00 如何使用 hypothesis
  1. 安装 hypothesis-extra-sqlalchemy

在终端中执行以下命令:

pip install hypothesis-extra-sqlalchemy
  1. 导入相关模块
from hypothesis import given, settings
from hypothesis.extra.sqlalchemy import column, TableData
from hypothesis.strategies import text
from sqlalchemy import create_engine, Column, Integer, String
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker
  1. 创建 SQLAlchemy 模型
Base = declarative_base()

class User(Base):
    __tablename__ = 'users'

    id = Column(Integer, primary_key=True)
    name = Column(String)
    email = Column(String)
  1. 创建数据库连接
engine = create_engine('sqlite:///:memory:')
Session = sessionmaker(bind=engine)
Base.metadata.create_all(engine)
  1. 定义属性测试数据
user_data = TableData(
    'users',
    column('id', Integer()),
    column('name', text(min_size=1)),
    column('email', text(min_size=5)),
)
  1. 编写属性测试
@given(user_data.draw())
@settings(deadline=1000)
def test_create_user(user_data):
    session = Session()
    user = User(**user_data)
    session.add(user)
    session.commit()
    assert user.id is not None

在上述测试中,我们使用 @given 装饰器来标记测试函数的输入参数为一个具有特定字段的字典。

然后,使用 user_data.draw() 从上述定义的数据源中抽取一个样本。

接着,使用抽取到的数据创建一个 User 实例,并且将其添加到数据库中。最后,我们检验了这个新建的用户对象是否已经成功地被持久化到数据库中。

可以通过 @settings 装饰器,定义 Hypothesis 的超时和其他行为的配置。

最后运行该测试函数,验证我们创建的 User 模型是否具有可靠的基本属性。

相关文章