找回密码
 立即注册
查看: 226|回复: 4

只会一些python基础,该如何下手开发一个TCP接口protocol buffers自动化测试框架?

[复制链接]
发表于 2024-7-15 18:14 | 显示全部楼层 |阅读模式
如题,真心请教,例如该学习什么课程,有无保举等等,目前无从下手,万分感激
发表于 2024-7-15 18:14 | 显示全部楼层
谢邀。
开发一个TCP接口protocol buffers自动化测试框架需要掌握一定的Python网络编程和协议缓冲区技术。以下是一个简单的开发步骤:

  • 确定测试需求和测试用例,了解TCP接口和protocol buffers协议的基本原理和特点。
  • 安装Python的TCP库和protocol buffers库,如Twisted和protobuf。
  • 编写测试用例,并定义协议缓冲区的数据结构和消息格式。
  • 实现TCP服务器端,接收来自客户端的请求并解析协议缓冲区中的数据。
  • 实现TCP客户端,向服务器端发送请求,并根据返回数据进行断言和验证。
  • 将测试用例和测试框架封装成测试套件,实现测试用例的自动化执行和报告生成。
以下是一个简单的代码示例:
  1. from twisted.internet import reactor, protocol
  2. import protobuf_test_pb2
  3. class TestProtocol(protocol.Protocol):
  4.     def __init__(self):
  5.         self.test_case = protobuf_test_pb2.TestCase()
  6.     def dataReceived(self, data):
  7.         # 解析协议缓冲区中的数据
  8.         self.test_case.ParseFromString(data)
  9.         # 执行测试用例
  10.         result = self.run_test_case(self.test_case)
  11.         # 返回结果
  12.         self.transport.write(result)
  13.     def run_test_case(self, test_case):
  14.         # 执行测试用例并返回结果
  15.         result = protobuf_test_pb2.TestResult()
  16.         # 根据测试用例定义的消息格式进行解析和处理
  17.         # ...
  18.         return result.SerializeToString()
  19. class TestFactory(protocol.Factory):
  20.     def buildProtocol(self, addr):
  21.         return TestProtocol()
  22. if __name__ == '__main__':
  23.     reactor.listenTCP(8000, TestFactory())
  24.     reactor.run()
复制代码
在上面的代码中,我们使用Twisted库实现了一个TCP服务器端,接收来自客户端的请求并解析协议缓冲区中的数据。我们定义了一个TestProtocol类,继承了Twisted库中的protocol.Protocol类,并实现了dataReceived方法和run_test_case方法。在dataReceived方法中,我们解析协议缓冲区中的数据,并调用run_test_case方法执行测试用例。在run_test_case方法中,我们执行测试用例并返回结果。
在实现TCP客户端时,可以使用Python内置的socket模块,向服务器端发送请求并接收返回数据。可以根据具体需求选择其他TCP库和工具。
发表于 2024-7-15 18:14 | 显示全部楼层
开发一个 TCP 接口 Protocol Buffers 自动化测试框架可以分为以下几个步骤:

  • 安装依赖库
首先需要安装 Python 的 Protocol Buffers 库和 gRPC 库:
  1. pip install protobuf grpcio grpcio-tools
复制代码

  • 编写 Protocol Buffers 文件
根据需求编写 Protocol Buffers 文件,并使用 Protocol Buffers 编译器生成相应的 Python 代码:
  1. python -m grpc_tools.protoc -I./proto --python_out=./ --grpc_python_out=./ ./proto/*.proto
复制代码

  • 实现 gRPC 服务
根据 Protocol Buffers 文件生成的 Python 代码中包含了 gRPC 相关的服务和客户端代码,需要根据需求实现相应的 gRPC 服务代码。例如,可以定义一个 CalculatorServicer,实现相应的加、减、乘、除等操作的 gRPC 服务:
  1. import calculator_pb2
  2. import calculator_pb2_grpc
  3. class CalculatorServicer(calculator_pb2_grpc.CalculatorServicer):
  4.     def Add(self, request, context):
  5.         result = request.a + request.b
  6.         return calculator_pb2.Result(value=result)
  7.     def Subtract(self, request, context):
  8.         result = request.a - request.b
  9.         return calculator_pb2.Result(value=result)
  10.     def Multiply(self, request, context):
  11.         result = request.a * request.b
  12.         return calculator_pb2.Result(value=result)
  13.     def Divide(self, request, context):
  14.         result = request.a / request.b
  15.         return calculator_pb2.Result(value=result)
复制代码

  • 实现自动化测试
根据需求编写自动化测试脚本,例如可以使用 unittest 框架编写测试用例:
  1. import unittest
  2. import grpc
  3. import calculator_pb2
  4. import calculator_pb2_grpc
  5. class TestCalculator(unittest.TestCase):
  6.     def setUp(self):
  7.         channel = grpc.insecure_channel('localhost:50051')
  8.         self.stub = calculator_pb2_grpc.CalculatorStub(channel)
  9.     def test_add(self):
  10.         response = self.stub.Add(calculator_pb2.Request(a=1, b=2))
  11.         self.assertEqual(response.value, 3)
  12.     def test_subtract(self):
  13.         response = self.stub.Subtract(calculator_pb2.Request(a=3, b=2))
  14.         self.assertEqual(response.value, 1)
  15.     def test_multiply(self):
  16.         response = self.stub.Multiply(calculator_pb2.Request(a=2, b=3))
  17.         self.assertEqual(response.value, 6)
  18.     def test_divide(self):
  19.         response = self.stub.Divide(calculator_pb2.Request(a=6, b=3))
  20.         self.assertEqual(response.value, 2)
复制代码

  • 运行自动化测试
最后运行自动化测试脚本进行测试:
  1. if __name__ == '__main__':
  2.     unittest.main()
复制代码
这个是我根据个人经验的示例,你可以根据自己的实际需求进行修改。
发表于 2024-7-15 18:15 | 显示全部楼层
课程还真的不知道,毕竟太小众了...好像抖音直播的评论就是用这种序列化传送的,逻辑上是比Json省了很多Key的传送..而且数字的编码上虽然看的不是太懂...但是总觉得很神奇省了挺多空间的
有protojs的库...proto文件定义的语法是一致的
发表于 2024-7-15 18:16 | 显示全部楼层
以前要码很多字,写教程。。。
现在,只要开通下chatGPT
懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Unity开发者联盟 ( 粤ICP备20003399号 )

GMT+8, 2024-12-22 17:24 , Processed in 0.247231 second(s), 27 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表