首页 > 编程知识 正文

关于python使用appium的信息

时间:2023-12-28 21:10:45 阅读:328550 作者:KLSM

本文目录一览:

基于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('rn')

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)

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。