我有一个用 Uvicorn + FastAPI 编写的应用程序。我正在使用 PyTest 测试响应时间。
参考如何在使用 PyTest 进行测试时在后台启动 Uvicorn + FastAPI,我编写了测试。然而,当工人> = 2时,我在完成测试后发现应用程序进程处于活动状态。
我想在测试结束时干净地终止应用程序进程。
你有什么主意吗?
详情如下。
from fastapi import FastAPI
app = FastAPI()
@app.get("/")
def hello_world():
return "hello world"
Run Code Online (Sandbox Code Playgroud)
from multiprocessing import Process
import pytest
import requests
import time
import uvicorn
HOST = "127.0.0.1"
PORT = 8765
WORKERS = 1
def run_server(host: str, port: …Run Code Online (Sandbox Code Playgroud)我正在寻找将 uvicorn.run() 与 FastAPI 应用程序一起使用但没有 uvicorn.run() 阻塞线程的可能性。我已经尝试使用进程、子进程和线程,但没有任何效果。我的问题是我想从另一个进程启动服务器,该进程在启动服务器后应该继续执行其他任务。另外,我在从另一个进程关闭服务器时遇到了问题。
有没有人知道如何使用 uvicorn.run() 非阻塞以及如何从另一个进程中阻止它?
问候 LeukoClassic
我想用服务器作为夹具编写 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 进行测试“添加评论”,最后使用服务器装置询问服务器是否真的发生了此操作。