利用python腳本和telnet調試dubbo接口


原文地址:https://hhyo.github.io/2017/10/20/python-dubbo-telnet/

最近在測試項目中接觸到dubbo框架,由於業務邏輯復雜,前台一個業務流程在后端會依賴多個服務提供數據,而各方開發進度也不完全一致。在業務測試腳本編寫完成后,希望能夠在項目整體提測前,先驗證部分已提供的dubbo接口的可用性。另外一方面,也能夠在測試過程中更快的定位到具體的服務提供者,指派任務,減少反復溝通定位問題所耗費的時間。

先說環境:
OS: macOS High Sierra
python: 2.7

步驟:

  1. 准備python環境,pip安裝dubbo_telnet:pip install dubbo_telnet
  2. 編寫如下調試腳本
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
#-*- coding: utf-8 -*-

import dubbo_telnet
import json
Host = '192.168.0.1' # Doubble服務器IP
Port = 9036 # Doubble服務端口

# 初始化dubbo對象
conn = dubbo_telnet.connect(Host, Port)

# 設置telnet連接超時時間
conn.set_connect_timeout(10)

# 設置dubbo服務返回響應的編碼
conn.set_encoding('gbk')

# 顯示服務列表
print conn.do("ls")

# 顯示指定服務的方法列表
print conn.do("ls XXXService")

# 方法調用
interface = 'XXXService'
method = 'userinfo'
param = user_id
result = conn.invoke(interface, method, param)

print json.dumps(result, sort_keys=True, indent=4, separators=(',', ': '), skipkeys=True, ensure_ascii=False)

這時候運行腳本,拋錯

1
2
3
 File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/json/decoder.py", line 384, in raw_decode
raise ValueError("No JSON object could be decoded")
ValueError: No JSON object could be decoded

檢查site-packages/dubbo_telnet/init.py文件

1
2
3
4
5
6
7
data = ''
while data.find(self.__finish) == -1:
data = tn.read_very_eager()
data = data.split("\n")
data = json.loads(data[0], encoding=self.__encoding)
tn.close() # tn.write('exit\n')
return data

可以知道是在對返回結果處理時出了異常,無法轉換為python對象,在這里加上一個錯誤處理

1
2
3
4
5
try:
data = json.loads(data[0], encoding=self.__encoding)
except Exception as ValueError:
data = data
#data = json.loads(data[0], encoding=self.__encoding)

就可以正常返回結果,可以進行簡單的dubbo請求和查看響應了。其實整個過程就是利用telnet命令來連接和操作dubbo服務,也可以直接在命令行中進行。

附上dubbo的telnet命令:

1
2
3
4
5
6
7
8
9
10
11
12
13
Please input "help [command]" show detail.
status [-l] - Show status.
pwd - Print working default service.
trace [service] [method] [times] - Trace the service.
exit - Exit the telnet.
help [command] - Show help.
invoke [service.]method(args) - Invoke the service method.
count [service] [method] [times] - Count the service.
clear [lines] - Clear screen.
ls [-l] [service] - List services and methods.
log level - Change log level or show log
ps [-l] [port] - Print server ports and connections.
cd [service] - Change default service.


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM