Python&Selenium 数据驱动测试【unittest+ddt+xml】
一、摘要
本博文将介绍Python和Selenium做自动化测试时,基于unittest框架,借助ddt模块,使用xml文件作为测试输入。
二、xml文件
保存路径:D:\\Programs\\Python\\PythonUnittest\\TestData\\TestData.xml
文件名:TestData.xml
<?xml version = "1.0" encoding = "utf-8"?>
<bookList type = "technology">
<book>
<name>selenium xml datadriven</name>
<author>davieyang</author>
</book>
<book>
<name>selenium excel datadriven</name>
<author>davieyang</author>
</book>
<book>
<name>selenium ddt data list</name>
<author>davieyang</author>
</book>
</bookList>
三、解析XML文件
文件路径:Util\ParseXMLUtil
文件名:ParseXMLUtil
# encoding = utf-8
"""
__title__ = ''
__author__ = 'davieyang'
__mtime__ = '2018/4/21'
"""
from xml.etree import ElementTree class ParseXML(object):
def __init__(self, xmlPath):
self.xmlPath = xmlPath def getRoot(self):
# 打开将要解析的XML文件
tree = ElementTree.parse(self.xmlPath)
# 获取XML文件的根节点对象,然后返回给调用者
return tree.getroot() def findNodeByName(self, parentNode, nodeName):
# 通过节点的名字获取节点对象
nodes = parentNode.findall(nodeName)
return nodes def getNodeofChildText(self, node):
# 获取节点node下所有子节点的节点名作为key,本节点作为value组成的字典对象
childrenTextDict = {i.tag: i.text for i in list(node.iter())[1:]}
# 上面代码等价于
'''
childrenTextDict = {}
for i in list(node.iter())[1:]:
fhildrenTextDict[i.tag] = i.text
'''
return childrenTextDict def getDataFromXml(self):
# 获取XML文档的根节点对象
root = self.getRoot()
# 获取根节点下所有名为book的节点对象
books = self.findNodeByName(root, "book")
dataList = []
# 遍历获取到的所有book节点对象
# 取得需要的测试数据
for book in books:
childrenText = self.getNodeofChildText(book)
dataList.append(childrenText)
return dataList if __name__ == "__main__":
xml = ParseXML(r"F:\seleniumWithPython\TestData\TestData.xml")
datas = xml.getDataFromXml()
for i in datas:
print(i["name"], i["author"])
四、测试脚本
文件可命名为:data_driven_by_xml.py
# encoding = utf-8
"""
__title__ = ''
__author__ = 'davieyang'
__mtime__ = '2018/4/21'
"""
from selenium import webdriver
import unittest
import time
import logging
import traceback
import ddt
from Util.ParseXMLUtil import ParseXML
from selenium.common.exceptions import NoSuchElementException # 初始化日志对象
logging.basicConfig(
# 日志级别
level=logging.INFO,
# 时间、代码所在文件名、代码行号、日志级别名字、日志信息
format='%(asctime)s %(filename)s[line: %(lineno)d] %(levelname)s %(message)s',
# 打印日志的时间
datefmt='%a, %d %b %Y %H:%M:%S',
# 日志文件存放的目录及日志文件名
filename='D:\\Programs\\Python\\PythonUnittest\\Reports\\TestResults.TestResults',
# 打开日志的方式
filemode='w'
) # currentPath = os.path.dirname(os.path.abspath(__file__))
# dataFilePath = os.path.join(currentPath, "TestData.xml")
dataFilePath = "E:\\数据驱动\\TestData.xml"
print(dataFilePath) # 创建ParseXML类实例对象
xml = ParseXML(dataFilePath) @ddt.ddt
class DataDrivenTestByXML(unittest.TestCase): def setUp(self):
self.driver = webdriver.Chrome(executable_path=r"F:\automation\webdriver\chromedriver.exe") @ddt.data(* xml.getDataFromXml())
def test_dataDrivenByXML(self, data):
testData, expectData = data["name"], data["author"]
url = "http://www.baidu.com"
self.driver.get(url)
self.driver.maximize_window()
self.driver.implicitly_wait(10) try:
self.driver.find_element_by_id("kw").send_keys(testData)
self.driver.find_element_by_id("su").click()
time.sleep(3)
self.assertTrue(expectData in self.driver.page_source)
except NoSuchElementException as e:
logging.error(u"查找的页面元素不存在,异常堆栈信息为:" + str(traceback.format_exc()))
except AssertionError as e:
logging.info(u"搜索 ‘%s’,期望 ‘%s’ ,失败" % (testData, expectData))
except Exception as e:
logging.error(u"未知错误,错误信息:" + str(traceback.format_exc()))
else:
logging.info(u"搜索 ‘%s’,期望 ‘%s’ ,通过" % (testData, expectData)) def tearDown(self):
self.driver.quit() if __name__ == "__main__":
unittest.main()
test_dataDrivenByXML
Python&Selenium 数据驱动测试【unittest+ddt+xml】的更多相关文章
- Python&Selenium 数据驱动【unittest+ddt+xml】
一.摘要 本博文将介绍Python和Selenium做自动化测试的时候,基于unittest框架,借助ddt模块使用xml文件作为数据文件作为测试输入 二.xml文件 <?xml version ...
- Python&Selenium 数据驱动【unittest+ddt+json】
一.摘要 本博文将介绍Python和Selenium做自动化测试的时候,基于unittest框架,借助ddt模块使用json文件作为数据文件作为测试输入,最后生成html测试报告 二.json文件 [ ...
- Python&Selenium 数据驱动【unittest+ddt+mysql】
一.摘要 本博文将介绍Python和Selenium做自动化测试的时候,基于unittest框架,借助ddt模块使用mysql数据库为数据源作为测试输入 二.SQL脚本 # encoding crea ...
- Python&Selenium 数据驱动【unittest+ddt】
一.摘要 本博文将介绍Python和Selenium做自动化测试的时候,基于unittest框架,借助ddt实现数据驱动 二.测试代码 # encoding = utf-8 ""& ...
- Python&Selenium 数据驱动【unittest+ddt+Excel】
一.摘要 一般情况下我们为了更好的管理测试数据会选择将测试数据存储在Excel文件当中去,本节内容将展示给读者将测试数据存储在Excel文档中的案例. 二.创建存储测试数据的Excel 创建一个Exc ...
- Python&Selenium 数据驱动【unittest+ddt+json+HTMLTestRunner】
一.摘要 本博文将介绍Python和Selenium做自动化测试的时候,基于unittest框架,借助ddt模块使用json文件作为数据文件作为测试输入,最后借助著名的HTMLTestRunner.p ...
- python for selenium 数据驱动测试
# -*- coding:utf-8 -*- """ 数据驱动测试,从 csv 文件中读取数据 """ from selenium impo ...
- 【Python + Selenium】之unittest测试用例满足条件,进行跳过测试Skip
直接上代码: __author__ = 'zc' import unittest class demoSkipTest(unittest.TestCase): a = 70 b = 50 print( ...
- Python+selenium之带unittest的脚本分析
from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.c ...
随机推荐
- 如何实现LRU缓存
大家好,我是程序员学长,今天我们来聊一聊LRU缓存问题. Tips: LRU在计算机软件中无处不在,希望大家一定要了解透彻. 问题描述 设计LRU(最近最少使用)缓存结构,该结构在构造时确定大小,假设 ...
- Linux高级之语句表达式
表达式 表达式和语句是 C 语言中的基础概念.什么是表达式呢?表达式就是由一系列操作符和操作数构成的式子.操作符可以是 C 语言标准规定的各种算术运算符.逻辑运算符.赋值运算符.比较运算符等.操作数可 ...
- .Net性能调优-ArrayPool
定义 高性能托管数组缓冲池,可重复使用,用租用空间的方式代替重新分配数组空间的行为 好处 可以在频繁创建和销毁数组的情况下提高性能,减少垃圾回收器的压力 使用 获取缓冲池实例:Create/Share ...
- project read error(项目读取错误)
maven的pom文件出现project read error 1,打开电脑cmd操作界面,在cmd界面找到打开出错项目的文件夹; 比如我的项目文件夹在D:\>eclipse-jee-file\ ...
- 现在互联网好多bug 想到都烦
我接触计算机十多年了,只是在15年前发布一篇给计算机有关的技术文章,后来就在也不发表了,今天在163博客写个备录,,写到一半结果误 关了,,浪费了好几个小时,还以为像以前那样,又要重写,,这也是我不爱 ...
- Apollo 配置中心详细教程
一.简介 Apollo(阿波罗)是携程框架部门研发的分布式配置中心,能够集中化管理应用不同环境.不同集群的配置,配置修改后能够实时推送到应用端,并且具备规范的权限.流程治理等特性,适用于微服务配置管理 ...
- Sentry 监控 - Dashboards 事件数据可视化大屏
系列 1 分钟快速使用 Docker 上手最新版 Sentry-CLI - 创建版本 快速使用 Docker 上手 Sentry-CLI - 30 秒上手 Source Maps Sentry For ...
- 论文解读(PCL)《Prototypical Contrastive Learning of Unsupervised Representations》
论文标题:Prototypical Contrastive Learning of Unsupervised Representations 论文方向:图像领域,提出原型对比学习,效果远超MoCo和S ...
- 解决idea debugger Frames are not available
现象:idea2017.3.7 sofaboot项目debugger报错 Frames are not available. 之前好用,不知道为啥突然不能debugger,run能正常运行代码.如下图 ...
- jquery .play()报错is not a function
报错原因:play()方法属于DOM对象方法,$('#audio')为jquery对象解决办法:将jquery对象转换为DOM对象首先打印jquery对象$('#audio') 两种转换方式将一个jQ ...