appium 多個測試用例<多個 **.py文件>,只執行一次app


本文只啟動一次app指的是有多個測試的.py文件這種情況

如果是在測試類如LoginTest中,有多個測試方法,如: test_1, test_2,想保證在執行完test_1后,不重新啟動app,接着執行test_2,則把初始化的方法setUp換為setUpClass。

setUp是在每個test方法運行前執行,有多少個test方法,就執行多少次,setUpClass方法是在所有test方法運行前執行,只執行一次。

問題描述:在test_case中,有多個測試的.py文件,每次執行完一個.py文件,就會重新啟動一次app,於是就想,有沒有什么辦法只啟動一次app

解決方法:

  單例模式

    單例模式可以確保某個類只有一個實例存在。讓所有的.py文件公用一個driver,就可以避免多次啟動app。

    如下在Public.py文件中

1      _instence = None
2      _instence_lock = threading.Lock()
3      def get_devices(self):
4          with Readconf._instence_lock:
5              #Readconf為當前的類名
6              if not Readconf._instence:
7                  # conn_app為初始化devices的方法,具體內容,在下方顯示
8                  Readconf._instence = Readconf().conn_app()
9          return Readconf._instence

 

上述代碼寫完后,具體調用方式如下:

 1     @classmethod
 2     def setUpClass(cls):
 3         # Readconf類為get_devices方法所在的類
 4         cls.devices = Readconf().get_devices()
 5 
 6     # 然后正常調用 devices就可以了
 7     def test_a(self):
 8         self.devices.implicitly_wait(30)
 9         self.devices.find_element_by_id('******').click()
10         self.devices.find_element_by_id('******').click()

初始話devices的方法內容如下< conn_app() >:

 1     def conn_app(self):
 2         desired_caps = {
 3             "deviceName": self.conn('deviceName'),
 4             "platformName": self.conn('platformName'),
 5             "skipServerInstallation": self.conn('skipServerInstallation'),
 6             "skipDeviceInitialization": self.conn('skipDeviceInitialization'),
 7             # "noReset": self.conn('noReset'),
 8             "automationName": self.conn('automationName'),
 9             "appPackage": self.conn('appPackage'),
10             "appActivity": self.conn('appActivity'),
11             # "appWaitActivity":self.conn('appWaitActivity'),
12             "udid": self.conn('udid'),
13             "resetKeyboard": self.conn('resetKeyboard')
14             }
15         self.driver = webdriver.Remote(self.conn('url'), desired_caps)
16         return self.driver

 當運行run.py報錯時:

  錯誤如下:_TestResult' object has no attribute 'outputBuffer

    解決方式:

      1、在HTMLTestRunner.py中

          Ctrl+F搜索_TestResult方法,在__init__方法中添加:

        self.outputBuffer = io.StringIO()
        self.test_start_time = round(time.time(), 2)

        

 1     def __init__(self, verbosity=1):
 2         TestResult.__init__(self)
 3         self.stdout0 = None
 4         self.stderr0 = None
 5         self.success_count = 0
 6         self.failure_count = 0
 7         self.error_count = 0
 8         self.verbosity = verbosity
 9 
10         # result is a list of result in 4 tuple
11         # (
12         #   result code (0: success; 1: fail; 2: error),
13         #   TestCase object,
14         #   Test output (byte string),
15         #   stack trace,
16         # )
17         self.result = []
18         self.subtestlist = []
19 
20        # 添加到這里
21         self.outputBuffer = io.StringIO()
22         self.test_start_time = round(time.time(), 2)

 

 

 

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM