Python 3.x与TestLink xmlprc
首先感谢你的帮助,我刚接触Python 3.x。
当我尝试用Python 3.x来解析testlink的xmlprc服务器时,出现了下面的错误。不过我在Python 2.x下可以正常运行这段代码,你有什么想法吗?
import xmlrpc.client
server = xmlrpc.client.Server("http://172.16.29.132/SITM/lib/api/xmlrpc.php") //here is my testlink server
print (server.system.listMethods()) //I can print the methods list here
print (server.tl.ping()) // Got error.
这是错误信息:
['system.multicall', 'system.listMethods', 'system.getCapabilities', 'tl.repeat', 'tl.sayHello', 'tl.ping', 'tl.setTestMode', 'tl.about', 'tl.checkDevKey', 'tl.doesUserExist', 'tl.deleteExecution', 'tl.getTestSuiteByID', 'tl.getFullPath', 'tl.getTestCase', 'tl.getTestCaseAttachments', 'tl.getFirstLevelTestSuitesForTestProject', 'tl.getTestCaseCustomFieldDesignValue', 'tl.getTestCaseIDByName', 'tl.getTestCasesForTestPlan', 'tl.getTestCasesForTestSuite', 'tl.getTestSuitesForTestSuite', 'tl.getTestSuitesForTestPlan', 'tl.getLastExecutionResult', 'tl.getLatestBuildForTestPlan', 'tl.getBuildsForTestPlan', 'tl.getTotalsForTestPlan', 'tl.getTestPlanPlatforms', 'tl.getProjectTestPlans', 'tl.getTestPlanByName', 'tl.getTestProjectByName', 'tl.getProjects', 'tl.addTestCaseToTestPlan', 'tl.assignRequirements', 'tl.uploadAttachment', 'tl.uploadTestCaseAttachment', 'tl.uploadTestSuiteAttachment', 'tl.uploadTestProjectAttachment', 'tl.uploadRequirementAttachment', 'tl.uploadRequirementSpecificationAttachment', 'tl.uploadExecutionAttachment', 'tl.createTestSuite', 'tl.createTestProject', 'tl.createTestPlan', 'tl.createTestCase', 'tl.createBuild', 'tl.setTestCaseExecutionResult', 'tl.reportTCResult']
Traceback (most recent call last):
File "F:\SQA\Python\Testlink\Test.py", line 5, in <module>
print (server.tl.ping())
File "C:\Python31\lib\xmlrpc\client.py", line 1029, in __call__
return self.__send(self.__name, args)
File "C:\Python31\lib\xmlrpc\client.py", line 1271, in __request
verbose=self.__verbose
File "C:\Python31\lib\xmlrpc\client.py", line 1070, in request
return self.parse_response(resp)
File "C:\Python31\lib\xmlrpc\client.py", line 1164, in parse_response
p.feed(response)
File "C:\Python31\lib\xmlrpc\client.py", line 454, in feed
self._parser.Parse(data, 0)
xml.parsers.expat.ExpatError: junk after document element: line 2, column 0
2 个回答
0
谢谢你,我找到了所有的方法列表,发现只有'tl.sayHello'、'tl.ping'和'tl.about'这几个方法有问题。它们都是把一个空的PHP自动加载文件(*.class.php)作为字符串传给解析器,而其他方法则是传一个xml文件。所以我决定不再使用这些有问题的方法,结果脚本运行得很好。
0
我以前见过这个信息,通常是因为传输的数据没有进行XML格式的处理。解决办法是把数据放在一个XMLRPC二进制对象里。
在你的情况下,你无法控制服务器端,所以这个办法对你来说不适用,但它可能能帮助你理解实际的问题所在。
另外,Python 2和Python 3之间的差异也说明可能存在文本和字节之间的问题。
为了帮助你诊断问题,可以设置verbose=True
,这样你就能看到实际的HTTP请求/响应头和XML请求/响应。这可能会告诉你line 2: column 0
的具体情况。你可能会发现问题出在PHP脚本上,它没有按照XMLRPC规范的要求,把二进制数据用base64编码包装起来。