socket协议的接口测试
Socket 协议的接口测试
简介
在计算机网络中,Socket(套接字)是一种通信机制,它允许不同计算机之间的进程进行数据交换。
应用场景
虽然直接使用 Socket 协议的情况较少,但在某些特定的场景下仍然可以使用它。例如,在一些特定的物联网应用中,可能需要与底层硬件或其他系统进行直接的、定制化的通信。
并且大部分的协议都是基于 Socket 协议进行抽象优化,所以了解 Socket 协议的测试方法,也有助于提升对于多种其他类型协议的测试能力。
实现方案
环境准备
学院提供的在线 echo socket 服务,发送什么信息,则返回什么信息:
- Host:socket.hogwarts.ceshiren.com
- Port:30001
Socket 协议的测试方案
Socket 的协议测试和其他类型的接口测试没有太大的区别,都是从客户端向服务端发起请求信息之后,接收到服务端的响应,查看是否符合预期结果。
如果使用代码进行实现,则一共需要以下几步:
- 创建连接:需要输入 Socket 服务的 host 和端口号。
- 发送消息:从客户端发送消息给服务端。
- 接受消息:服务端返回对应的数据信息。
- 关闭连接:关闭和服务端的数据连接。
使用 Python 实现:
# 导入socket库:
import socket
class SocketReq:
def send_socket(self, send_data:str):
# 创建一个socket实例对象:
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 建立连接:
s.connect(('socket.hogwarts.ceshiren.com', 30001))
# 将 string 的消息转码为二进制
byte_data = send_data.encode("utf-8")
# 发送消息
s.send(byte_data)
# 接收数据:
d = s.recv(1024)
# 关闭连接
s.close()
# 将二进制的响应转码为string
return d.decode("utf-8")
使用 Java 实现:
public class SocketReq {
public String sendSocket() {
String hostName = "socket.hogwarts.ceshiren.com";
int port = 30001;
String response;
try {
// 创建连接
Socket clientSocket = new Socket(hostName, port);
// 获取输入流和输出流
OutputStream outToServer = clientSocket.getOutputStream();
DataOutputStream out = new DataOutputStream(outToServer);
InputStream inFromServer = clientSocket.getInputStream();
DataInputStream in = new DataInputStream(inFromServer);
// 发送消息
String message = "Hello, server!";
out.writeUTF(message);
System.out.println("发送消息给服务器:" + message);
// 接收数据
response = in.readUTF();
System.out.println("从服务器接收到的消息:" + response);
// 关闭连接
clientSocket.close();
} catch (IOException e) {
throw new RuntimeException(e);
}
return response;
}
}
以上是与服务端发送与接受消息的实现过程,但是在接口测试中,还需要对服务端返回的消息进行测试。所以需要接受到返回消息,并对返回的消息完成测试验证,因为演示服务为发送什么信息,则返回什么信息,则预期结果设定为发送的消息即可。
使用 Python 实现:
# 测试用例
def test_send_socket():
socket_req = SocketReq()
assert socket_req.send_socket("Hogwarts 测试开发学社") == "Hogwarts 测试开发学社"
使用 Java 实现:
// 测试用例
import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.*;
class SocketCaseTest {
@Test
void sendSocket() {
SocketCase socketCase = new SocketCase();
String res = socketCase.sendSocket("Hogwarts 测试开发学社");
assertEquals("Hogwarts 测试开发学社", res);
}
}
总结
- Socket 协议的测试方案