数据驱动_xml的实践
在自动化测试中,也可以把数据到 xml 文件中,这样应用到的数据直接读取xml 文件中的内容
1.xml文件的读取
在这里读取 xml 使用标准库 xml.dom.minidom,通过 document 的方式读取 xml 文件的内容,在这里创建 sina.xml 文件,sina.xml 文件的内容为:
xml version="1.0" encoding="utf-8"?>
<DataDriven>
<url>http://mail.sina.com.cn/</url>
<errorMsg emailNull=”请输入邮箱名“ emailFormat="您输入的邮箱名格式不正确"></errorMsg>
</DataDriven>
xml(二):
<?xml version="1.0" encoding="utf-8" ?>
<DataDriven>
<yan>小超你好</yan>
<admin>username</admin>
<xiaochao nick = "小超" age="18" address="成都"></xiaochao>
</DataDriven>
源码:
import xml.dom.minidom
import os
def getXml(value = None):
'''获取单节点的数据内容'''
xmlFile = xml.dom.minidom.parse('data.xml')
db = xmlFile.documentElement
itemList = db.getElementsByTagName(value)
item = itemList[0]
return item.firstChild.data
print(getXml('yan'))
def getUser(parent = None,child = None):
'''获取多节点的数据内容'''
xmlFile = xml.dom.minidom.parse('data.xml')
db = xmlFile.documentElement
itemList = db.getElementsByTagName(parent)
item = itemList[0]
return item.getAttribute(child)
print(getUser('xiaochao','nick'))
下来就实现读取 xml 文件中 url 节点中的内容和 errorMsg 节点中子节点中的内容,见实现的代码:
import xml.dom.minidom
def getXmlData(value):
'''
获取 xml 单节点中的数据
:parameter value:xml 文件中单节点的名称
'''
dom = xml.dom.minidom.parse('sina.xml')
db = dom.documentElement
name = db.getElementsByTagName(value)
nameValue = name[0]
return nameValue.firstChild.data
def getXmlUser(parent, child):
'''
获取 xml 子节点中的数据
:parameter parent:xml 文件中父节点的名称
:parameter child:xml 文件中子节点的名称
'''
dom = xml.dom.minidom.parse('sina.xml')
db = dom.documentElement
itemlist = db.getElementsByTagName(parent)
item = itemlist[0]
return item.getAttribute(child)
2.xml在自动化测试中的实践
在这里依然以新浪邮箱登录为案例,测试当登录邮箱名为空和登录的时候填写的邮箱格式不正确的时候返回的错误提示信息,把测试中使用到的数据都分离到 xml 文件,见实现的源码:
import xml.dom.minidom
import unittest
from selenium import webdriver
import time as t
def getXmlData(value):
'''
获取 xml 单节点中的数据
:parameter value:xml 文件中单节点的名称
'''
dom = xml.dom.minidom.parse('sina.xml')
db = dom.documentElement
name = db.getElementsByTagName(value)
nameValue = name[0]
return nameValue.firstChild.data
def getXmlUser(parent, child):
'''
获取 xml 子节点中的数据
:parameter parent:xml 文件中父节点的名称
:parameter child:xml 文件中子节点的名称
'''
dom = xml.dom.minidom.parse('sina.xml')
db = dom.documentElement
itemlist = db.getElementsByTagName(parent)
item = itemlist[0]
return item.getAttribute(child)
class SinaTest(unittest.TestCase):
def setUp(self):
self.driver=webdriver.Firefox()
self.driver.maximize_window()
self.driver.get(getXmlData('url'))
self.driver.implicitly_wait(30)
def tearDown(self):
self.driver.quit()
def login(self,username,password):
t.sleep(2)
#邮箱账号输入框
self.driver.find_element_by_id('freename').send_keys(username)
t.sleep(2)
self.driver.find_element_by_id('freepassword').send_keys(password)
t.sleep(2)
self.driver.find_element_by_link_text('登录').click()
@property
def getLoginError(self):
'''返回点击登录后的错误提示信息'''
t.sleep(2)
loginError=self.driver.find_element_by_xpath('/html/body/div[1]/div/div
[2]/div/div/div[4]/div[1]/div[1]/div[1]/span[1]')
return loginError.text
def test_sina_login_emailNull(self):
'''新浪邮箱登录:登录账号邮箱为空验证'''
self.login('','')
self.assertEqual(self.getLoginError,getXmlUser('errorMsg','emailNull'))
def test_sina_login_emailFormat(self):
'''新浪邮箱登录:登录账号邮箱格式填写错误验证'''
self.login('wuya1303','adminasd')
self.assertEqual(self.getLoginError,getXmlUser('errorMsg','emailFormat'
))
if __name__ == '__main__':
unittest.main(verbosity=2)
注解:在上面的测试代码中,把数据分离到 xml 文件后,登录的测试用例中不管是邮箱为空
还是邮箱格式错误,直接从 xml 文件中读取数据与实际测试获取的数据进行断言比较,数
据分离到 xml 后,即使错误提示信息进行了优化也可以直接在 xml 文件中修改。

浙公网安备 33010602011771号