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


Posted in Python onMarch 31, 2018

写在前面:通过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文件方法集合

引入模块处理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获取测试节点和属性的实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python下的subprocess模块的入门指引
Apr 16 Python
在Django的视图中使用form对象的方法
Jul 18 Python
Python程序中的观察者模式结构编写示例
May 27 Python
非递归的输出1-N的全排列实例(推荐)
Apr 11 Python
python3.4用循环往mysql5.7中写数据并输出的实现方法
Jun 20 Python
python3利用venv配置虚拟环境及过程中的小问题小结
Aug 01 Python
python批量修改文件夹及其子文件夹下的文件内容
Mar 15 Python
python ctypes库2_指定参数类型和返回类型详解
Nov 19 Python
python GUI库图形界面开发之PyQt5简单绘图板实例与代码分析
Mar 08 Python
python右对齐的实例方法
Jul 05 Python
python基于opencv实现人脸识别
Jan 04 Python
numba提升python运行速度的实例方法
Jan 25 Python
Python Xml文件添加字节属性的方法
Mar 31 #Python
Python简单生成随机数的方法示例
Mar 31 #Python
用python 批量更改图像尺寸到统一大小的方法
Mar 31 #Python
使用Python读取安卓手机的屏幕分辨率方法
Mar 31 #Python
python获取网页中所有图片并筛选指定分辨率的方法
Mar 31 #Python
python如何将图片转换为字符图片
Aug 19 #Python
Pyinstaller将py打包成exe的实例
Mar 31 #Python
You might like
set_include_path在win和linux下的区别
2008/01/10 PHP
php 数组排序 array_multisort与uasort的区别
2011/03/24 PHP
PHP中将字符串转化为整数(int) intval() printf() 性能测试
2020/03/20 PHP
PHP对文件夹递归执行chmod命令的方法
2015/06/19 PHP
Yii2 rbac权限控制之rule教程详解
2016/06/23 PHP
php实现基于openssl的加密解密方法
2016/09/30 PHP
php表单文件iframe异步上传实例讲解
2017/07/26 PHP
利用laravel+ajax实现文件上传功能方法示例
2017/08/13 PHP
PHP下 Mongodb 连接远程数据库的实例代码
2017/08/30 PHP
在PHP中输出JS语句以及乱码问题的解决方案
2019/02/13 PHP
Extjs学习笔记之八 继承和事件基础
2010/01/08 Javascript
JavaScript 滚轮事件使用说明
2010/03/07 Javascript
javascript中直接引用Microsoft的COM生成Word
2014/01/20 Javascript
js实现向右横向滑出的二级菜单效果
2015/08/27 Javascript
jQuery UI Bootstrap是什么?
2016/06/17 Javascript
javascript简单实现等比例缩小图片的方法
2016/07/27 Javascript
JQuery 又谈ajax局部刷新
2017/11/27 jQuery
Python多线程实现同步的四种方式
2017/05/02 Python
python 定义给定初值或长度的list方法
2018/06/23 Python
pandas的resample重采样的使用
2020/04/24 Python
python如何利用paramiko执行服务器命令
2020/11/07 Python
Django websocket原理及功能实现代码
2020/11/14 Python
基于HTML5新特性Mutation Observer实现编辑器的撤销和回退操作
2016/01/11 HTML / CSS
英国家庭珠宝商:T. H. Baker
2018/02/08 全球购物
台湾良兴购物网:EcLife
2019/12/01 全球购物
初始化了一个没有run()方法的线程类,是否会出错?
2014/03/27 面试题
学校后勤人员职责
2013/12/27 职场文书
高中体育教学反思
2014/01/29 职场文书
承诺书格式
2014/06/03 职场文书
销售队伍口号
2014/06/11 职场文书
学前教育专业求职信
2014/09/02 职场文书
邮政竞聘演讲稿
2014/09/03 职场文书
2015公务员试用期工作总结
2014/12/12 职场文书
个人优缺点总结
2015/02/28 职场文书
Python Socket编程详解
2021/04/25 Python
React Fragment介绍与使用详解
2021/11/11 Javascript