Automatización de Appium+python (14) - Interpretación de Capacidad y Capacidad (explicación súper detallada)

Introducción

  La capacidad también se denomina capacidades deseadas de Appium Con tantos códigos de ejemplo escritos anteriormente, puede encontrar algunas reglas, es decir, algunos códigos siempre aparecen repetidamente a la vista. Esta parte es la configuración de Capacidad. Así que hoy compartiré, presentaré y explicaré Capacidad a mis amigos. Hágale saber sus entresijos, y por qué está escrito en el código de esa manera.

1. ¿Qué es la capacidad?

  Antes de hablar sobre la capacidad, ¿todavía recuerda el registro al inicio que vio cuando hablaba sobre el registro? Parte de la información de configuración aparecerá en todo nuestro registro de inicio. De hecho, esa información es la información de configuración que lleva la capacidad. Si iniciamos el código a través del código, la información de configuración que podemos ver es la siguiente:

  A partir de la información de configuración anterior, puede ver que la capacidad de la que estamos hablando en python es en realidad un diccionario (digamos eso por ahora, porque cada idioma tiene un nombre diferente).

2. El papel de la Capacidad

  Después de saber que Capability es un diccionario, ¿necesitamos conocer su función? Después de configurar la aplicación en appium, podemos ver a través del registro que la información que contiene es una configuración necesaria para el inicio.A través de la información de configuración anterior, también podemos ver que la configuración de la capacidad es una información necesaria para nuestra automatización. Principalmente le dice al servidor si estamos probando un navegador o una aplicación, si es iOS o Android, y la información de la versión de Android. Si la capacidad no le dice al servidor, entonces el servidor no lo reconocerá y nuestras pruebas automatizadas no se completarán.

3. Explicación de la configuración de capacidad común

3.1 Capacidad Pública

  Cualquiera que haya aprendido acerca de Capability encontrará un problema. De hecho, se divide principalmente en tres partes: parte pública, parte de iOS, parte de Android. Si desea usar iOS para Android, es imposible, así que comprenda honestamente cada una de las partes. Cuáles son las plataformas y cuáles son sus funciones. A continuación presentamos algunos de uso común

capacidad

describir

valor

nombre de automatización

Qué motor de automatización usar

Appium (predeterminado) o Selendroid o UiAutomator2 o Espresso para Android o XCUITestiOS o YouiEngine para aplicaciones creadas con el motor You.i

nombre de la plataforma

Qué plataforma de sistema operativo móvil usar

iOS, Android o FirefoxOS

plataformaVersión

Versión del sistema operativo móvil

por ejemplo, 7.1, 4.4

nombre del dispositivo

El tipo de dispositivo móvil o emulador utilizado

Simulador de iPhone, Simulador de iPad, iPhone Retina de 4 pulgadas, Emulador de Android, Galaxy S4, etc.... En iOS, este debería ser uno de los dispositivos válidos devueltos con los dispositivos instrument -s. En Android, esta función se ignora actualmente, aunque todavía es necesaria.

aplicación

Una ruta local absoluta a un archivo o una URL http remota, o una inclusive. Appium primero intentará instalar el binario de la aplicación en el dispositivo apropiado. Tenga en cuenta que esta función no es necesaria para Android si especifica una función (consulte a continuación). no es compatible con. .ipa.apk.zipappPackageappActivitybrowserName

/abs/path/to/my.apk o http://myapp.com/app.ipa

nombre del navegador

Automatización de nombres para navegadores web móviles. Debería ser una cadena vacía, no una aplicación de automatización.

"Safari" para iOS, "Chrome", "Chromium" o "Navegador" para Android

newCommandTimeout

Appium esperará (en segundos) un nuevo comando del cliente antes de asumir que el cliente ha salido y finaliza la sesión

por ejemplo, 60

idioma

(Solo Sim/Emu) conjunto de idiomas para simulador/emulador

por ejemplo fr

lugar

(Solo Sim/Emu) Locale establecido para simulador/emulador

Por ejemplo fr_CA

tu hiciste

El identificador de dispositivo único del dispositivo físico conectado

Por ejemplo 1ae203187fc012g

orientación

(Solo Sim/Emu) comienza en una dirección determinada

PAISAJE o RETRATO

autoWebview

Vaya directamente al contexto Webview. predeterminado falso

verdadero Falso

noReset

No restablezca el estado de la aplicación antes de esta sesión. Ver más detalles aquí

verdadero Falso

reinicio completo

Realice un reinicio completo. Ver más detalles aquí

verdadero Falso

Horarios de eventos

Habilite o deshabilite los informes de tiempo para varios eventos internos de Appium (por ejemplo, inicio y final de cada comando, etc.). El valor predeterminado es falso. Para habilitar, use true. Estos tiempos luego se devuelven como eventos en respuesta a la consulta del informe de propiedades para la sesión actual. Consulte la documentación de Event Time para conocer la estructura de esta respuesta.

Por ejemplo, cierto

enablePerformanceLogging

(Solo web y webview) Habilitar el registro de rendimiento de Chromedriver (en Android) o Safari (en iOS) (falso predeterminado)

verdadero Falso

más comúnmente utilizado:

capacidad

describir

valor

nombre de automatización

Qué motor de automatización usar

Appium (predeterminado) o Selendroid o UiAutomator2 o Espresso para Android o XCUITestiOS o YouiEngine para aplicaciones creadas con el motor You.i

nombre de la plataforma

Qué plataforma de sistema operativo móvil usar (el sistema operativo del teléfono que desea probar)

iOS, Android o FirefoxOS

plataformaVersión

Versión de SO móvil (Versión de SO móvil)

versión de android o ios, como 7.1, 4.4

nombre del dispositivo

El tipo de dispositivo móvil o emulador utilizado

iPhone Simulator,iPad Simulator,iPhone Retina 4-inch,Android Emulator,Galaxy S4,等....在iOS上,这应该是与仪器返回的有效设备之一instruments -s devices。在Android上,这个功能目前被忽略,尽管它仍然是必需的。

app

apk或者ipa文件所在的路径

xxx/xxx.apk

browserName

浏览器名称 Chrome

newCommandTimeout                   

超时时间 60

language

手机或者模拟器语言

udid

连接设备的uid 1essd2fd3

noReset

不要在会话前重置应用状态,默认false true/false

在自动化测试过程中这些公用的Capability用的时间比较多,大家需要记住,去熟悉他的用法。

3.2 Android独有Capability

  在自动化测试过程中如果你只知道常用的一些参数配置,这个是远远达不到要求,因为你不知道什么时候有什么样的突发情况发生,所以你需要了解appium所有最常用的配置参数,当然你可以掌握所有,那样更好,熟能生巧。下面我们看一下android的Capability。

这些功能仅适用于基于Android的驱动程序(例如 UiAutomator2)。

能力

描述

appActivity

要从包中启动的Android活动的活动名称。这往往需要在一个.(例如,.MainActivity而不是MainActivity)

MainActivity, .Settings

appPackage

你想运行的Android应用程序的Java包

com.example.android.myApp, com.android.settings

appWaitActivity

活动名称/名称,逗号分隔,您想要等待的Android活动

SplashActivity,SplashActivity,OtherActivity,*,*.SplashActivity

appWaitPackage

您想等待的Android应用程序的Java包

com.example.android.myApp, com.android.settings

appWaitDuration

用于等待appWaitActivity启动的超时(以毫秒为单位20000)(默认)

30000

deviceReadyTimeout

在等待设备准备就绪的几秒钟内超时

5

androidCoverage

完全合格的仪器类。通过-w在adb shell中,仪器-e覆盖率为true -w

com.my.Pkg/com.my.Pkg.instrumentation.MyInstrumentation

androidCoverageEndIntent

由您自己执行的广播操作,用于将覆盖转储到文件系统。传递到-a在adb外壳广播-a

com.example.pkg.END_EMMA

androidDeviceReadyTimeout

用于等待设备在启动后准备就绪的秒数

例如, 30

androidInstallTimeout

用于等待apk安装到设备的超时(以毫秒为单位)。默认为90000

例如, 90000

androidInstallPath

安装前将在其中安装apk的设备上的目录名称。默认为/data/local/tmp

例如 /sdcard/Downloads/

adbPort

用于连接到ADB服务器的端口(默认5037)

5037

remoteAdbHost

可选的远程ADB服务器主机

例如:192.168.0.101

androidDeviceSocket

Devtools套接字名称。只有当测试的应用程序是Chromium嵌入式浏览器时才需要。套接字由浏览器打开,并且Chromedriver作为devtools客户端连接到它。

例如, chrome_devtools_remote

avd

avd的名称发射

例如, api19

avdLaunchTimeout

avd启动并连接到ADB需要多长时间(默认值120000)

300000

avdReadyTimeout

avd完成启动动画需要多长时间(默认120000)

300000

avdArgs

启动avd时使用的其他仿真器参数

例如, -netfast

useKeystore

使用自定义密钥库来签署apks,默认 false

true 要么 false

keystorePath

自定义密钥库路径,默认〜/ .android / debug.keystore

例如, /path/to.keystore

keystorePassword

自定义密钥库的密码

例如, foo

keyAlias

密钥的别名

例如, androiddebugkey

keyPassword

密钥的密钥

例如, foo

chromedriverExecutable

webdriver可执行文件的绝对本地路径(如果Chromium embedder提供了自己的webdriver,则应该使用它来代替与Appium捆绑在一起的原始chromedriver)

/abs/path/to/webdriver

autoWebviewTimeout

等待Webview上下文激活的时间(以毫秒为单位)。默认为2000

例如 4

intentAction

意图操作将用于启动活动(默认android.intent.action.MAIN)

例如android.intent.action.MAIN,android.intent.action.VIEW

intentCategory

意图类别,将用于启动活动(默认android.intent.category.LAUNCHER)

例如android.intent.category.LAUNCHER,android.intent.category.APP_CONTACTS

intentFlags

将用于启动活动的标志(默认0x10200000)

例如 0x10200000

optionalIntentArguments

将用于启动活动的其他意图参数。请参阅意向参数

例如--esn <EXTRA_KEY>,--ez <EXTRA_KEY> <EXTRA_BOOLEAN_VALUE>等等。

dontStopAppOnReset

在使用adb启动应用程序之前,不要停止被测试的应用程序的进程。如果被测试的应用程序是由另一个定位应用程序创建的,那么将其设置为false将允许在使用adb的测试应用程序启动过程中定位应用程序的过程仍然存在。换句话说,在dontStopAppOnReset设置的时候true,我们不会-S在adb shell am start通话中包含标志。有了这个能力被省略或设置为false,我们包括-S标志。默认false

true 要么 false

unicodeKeyboard

启用Unicode输入,默认 false

true 要么 false

resetKeyboard

使用unicodeKeyboard功能运行Unicode测试后,将键盘重置为原始状态。如果单独使用,则忽略。默认false

true 要么 false

<p style="white-space: nowrap;">noSign

使用调试键跳过检查和签名应用程序,只能使用UiAutomator,而不能使用selendroid,默认false

true 要么 false

ignoreUnimportantViews

调用setCompressedLayoutHierarchy()uiautomator函数。此功能可以加快测试执行速度,因为辅助功能命令将更快地忽略某些元素。被忽略的元素是不可能找到的,这就是为什么这个功能也被实现为可切换的设置以及功能。默认为false

true 要么 false

disableAndroidWatchers

禁用观察应用程序没有响应和应用程序崩溃的android观察者,这将减少Android设备/模拟器上的CPU使用率。这个功能只能用于UiAutomator,而不能用于selendroid,默认false

true 要么 false

chromeOptions

允许ChromeDriver传递chromeOptions功能。有关更多信息,请参阅chromeOptions

chromeOptions: {args: ['--disable-popup-blocking']}

recreateChromeDriverSessions

在移至非ChromeDriver网页浏览的情况下杀死ChromeDriver会话。默认为false

true 要么 false

nativeWebScreenshot

在Web上下文中,使用本地(adb)方法截取屏幕截图,而不是代理ChromeDriver。默认为false

true 要么 false

androidScreenshotPath

将要放置屏幕截图的设备上的目录名称。默认为/data/local/tmp

例如 /sdcard/screenshots/

autoGrantPermissions

让Appium自动确定您的应用程序需要哪些权限,并在安装时将其授予应用程序。默认为false

true 要么 false

networkSpeed

设置网络速度模拟。指定最大的网络上传和下载速度。默认为full

['full','gsm', 'edge', 'hscsd', 'gprs', 'umts', 'hsdpa', 'lte', 'evdo']检查-netspeed选项有关avds速度仿真的更多信息

gpsEnabled

在开始会话之前,切换模拟器的gps位置提供程序。默认情况下,仿真器将根据设置的方式启用或不启用此选项。

true 要么 false

isHeadless

true当不需要显示设备显示时,将此功能设置为无运行模拟器。false是默认值。isHeadless也支持iOS,请检查XCUITest的具体功能。

例如, true

  上面的只是一些简单的列子,主要的功能是告诉大家,这些是我们经常用的,如果遇见类似的需求那么可以直接使用,也希望大家看到这里的时候自己动手去操作一下,看他执行的结果到底是怎么样。只有这样你才能算掌握,只是看一遍还是不行的。

3.3 ios独有Capability

  在我选择appium时,最主要是因为他能够同时支持ios和android,在基础参数配置中ios也有他自己的独一份,不和android一样,下面我们大概介绍一下:

  BoundleId:这个是必须的,如果不配置就无法启动ios app,这个是该app的唯一标示。eg:caps.setCapability("boundleId","ios.mooc.test"),这个只是一个简单的例子。

  autoAcceptAlerts: 这个在我们实际项目中非常实用,他就想web端的一个js弹窗,默认情况下是false,如果你的app中有类似情况建议打开。eg:caps.setCapability("autoAcceptAlerts","true")

  这些功能仅适用于XCUITest驱动程序和过时的UIAutomation驱动程序

能力

描述

calendarFormat

(仅限SIM)为iOS模拟器设置的日历格式

例如 gregorian

bundleId

测试中的应用程序的捆绑ID。用于在真实设备上启动应用程序或在测试启动期间使用其他需要包ID的大写字母。要使用软件包ID在真实设备上运行测试,可以省略“应用”功能,但必须提供“udid”。

例如 io.appium.TestApp

udid

连接的物理设备的唯一设备标识符

例如 1ae203187fc012g

launchTimeout

假设它挂起和失败会话之前以毫秒为单位等待仪器的时间

例如 20000

locationServicesEnabled

(仅限SIM)强制定位服务处于打开或关闭状态。默认是保持当前的模拟设置。

true 要么 false

locationServicesAuthorized

(仅限SIM)通过plist将位置服务设置为授权或未授权,以便位置服务警报不会弹出。默认是保持当前的模拟设置。请注意,如果您使用此设置,您还必须使用该bundleId功能发送您的应用的捆绑ID。

true 要么 false

autoAcceptAlerts

如果弹出,则自动接受所有iOS警报。这包括隐私访问权限提醒(例如,位置,联系人,照片)。默认是false。不适用于XCUITest基于测试。

true 要么 false

autoDismissAlerts

如果弹出,则自动关闭所有iOS警报。这包括隐私访问权限提醒(例如,位置,联系人,照片)。默认是false。不适用于XCUITest基于测试。

true 要么 false

nativeInstrumentsLib

使用本机intruments lib(即禁用仪器,无延迟)。

true 要么 false

nativeWebTap

(仅限SIM)在Safari中启用“真实”,非基于JavaScript的网页浏览。默认:false。警告:根据视口的大小/比例,这可能无法准确地点击一个元素

true 要么 false

safariInitialUrl

(仅限SIM)(> = 8.1)初始Safari浏览器网址,默认为本地欢迎页面

例如 https://www.github.com

safariAllowPopups

(仅限Sim)允许JavaScript在Safari中打开新窗口。默认保持当前的模拟设置

true 要么 false

safariIgnoreFraudWarning

(仅限SIM)防止Safari显示欺诈网站警告。默认保持当前的模拟设置。

true 要么 false

safariOpenLinksInBackground

(仅限SIM)Safari是否应允许在新窗口中打开链接。默认保持当前的模拟设置。

true 要么 false

keepKeyChains

(Sim-only)当appium会话开始/结束时是否保留钥匙串(Library / Keychains)

true 要么 false

localizableStringsDir

在哪里寻找可本地化的字符串。默认en.lproj

en.lproj

processArguments

使用工具传递给AUT的参数

例如, -myflag

interKeyDelay

输入时发送到元素的击键之间的延迟,以毫秒为单位。

例如, 100

showIOSLog

是否显示从appium日志中的设备捕获的任何日志。默认false

true 要么 false

sendKeyStrategy

用于将测试类型输入测试领域的策略。模拟器默认:oneByOne。实际设备默认值:grouped

oneByOne,grouped或者setValue

screenshotWaitTimeout

以秒为单位的最大超时等待生成屏幕截图。默认:10

例如, 5

waitForAppScript

ios自动化脚本用于确定应用程序是否已启动,默认情况下系统等待页面源不为空。结果必须是布尔值

例如true;,target.elements().length > 0;,$.delay(5000); true;

webviewConnectRetries

向远程调试器发送连接消息以获取webview的次数。默认:8

例如, 12

appName

被测应用程序的显示名称。用于在iOS 9+中自动化后台应用程序。

例如, UICatalog

customSSLCert

(仅限Sim / Emu)向模拟器添加SSL证书。

例如 
-----BEGIN CERTIFICATE-----MIIFWjCCBEKg...
-----END CERTIFICATE-----

webkitResponseTimeout

(仅限实际设备)设置时间(以毫秒为单位)以等待Safari会话中WebKit的响应。默认为5000

例如, 10000

4、Capability实战

  当我们知道基础的Capability 如何使用时,大家是否觉得现在我们已经就可以原原本本的照着去执行了呢?其实没错,是可以照样去执行。但是你有思考过一个问题吗?如果你的app变化了?你的package变化了?你的手机变化了?你的版本变化了等等你怎么去实现?你是不是还需要到程序里面来更改代码?low吗?要想不low我们接着往下看。

 1 # coding=utf-8
 2 # 1.先设置编码,utf-8可支持中英文,如上,一般放在第一行
 3 
 4 # 2.注释:包括记录创建时间,创建人,项目名称。
 5 '''
 6 Created on 2019-7-05
 7 @author: 潇潇说测试
 8 Project:学习和使用appium自动化测试-与Capability完美懈垢之解读
 9 '''
10 # 3.导入模块
11 from appium import webdriver
12 import time
13 import os
14 
15 def testCase(platformName,platformVersion,deviceName,app,appPackage,appActivity,port):
16    PATH = lambda p: os.path.abspath(os.path.join(os.path.dirname(__file__), p))
17    desired_caps = {}
18    desired_caps['platformName'] = platformName #设置平台
19    desired_caps['platformVersion'] = platformVersion #系统版本
20    desired_caps['deviceName'] = deviceName #设备id
21    desired_caps['autoLaunch'] = 'true' #是否自动启动
22    desired_caps['app'] = PATH(app)#安装包路径,放在该py文件的目录下)
23    desired_caps['appPackage'] = appPackage #包名
24    desired_caps['appActivity'] = appActivity #启动的activity
25    self.driver = webdriver.Remote('http://localhost:%s/wd/hub', desired_caps) % port

  从上面的代码我们可以和之前的代码进行比较,大家是否发现了一些不同之处。在做自动化时我们一定要保持数据的灵活性,所以在这里我们做了一些小小的改变,我们将所有的数据都改变成了变量,变量从何而来这个我们后面可能会讲,这个会去读取配置文件。现在从代码层面来看是否要比之前的代码更有可读性呢?其实现实中并不是这样,有更高级的版本,这个后面有时间再讲。

  在代码的第11行大家注意一个问题没有,在一个字符串中间我使用了一个%s,这个在python里面代表的意思是取一个变量,这个变量是我后面跟着的 port 这个变量的值,这里唯一的有问题就是这里。

5、小结

 1、想要更详细了解的小伙们,可以看一下官方文档:

官方文档:https://github.com/appium/appium/blob/master/docs/en/writing-running-appium/caps.md

  好了,今天就给小伙伴们分享到这里了。


              【下面是我整理的2023年最全的软件测试工程师学习知识架构体系图】


一、Python编程入门到精通

二、接口自动化项目实战

三、Web自动化项目实战


4. Combate real del proyecto de automatización de aplicaciones

5. Hoja de vida de los fabricantes de primer nivel


6. Probar y desarrollar el sistema DevOps

7. Herramientas de prueba automatizadas de uso común


Ocho, prueba de rendimiento JMeter

9. Resumen (pequeña sorpresa al final)

la vida es larga así que agregue aceite. Cada esfuerzo no será defraudado, mientras perseveres, habrá recompensas al final. Valora tu tiempo y persigue tus sueños. No olvides la intención original, sigue adelante. ¡Tu futuro está en tus manos!

La vida es corta, el tiempo es precioso, no podemos predecir lo que sucederá en el futuro, pero podemos captar el momento presente. Aprecia cada día y trabaja duro para hacerte más fuerte y mejor. Creencia firme, búsqueda persistente, ¡el éxito eventualmente te pertenecerá!

Solo desafiándote constantemente a ti mismo puedes superarte constantemente. Persista en perseguir sus sueños y avance con valentía, y descubrirá que el proceso de lucha es tan hermoso y valioso. ¡Cree en ti mismo, puedes hacerlo!

Supongo que te gusta

Origin blog.csdn.net/NHB456789/article/details/131808377
Recomendado
Clasificación