gpt4 book ai didi

python - 在单元测试中使用 wsgiref.simple_server

转载 作者:太空狗 更新时间:2023-10-30 01:42:30 27 4
gpt4 key购买 nike

我有一些这样的功能:


URL = 'http://localhost:8080'
def func():
response = urlopen(URL)
return process(response)

And i want to test it with unittest.

I did something like this:


from wsgiref.simple_server import make_server
def app_200_hello(environ,start_response):
stdout = StringIO('Hello world')
start_response("200 OK", [('Content-Type','text/plain')])
return [stdout.getvalue()]

s = make_server('localhost', 8080, app_200_hello)

class TestFunc(unittest.TestCase):
def setUp(self):
s.handle_request()

def test1(self):
r = func()
assert r, something

if __name__ == '__main__':
unittest.main()

在 setUp() 时,我的测试停止了,因为 s.handle_request() 等待请求。我怎样才能解决这个问题?在另一个线程中运行 s.handle_request()?或者也许还有另一个解决方案?

编辑:我想测试“func”函数,而不是“app_200_hello”

最佳答案

如果您正在测试 WSGI 应用程序,我强烈推荐 werkzeug.test它通过在没有服务器的情况下测试应用程序本身来解决这些问题:

from werkzeug.test import Client

# then in your test case
def test1(self):
client = Client(app_200_hello)
appiter, status, headers = client.open()
assert ''.join(appiter) == 'Hello World'
assert status == '200 OK'

这种方法完全消除了对 WSGI 服务器的需求。

当然,如果您确实想启动服务器,则必须使用单独的线程或进程,但您必须确保事后停止它。但是,令我印象深刻的是,您唯一一次想要使用真实服务器进行测试是为了生产集成测试,在这种情况下,您的服务器将不是 wsgiref,它将是您可能不必启动的真实服务器-像这样停下来。

关于python - 在单元测试中使用 wsgiref.simple_server,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/634485/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com