在本章节中:
前言
Parasoft WebSocket 传输扩展为 SOAtest 中适用的消息客户端工具添加了对 WebSocket 传输的支持。这使您能够在配置、发送和验证通过 WebSockets 发送的消息时充分利用 SOAtest 的丰富接口。WebSocket 传输扩展支持根据 RFC 6455 标准通过 WS 或 WSS 协议发送消息。
前提条件
- SOAtest 9.10.0 或更高版本
- Oracle Java 8
安装指南
可以在用户界面或命令行中安装此工具。
用户界面安装指南
- 选择 Parasoft> Preferences
- 在 System Properties 首选项页面,单击 Add JARs。
- 在打开的文件选择器中,选择 websockettransport.jar。
- 单击 Apply ,重启 SOAtest。
命令行安装指南
将 websockettransport.jar 文件添加到 localsettings 属性文件中的 system.properties.classpath 属性中。例如:
system.properties.classpath=<path to jar>/websockettransport.jar
使用说明
WebSocket 输在以下工具中使用:
传输在传输选项卡中配置。若要使用 WebSocket 传输,请在传输下拉菜单中选择 WebSocket,然后配置可用选项(请查阅 Configuration Options)。
配置选项
可以使用以下配置选项。
连接设置
URI | 指定要调用的 URI,包括协议(ws:// or wss://)。 这是创建新连接所必需的。创建初始连接之后,可以使用连接 ID 控制要使用哪个连接。 |
---|---|
Connection ID | 如果要测试多个连接,请指定连接 ID。任何字符串都可以用于连接 ID。 如果指定引用已打开连接的连接 ID 和 URI,则 URI 将被忽略,因为连接已经打开。 如果使用测试套件中的单个连接,则不需要设置连接 ID;SOAtest 将使用默认值( 但是,如果希望在同一场景中的多个连接上打开和发送/接收消息,则需要为每个连接指定唯一的连接 ID。 Default: |
Mode | 指定传输的消息模式。以下模式是有效的:
Default: |
Frame Type | 可以为消息指定帧类型,可以是 WebSocket 协议使用数据帧传输有效负载,这些数据帧大多配置为文本或二进制类型。除了发送二进制消息外,在所有情况下都应该使用默认值(文本),在这种情况下应该使用二进制。 查阅 https://tools.ietf.org/html/rfc6455#section-5.6 默认: |
Connection Timeout | 指定在超时之前等待连接建立的时间(以毫秒为单位)。 Default: |
Log Level | 指定要将多少信息记录到控制台和事件监视视图。可使用以下级别:
Default: |
HTTP 数据头设置
当 WebSocket 连接打开时,会有一个打开的握手,这是一个 HTTP 升级请求。本节配置应该作为此升级请求的一部分发送的 HTTP 数据头(查阅 https://tools.ietf.org/html/rfc6455#section-1.3)。
最多可以配置 10 个 HTTP 头文件。头文件使用 name:value 格式配置,例如 User-Agent:Mozilla/5.0
。
传入的消息处理
一旦 SOAtest 打开连接,传输器就侦听来自服务器的所有传入消息,并将它们添加到内部队列中。当处于 receive
或 sendAndReceive
模式时,传输尝试查找与指定的消息选择器设置匹配的消息。首先检查队列。如果找到匹配的消息,则将该消息作为响应消息发送给流量查看器。消息还被发送到连接到客户机工具的响应输出的工具。如果队列中没有找到匹配的消息,则传输器将等待来自匹配消息选择器设置的服务器的消息。如果在指定超时内没有接收到消息,则报告错误消息。
消息保留在内部队列上,直到连接被 SOAtest 关闭。如果连接被服务器关闭,则消息将保留在队列中,以便您可以验证服务器可能在关闭连接之前立即发送给客户机的消息。
Message Selector | 指定 XPath,选择传输应该处理哪些传入消息。Xpath 应该使用以下格式选择消息中的节点和节点的值: xpath=value (比如, 还可以使用 XPath 和运算符来匹配消息中的多个节点,比如, 如果 XPath 计算结果为布尔类型 默认: |
---|---|
Message Format | 指定在消息选择器中匹配的传入消息的格式(例如,XML、JSON 等)。只有当预期的消息不是 XML 或 JSON 格式,并且为消息选择器指定了一个值时,才需要该字段。 默认情况下,传输可以自动检测 XML 或 JSON 格式。如果消息是另一种格式,则必须在此字段中指定它。 格式应该与格式的名称匹配,因为它出现在 XML 转换器工具中,或者定义在自定义消息格式中。当指定消息格式时,SOAtest 将基于指定消息格式的默认转换选项将消息转换为 XML。 默认: |
Timeout | 指定在超时之前等待传入消息的时间(以毫秒为单位)。 默认: |
示例用例
内部队列和消息选择器消除了对确保以特定顺序从服务器接收消息的依赖。确保客户机在从服务器接收消息的确切时刻监听消息也是不必要的。
例如,如果预期有来自服务器的两条不同消息,则可以验证它们是否已接收,以及它们的内容是否正确,而不管它们接收的顺序如何。在本例中,您将使用匹配每个消息的 Xpath 配置两个不同的客户机工具。
如果将第二个工具配置为匹配的消息在第一个预期消息之前到达,那么它将被添加到队列中。第一个工具被配置为匹配的消息将在它到达时被处理。然后,第二个工具将能够处理队列中已经存在的消息。
连接管理设置
您可以启用 Keep connection alive 或 Close connection after test execution 选项。WebSocket 传输允许使用多个活动连接。
如果连接 ID 与已经打开的连接 ID 匹配,则该连接将被重用。如果连接 ID 与已经关闭或以前从未用于打开连接的连接 ID 匹配,则将创建一个新连接。
如果启用了 Keep connection alive 选项,SOAtest 将不会在测试执行结束时对连接调用 close()。如果启用 Close connection after test execution 选项,SOAtest 将会在测试执行结束时关闭连接。与内置传输不同,在执行完成时,没有对自定义传输的打开连接进行最终清理,所以应该为给定连接的最后一次测试启用 Close connection after text execution 。如果不这样做,连接将保持打开状态。
示例场景
在下面的场景中,测试运行结束后,这两个连接都将保持打开状态:
- 连接 A(保持连接)
- 连接 B(保持连接)
- 连接 A(保持连接)
- 连接 B(保持连接)
若要解决这个问题,您可以在测试执行后为使用特定连接的最后一个测试启用“关闭连接”:
- 连接 A(保持连接)
- 连接 B(保持连接)
- 连接 A(关闭连接)
- 连接 B(关闭连接)
负载测试注意事项
在加载打开共享 WebSocket 连接的测试客户端时,您应该在执行选项下的父测试套件中启用 Tests run as a group 选项。需要此选项,以便每个虚拟用户(VU)都可以运行整个场景,从而使每个 VU 能够创建和重用自己的 WebSocket 连接。如果启用了 Tests are individually runnable 选项,则每个 VU 将从套件中独立运行其中一个测试,没有可用的连接共享。
第三方内容
此扩展包括来自第三方的资源项,如下:
- Saxon HE (Mozilla Public License 2.0)
- JCS Core (Apache License 2.0)
- SLF4J (MIT License)
- Tyrus (CDDL1.1 and GPL 2.0 with Classpath Exception)
更多的许可详情可在该插件的 licenses 文件夹中获得。