相关疑难解决方法(0)

使用 pytest 进行测试时,如何使用 >= 2 的工作人员干净地终止 Uvicorn + FastAPI 应用程序

我有一个用 Uvicorn + FastAPI 编写的应用程序。我正在使用 PyTest 测试响应时间。

参考如何在使用 PyTest 进行测试时在后台启动 Uvicorn + FastAPI,我编写了测试。然而,当工人> = 2时,我在完成测试后发现应用程序进程处于活动状态。

我想在测试结束时干净地终止应用程序进程。

你有什么主意吗?

详情如下。

环境

图书馆

  • 快速 API == 0.68.0
  • 紫角兽 == 0.14.0
  • 请求==2.26.0
  • pytest==6.2.4

示例代码

python pytest fastapi uvicorn

9
推荐指数
1
解决办法
9872
查看次数

Python - 如何在不阻塞线程的情况下使用 FastAPI 和 uvicorn.run?

我正在寻找将 uvicorn.run() 与 FastAPI 应用程序一起使用但没有 uvicorn.run() 阻塞线程的可能性。我已经尝试使用进程、子进程和线程,但没有任何效果。我的问题是我想从另一个进程启动服务器,该进程在启动服务器后应该继续执行其他任务。另外,我在从另一个进程关闭服务器时遇到了问题。

有没有人知道如何使用 uvicorn.run() 非阻塞以及如何从另一个进程中阻止它?

问候 LeukoClassic

python multiprocessing fastapi uvicorn

7
推荐指数
2
解决办法
8254
查看次数

如何将服务器作为 py.test 的夹具运行

我想用服务器作为夹具编写 Selenium 测试:

import pytest

@pytest.fixture()
def driver(request):
    from selenium import webdriver
    d = webdriver.Firefox()
    request.addfinalizer(d.close)
    return d

@pytest.fixture()
def server():
    from server import run
    run(host="localhost", port=8080)

def test_can_see_echo(driver,server):
    page = TestPage(driver)
    page.fill_text_in_input("test")
    page.click_send()
    print page.get_returnet_value()
Run Code Online (Sandbox Code Playgroud)

在服务器夹具中运行的函数是瓶子运行函数。问题是,当我调用 run() 程序时,程序进入无限循环并且不执行测试主体。我应该在同一个线程中调用 run 吗?我的设计好吗?将来我想使用服务器装置来集成到服务器状态。例如,使用 Selenium 进行测试“添加评论”,最后使用服务器装置询问服务器是否真的发生了此操作。

python fixtures pytest bottle

4
推荐指数
1
解决办法
5420
查看次数

标签 统计

python ×3

fastapi ×2

pytest ×2

uvicorn ×2

bottle ×1

fixtures ×1

multiprocessing ×1