<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                企業??AI智能體構建引擎,智能編排和調試,一鍵部署,支持知識庫和私有化部署方案 廣告
                [TOC] ## **一、UnitTest框架** ~~~ 1.1 為什么使用UnitTest框架? 1. 批量執行用例 2.提供豐富的斷言知識 3.可以生成報告 ? 1.2 什么是UnitTest框架 python自帶一種單元測試框架 ? 1.3 核心要素 1). TestCase (測試用例) 2). TestSuite (測試套件) 3). TextTestRunner (以文本的形式運行測試用例) 4). TestLoader (批量執行測試用例--搜索指定文件夾內指定字母開頭的模塊)【推薦】 5). Fixture (固定裝置(兩個固定的函數,一個初始化時使用,一個結束時使用)) ~~~ **TestCase:** ~~~ 說明:測試用例 ? 步驟: 1.導包 import unittest 2.新建測試類并繼承 unittest.TestCase 3.測試方法必須以 test 字母開頭 ? 運行: 1.運行測試類所有的測試方法,光標定位到類當前行右鍵運行 2.運行單個測試方法:光標放到測試方法當前行。 ~~~ <details> <summary>testcase01.py</summary> ``` ''' 目標:unittest框架--TestCase使用 步驟: 1.包improt unittest 2.新建類并繼承 unittest.TestCase 3.測試方法必須以test字母開頭 案例: 編寫求和測試函數 ''' import unittest def add(x, y): return x + y # 定義測試類 并 繼承 class Test01(unittest.TestCase): # 定義測試方法 注意:以test字母開頭 def test_add(self): result = add(1, 1) print("結果為:", result) def test_add2(self): result = add(1, 3) print("結果為:", result) ``` </details> <br /> <details> <summary>test02.py</summary> ``` # test02.py class Test01: def test001(self): print("test001被執行") if __name__ == '__main__': print("__name__的值:", __name__) ''' __name__: 為python中內置變量 值: 1.如果當前運行的模塊為當前模塊,那么__name__的值為: __main__ 2.如果當前運行的模塊不是主模塊,那么__name__的值為: 模塊名稱 ''' 運行結果: ---------------------------------------- __name__的值: __main__ ``` </details> <br /> <br /> **TestSuite:** ~~~ 說明:測試套件 ? 步驟: 1.導包 2.獲取測試套件對象 suite = unittest.TestSuite() 3.調用addrest()方法添加測試用例 ? 添加測試用例方法: 1. suite.addTest(類名("方法名稱")) ? # 添加指定類中指定的測試方法 2. suite.addTest(unittest.makeSuite(類名)) #添加指定類中所有已test開頭的方法 ~~~ **TextTestRunner:** ``` 說明:執行測試套件方法 步驟: 1.導包 2.實例化后去執行套件對象runner = unittest.TextTestRunner() 3.調用run方法去執行runner.run(suite) ``` <details> <summary>run_main.py</summary> ``` ''' 目標:unittest框架-TestSuite使用 操作: 1.導包 2.實例化獲取 TestSuite對象 3.詞用addTest方法添加用例到指定套件中 ''' import unittest from day05.testcase01 import Test01 from day05.test02 import Test02 # 實例化 suite suite = unittest.TestSuite() # 調用添加方法 # 寫法1 類名("方法名")注意:方法名稱使用雙引號 # suite.addTest(Test01("test_add")) # suite.addTest(Test01("test_add2")) # 擴展 添加測試類中所有test開頭的方法 suite.addTest(unittest.makeSuite(Test02)) # 執行測試套件 runner = unittest.TextTestRunner() runner.run(suite) ``` </details> <br /> <details> <summary>test02.py</summary> ``` import unittest class Test02(unittest.TestCase): def test001(self): print("test001被執行") def test002(self): print("test002被執行") def test003(self): print("test003被執行") def test004(self): print("test004被執行") if __name__ == '__main__': print("__name__的值:", __name__) ''' __name__:為python中內置變量 值: 1.如果當前運行的模塊為當前模塊,那么__name__的值為:__main__ 2.如果當前運行的模塊不是主模塊,那么__name__的值為:模塊名稱 ''' ``` </details> <br /> **TestLoader:** ~~~ 說明: 1.將符合條件的測試方法添加到測試套件中 2.搜索指定目錄文件下指定字母開頭的模塊文件下test開始的方法,并將這些方法添加到測試套件中,最后返回測試套件 ? 操作: 1.導包 import unittest 2.調用TestLoader() 寫法1.suite = unittest.TestLoader().discover ("指定搜索的目錄文件”,”指定字母開頭模塊文件") 寫法2.suite = unittest.defaultTestLoader.discowex ("指定搜索的目錄文件”,”指定字母開頭模塊文件”【推薦】 注意:如果使用寫法1,TestLoader()必須有括號。 3.執行測試套件 ~~~ <details> <summary>run_loader.py</summary> ``` # run_loader.py ''' 目標:演示TestLoader()類的用法 作用:搜索指定月錄下指定開頭py文件,在Py文件中搜索test開頭測試方法, 并且將這些方法添加到測試套件中,最后返回測試套件。 需求: 運行cases目錄下teste1.py~teste5.py文件 操作: 1.導包unittest 2.調用TestLoader類下discaver方法 ''' import unittest # 調用方法 suite = unittest.TestLoader().discover("./cases") # 擴展 指定 tpshop開頭的模塊 suite = unittest.TestLoader().discover("./cases", pattern="tpshop*.py") # 擴展 使用 【推薦使用】 suite = unittest.defaultTestLoader.discover("./cases") # 執行 套件 方法 TextTestRunner unittest.TextTestRunner().run(suite) ``` </details> <br /> ``` TestSuite與TestLoader區別: 共同點:都是測試套件 不同點:實現方式不同 TestSuite:要么添加指定的測試類中所有test開頭的方法,要么添加指定測試類中指定某個test開頭的方法 TestLoader:搜索指定目錄下指定字母開頭的模塊文件中以test字母開頭的方法并將這些方法添加到測試套件中,最后返回測試套件。 ``` <br/> ## **二、fixture** ~~~ 說明:裝置函數(setUp、tearDown) ? 級別: 1).函數級別def setUp() / def tearDown() 特性:幾個測試函數,執行幾次。每個測試函數執行之前都會執行setup,執行之后都會執行tearDown 2).類級別def setUpClass() / def tearDownClass() 特性:測試類運行之前運行一次etupClasg類運行之后運行一次tearDownClass 注意:類方法必須使用eclaggmethod修飾 ? 3).模塊級別:def setUpModule()/def tearDownModule() 特殊:模塊運行之前執行一次setUpModule,運行之后運行一次tearDownModule ? 提示: 無論使用函數級別還是類級別,最后常用場景為: 初始化: 1.獲取瀏覽器實例化對象 2.最大化瀏覽器 3.隱式等待 結束: 關閉瀏覽器驅動對象 ~~~ <details> <summary>test03_fixture.py</summary> ``` # test03_fixture.py ''' 目標:unittest 中的fixture用法 fixture其實就是兩個函數,這個函數可以一起使用,也可以單獨使用 1.初始化函數:def setUp() 2.結束函數:def tearDown() fixture級別: 1.函數級別[常用] 2.類級別[常用] 3.模塊級別 ''' import unittest class Test03(unittest.TestCase): @classmethod def setUpClass(cls): print("setUpClass被執行") @classmethod def tearDownClass(cls): print("tearDownClass被執行") def setUp(self): print("setUp被執行") def tearDown(self): print("setDown被執行") def test01(self): print('test01被執行') def test02(self): print('test02被執行') ``` </details> <br /> <br /> ## **三、斷言** ~~~ 3.1 什么是斷言? 讓程序代替人為判斷執行結果是否與預期結果相等的過程 ? 3.2為什么要斷言? 自動化腳本執行時都是無人值守,需要通過斷言來判斷自動化腳本的執行是否通過 注:自動化腳本不寫斷言,相當于沒有執行測試一個效果。 ? 3.3常用斷言 1. self.assertEqual(ex1, ex2) # 判斷ex1是否相等ex2 2. self.assertIn(ex1, ex2) # ex2是否包含ex1注意:所謂的包含不能跳字符 3. self.assertTure(ex) # 判斷ex是否為True ~~~ <details> <summary>test04_assert.py</summary> ``` # test04_assert.py ''' 目標:unitest常用斷言 1.assertTrue:如果結果為True通過,否則失敗 ''' import unittest class Test02(unittest.TestCase): def test001(self): # 斷言是否為True #flag = True flag = False # self.assertTrue(flag) self.assertFalse() # 判斷兩個字符串是否相等 self.assertEqual("明天,你好!", "昨天,你好!") self.assertEqual("明天,你好!", "明天,你好!") # 判斷后面的字符串是否包含前邊的字符串 self.assertIn("hello bama", "hello bama,wahaha") self.assertIn("hello wahaha", "hello bama,wahaha") ``` </details> <br /> **3.4 斷言練習** ~~~ 目標: topshop登錄 方法: def setup(): # 獲取 driver # 打開url # 最大化瀏覽器 # 隱式等待 def tearDown(): # 關閉瀏覽器驅動 def_test_login_code_null(): # 根據業務流程編寫 # 失敗截圖 ~~~ <details> <summary>test05_tpshop_login.py</summary> ``` # test05_tpshop_login ''' 目標:斷言練習 案例: 輸入:正確用戶名和密碼 驗證碼為空 斷言:提示信息是否為,驗證碼不能為空! 要求:如果新言出錯,截屏保存 ''' import time import unittest from selenium import webdriver from time import sleep class TestTpshopLogin(unittest.TestCase): def setUp(self): self.driver = webdriver.Chrome("http://localhost") self.driver.maximize_window() self.driver.implicitly_wait(30) def tearDown(self): sleep(2) self.driver.quit() # 定義登錄測試方法 驗證碼為空 def test_login_code_null(self): driver = self.driver # 點擊登錄鏈接 driver.find_element_by_partial_link_text("登錄").click() # 輸入用戶名 driver.find_element_by_css_selector("#username").send_keys("139000111") # 輸入密碼 driver.find_element_by_css_selector("#password").send_keys("12345") # 輸入驗證碼 driver.find_element_by_css_selector("#verify_code").send_keys() # 點擊登錄 driver.find_element_by_css_selector(".J-login-submit").click() # 獲取登錄后的提示信息 result = driver.find_element_by_css_selector(".layui-layer-content").text print("result:", result) # 定義預期結果 except_result = "驗證碼不能為空!" try: # 斷言 self.assertEqual(result, except_result) except AssertionError: # 截圖 driver.get_screenshot_as_file("../image/error.png").format(time.strftime("%Y_%m_%d_%H_%M_%S")) # 拋異常 raise ``` </details> <br /> **3.5 擴展** ~~~ 斷言兩種實現方式: 方式1:使用 unittest框架中斷言,詳情請參考以上相關知識點。 方式2:使用 python自帶斷言 1. assert str1 == str2 # 判斷str1 是否與str2相等 2. assert str1 in str2 # 判斷str2 是否包含str1 3. assert True/1 # 判斷是否為true ~~~ <details> <summary>test06_assert_extend.py</summary> ``` # test06_assert_extend.py ''' 目標斷言擴展: 兩種實現方式 1.使用 unittest框架中的斷言 2.使用 python自帶斷言 ''' # 使用python自帶斷言 判斷兩個字符串是否相等 assert "hello" == "hello" # 不相等 assert "hello" == "hello1" # 第二個字符串是否包含第一個字符串 assert "h" in "hello" assert "ha" in "hello" # 判斷是否為True assert True assert False assert 0 assert 1 ``` </details> <br /> <br /> ## **四、參數化** 4.1 為什么要參數化 解決冗余代碼問題; 4.2 什么是參數化 說明:根據需求動態獲取參數并引用的過程 4.3 參數化應用場景 場景:解決相同業務邏輯,不同測試數據問題。 4.4 應用: ~~~ 1.安裝插件 通過命令: 安裝: pip install parameterized 驗證: pip show parameterize 通過 pycharm:File--> setting--> Project--> 工程名稱 ? 2.應用插件 1.導包 from parameterized import parameterized 2.修飾測試函數 parameterized.expand([數據]) 數據格式: 1.單個參數:類型為列表 2.多個參數:類型為列表嵌套元組 3.在測試函數中的參數設置變量引用參數值,注意:變量的數量必須和數據值的個數相同 ~~~
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看