WebUI自动化框架 - 数据驱动(ddt、paramunittest)

本文详细介绍了数据驱动测试的概念和重要性,并提供了使用unittest结合ddt以及paramunittest进行数据驱动测试的步骤和示例。通过json、YAML和Excel文件作为数据源,展示了如何在Python自动化测试中实现数据驱动。
摘要由CSDN通过智能技术生成

数据驱动

  • 数据驱动测试时自动化测试中的主流设计模式之一,属于中级自动化测试工程师必备知识,必须深入掌握数据驱动测试的工作原理和实现方法

概述:

  • 所谓数据驱动,时指相同的测试脚本使用不同的测试数据来执行,测试数据与测试行为完全分离,这样的测试脚本设计模式称为数据驱动。例如,测试网站的登录功能,自动化测试工程师想验证不同的用户名和密码在网站登录时对系统影响结果,就可以使用数据驱动模式来进行自动化模式

实现数据驱动测试步骤如下:

  • 编写测试脚本,脚本需要支持从程序对象、文件或数据库读入测试数据
  • 将测试脚本使用的测试数据存入程序对象、文件或数据库等外部介质中
  • 运行脚本过程中,循环调用存储在外部介质中的测试数据
  • 验证所有的测试结果是否符合预期结果

使用 unittest 结合 ddt 进行数据驱动

使用 unittest 单元测试框架进行数据驱动的话需要引入 ddt 模块

import ddt

测试用例逻辑

  1. 打开百度首页

  2. 在搜索狂中输入一个关键词

  3. 单击搜索按钮

  4. 验证搜索结果页面是否包含预期关键字符串

unittest 结合 dtt 代码示例

from selenium import webdriver
from selenium.common.exceptions import NoSuchElementException
import unittest
import ddt
import time


@ddt.ddt
class TestDemo(unittest.TestCase):

    def setUp(self) -> None:
        self.driver = webdriver.Chrome()
        self.driver.get('https://www.baidu.com/')
        self.driver.maximize_window()
        self.driver.implicitly_wait(30)

    @ddt.data(
        ["大话西游之月光宝盒", "周星驰"],
        ["飞驰人生", "沈腾"],
        ["夏洛特烦恼", "马丽"]
    )
    @ddt.unpack		# 先不加unpack试试效果
    
    
    
    def test_search(self, keyword, expected):
        try:
            self.driver.find_element_by_id('kw').send_keys(keyword)
            self.driver.find_element_by_id('su').click()
            time.sleep(3)
            self.assertTrue(expected in self.driver.page_source)
        except NoSuchElementException as e:
            print("查找的页面元素不存在,Error:{}".format(e))
        except AssertionError as e:
            print("断言错误,搜索:{},期望:{}".format(keyword, expected))
        except Exception as e:
            print(e)

    def tearDown(self) -> None:
        time.sleep(3)
        self.driver.quit()


if __name__ == '__main__':
    unittest.main()

要点:

  • 必须引入 ddt 模块
  • 需要声明使用 @ddt.ddt
  • 在测试方法前使用 @ddt.data()添加所需要的数据(可迭代对象),多组数据间以逗号“,”隔开,以此判断执行的次数
  • 如果每组测试数据存在多个测试数据,需要将每组数据存于列表中
  • 每组数据中的数据与测试方法中定义的形参个数及顺序一一对应
  • 使用 unpack 进行解包操作

使用json数据文件进行数据驱动

data.json文件

[
  "邓肯||蒂姆",
  "詹姆斯||勒布朗",
  "杜兰特||凯文",
  "乔丹||迈克尔",
  "库里||史蒂芬"
]

sample.py文件

from selenium import webdriver
from selenium.common.exceptions import NoSuchElementException
import HTMLTestRunner
import unittest
import ddt
import logging
import time
import os


logging.basicConfig(
    level=logging.INFO,
    format="%(asctime)s - %(filename)s - %(levelname)s - %(message)s",
    datefmt='%a, %Y - %m - %d %H: %M: %S',
)


@ddt.ddt
class TestDemo(unittest.TestCase):

    @classmethod
    def setUpClass(cls) -> None:
        logging.info("测试开始啦")

    def setUp(self) -> None:
        self.driver = webdriver.Chrome()
        self.driver.get('https://www.baidu.com/')
        self.driver.maximize_window
  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值