python中的ddt方法
    
     针对不同类型数据的解析和使用
    
   
    
     目录
    
   
    
     一、安装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()
 
