前言
在接口测试中数据格式转换是最常见的操作,用python进行接口测试最常见的格式转换就是XML,JSON和python字典之间的转换,因此熟练并掌握三者之间的转换是很必要的。
通过xmltodict和json库,可以将xml和json格式的数据转换成我们熟悉的python字典类型,这样能够更高效的操作处理xml,json数据,而不是使用xml.dom来处理xml数据,从而提高测试效率。
一 XML与Dict的相互转换
xml与dict的转换可以由第三方库xmltodict来实现,如果没有安装该库需要先安装,如下
pip install xmltodict
1. XML转Dict
利用xmltodict.parse()函数可以将XML转Dict,如果需要去掉xml扩展体可以加上disable_entities参数,并设置为True。如下
import xmltodict
#1.xml转dict
xml_data = ''
with open('../练习文件/PeopleMessage.XML', 'r', encoding='utf-8') as xml_file:
xml_data = xml_file.read()
print(xml_data)
print('分割线'.center(50, '*'))
#用xmltodict.parse()将xml转换成dict
#disable_entities参数为True可以去掉xml扩展体
dict_data = xmltodict.parse(xml_data, disable_entities=True)
print(type(dict_data))
print(dict_data)
转换结果
<?xml version="1.0" encoding="utf-8"?>
<message>
<name>张三</name>
<age>24</age>
<job>法外狂徒</job>
<adress>
<city>广东</city>
<load>广东</load>
</adress>
</message>
***********************分割线************************
<class 'dict'>
{'message': {'name': '张三', 'age': '24', 'job': '法外狂徒', 'adress': {'city': '广东', 'load': '广东'}}}
2. Dict转XML
利用xmltodict.unparse()可以将Dict转换成xml,如下
#2.dict转xml: xmltodict.unparse()
dict_data1 = {'message': {'name': '张三', 'age': '24', 'job': '法外狂徒', 'adress': {'city': '广东', 'load': '广东'}}}
print(dict_data1)
print('分割线'.center(50, '*'))
#dict转xml
#pretty美化xml格式
xml_data1 = xmltodict.unparse(dict_data1, pretty=True)
print(xml_data1)
结果如下
{'message': {'name': '张三', 'age': '24', 'job': '法外狂徒', 'adress': {'city': '广东', 'load': '广东'}}}
***********************分割线************************
<?xml version="1.0" encoding="utf-8"?>
<message>
<name>张三</name>
<age>24</age>
<job>法外狂徒</job>
<adress>
<city>广东</city>
<load>广东</load>
</adress>
</message>
二 JSON与Dict的相互转换
json与Dict之间的转换可以利用python自带的内置库json来实现,如下。
1. JSON转Dict
利用json.loads()可以实现JSON转Dict
#3.json转Dict:json.loads()
json_data = ''
with open('../练习文件/jsonpath.json', 'r', encoding='utf-8') as f:
json_data = f.read()
print(json_data)
print('分割线'.center(50, '*'))
json_to_dict = json.loads(json_data)
print(type(json_to_dict))
print(json_to_dict)
转换效果
{
"id": 11,
"name": "Krishna Rungta",
"username": "Bret",
"email": "Sincere@april.biz",
"address": {
"street": "Kulas Light",
"suite": "Apt. 556",
"city": "Gwenborough",
"zipcode": "92998-3874",
"geo": {
"lat": "-37.3159",
"lng": "81.1496"
}
},
"phone": "1-770-736-8031 x56442",
"website": "hildegard.org",
"company": {
"name": "Romaguera-Crona",
"catchPhrase": "Multi-layered client-server neural-net",
"bs": "harness real-time e-markets"
}
}
***********************分割线************************
<class 'dict'>
{'id': 11, 'name': 'Krishna Rungta', 'username': 'Bret', 'email': 'Sincere@april.biz', 'address': {'street': 'Kulas Light', 'suite': 'Apt. 556', 'city': 'Gwenborough', 'zipcode': '92998-3874', 'geo': {'lat': '-37.3159', 'lng': '81.1496'}}, 'phone': '1-770-736-8031 x56442', 'website': 'hildegard.org', 'company': {'name': 'Romaguera-Crona', 'catchPhrase': 'Multi-layered client-server neural-net', 'bs': 'harness real-time e-markets'}}
1. Dict转JSON
利用json.dumps()可以实现Dict转JSON
#4.Dict转json:json.dumps()
Dict_data = {'id': 11, 'name': 'Krishna Rungta', 'username': 'Bret', 'email': 'Sincere@april.biz', 'address': {'street': 'Kulas Light', 'suite': 'Apt. 556', 'city': 'Gwenborough', 'zipcode': '92998-3874', 'geo': {'lat': '-37.3159', 'lng': '81.1496'}}, 'phone': '1-770-736-8031 x56442', 'website': 'hildegard.org', 'company': {'name': 'Romaguera-Crona', 'catchPhrase': 'Multi-layered client-server neural-net', 'bs': 'harness real-time e-markets'}}
print(type(Dict_data))
print(Dict_data)
print('分割线'.center(50, '*'))
Dict_to_JSON = json.dumps(Dict_data)
print(type(Dict_to_JSON))
print(Dict_to_JSON)
转换结果
<class 'dict'>
{'id': 11, 'name': 'Krishna Rungta', 'username': 'Bret', 'email': 'Sincere@april.biz', 'address': {'street': 'Kulas Light', 'suite': 'Apt. 556', 'city': 'Gwenborough', 'zipcode': '92998-3874', 'geo': {'lat': '-37.3159', 'lng': '81.1496'}}, 'phone': '1-770-736-8031 x56442', 'website': 'hildegard.org', 'company': {'name': 'Romaguera-Crona', 'catchPhrase': 'Multi-layered client-server neural-net', 'bs': 'harness real-time e-markets'}}
***********************分割线************************
<class 'str'>
{"id": 11, "name": "Krishna Rungta", "username": "Bret", "email": "Sincere@april.biz", "address": {"street": "Kulas Light", "suite": "Apt. 556", "city": "Gwenborough", "zipcode": "92998-3874", "geo": {"lat": "-37.3159", "lng": "81.1496"}}, "phone": "1-770-736-8031 x56442", "website": "hildegard.org", "company": {"name": "Romaguera-Crona", "catchPhrase": "Multi-layered client-server neural-net", "bs": "harness real-time e-markets"}}
三 XML与JSON的相互转换
在python中目前还没有什么方法可以直接把XML转换成JSON(不太确定)的方法,不过在上面已经知道了XML转Dict,Dict转JSON。那么我们就可以先把XML转换成Dict,再把Dict转换成JSON。或者先把JSON转换成Dict,再把Dict转换成XML,即可完成XML与JSON的相互转换。