Appium - multiprocessing.pool.MaybeEncodingError-【 “Can’t pickle local object ‘PoolManager.__init__. . ‘】


公司同事學習自動化新裝環境后,run多進程測試用例時出錯:

multiprocessing.pool.MaybeEncodingError: Error sending result: ’<appium.webdriver.webdriver.WebDriver (session=“261019ae-3776-4a78-aa2c-b24bb64ec62e”)>’. Reason: ’AttributeError(“Can’t pickle local object ‘PoolManager.__init__.<locals>.<lambda>‘“)’

 

同一份代碼,我本地並沒有這種情況 

 

在網上搜索到三種方法: 

1.用線程替換進程
2.可以使用copy_reg來規避上面的異常.
3.dill 或pathos.multiprocesssing :use 'import pathos.multiprocesssing', instead of 'import multiprocessing'. pathos.multiprocessing is a fork of multiprocessing that uses dill. dill can serialize almost anything in python, so you are able to send a lot more around in parallel.

 

最開始采用了方法3:use 'import pathos.multiprocesssing', instead of 'import multiprocessing' ,然后程序並不在拋出該錯誤,但是啟動case后,appium啟動driver后便不在干活(使用兩個進程分別在不同端口啟動driver),appium log沒有錯誤,pycharm也一直轉轉轉卡在那不去執行find element, 所以還是還原到使用import multiprocessing

 

最終解決方案如下:

 

1. mac裡面的python都刪乾淨
2. 用pyenv裝python 3.5.2
3. 執行multi process case script
4. 把該裝的selenium, Pillow, requests裝一裝
5. 最後一步降級appium-python-client : pip install appium-python-client==0.25 (這個是重點,可以忽略其他步驟直接降級版本,這里是因為需要才重裝, 當然筆者local的0.31版本也可以的,就是最新版(0.43)有問題)
6. 成功!

 


免責聲明!

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



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