6个版本 (3个破坏性更改)

0.6.2 2024年4月10日
0.6.1 2023年10月9日
0.6.0 2023年1月11日
0.4.0 2022年11月3日
0.1.0 2022年9月15日

#54 in WebSocket

MIT许可证

25KB
316

WebMocket

WebSocket客户端的(集成)测试和开发服务器。

  • 向客户端发送自定义消息。
  • 记录客户端发送的消息。

此服务器通过HTTP请求控制。正在测试的客户端将使用WebSocket连接到它,然后我们可以通过向API发送HTTP请求与之交互。相同的API可以用来检查此客户端向服务器发送了什么消息。

我需要这个来端到端和集成测试一个监听WebSocket的机器人。

Build Status Crates.io

webmocket

  1. 启动webmocket网络服务器。

    webmocket # or "cargo run"
    # 2022-09-15T14:38:07Z INFO  webmocket] Listening on 127.0.0.1:3000
    
  2. 连接WebSocket客户端(网页、机器人、客户端等)。例如 wscat。然后向服务器发送几条消息。 通常这是测试的主题

    wscat --connect http://127.0.0.1:3000/ws
    # Connected (press CTRL-C to quit)
    # > hello, this is the first message
    # > my name is Foo and I am a Bar
    # > { "message": "this would be JSON" }
    
  3. 检查从客户端接收到的消息

    curl http://127.0.0.1:3000/messages | jq
    # [
    #   "hello, this is the first message",
    #   "my name is Foo and I am a Bar",
    #   "{ \"message\": \"this would be JSON\" }"
    # ]
    
  4. 使用正常的HTTP库向客户端发送WebSocket消息。例如 curl

    wscat --connect http://127.0.0.1:3000/ws
    curl -X POST -H"Content-type: text/plain; charset=UTF-8" \
      --data 'Hello from the server 👋' \
      http://127.0.0.1:3000/messages
    

    我们应该看到wscat将消息打印到控制台。

  5. 检查ping/pong

    wscat --connect http://127.0.0.1:3000/ws --show-ping-pong
    curl -X POST -H"Content-type: text/plain; charset=UTF-8" \
      --data 'Hello from the server 👋' \
      http://127.0.0.1:3000/ping
    curl http://127.0.0.1:3000/messages
    

    我们应该看到wscat回复服务器的Ping消息,并返回Pong。然后我们可以检查服务器是否收到了Pong。

安装

为了在开发机器上安装平台,运行

cargo install webmocket

待办事项:构建二进制文件并使其可供下载。

运行

webmocket

配置

Webmocket通过环境变量进行配置。这些变量必须在启动之前设置。

变量 默认
WEBMOCKET_ADDR 监听主机的IP地址。必须是一个有效的IPv4地址 127.0.0.1
WEBMOCKET_PORT 服务将监听的端口。必须是一个有效的Unix端口 3000
WEBMOCKET_WS_PATH WebSocket可以连接的路径。必须以/开始 /ws

例如,要设置所有变量,可以运行

WEBMOCKET_ADDR=127.0.0.2 WEBMOCKET_PORT=8080 WEBMOCKET_WS_PATH="/messages/user" cargo run

Docker

另一种选择是在容器中运行webmocket。在例如CI管道中或在没有cargo的情况下非常有用。

docker run--rm--分离--公开3000:3000伯克斯/韦莫克特:最新

正如在配置部分所述,环境变量可以传递给服务进行配置。例如

docker run--rm--分离--公开3000:3000 --envWEBMOCKET_WS_PATH=/聊天/

这将运行Webmocket服务,其中WebSocket端点位于http://0.0.0.0:3000/chat/stream

注意:端口3000在镜像中是硬编码的,因此将WEBMOCKET_PORT更改为除3000之外的其他值将不起作用。

测试

获取源代码,然后

cargo test

这将在本地构建应用程序并运行测试。

发布

待办事项:CI/CD设置

部署

待办事项:CI/CD设置

限制

该服务旨在用于本地开发或测试(CI服务器等):它将其数据库保存在内存中。这意味着如果您要将大量数据发送给它,它将需要大量的内存。

由于难以实现,服务未绑定到HTTPS(或SSL)。如果客户端坚持只使用SSL,您可能需要在此之前配置一些代理。

待办事项

如果有需求,或者有pull请求到达,可以添加一些附加功能。

  • 将其制作成库以包含在测试中,而不是作为独立服务运行。
  • 代理到实际WebSocket,并记录消息,就像它们将从服务器发送到客户端一样。
  • 代理到实际WebSocket,并记录消息,就像它们将从客户端发送到服务器一样。
  • VCR风格(尽管不一定是该格式)存储这些记录的消息。
  • 按需将记录的服务器到客户端消息发送到客户端。
  • 对记录的客户端到服务器消息设置期望,以匹配客户端发送预期内容。

依赖

~13-25MB
~364K SLoC