• 自动化测试之 ddt 驱动 json 文件


    一、上篇文章我们使用了 unittest + ddt 驱动 excel 文件做数据驱动测试,本篇文章我们采用 unittest + ddt 驱动 json 文件来实现数据驱动测试,话不多说上源码。。。

    • ddt.file_data:装饰测试方法,参数是文件名。文件可以是 json 或者 yaml 类型。
      • 注意:如果文件是以 “.yml”或者".yaml" 结尾,ddt 会作为 yaml 类型处理,其他文件都会作为 json 文件处理。  

      • 如果文件是列表,列表的值会作为测试用例参数,同时,会作为测试用例方法名后缀显示。    

      • 如果文件是字典,字典的 key 会作为测试用例方法的后缀显示,字典的 value 会作为测试用例参数。  
    • 如下图为我的数据文件,且文件中数据类型为字典

    • 首先我们先熟悉下 file_data() 读取字典数据的应用
    • 注意:测试用例形参要与 json 文件中的键一致
    from ddt import ddt, file_data
    import unittest
    
    @ddt
    class Test(unittest.TestCase):
    
        @file_data("D:work_docCodeFiledcs_class6data.json")
        def test01(self, username, password):
            print(username, password)
    
    if __name__ == '__main__':
        unittest.main()
    
    # 运行结果如下
    """
    Ran 3 tests in 0.004s
    
    Evan 123456
    Lvan 123456
    Alex 123456
    """
    • 实例如下
    import time
    from ddt import ddt, file_data
    import unittest
    from selenium import webdriver
    from selenium.webdriver.common.by import By
    
    @ddt
    class Test(unittest.TestCase):
    
        def setUp(self) -> None:
            self.dr = webdriver.Chrome()
            self.dr.get("http://cms.duoceshi.cn/xxx/xxxx/xxx")
            self.dr.maximize_window()
            self.dr.implicitly_wait(10)
    
        def tearDown(self) -> None:
            self.dr.find_element(By.ID, "loginBtn").click()
            time.sleep(2)
            self.dr.quit()
    
        def cms_login(self, username, password):
            self.dr.find_element(By.ID, "userAccount").send_keys(username)
            self.dr.find_element(By.ID, "loginPwd").send_keys(password)
    
        @file_data("D:work_docCodeFiledcs_class6data.json")
        def testcase(self, username, password):
            self.cms_login(username, password)
    
    if __name__ == '__main__':
        unittest.main()
    • 如下图为我的数据文件,且文件中数据类型为列表一

    • 首先我们先熟悉下 file_data() 读取列表数据的应用
    from ddt import ddt, file_data, unpack
    import unittest
    
    @ddt
    class Test(unittest.TestCase):
    
        @file_data("D:work_docCodeFiledcs_class6data.json")
        def test01(self, data):
            testdata = data.split("||")
            print(testdata[0], testdata[1])
    
    if __name__ == '__main__':
        unittest.main()
    
    # 运行结果如下
    """
    Ran 3 tests in 0.004s
    
    Evan 123456
    Lvan 123456
    Alex 123456
    """
    • 实例如下
    import time
    from ddt import ddt, file_data
    import unittest
    from selenium import webdriver
    from selenium.webdriver.common.by import By
    
    @ddt
    class Test(unittest.TestCase):
    
        def setUp(self) -> None:
            self.dr = webdriver.Chrome()
            self.dr.get("http://cms.duoceshi.cn/xxx/xxxx/xxxxx")
            self.dr.maximize_window()
            self.dr.implicitly_wait(10)
    
        def tearDown(self) -> None:
            self.dr.find_element(By.ID, "loginBtn").click()
            time.sleep(2)
            self.dr.quit()
    
        def cms_login(self, username, password):
            self.dr.find_element(By.ID, "userAccount").send_keys(username)
            self.dr.find_element(By.ID, "loginPwd").send_keys(password)
    
        @file_data("D:work_docCodeFiledcs_class6data.json")
        def test01(self, data):
            testdata = data.split("||")
            self.cms_login(testdata[0], testdata[1])
    
    if __name__ == '__main__':
        unittest.main()
    • 如下图为我的数据文件,且文件中数据类型为列表二

    • 首先我们先熟悉下 file_data() 读取列表数据的应用
    import unittest
    from ddt import ddt, file_data
    
    @ddt
    class Test(unittest.TestCase):
    
        @file_data("test_data_list.json")
        def test_demo1(self, data):
            print(data)
    
    if __name__ == '__main__':
        unittest.main()
    
    # 运行结果如下
    """
    Ran 3 tests in 0.004s
    
    ['admin', '123456']
    ['Evan', '123456']
    ['Lvan', '123456']
    """
    • 实例如下 
    from selenium import webdriver
    from ddt import ddt, file_data
    import unittest
    from time import sleep
    from selenium.webdriver.common.by import By
    
    @ddt
    class CmsLogin(unittest.TestCase):
    
        def setUp(self) -> None:
            self.dr = webdriver.Chrome()
            self.dr.get("http://cms.duoceshi.cn/xxx/xxxx/xxxxx")
            self.dr.maximize_window()
            self.dr.implicitly_wait(10)
    
        def tearDown(self) -> None:
            sleep(2)
            self.dr.quit()
    
        def cmslogin(self, username, password):
            self.dr.find_element(By.ID, "userAccount").send_keys(username)
            self.dr.find_element(By.ID, "loginPwd").send_keys(password)
            self.dr.find_element(By.ID, "loginBtn").click()
    
        @file_data("test_data_list.json")
        def test_cms_login(self, data):
            username = data[0]
            password = data[1]
            self.cmslogin(username, password)
    
    if __name__ == '__main__':
        unittest.main()
  • 相关阅读:
    以AO方式给SceneControl控件设置BaseHeight
    TreeView只能选中一个节点
    Excel导出DataTable
    TOCControl右键菜单
    Arcgis Engine符号化相关
    shapefile文件锁定问题
    ArcGIS符号库serverstyle文件编辑注意事项
    CentOS运维常用命令
    常用shell
    javascript浮点数相减、相乘出现一长串小数
  • 原文地址:https://www.cnblogs.com/ZhengYing0813/p/14094445.html
Copyright © 2020-2023  润新知