跳转至

Test

Index 借助了 starlette 的 Test Client 用以提供测试能力,并由 Pytest 提供强力的测试支持。

在安装时指定 index.py[test] 以安装 requestspytest 作为默认的测试组件,也可以选择其他任何你喜欢的测试组件,这与 Index 的核心功能并不是强捆绑的。

TestView

Notice

在测试程序里,所有的 HTTP 请求、发送 ws 数据、接收 ws 数据都是同步的。

TestView 做了轻度的封装,你可以直接在需要测试的 HTTP/Socket 的同一个文件内直接编写测试程序,不需要指定测试的 URI。

Test Client 的 HTTP 请求部分是基于 requests,保持了 requests 的所有的 API,故而你可以像使用 requests 一样去测试你的程序。

# example/views/index.py

from indexpy.test import TestView
...


class Test(TestView):
    def test_get(self):
        resp = self.client.get()
        assert resp.status_code == 200
        resp = self.client.get(params={"name": "darling"})
        assert resp.status_code == 200

    def test_post(self):
        resp = self.client.post()
        assert resp.status_code == 400
        resp = self.client.post(data={"name": "Aber", "text": "message"})
        assert resp.status_code == 200

而 Test Client 的 websocket 请求部分,就像在 Index 中使用 websocket 一样,同样有三对发送/接收数据的函数。

你只需要使用 self.client.websocket_connect() 即可连接并测试。

class Test(TestView):
    def test_chat(self) -> None:
        with self.client.websocket_connect() as ws:
            ws.send_text("hello")
            assert ws.receive_json()["message"] == "hello"
Version: 0.11
master
stable
0.15
0.14
0.13
0.12
0.11