python中的ddt方法针对不同类型数据的解析和使用【参数化】

python中的ddt方法针对不同类型数据的解析和使用

目录

python中的ddt方法针对不同类型数据的解析和使用

一、安装ddt

二、ddt的使用

三、不同数据类型ddt的使用

1.一个参数,数据类型是数组时,

2.两个参数,数据类型是列表时【多个参数时】

3.数据存储在txt文件时【多参数时】

4. 测试数据存储在yaml文件中时


一、安装ddt

pip install ddt

二、ddt的使用

1.测试数据为多个字典的list类型

2.测试类前加修饰@ddt.ddt

3.用例前加修饰@ddt.data() 或 @ddt.file_data()

4.运行后测试会自动加载成三个单独的用例

注意:@data装饰符可以把参数当成测试数据,参数可以是单个值、列表、元祖、字典,对于列表和元祖需要使用

           @unpack装饰符把元祖和列表解析成多个参数。

总结:【引入的装饰器@ddt;导入数据@data;拆分数据@unpack;导入外部数据@file_data】

 

三、不同数据类型ddt的使用

1.一个参数,数据类型是数组时,

数据存储为:("6666","8888")

此时数据解析@data("6666","8888")

例子

# 导入unittest包
import unittest

from ddt import ddt, data, unpack, file_data

# unpack解包
from selenium import webdriver
from time import sleep


@ddt
class UnitForTest(unittest.TestCase):

    # 前置条件
    def setUp(self) -> None:
        print("setup")
        self.driver = webdriver.Chrome()
        self.driver.get("http://39.98.138.157/shopxo/index.php?s=/index/user/logininfo.html")
        self.driver.implicitly_wait(10)

    @data("6666", "8888")
    # @data(["666666", "123456"], ["555555", "123456"])
    # @unpack  # 解包一般两个参数时使用
    def test_3(self, username):
        print("this is test2")

        self.driver.find_element_by_name("accounts").send_keys(username)
        self.driver.find_element_by_name("pwd").send_keys("123333")
        self.driver.find_element_by_xpath("/html/body/div[4]/div/div[2]/div[2]/form/div[3]/button")
        sleep(4)


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

 

2.两个参数,数据类型是列表时【多个参数时】

数据存储为:["666666", "123456"], ["555555", "123456"]

此时数据解析时需要解包需要使用@unpack

应该写为:

@data(["666666", "123456"], ["555555", "123456"])

@unpack

例子

# 导入unittest包
import unittest

from ddt import ddt, data, unpack, file_data

# unpack解包
from selenium import webdriver
from time import sleep


@ddt
class UnitForTest(unittest.TestCase):

    # 前置条件
    def setUp(self) -> None:
        print("setup")
        self.driver = webdriver.Chrome()
        self.driver.get("http://39.98.138.157/shopxo/index.php?s=/index/user/logininfo.html")
        self.driver.implicitly_wait(10)

    #@data("6666", "8888")
    @data(["666666", "123456"], ["555555", "123456"])
    @unpack  # 解包一般两个参数时使用
    def test_3(self, username,pwd):
        print("this is test2")

        self.driver.find_element_by_name("accounts").send_keys(username)
        self.driver.find_element_by_name("pwd").send_keys(pwd)
        self.driver.find_element_by_xpath("/html/body/div[4]/div/div[2]/div[2]/form/div[3]/button")
        sleep(4)


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

 

3.数据存储在txt文件时【多参数时】

此时读取时,需要封装一个读取txt文件的方法后,再进行数据的解析

例子

params.txt文件

123456,123455
1121121,33333
4444444,55555

读取txt文件并解析

# 导入unittest包
import unittest

from ddt import ddt, data, unpack, file_data

# unpack解包
from selenium import webdriver
from time import sleep


def read_file():
    file = open("params.txt", "r", encoding="utf8")
    li = []
    for line in file.readlines():
        print(line)
        #读取txt文件时存在换行符号\n,此时需要字符串的替换使用方法strip,输出:123456,123455
        #读取后的在使其变化为一个列表,使用方法:split,输出为:['123456', '123455']
        li.append(line.strip("\n").split(","))
    print(li)
    file.close()
    return li


@ddt
class UnitForTest(unittest.TestCase):

    # 前置条件
    def setUp(self) -> None:
        print("setup")
        self.driver = webdriver.Chrome()
        self.driver.get("http://39.98.138.157/shopxo/index.php?s=/index/user/logininfo.html")
        self.driver.implicitly_wait(10)

    @data(*read_file())
    @unpack  # 解包一般两个参数时使用
    def test_4(self, username, password):
        print("this is test2")

        self.driver.find_element_by_name("accounts").send_keys(username)
        self.driver.find_element_by_name("pwd").send_keys(password)
        self.driver.find_element_by_xpath("/html/body/div[4]/div/div[2]/div[2]/form/div[3]/button")
        sleep(4)


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

 

4. 测试数据存储在yaml文件中时

ddt的方法中,自带yaml文件的解析,故不需要自己在封装文件读取的方法

例子

test1.yaml文件

-
  name: 123
  pwd: 111111
-
  name: 456
  pwd: 333

读取yaml文件并解析 

# 导入unittest包
import unittest

from ddt import ddt, data, unpack, file_data

# unpack解包
from selenium import webdriver
from time import sleep



@ddt
class UnitForTest(unittest.TestCase):

    # 前置条件
    def setUp(self) -> None:
        print("setup")
        self.driver = webdriver.Chrome()
        self.driver.get("http://39.98.138.157/shopxo/index.php?s=/index/user/logininfo.html")
        self.driver.implicitly_wait(10)

#ddt中支持直接读取yaml文件,不需要添加unpack进行数据的解包
    @file_data(r"D:\python\commalluerjenkins131\config\test1.yaml")
    def test_02(self,**user):
        name=user.get("name")
        pwd=user.get("pwd")
        print(user)

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

 

  • 2
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
DDT(Data Driver Tests)是一种数据驱动测试的方法。在Python,可以使用ddt库实现数据驱动。安装ddt库可以使用pip install ddt命令。使用@ddt注解可以将测试标记为数据驱动测试使用@data(*case_data)注解可以对测试函数进行数据解压,将每个元素传递给测试函数作为参数。ddt库还提供了@unpack注解,用于将元组或列表的元素按顺序传递给测试函数的参数。下面是一个使用ddt进行数据驱动的示例代码: ```python from ddt import ddt, data, unpack import unittest case_data = [(1, 2, 3), (4, 5, 9), (7, 8, 15)] @ddt class TestDataDriven(unittest.TestCase): @data(*case_data) @unpack def test_addition(self, a, b, expected_result): result = a + b self.assertEqual(result, expected_result) if __name__ == '__main__': unittest.main() ``` 在上述代码,我们使用ddt库的@ddt注解将测试TestDataDriven标记为数据驱动测试使用@data(*case_data)注解将每个元组的元素作为参数传递给测试函数test_addition。使用@unpack注解将元组的元素按顺序传递给测试函数的参数a、b和expected_result。在测试函数,我们执行了一个加法操作,并使用self.assertEqual()断言来验证结果是否符合预期。 通过这种方式,我们可以轻松地实现数据驱动的测试,并在多组测试数据上运行相同的业务逻辑。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [Python自动化之-DDT数据驱动](https://blog.csdn.net/qq_37982823/article/details/121662033)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 50%"] - *2* [python数据驱动-ddt](https://blog.csdn.net/pangbianlaogu/article/details/80261730)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值