Python&Selenium 数据驱动【unittest+ddt+Excel】

davieyang 2018-12-31 原文

Python&Selenium 数据驱动【unittest+ddt+Excel】

一、摘要

一般情况下我们为了更好的管理测试数据会选择将测试数据存储在Excel文件当中去,本节内容将展示给读者将测试数据存储在Excel文档中的案例。

二、创建存储测试数据的Excel

创建一个Excel文件TestData.xlsx,并将如下表格数据写入到Excel文件中,作为测试数据。

序号 搜索词 期望结果
1 北京 北京
2 上海 上海
3 广州 广州

 

 

 

 

 

三、封装解析Excel文件模块

要解析Excel文件,需要先给Python环境安装openpyxl模块,启动命令行,输入命令pip install openpyxl并回车

在工程中创建ParseExcelUtil.py文件,并写入如下代码:

# encoding = utf-8
from openpyxl import load_workbook


class ParseExcel(object):

    def __init__(self, excelPath, sheetName):
        self.wb = load_workbook(excelPath)
        #  self.sheet = self.lwb.get_sheet_by_name(sheetName)
        self.sheet = self.wb[sheetName]
        self.maxRowNum = self.sheet.max_row

    def getDatasFromSheet(self):
        dataList = []
        for line in list(self.sheet.rows)[1:]:
            tmpList = []
            tmpList.append(line[1].value)
            tmpList.append(line[2].value)
            dataList.append(tmpList)
        return dataList


if __name__ == '__main__':
    excelPath = u'D:\\Programs\\Python\\PythonUnittest\\TestData\\测试数据.xlsx'
    sheetName = u'搜索数据表'
    pe = ParseExcel(excelPath, sheetName)
    for i in pe.getDatasFromSheet():
        print(i[0], i[1])

代码解析:

封装了getDatasFromSheet方法,该方法将解析Excel,并将数据存到List中去,后续的测试代码调用的实际上是从List里边获取数据。

四、测试代码

# encoding = utf-8
from selenium import webdriver
import unittest
import time
import traceback
import ddt
import logging
from Util.ParseExcelUtil import ParseExcel
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'
)

excelPath = u"D:\\Programs\\Python\\PythonUnittest\\TestData\\测试数据.xlsx"
sheetName = u"搜索数据表"
excel = ParseExcel(excelPath, sheetName)


@ddt.ddt
class TestDataDrivenByExcel(unittest.TestCase):
    def setUp(self):
        self.driver = webdriver.Chrome()

    @ddt.data( * excel.getDatasFromSheet())
    def test_dataDrivenByExcel(self, data):
        testData, expectData = tuple(data)
        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()

 

发表于 2018-12-31 21:43 davieyang 阅读() 评论() 编辑 收藏

 

版权声明:本文为davieyang原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/davieyang/p/10203376.html

Python&Selenium 数据驱动【unittest+ddt+Excel】的更多相关文章

  1. python IDE–pycharm安装及使用

      官网 : http://www.jetbrains.com/pycharm/ 下载community版本, […]...

  2. Python3 与 C# 基础语法对比(String专栏)

    Python3 与 C# 基础语法对比:https://www.cnblogs.com/dotnetcrazy […]...

  3. python变量类型之字符串

    python常用数据类型:                 数字(整数int,浮点数float)       […]...

  4. numpy学习笔记 – numpy数组的常见用法

    # -*- coding: utf-8 -*- “”” 主要记录代码,相关 […]...

  5. 深入flask中的request

    缘起   在使用flask的时候一直比较纳闷request是什么原理,他是如何保证多线程情况下对不同请求参数的 […]...

  6. 票房和口碑称霸国庆档,用 Python 爬取猫眼评论区看看电影《我和我的家乡》到底有多牛

    今年的国庆档电影市场的表现还是比较强势的,两名主力《我和我的家乡》和《姜子牙》起到了很好的带头作用。 《姜子牙 […]...

  7. Python selenium —— selenium与自动化测试成神之路

    From: https://blog.csdn.net/huilan_same/article/details […]...

  8. python实现时间o(1)的最小栈

    这是毕业校招二面时遇到的手写编程题,当时刚刚开始学习python,整个栈写下来也是费了不少时间。毕竟语言只是工 […]...

随机推荐

  1. 驱动程序实例(一):LED设备驱动程序( platform + cdev)

    本文结合之前对Linux内核的platform总线 ,以及对字符设备的cdev接口的分析,本文将编写基于pla […]...

  2. 关于本地服务器localhost请求Forbidden解决办法

    不知怎么的,今天下午,使用Telnet 访问 我电脑的本地Apache服务器时,使用GET方法HTTP请求本地 […]...

  3. Java虚拟机系列——检视阅读

    Java虚拟机系列——检视阅读 参考 java虚拟机系列 入门掌握JVM所有知识点 2020重新出发,JAVA […]...

  4. 6个冷门但实用的pandas知识点

    1 简介   pandas作为开展数据分析的利器,蕴含了与数据处理相关的丰富多样的API,使得我们可以灵活方便 […]...

  5. 如何用Java8 Stream API找到心仪的女朋友

    传统的的Java 集合操作是有些啰嗦的,当我们需要对结合元素进行过滤,排序等操作的时候,通常需要写好几行代码以 […]...

  6. 冒泡排序(BubbleSort)

    介绍:   冒泡排序是一种最基础的交换排序(两两比较待排序的关键字,交换不满足次序要求的那对数,直到整个表都满 […]...

  7. 手把手教你安装mac版hadoop2.7.3教程 – 好吃懒做的兰大大

    一.准备教程   1.jdk:版本在1.7.x以上就可以(因为hadoop2.x以上只支持1.7.x以上的jd […]...

  8. SQL之trigger(触发器)

    先来看一小段程序 有如下三张表: 帐户(编号,姓名,余额,建立日期,储蓄所编号) 储蓄所(编号,名称,地址,人 […]...

展开目录

目录导航