前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >RPC接口测试技术-Tcp 协议的接口测试

RPC接口测试技术-Tcp 协议的接口测试

原创
作者头像
霍格沃兹测试开发
发布于 2022-04-29 09:47:41
发布于 2022-04-29 09:47:41
1.1K00
代码可运行
举报
文章被收录于专栏:测吧测试开发测吧测试开发
运行总次数:0
代码可运行

首先明确 Tcp 的概念,针对 Tcp 协议进行接口测试,是指基于 Tcp 协议的上层协议比如 Http ,串口,网口, Socket 等。这些协议与 Http 测试方法类似(具体查看接口自动化测试章节),但在测试过程中需要做些调整。

Socket

Socket 又称套接字,进程可通过套接字进行网络通信,使多个设备具有交互能力。Socket 适合对传输速度和安全性有严格要求的应用,比如手机内核与外界进行测试数据的传输。支持 Socket 设备不止计算机,还会有移动端,如果测试 Socket 协议,需要有收发 Socket 数据的能力或代理 Socket 的能力。 下图展示了正常的 Socket 通信流程:

如果测试 Socket 协议,需要做以下改造,即利用 Socket 代理,进行 Socket 数据的接收:

需要特别注意,需要应用可更改 Socket 地址,才可使用代理。以 Python 的 Socket 为例,下面是一个简单的 Socket 客户端和服务端:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 客户端
import socket               # 导入 socket 模块

s = socket.socket()         # 创建 socket 对象
host = '127.0.0.1'          # 获取本地主机名
port = 12345                # 设置端口号
s.connect((host, port))
print(s.recv(1024).decode())
s.close()
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 服务端

import socket               # 导入 socket 模块
s = socket.socket()         # 创建 socket 对象
host = '127.0.0.1'          # 获取本地主机名
port = 12345                # 设置端口
s.bind((host, port))        # 绑定端口

s.listen(5)                 # 等待客户端连接
while True:
    c,addr = s.accept()     # 建立客户端连接
    print(addr)
    c.send('收到信息'.encode())
    c.close()                # 关闭连接

客户端可与服务端进行交流,但 Socket 地址不可更改,即上述客户端代码的 127.0.0.1 和 12345 端口不能通过配置文件进行更改。如果不能更改这两者,就堵死了通向代理的道路:

如何进行修改?以客户端代码为例,可通过配置文件来配置 host 和 port :

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import socket
import yaml
# 通过配置文件,进行 host 和 port 配置
with open("config.yaml","r", encoding="utf-8") as f:
    data = yaml.safe_load(f)
host = data.get("host")
port = data.get("port")
s = socket.socket()
s.connect((host, port))
print(s.recv(1024).decode())
s.close()

config.yaml 的内容如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
host: "127.0.0.1"
port: 12345

上述更改,可使应用走 Socket 代理。测试人员还需一款合适的代理工具,推荐 mitmproxy 或自写 Socket 代理。mitmproxy 使用请参考: mitmproxy 官网:https://www.mitmproxy.org/ 1

其他协议

其它协议,比如串口、网口、visa 等,与 Socket 的测试模式类似,用相同的图即可简述:

其它协议较 Sokcet 更冷门,无合适的代理工具。需要测试人员自己写代理,比如串口协议, Python 虽然支持 Pyserial 进行收发串口,但无代理。此时需要测试人员自行编写串口代理工具。这个过程需要开启两个监听服务,如下图,监听服务 A 监听端口 123 ,如果有数据进来,会透传(或做数据更改,实现 mock)给端口 456,监听服务 B 同理:

使用两个监听服务,可编写任意协议,但注意缺点,数据的传输时间会增加,如果过分注重性能,此方案慎用。下面是参考代码,其中只保留了关键逻辑:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
def forward(self):
    """
    开启监听
    :return:
    """
    while True:
        # 从虚拟串口接收到请求
        virtual_req = self.virtual_ser.recv()
        if b'' == virtual_req:
            continue
        if self.is_call_back:
            # 返回空值,让 mock_server 决定返回内容
            real_result = b""
        else:
            # 等待真实设备出现
            if self.real_ser is None :
               # 代码省略

            # 将请求转发到真实串口
            real_result = self.real_ser.write_by_bytes(virtual_req)

        # 获取 mock 的结果,在此可以加入 mock 操作
        mock_result = self.mock_server.mock(virtual_req, real_result)
        # 将 mock 结果写入虚拟串口
        self.virtual_ser.send(mock_result)

再次强调,需要让应用支持端口修改,才能使用代理工具,这部分需要与开发交流,提修改需求。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
如何让自己家里NAS硬盘的小电影不被发现?现在就教你涨知识了!
想必现在很多人都喜欢用NAS搭建一套家庭影音,毕竟现在NAS不贵,我也一样。由于NAS是通过公网进行访问,安全性则会成为一道考验,那么今天我就介绍一下我自己搭建的一套NAS是怎么做安全防护的。
ICT系统集成阿祥
2024/12/03
3490
如何让自己家里NAS硬盘的小电影不被发现?现在就教你涨知识了!
二级域名怎么设置 域名分为几级
互联网给人们的生活、工作、创业都带来了方便,现在很多企业或者个人,都建立了自己的网站,然而在建网站之前,注册域名是开始的第一步,只在注册好了域名,才可以进行网站其他步骤的操作,这些大部比较了解,但对于二级域名怎么设置也许会比较陌生,下面就来看看,域名为分几级,二级域名怎么设置吧。
用户8739990
2021/07/23
18.7K1
二级域名怎么设置 域名分为几级
一个端口访问NAS所有服务,使用二级域名定义你的每一项服务 - 熊猫不是猫QAQ
目前家里设备越来越多,而每个设备很多服务或者应用端口又是重复的,每个都去做映射真的太麻烦。再加上极空间以及绿联本身并没有反代服务器,在外往下我想要访问http服务也挺麻烦的。于是乎想着使用npm来进行二级域名的设置,达到使用二级域名来区别不同设备和不同服务。
熊猫不是猫
2023/07/06
1.2K1
一个端口访问NAS所有服务,使用二级域名定义你的每一项服务 - 熊猫不是猫QAQ
lucky实现动态DDNS域名解析 + https安全访问教程
要实现动态DDNS域名解析和https安全访问,首先得有个域名。域名可以直接在阿里云或者腾讯云购买。我的域名是在腾讯云买的,然后托管到了cloudflare这个平台,为什么要托管到它那儿?因为托管过去后,就算没有ipv4的情况下,也能利用STUN穿透,获取到可以访问的ipv4公网IP和端口,只是这个IP和端口不是固定的,但可以用脚本去监控,要是有变更的话,能直接同步到cloudflare,还能收到邮件通知
季春二九
2025/01/10
5.3K1
lucky实现动态DDNS域名解析 + https安全访问教程
nginx配置二级域名
为了不让域名fangyuanxiaozhan.com闲置, 作者又买了个国内的虚拟主机(VPS)的ip为111.230.254.173, 用wordpress开了个博客网站, 由于vps的空间很大, 我就开了个私有网盘服务, 由于日常开发需要用到git, 但又不想公开代码, 我又开了个私有git服务 我的vps挂了三个服务, 分别是: WordPress搭建的博客服务, 运行于8000端口, 访问方式 http://fangyuanxiaozhan.com:8000 Gogs搭建的git服务,
zhaoolee
2018/08/10
9.5K0
nginx配置二级域名
nginx设置二级域名
想要通过域名来访问nginx代理的服务,需要在nginx的配置文件nginx.conf 文件中进行如下配置
用户6197772
2022/09/15
8.2K0
(转)利用个人电脑搭建网站WEB服务器域名访问
本文转载:http://www.cnblogs.com/fangpage/archive/2011/11/22/prowebserver.html
跟着阿笨一起玩NET
2018/09/18
10.5K0
(转)利用个人电脑搭建网站WEB服务器域名访问
把网站部署在家里!--群晖docker下装宝塔面板
部署环境我想了几种方案,因为家里软路由上装的是esxi,所以想过搞一个liunx的虚拟机,然后再装宝塔面板。后来为了简单,还是在群晖上装一个宝塔面板的docker版本。
星橙
2021/09/09
18.6K1
把网站部署在家里!--群晖docker下装宝塔面板
宝塔面板设置禁止通过IP直接访问网站防止恶意解析
宝塔服务器管理是现在非常流行的一款免费的Linux管理应用,作为不想做过多运维操作的可以使用这个可视化操作
沈唁
2018/07/26
8.6K0
宝塔面板设置禁止通过IP直接访问网站防止恶意解析
Trojan+宝塔面板,完美运行!
上期视频我们讲到了如何利用Nginx的SNI来分流Trojan的相关流量。间接实现了建站和Trojan完美运行。视频观看地址:点击播放
jamesjiang
2022/11/20
4.6K1
Trojan+宝塔面板,完美运行!
Nginx-添加并部署多个二级域名And添加SSL证书
以上几种方案中, 我会优先使用添加二级域名, 因为不同服务可能差异比较大, 而且随着项目越来越多, 后面会较难管理, 所以这篇写一下就以上这种环境应该怎么添加二级域名以及二级域名添加ssl证书
不止于python
2023/09/25
2.3K0
Nginx-添加并部署多个二级域名And添加SSL证书
使用ipv6内网穿透,实现私有云盘搭建,实现远程控制等功能
ipv6为每一个设备都标注了地址,因此可以直接使用ipv6访问内网中的设备,实现与公网唯一ip一样的功能 从而可以实现远程ftp访问,远程控制,实现个人私有云盘搭建。 买个4t的硬盘安装在家里的电脑上,用ipv6实现内网穿透,就相当于有一个4T的网络云盘了,随时随地就能访问了 就是说你只需要两台能联网的电脑设备就行了,一台用于你身边使用,另一台放到家里等,只要都能上网,就能使用ipv6点对点传输数据,不需要中间商赚差价
全栈程序员站长
2022/06/29
9.9K0
使用ipv6内网穿透,实现私有云盘搭建,实现远程控制等功能
教你不花一分钱,用十分钟把旧电脑打造成自己的Windows版NAS系统
一年前我前前后后花了2个多星期的时间才将整套系统部署完成,但这是因为其中有很多的坑,需要找到解决方案。我已经尽可能把过程中遇到的所有问题都写明,大家只要跟着去做,还是非常简单的,不需要太长时间。整套系统至今一直非常稳定。
ICT系统集成阿祥
2024/12/30
8.7K0
教你不花一分钱,用十分钟把旧电脑打造成自己的Windows版NAS系统
搞懂自定义域名
上次写了一篇给 Gihub Pages 添加自定义域名的文章,之后感觉写得还是偏实践多一点,只做到了受人以鱼。
写代码的海怪
2022/03/30
4.1K0
搞懂自定义域名
用.NET做DDNS动态域名解析和SSL证书申请
前几天用.NET玩IoT设备,拿出了角落吃灰的Jetson Nano。近期也买了一堆传感器,还在路上,准备到手之后,好好捣鼓一番。Nano设备呢,虽然没有一直开机,但是连上了智能插座,随时待命。
桑榆肖物
2022/11/18
5.9K0
用.NET做DDNS动态域名解析和SSL证书申请
Nginx通过二级目录(路径)映射不同的反向代理,规避IP+端口访问
这是我上一家公司的案例总结,发现躺在草稿箱好几个月了,今天得空就整理发布一下。 先说一下开发那边提来的 2 个 case: ①、同一个域名需要反向代理到前台和后台(不同机器和端口); ②、需要采用
张戈
2018/03/21
23K0
Nginx通过二级目录(路径)映射不同的反向代理,规避IP+端口访问
八种方式实现跨域请求
那么,何为同源呢?只有当协议、端口、域名都相同的页面,则两个页面具有相同的源。只要网站的协议protocol、 主机host、 端口号port 这三个中的任意一个不同,网站间的数据请求与传输便构成了跨域调用,会受到同源策略的限制。
奋飛
2019/08/15
1.7K0
Windows系统IIS服务配置与网站搭建,结合内网穿透实现公网访问
在网上各种教程和介绍中,搭建网页都会借助各种软件的帮助,比如网页运行的Apache和Nginx、数据库软件MySQL和MSSQL之类,为方便用户使用,还出现了XAMPP、PHPStudy、宝塔面板等等一系列集成服务,都是为了方便我们能快速建立网站。是不是不适用这些软件就无法建立网站了呢?答案当然是否定的,在Windows系统中实际上集成了建立网站所必须的软件环境。今天就让我们来看看,如何使用Windows自带的网站程序建立网站吧。
程思扬
2023/12/01
4.2K0
Windows系统IIS服务配置与网站搭建,结合内网穿透实现公网访问
服务器地址和端口号是什么怎么看_常见服务对应的端口号
  21端口:21端口主要用于FTP(File Transfer Protocol,文件传输协议)服务。
全栈程序员站长
2022/09/20
8.2K0
宝塔反代面板端口+开启HTTPS后无法绑定堡塔APP
腾讯防火墙关闭8888端口。 新建一个网站,开启反代,反代到http://127.0.0.1:8888。 网站开启SSL,强制HTTPS访问。 通过这个网站访问宝塔面板。
kr
2022/11/12
7.4K0
宝塔反代面板端口+开启HTTPS后无法绑定堡塔APP
推荐阅读
相关推荐
如何让自己家里NAS硬盘的小电影不被发现?现在就教你涨知识了!
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档