本文目錄一覽:
- 1、基於Appium+WDA+Python搭建IOS自動化測試全紀錄(三):真機demo運行
- 2、python+appium自動化測試-重複執行測試用例
- 3、Appium環境部署(三)——python的下載、安裝與配置
- 4、python+appium如何設置腳本運行次數
- 5、python 怎麼啟動appium
- 6、如何通過python文件打開appium
基於Appium+WDA+Python搭建IOS自動化測試全紀錄(三):真機demo運行
前期回顧:
基於Appium+WDA+Python搭建IOS自動化測試全紀錄(二):模擬器demo運行
基於Appium+WDA+Python搭建IOS自動化測試全紀錄(一):環境搭建
在模擬器將demo跑通之後,就要在真機上測試啦,模擬器總是要為真機服務的。
在真機上主要是涉及到簽名及證書的問題,一下blog寫的特別好,然而其實我也沒有看懂,RSA算法神馬的早在密碼學課程上還給老師了。
iOS App 簽名的原理
主要在此簡單記錄一下證書的配置吧。
在xcode中找到build Setting配置部分(之所以把這張圖放出來是因為我最開始找不到這個配置,萌新啥都找不到):
更改一下三個字段對應的內容:
Code Siging identify 證書裡面對應的開發者
Product Bundle Identify 對應的bundleID
Provisioning Profile 包含了 證書 / Entitlements 等數據,並由蘋果後台私鑰簽名的數據包。
數據包是.mobileprovision文件格式結尾 在終端中輸入如下命令即可看到裡面的信息
改完之後 我們開發的程度就可以裝到真機上啦,這個時候選擇在真機上運行,就可以啦。
測試app裝到真機上之後,還要考慮如何開啟py腳本,在真機上進行測試。
這裡需要注意兩點:
最後找到的地址大概如下:
放到xcode中進行簽名證書配置,注意雖然我們打開的是WebDriverAgent文件夾,但是我們要配置的是WebdDriverAgentRunner 在其Build Settings中進行與證書有關的配置
配置完畢後還需要再WebdDriverAgentRunner中添加一個RoutingHTTPServer.frameork
點擊添加之後-add Other
在如下路徑可以查找到該framework
找的一定是appium文件路徑下的!
上邊關於wda並沒有做過多說明,因為還不怎麼了解 等了解了再補充相關知識
py腳本主要是配置有更改,主體文件請見開頭(二)模擬器demod的blog
在真機上配置更改如下:
然後啟動appium 發現真機上裝上了廁所app 裝上了WebDriverAgentRunner 然後用python運行腳本就ok拉!
以上為從搭建環境-》模擬器跑demo-》真機跑demo的簡單記錄,不涉及到原理方面的講解,如有錯誤之處還請提出。
【之後還有跳一跳的安卓環境搭建
wda的inspector相關環境還沒記錄~】
[Tbc]
個人博客:
進擊的程序茗
python+appium自動化測試-重複執行測試用例
來自APP Android端自動化測試初學者的筆記,寫的不對的地方大家多多指教哦。
在功能測試過程中,經常會遇到一些偶然出現的Bug,需要通過重複執行用例來複現問題,那麼,在自動化測試的過程中,對於一些偶然出現的Bug,也可以針對單個用例,或者針對某個模塊的用例重複執行多次來複現。
重複執行測試用例的方法這邊主要總結了三個:
①重複運行單條或全部測試用例
②測試用例運行失敗後重新運行
③測試用例重複運行直到第一次失敗後停止
要重複執行測試用例,需要先安裝pytest-repeat插件
全局安裝: 即安裝在全局環境中,新創建的工程導入全局環境時會將該包導入,cmd輸入:pip install pytest -repeat,安裝成功後會顯示repeat版本號
局部安裝: 即安裝在當前項目的環境下,新創建的工程不會同步該包,在PyCharm→File→setting,搜索pytest intrepreter,點擊“+”號,如下圖所示:
再搜索pytest-repeat,點擊install package安裝
出現下圖表示安裝成功:
重複執行測試用例的方法有多種,比如:方法一的重複執行單條測試用例;方法二的重複執行每條測試用例;方法三的每條測試用例執行一次,共執行N遍。
在測試用例前添加註解@pytest.mark.repeat(value),value表示重複的次數,來實現單條用例的重複執行。
運行結果為:被裝飾的測試用例test_one會連續執行兩次,再執行test_two,即按照順序,第一個測試用例執行N次,再執行下一個測試用例
在終端傳入-count的方式實現重複執行測試用例
運行結果為:測試用例test_one會連續執行兩次,再執行兩次test_two,即按照執行順序,每一個測試用例都執行N次
注意:-s:表示輸出用例中的調式信息,比如print的打印信息等。
-repeat-scope類似於pytest fixture的scope參數,在終端輸入,-repeat-scope有四個參數:
重運行機制使用到了pytest的插件,插件名稱為:rerunfailures,要使用它,需要先安裝此插件
出現下圖表示安裝成功:
運行結果如下:
注意:
運行結果如下:
將pytest的 -x 選項與pytest-repeat結合使用,可以實現在重複運行測試用例的過程中,測試用例第一次失敗時就停止運行,具體實現方法如下:
運行結果如下:
Appium環境部署(三)——python的下載、安裝與配置
一、下載:根據個人環境和需求選擇對應版本進行下載
1、官網下載
3、網上輸入關鍵字“python”搜索
二、安裝與配置
1、找到下載exe文件,然後雙擊,進行安裝
2、定義好要裝python的目錄後,然後把下方的兩個選項勾選上(方便後期使用python的,不然還得自己去環境變量進行配置)(注意:安裝目錄盡量不要選擇C盤)
3、需要同時安裝兩個python版本,比如python2、python3
(1)2個程序安裝方法一致,雙擊進行安裝,自定義安裝
(2)安裝的文件夾不要在同一個目錄下
(3)重點:在安裝好的目錄下找到“python.exe”這個執行文件,然後進行自定義命名:比如這個目錄下安裝的是2.0,那就修改成“python2.exe”;另一個目錄下安裝的是3.0,那就修改成“python3.0.exe”
(4)然後把這兩個目錄及各自目錄下的Scripts目錄添加到環境變量path下,如 E:python;E:pythonScripts;E:python39;E:python39Scripts
三、檢查環境
1、打開cmd,輸入python,回車,查看返回的版本號
2、如果安裝的時候修改了“python.exe”的名字為“python3.exe”,則在cmd框輸入python3,回車,查看返回的版本號
3、可以編個學習語言的語句輸出試用一下 如 print(“Hello World”) 回車輸出查看結果
python+appium如何設置腳本運行次數
最近在學做安卓自動化測試,分享給大家一個根據設備數啟動相應appium服務的腳本,寫的比較渣,大家多多包涵指導下
設備數據例子:
#coding=utf-8import reimport time,sys,osimport subprocessimport threadingsys.path.append(os.path.abspath(‘..’))from Test_control.App_Mylog import logsfrom Test_control.App_Busi_configdata import machine_dataclass AppiumServer(object):
def __init__(self):
#多個設備信息的list
self.machine_datas = machine_data #從文件讀取出來的多個設備信息list
self.log_path = os.path.abspath(‘../Test_log/appium.log’)
def start_appium(self,ip,port,bp_port,udid,log_path):
‘啟動appium服務’
print(u’devices:{} start appium…’.format(udid))
args1 = ‘netstat -ano|findstr “{}”‘.format(port)
with subprocess.Popen(args1,stdout=subprocess.PIPE,stderr=subprocess.PIPE,shell=True) as p1:
p1.wait()
data = p1.stdout.read().decode(‘utf-8’).strip(‘\r\n’)
port_list = re.findall(r”:(\d{4,6}).*\s(\d{1,8})”,data)#搜索端口和PID
if port_list:
#停服務
#排除進程為0的並轉為dict去重
[port_list.remove(i)for i in port_list if i[1]==’0′]
port_pid = dict(port_list)
for k in port_pid.keys():
print(u’port:{0} is used,kill pid:{1}’.format(k,port_pid[k]))
args3 = “taskkill -PID {} -F”.format(port_pid[k])
with subprocess.Popen(args3,stdout=subprocess.PIPE,stderr=subprocess.PIPE,shell=True) as p3:
p3.wait()
print(p3.stdout.read().decode(‘gbk’))
print(p3.stderr.read().decode(‘gbk’))
#啟服務
args2 = “start /b appium -a {0} -p {1} -bp {2} -U {3} -g {4} –no-reset”.format(ip,port,bp_port,udid,log_path)
with subprocess.Popen(args2,stdout=open(log_path,’a’),stderr=subprocess.PIPE,shell=True) as p2:
p2.wait()
time.sleep(4)
print(u’devices:{} appium server start completed !’.format(udid))
def multi_startappium(self):
‘批量啟動appium服務’
try:
if self.machine_datas:
for single_machine in self.machine_datas:
self.start_appium(single_machine[‘ip’],single_machine[‘port’],single_machine[‘bp_port’],single_machine[‘udid’],self.log_path)
else:
print(u’no machine info,please check’)
except Exception as e:
logs.exception(e)
raise e
python 怎麼啟動appium
就是沒有,python是實時編譯的代碼,是用python.exe進行解釋執行的,有個程序pythonw.exe是解釋執行窗口程序時通常用的,與python.exe有一點區別。通常將python代碼的文件後綴名改成py或pyw。再執行。 如果你安裝不正確,或有錯誤發生,通常是說明你的環境設置不對,或沒有關聯到py和pyw的文件執行上。
如何通過python文件打開appium
import os
import unittest
from appium import webdriver
from time import sleep
# Returns abs path relative to this file and not cwd
PATH = lambda p: os.path.abspath(
os.path.join(os.path.dirname(__file__), p)
)
class ContactsAndroidTests(unittest.TestCase):
def setUp(self):
desired_caps = {}
desired_caps[‘platformName’] = ‘Android’
desired_caps[‘platformVersion’] = ‘4.4’
desired_caps[‘deviceName’] = ‘192.168.56.111:5555’
desired_caps[‘app’] = PATH(
‘../../../sample-code/apps/ContactManager/ContactManager.apk’
)
desired_caps[‘appPackage’] = ‘com.example.android.contactmanager’
desired_caps[‘appActivity’] = ‘.ContactManager’
self.driver = webdriver.Remote(”, desired_caps)
def tearDown(self):
self.driver.quit()
def test_add_contacts(self):
el = self.driver.find_element_by_name(“Add Contact”)
el.click()
textfields = self.driver.find_elements_by_class_name(“android.widget.EditText”)
textfields[0].send_keys(“Appium User”)
textfields[2].send_keys(“someone@appium.io”)
self.assertEqual(‘Appium User’, textfields[0].text)
self.assertEqual(‘someone@appium.io’, textfields[2].text)
self.driver.find_element_by_name(“Save”).click()
# for some reason “save” breaks things
alert = self.driver.switch_to_alert()
# no way to handle alerts in Android
self.driver.find_element_by_android_uiautomator(‘new UiSelector().clickable(true)’).click()
self.driver.keyevent(3)
if __name__ == ‘__main__’:
suite = unittest.TestLoader().loadTestsFromTestCase(ContactsAndroidTests)
unittest.TextTestRunner(verbosity=2).run(suite)
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/244748.html