本文目录一览:
- 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)