Python解析XML获取测试节点与属性详解
本文介绍如何利用Python的xml.dom.minidom模块解析XML文件,实现测试脚本与数据的分离。通过具体代码示例,演示如何获取XML节点列表、访问节点属性及提取节点值,适用于自动化测试中频繁变动或大量数据的参数化管理场景。
引言:利用XML获取测试数据的核心目的在于实现数据的参数化。将测试脚本与测试数据分离,能够显著提升脚本的可读性与可维护性,同时也便于问题的排查与定位。
XML(可扩展标记语言)是一种用于定义电子文件结构的标记语言,旨在赋予电子文件清晰的结构化特征。
在自动化测试领域,XML主要应用于以下场景:
1. 测试数据频繁变动的情况;
2. 数据量庞大,难以直接嵌入脚本中;
3. 同一组数据需要在多个测试环节中使用;
4. 相同的测试用例需要适配不同的测试数据;
5. 针对功能不稳定、后续改动较多或容易出错的功能模块。
XML的主要特征包括:
• 具备自我描述性,XML本身不执行任何操作;
• 包含声明部分,格式为 <?xml version="1.0" encoding="UTF-8"?>;
• 标签必须成对出现,即有开始标签必有结束标签,例如 <data></data>;
• 支持属性值定义,例如 <data type='demo'></data>;
• 用于数据传输,例如 <data type='demo'> message </data>;
• 支持嵌套子标签,例如 <data type='demo'><text>message</text></data>。
以下是Python中获取XML文件内容的方法集合:
首先,引入处理XML文件的模块。
from xml.dom.minidom import parse
接着,打开XML文档。
DOMTree = xml.dom.minidom.parse(data_path)
根据XML文档内容,获取文档元素的对象。
data = DOMTree.documentElement
获取指定的节点列表。
nodelist = data.getElementsByTagName(大类名称)
获取第一个节点的子节点列表。
childlist = nodelist[0].childNodes
获取XML节点的属性值。
node.getAttribute(AttributeName)
获取XML节点的对象集合。
node.getElementsByTagName(TagName)
返回子节点列表。
node.childNodes
获取XML节点的具体值。
node.childNodes[index].nodeValue
访问第一个节点。
node.firstChild ,等价于pagexml.childNodes[0]
访问元素属性,具体示例如下:
Node.attributes["id"] a.name #就是上面的 "id" a.value #属性的值
以下是具体的Demo内容:
方法调用示例。
#方法调用
text = get_data_vaule('account','type','createText','text')
print text
#结果
test data
对应的XML文件结构。
<?xml version="1.0" encoding="UTF-8"?>
<data>
<account type='createText'>
<text>test data</text>
</account>
<account type='email'>
<username>11111@qq.com</username>
<password>11111111</password>
</account>
</data>
上述方法对应的数据获取格式说明:style 代表XML中的大类名称;typename 代表细分属性名;typevalue 代表细分属性的具体值;valuename 代表XML文件中需要获取值的标签名(tag)。
若需从上述XML文件中获取特定数据,
例如获取“test data”的值,参数设置为 style = data,typename = type,typevalue = createText,valuename = text;若需获取“11111@qq.com”的值,则参数设置为 style = data,typename = type,typevalue = email,valuename = username。
相关方法代码文件。
#!/usr/bin/python
# -*- coding: UTF-8 -*-
import unittest
import os
import time
from xml.dom.minidom import parse
import xml.dom.minidom
#获取xml文件地址
path = os.path.abspath('.')
data_path = os.path.join(path,'features/data/data.xml') #获取xml文件地址
DOMTree = xml.dom.minidom.parse(data_path)
data = DOMTree.documentElement
def get_attrvalue(node, attrname):
return node.getAttribute(attrname)
# style = xml中的大类 ; typename = 细分属性; typevalue = 细分属性的值; valuename = xml文件,需要获取的值的tag;
def get_data_vaule(style, typename, typevalue, valuename):
nodelist = data.getElementsByTagName(style)
for node in nodelist:
if typevalue == node.getAttribute(typename):
node_name = node.getElementsByTagName(valuename)
value = node_name[0].childNodes[0].nodeValue
print value
return value
return
以上关于Python通过XML获取测试节点和属性的实例分享完毕,希望能为读者提供参考,并欢迎大家继续支持本站。
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













