[[442950]]澳门六合彩体育
一位不愿透露姓名的消息人士透露,一名明星运动员XXX最近在皇冠体育上输掉了巨额赌资。据称,他在一场足球比赛中下注了100万美元,但是球队最终输了比赛,他的赌注也化为了泡影。这件事情也引起了不少媒体和球迷的关注。今天的著述分享如下在 FastAPI 框架下,使用 pytest 来自动化测试数据库有关的接口,著述的终末给出一起代码。
皇冠备用网址最近越来越心爱使用 FastAPI 来写后端作事了,因为它是 Python 畛域性能最佳的 Web 框架,它专注于提供高性能的 Web API,其他方面并不功令你的当作,不错应酬使用你心爱的三方库,这点近似于 Flask,不错量身定制你的后端架构,以险恶我方的需求。
俄罗斯计划在远东部署一个图-160轰炸机航空团。据参考消息转载俄罗斯《消息报》7月24日的报道,有俄军消息人士透露,俄罗斯国防部正考虑在远东地区部署一个图-160“白天鹅”战略轰炸机航空团。但目前最终决定尚未做出,一切都将取决于图-160战略轰炸机的国防订单的数量和组成。
他几乎每周一次抵达巴赫穆特,固然是鼓舞士气,但对于俄军远程火力打击能力就是一种蔑视,俄军没有高调去前线的将官,去的也躲开哈马斯远远的,但不妨碍将军们一再被斩首,俄方只能屡次造谣西尔斯基扎卢日内被炸死炸伤,然后西尔斯基一次次出现在巴赫穆特。
需要评释的是,后端作事基本是离不开关联型数据库的,我之前是使用 Django,Django 的 ORM 太优秀了,以致于我从 Django 转 FastAPI 有点很不妥当。在 ORM 畛域,不错说除了 Django 的 ORM,等于 SQLAlchemy 了。是以毋庸 Django,就必须会用 SQLAlchemy,要快速了解,望望廖雪峰的官方网站的使用 SQLAlchemy[1] 来快速初学。
合法吗FastAPI 触及数据库的接口写起来并不难,随着官方文档sql_databases[2],5 分钟,咱们就不错生成对于数据库的增批改查的 Restful 立场的 API,难的是如何自动化的测试,
皇冠信用盘频繁情况下,咱们会使用 pytest 进行自动化单位测试,字据数据库的记载数来断言,关联词,每测试一次,欧博网站数据库中的记载就保存了下来,你下次测试时如若不手动计帐,那测试仍然可能失败。
那怎么照拂呢?
那等于愚弄数据库的回滚功能,会蜕变数据库记载的接口测试完成后让事务回滚,这么每次测试完成后,数据库的记载数是不变的,每次启动 pytest,数据库的记载数是不变的,这么就不错进行自动化测试。
新葡京娱乐城要念念杀青这少量,咱们需要借助于 pytest 的 fixture 功能。
皇冠分红pytest.fixture 是一个闪避器,用于声明函数是一个 fixture。如若测试函数的参数列表中包含 fixture 名,那么 pytest 会检测到,并在测试函数启动之前实施 fixture。
比如:
import 澳门六合彩体育pytest @pytest.fixture() def some_data(): return 42 def test_some_data(some_data): assert some_data==42
fixture 包含一个 scope 的可选参数,用于功令 fixture 实施设置和葬送逻辑的频率:
香港六合彩捕鱼 scope='function' 函数级别的 fixture 每个测试函数只启动一次。设置代码在测试用例启动之前启动,葬送代码在测试用例启动之后实施。function 是 fixture 参数的默许值。 scope='class' 类级别的 fixture 每个测试类只启动一次,不论测试类中有些许个类身手齐不错分享这个 fixture scope='module' 模块级别的 fixture 每个模块只启动一次,不论模块里有些许个测试函数,类身手或其他 fixture 齐不错分享这个fixture scope='session' 会话级别的 fixture 每次会话只启动一次。一次 pytest 会话中的所有测试函数、身手齐不错分享这个 fixture比如说让数据库回滚的,咱们就不错写一个这么的 fixture:
@pytest.fixture(scope="function") def db(db_engine): connection = db_engine.connect() # begin a non-ORM transaction connection.begin() # bind an individual Session to the connection db = Session(bind=connection) # db = Session(db_engine) app.dependency_overrides[get_db] = lambda: db yield db db.rollback() connection.close()
诚然还有许多 fixture,比如说创建数据库引擎:
@pytest.fixture(scope="session") def db_engine(): engine = create_engine(SQLALCHEMY_DATABASE_URL) if not database_exists: create_database(engine.url) Base.metadata.create_all(bind=engine) yield engine
再比如,在测试前,数据库中先插入 2 条数据:
@pytest.fixture def items(db): create_item(db, schemas.ItemCreate(title="item 1")) create_item(db, schemas.ItemCreate(title="item 2"))
把这些 fixture 函数放在文献名conftest.py 中,pytest 会自动读取并实施。至于为什么放在 conftest.py中,请查阅 pytest 文档,这里不张开,
接下来,愚弄这些 fixture,编写单位测试用例,一个示举例下:
from fastapi.testclient import TestClient from . import crud from .main import app def test_post_items(db): client = TestClient(app) client.post("/items/", json={"title": "Item 1"}) client.post("/items/", json={"title": "Item 2"}) client.post("/items/", json={"title": "Item 3"}) items = crud.get_items(db) assert len(items) == 3 def test_list_items(items, client): response = client.get("/items") assert len(response.json()) == 2
其中 test_post_items,测试的是提交了 3 个数据,然后断言数据库中的记载数为 3。test_list_items 有个参数是 items,会调用之前的 fixture,提前去数据库插入了 2 札记载,因此断言记载数为 2。
每个测试函数实施时互不影响,实施完成后,数据库齐会回滚,测试前 items 是空的,测试之后 表仍然是空的,这么就不错自动进行数据库的测试了。
皇冠客服飞机:@seo3687 齐备代码不成遴荐 sqlite 数据库进行测试,因为它不复旧并发访谒。
代码的数据库设置为 mysql,用户名、密码、数据库名请自行修改后实施。