广告区

广告区


本站消息

站长简介/公众号

关注本站官方公众号:程序员总部,领取三大福利!
福利一:python和前端辅导
福利二:进程序员交流微信群,专属于程序员的圈子
福利三:领取全套零基础视频教程(python,java,前端,php)

  价值13000svip视频教程,python大神匠心打造,零基础python开发工程师视频教程全套,基础+进阶+项目实战,包含课件和源码

  出租广告位,需要合作请联系站长

+关注
已关注

分类  

暂无分类

标签  

暂无标签

日期归档  

暂无数据

如何使用原生 Django 的测试框架而不是 pytest 来测试 Django Channels?

发布于2022-05-21 12:13     阅读(787)     评论(0)     点赞(4)     收藏(1)



Django Channels 建议使用 pytest 以获得启用异步的测试层。如果可以的话,我真的不想在我的项目中加入另一个测试框架。

有没有办法在本地使用 Django 的 TestCase 来测试 Django Channels?

我遇到了多个问题——一个是 async_to_sync() 不喜欢从主线程调用。

我目前受限于 Python 3.6。


解决方案


我相信我已经找到了一种可靠的方法来做到这一点。这还没有做 DRY,但它是一个似乎适用于这个测试的概念证明:

class TestWebSockets(TestCase):

    def test_message(self):
        async def wait_for_message(self):
            try:
                communicator = WebsocketCommunicator(application, f"/ws/channel/")
                connected, subprotocol = await communicator.connect()
                self.assertTrue(connected)
                data = await communicator.receive_json_from(timeout=1)
                return data
            except Exception as exc:
                logging.exception(exc)
                raise
            finally:
                await communicator.disconnect()

        with concurrent.futures.ThreadPoolExecutor() as executor:
            future = executor.submit(async_to_sync(wait_for_message), self)
            DoTheThingThatGeneratesChannelMessage()
            message = future.result()
            print(message)






所属网站分类: 技术文章 > 问答

作者:黑洞官方问答小能手

链接:https://www.pythonheidong.com/blog/article/1533941/ae25e93f0e064b69bdcb/

来源:python黑洞网

任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任

4 0
收藏该文
已收藏

评论内容:(最多支持255个字符)