先创建data.xml文件,用于存储接口数据,内容如下:
<?xml version="1.0" encoding="UTF-8"?> <impldata> <login impl="/user/login"> <data name="username">codeali</data> <data name="password">123456</data> <data name="expectres">succeed</data> </login> <devadd impl="/device/add"> <data name="deviceid">1380001246</data> <data name="expectres">succeed</data> </devadd> </impldata>
创建dataparse.py文件,内容如下:
import logging import collections from xml.dom.minidom import parse from lib import pathdeal from lib import log def getDataFromXml(xmlFileName, tagname): '''读取测试数据,并进行解析,以有序字典形式返回''' log.initLogging('logs') dicData = collections.OrderedDict() if xmlFileName.endswith('.xml'): xmlFile = pathdeal.getSpecialFile(xmlFileName) if(xmlFile): DOMTree = parse(xmlFile) #得到整个DOM文档树 root = DOMTree.documentElement #得到根节点 impltag = root.getElementsByTagName(tagname) #获取标签,返回list sub_elements = impltag[0].getElementsByTagName("data") #只取第一个tag的子元素,重复tag无效 if(len(sub_elements) > 0): for i in range(len(sub_elements)): try: key = sub_elements[i].getAttribute("name") value = sub_elements[i].firstChild.data except AttributeError: value = "" dicData[key] = value return dicData else: logging.info('Not found the data file') return False else: logging.info('The data file is not xml format') return False if __name__ == '__main__': print(getDataFromXml('data.xml', 'login'))
执行结果如下:
说明:
1. 每个接口的数据放在一个标签内,一个接口数据一个标签名,便于维护,标签名最好不要重复,阿狸只取了第一个标签的子元素,没考虑标签名重复的情况。
2. 根据xml文件名和接口标签名进行数据解析,将解析到的数据以有序字典形式返回。
3. 标签内,name="expectres",用于结果断言,并非是接口请求参数数据。