接口测试 python socket 实现连接一个函数作为全局变量,发送消息一个函数

enumerate · 2018年09月25日 · 最后由 enumerate 回复于 2018年09月26日 · 3249 次阅读

目前在做 tcp 协议方面的工作
想完成一个思路
connect 时写一个函数,并把这个函数设置为全局变量
send 数据时写一个函数,把 connect 的全局变量当参数传进来,用于发送数据
当这样操作时发现两次的 response 是一样的,但是我请求的是两个不同的接口,通过查日志发现,发送的数据是不同的,但是第二次的请求虽然发送了,但是没有 response,所以打印了两次第一次的 response

这是封装后的连接函数,下面传到了全局变量的 ob 上

这是发送的函数,下面是在一个文件里,请求两个不同的接口

两次的结果是一样的,这块就好像第一次请求完把第二次的请求覆盖了一样
两次结果都是 1(此处是打个比方)
困扰多日的问题,希望有高手可以帮助解答一二,是不是全局变量的用法不对,还是 socket 不能这样用

共收到 16 条回复 时间 点赞

没看到全局变量啊
在函数里面使用全局变量需要用 global

TCP_CLIENT = None

def func():
    global TCP_CLIENT
    TCP_CLIENT = ...
arrow 回复

不好意思忘了贴了
ob = connect_server()
我是直接实现了这个函数

没有用全局变量这样的

enumerate 回复

我使用了全局变量,还是跟以前一样,第一次的结果把后面的覆盖了

建议第二个请求换一个端口号. 这个东西涉及到底层的东西了,即便是换了另外的端口号可以运行正确,当你再次运行程序的时候,那两个已使用过的端口可能还没有被操作系统释放,第二次也有可能程序出错,
我猜想是这样

enumerate 回复

看代码好像没啥问题,能看到服务端的日志吗,看是不是发出去的数据是一样的

hellohell 回复

端口号是公司指定的,好像不能换,换了的话,协议就不通了

arrow 回复

可以看到日志,第一个 send 和第二个 send 都正常的把发的内容展示出来了,但第二个请求的 response 内容返回时就变成第一个请求的 response 了,比如第一个接口协议代号是 777,第二个是 888,在本来应该返回 888 的 response 时,返回了 777 的 response,所以我以为是第一个请求把第二个给覆盖了

arrow 回复

不好意思由于里面有公司的内定义的东西,所以不方便展示

我看了日志正确的比如我单独访问这个接口和两个接口一起访问服务端的日志返回的内容,里面就是 context=()这个 context 不同
正确的里面内容是 clientNativeId,手机号,加密版本,错误的里面展示的是 secretKey,等等,和正常的不一样

可以用 wireshark 抓包一下,先排查一下本地电脑是否收到了第二次的 response。

江乡萌蘖 回复

好的,我试一下,谢谢你的建议

各位我有个最新的日志,显示我的 sessionid 和缓存中的 sessionid 不一致,但我看显示的是相同的 id

enumerate 回复

我不懂 py,我估摸着:
1、如果你要是做 TCP 长连接,你要考虑一下具体怎么实现,到底是不是现在代码的样子不好说;
2、如果不是长连接,那么每次请求都要重新连接,请求完毕要 close/release connection 的吧

槽神 回复

是做长连接,以前每次都 close 的时候也是报这个什么 sessionid 不一致,和缓存的,不过也谢谢你的建议

enumerate 回复

长连接是个客户端和服务端配合的过程,你这好像只有客户端代码,你还需要贴一下服务端的代码,再请坛神们帮你看一下了

槽神 回复

服务端的我没有权限,好悲哀啊,不过也谢谢你了。兄弟

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册