<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>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                [TOC] 前言 前面講到unittest里面setUp可以在每次執行用例前執行,這樣有效的減少了代碼量,但是有個弊端,比如打開瀏覽器操作,每次執行用例時候都會重新打開,這樣就會浪費很多時間。 于是就想是不是可以只打開一次瀏覽器,執行完用例再關閉呢?這就需要用到裝飾器(@classmethod)來解決了。 <br /> ## 一、裝飾器 1. 用setUp與setUpClass區別 ``` setup():每個測試case運行前運行 teardown():每個測試case運行完后執行 setUpClass():必須使用@classmethod 裝飾器,所有case運行前只運行一次 tearDownClass():必須使用@classmethod裝飾器,所有case運行完后只運行一次 ``` 2. @是修飾符,classmethod是python里的類方法 <br /> ## 二、執行順序 1. 用類方法寫幾個簡單case ``` import unittest from time import sleep class Test(unittest.TestCase): @classmethod def setUpClass(cls): print("start!") @classmethod def tearDownClass(cls): sleep(1) print("end!") def test01(self): print("執行測試用例01") def test03(self): print("執行測試用例03") def test02(self): print("執行測試用例02") def addtest(self): print("add方法") if __name__ == "__main__": unittest.main() ``` 2. 從執行結果可以看出,前置和后置在執行用例前只執行了一次。 ``` start!執行測試用例01 執行測試用例02 執行測試用例03 end! Ran 3 tests in 1.001s ``` <br /> ## 三、selenium實例 1. 可以把打開瀏覽器操作放到前置setUpClass(cls)里,這樣就可以實現打開一次瀏覽器,執行多個case了 ``` from selenium import webdriver from selenium.webdriver.support import expected_conditions as EC import unittest class BlogHome(unittest.TestCase): '''博客首頁''' @classmethod def setUpClass(cls): cls.driver = webdriver.Chrome() url = "https://www.cnblogs.com/zjut-cheng/" cls.driver.get(url) cls.driver.implicitly_wait(30) @classmethod def tearDownClass(cls): cls.driver.quit() def test_01(self): '''驗證元素存在:博客園''' locator = ("id", "blog_nav_sitehome") text = "博客園" result = EC.text_to_be_present_in_element(locator, text)(self.driver) self.assertTrue(result) def test_02(self): '''驗證元素存在:首頁''' locator = ("id", "blog_nav_myhome") text = "首頁" result = EC.text_to_be_present_in_element(locator, text)(self.driver) self.assertTrue(result) if __name__ == "__main__": unittest.main() ```
                  <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>

                              哎呀哎呀视频在线观看