在作接口自动化的时候,请求数据以前都是JSON格式的,Python有自带的包来解决。最近在作APP的接口,遇到XML格式的请求数据,费了很大劲来解决,解决方式是:接口文档拿到的是XML,在线转化为json格式(目的是拿到xml数据的模板),存放到json文件中,根据接口名去提取。python
连接:https://github.com/martinblech/xmltodictgit
C:\Users\wy.DESKTOP-KENPKKP\Desktop\Dingda\dingAPI>pip install xmltodict Requirement already satisfied: xmltodict in c:\users\wy.desktop-kenpkkp\appdata\local\programs\python\python36\lib\site-packages (0.12.0)
<?xml version="1.0"?> <mydocument has="an attribute">#has是节点属性 <and> <many>elements</many> <many>more elements</many> </and> <plus a="complex"> element as well </plus> </mydocument>
因为目前没有找到可以将XML直接赋值给函数的方法,因此先用在线转化工具将XML转化为JSON,转化后的结果为github
{ "mydocument": { "-has": "an attribute", #在这里要留意一个事情,XML是有节点的,节点有属性,json数据的键以前有-的,就是属性,可是xmltodict识别的属性是@,因此要把-替换为@(就是这里找了很久) "and": { "many": [ "elements", "more elements" ] }, "plus": { "-a": "complex", "#text": " element as well " } } }
示例代码json
dictdata={ "mydocument": { "@has": "an attribute", "and": { "many": [ "elements", "more elements" ] }, "plus": { "@a": "complex", "#text": "element as well" } } } xmldata=xmltodict.unparse(dictdata,pretty=True)#dict转xml print(xmldata)#解析结果能够复制运行查看,结果是原始数据 new_dictdata=xmltodict.parse(xmldata,process_namespaces = True)#xml转dict print(new_dictdata)#在这里有一个注意事项,new_dictdata的数据格式是<class 'collections.OrderedDict'>,并不直接是dict,须要自行处理 """ 处理方式以下 """ key_dictdata=dict(new_dictdata) value_dictdata=dict(dict(new_dictdata)["mydocument"]) key_dictdata["mydocument"]=value_dictdata print(key_dictdata)
上面就是xml和dict转化,若是须要转化json,内置的json模块就能够完成,可是在自动化测试框架中这样使用比较麻烦,并且复用性很差,封装好以下app
#-*- coding: utf-8 -* #@author 小测试 #@create 2019-10-30 15:46 import xmltodict """ xml和dict转换 """ def dict_xml(dictdata): """ dict转xml dictstr: dict字符串 return: xml字符串 """ xmlstr=xmltodict.unparse(dictdata, pretty=True) return xmlstr def xml_dict(xmldata,moudle): """ xml转dict xmlstr: xml字符串 moudle:根节点 return: dict字符串 """ data=xmltodict.parse(xmldata,process_namespaces = True) dictdata=dict(data) _dictdata=dict(dictdata[moudle]) dictdata[moudle]=_dictdata return dictdata