python 通过xml获取测试节点和属性

写在前面:通过xml获取测试数据,主要是为了使数据参数化。测试脚本和测试数据分离,使得脚本清晰容易维护,方便排查问题。
XML:可扩展的标记语言,是一种用于标记电子文件使其具有结构行的标记语言。

自动化测试中的使用场景:
1. 经常变动的测试数据;
2. 数据量大,不方便放在脚本中;
3. 数据作用于多个地方;
4. 相同测试用例,可以使用不同的数据;
5. 例:不稳定,后续改动较多功能;容易出错的功能

XML特征

• 具有自我描述性,本身不做任何事情
• 声明部分 <?xml version="1.0" encoding="UTF-8"?>
• 有开就有闭,成对出现 <data></data>
• 可以有属性值 <data type='demo'></data>
• xml用于传输数据 <data type='demo'> message </data>
• 可以嵌入子标签 <data type='demo'><text>message</text></data>

python获取xml文件方法集合
  1. 引入模块处理xml文件
    from xml.dom.minidom import parse

  2. 打开xml文档,
    DOMTree = xml.dom.minidom.parse(data_path)

  3. 根据xml文档,得到文档元素的对象
    data = DOMTree.documentElement

  4. 获取节点列表
    nodelist = data.getElementsByTagName(大类名称)

  5. 获取第一个节点的子节点列表
    childlist = nodelist[0].childNodes

  6. 获取XML节点属性值
    node.getAttribute(AttributeName)

  7. 获取XML节点对象集合
    node.getElementsByTagName(TagName)

  8. 返回子节点列表
    node.childNodes

  9. 获取XML节点值
    node.childNodes[index].nodeValue

  10. 访问第一个节点
    node.firstChild ,等价于pagexml.childNodes[0]

  11. 访问元素属性 例如:
    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 
  • 7
    点赞
  • 33
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值