Sistema de control de grupo de telefonía móvil OpenSTF

Antes de hacer tráfico de dominio privado, estudié muchos mensajes grupales de WeChat y descubrí accidentalmente stf, un excelente sistema de control de grupo de teléfonos móviles de código abierto, que puede realizar el control remoto y en tiempo real de teléfonos móviles. Pi can Puede construir un sistema que pueda realizar un teléfono móvil en la nube por sí mismo en tiempo real.

Y se puede personalizar y desarrollar para la pared de teléfonos móviles, la pared de puntos, las pruebas automatizadas y la ejecución por lotes para limpiar la lista, lo cual es extremadamente simple.

Busqué algo de información en Internet, pero todo era copiar y pegar, y no había nutrición. Todos son simples de construir y fáciles de usar. Esta vez me gustaría aprovechar esta oportunidad para ordenar todos los pozos que pisé y hacer registros detallados.

Echemos un vistazo más de cerca a OpenSTF y clasifíquelo desde varios ángulos.

1. Construir el sistema OpenSTF

2. Conecta dispositivos móviles

3. Permisos de función del sistema

4. Depuración remota

5. Ficha de acceso remoto

6. Integración Jenkins

7. Control de aplicaciones

8. Implementación distribuida de OpenSTF

(1) Construcción del sistema OpenSTF

Hay dos maneras:

1. A través de Docker

2. Constrúyalo usted mismo de acuerdo con los pasos (hay muchos hoyos, no recomendado)

Dada la versatilidad de la construcción del sistema, por el momento sólo hablamos de la situación de la construcción a través de docker.

Docker necesita tres imágenes para construir stf: stf, rethinkdb, adbd

Se recomienda usar docker-compose para configurar:

version: "3"
services:
  rethinkdb:
    image: rethinkdb
    container_name: rethinkdb
    restart: always
    volumes:
      - "/docker/openstf/rethinkdb:/data"

  adbd:
    image: sorccu/adb:latest
    container_name: adbd
    privileged: true
    restart: always
    volumes:
      - "/dev/bus/usb:/dev/bus/usb"
      - "/data:/data"

  stf:
    build: .
    container_name: stf
    restart: always

Después de la configuración, ejecute docker-compose up directamente. La configuración a través de docker es muy sencilla.

Después de extraer e iniciar la imagen, verá tres contenedores en docker ps: openstf/stf:latest, rethinkdb, sorccu/adb:latest.

¡Aviso! ! ! ¡Aquí hay un agujero!

Dado que stf necesita una gran cantidad (miles) de puertos para conectarse al teléfono móvil, es necesario abrir todos los puertos de firewall del servidor, de lo contrario, ¡no podrá conectarse al teléfono móvil! !

(2) Conexión de dispositivos móviles

Originalmente, el paso de conectar el dispositivo móvil se puede enchufar directamente, pero habrá algunos problemas en la operación real. Esta sección solo resume los problemas:

1. Debe activar la depuración USB del teléfono

2. Debe abrir el teléfono para permitir clics de ubicación simulados (en modo desarrollador)

3. La aplicación de servicio STF se instalará automáticamente (algunos teléfonos móviles deben hacer clic para permitir)

Después de completar los tres elementos anteriores, puede ver el dispositivo móvil correspondiente desde el fondo de stf y operarlo.

Cabe señalar que el teléfono móvil conectado a STF necesita tener una minicap, de lo contrario no se puede conectar con normalidad. Actualmente se sabe que algunos teléfonos móviles OPPO/VIVO de versión alta no se pueden conectar. Si desea hacer un control de grupo, se recomienda usar un modelo alrededor de Mi 6. 

(3) Permisos de funciones del sistema

OpenSTF en sí admite una variedad de métodos de autenticación, esta sección proporciona una forma más común de LDAP. Se puede acceder sin problemas y los permisos se pueden configurar a través de LDAP

./stf local --public-ip ${ip} --allow-remote --auth-type ldap --auth-options ‘["–ldap-url",“ldap:服务器地址”, “–ldap-bind-dn”,“你的账号”,"–ldap-search-dn",“DC=sunraycn,DC=cn”, “–ldap-bind-credentials”,“ldap密码”, “–ldap-search-class”,“user”, “–ldap-search-field”, “用户信息字段”]’

 (4) Depuración remota

Primero necesitas registrar un keychan en STF

 Genere un keychan en la computadora de depuración que necesita conectar al teléfono móvil remoto, luego péguelo y guárdelo. Escriba un nombre fácil de recordar para el dispositivo.

Después de agregar keychan, podemos elegir un teléfono móvil para controlar, luego de ingresar, podemos ver la siguiente pantalla:

Copie el comando de conexión remota en el cuadro rojo y ejecútelo en su bash para conectarse de forma remota al dispositivo remoto a través de adb.

Recuerde ingresar cuando finalice la depuración

adb disconnect

para desconectar la conexión remota.

¡Aviso! ! ! Solo cuando el control del teléfono móvil está encendido en la página de fondo, se puede realizar la depuración remota; de lo contrario, el puerto no se abrirá y no se podrá realizar la depuración. !

(5) Token de acceso remoto

STF puede acceder a la API del sistema a través del token de acceso remoto

Genere un token en el fondo STF:

Asegúrese de guardarlo después de la generación y utilícelo en futuras solicitudes de API.

API de uso común de STF:

1. Obtener información del usuario
Método: OBTENER
URL: http://sudominio/api/v1/usuario
Encabezado:
Autorización: Portador 2a91d54cceb54993a468582041c8c67cadb6116881f84fec825e5111bdcde6c9

2. Enumere todos los dispositivos STF (incluidos los dispositivos desconectados o inaccesibles de otro modo)
Método: OBTENER
URL: http://sudominio/api/v1/dispositivos
Encabezado: Autorización: Portador 2a91d54cceb54993a468582041c8c67cadb6116881f84fec825e5111bdcde6c9

3. Devolver información sobre un dispositivo específico
Método: GET
URL: http://yourdomain/api/v1/devices/FA6990313540
Header: Authorization: Bearer 2a91d54cceb54993a468582041c8c67cadb6116881f84fec825e5111bdcde6c9

4. Devolver información sobre usted (usuario autenticado)
Método: OBTENER
URL: http://sudominio/api/v1/usuario
Encabezado: Autorización: Portador 2a91d54cceb54993a468582041c8c67cadb6116881f84fec825e5111bdcde6c9

5. Devuelva una lista de dispositivos que el usuario autenticado está utilizando actualmente.
Método: GET
URL: http://yourdomain/api/v1/user/devices
Header: Authorization: Bearer 2a91d54cceb54993a468582041c8c67cadb6116881f84fec825e5111bdcde6c9

6. Intente agregar un dispositivo bajo el control de un usuario autenticado. Esto es similar a presionar "usar" en la interfaz de usuario
Método: POST
URL: http://yourdomain/api/v1/user/devices
Header:
(1) Authorization: Bearer 2a91d54cceb54993a468582041c8c67cadb6116881f84fec825e5111bdcde6c9
(2) Content-Type: application/json
Body: {"serie":"521df70f"}

7. Elimine el dispositivo de la lista de dispositivos del usuario autenticado. Esto es similar a presionar "Dejar de usar" en la interfaz de usuario
Método: ELIMINAR
URL: http://sudominio/api/v1/usuario/dispositivos/521df70f
Encabezado: Autorización: Portador 2a91d54cceb54993a468582041c8c67cadb6116881f84fec825e5111bdcde6c9

8. Obtenga la URL de conexión remota del dispositivo
Método: URL POST
: http://sudominio/api/v1/usuario/dispositivos/521df70f/remoteConnect
Encabezado: Autorización: Portador 2a91d54cceb54993a468582041c8c67cadb6116881f84fec825e5111bdcde6c9

9. Sesión de depuración remota del
método del dispositivo desconectado: Eliminar
URL: http: // yourdomain/api/v1/user/dispositions/521df70f/remoteconnect
encabezado: autorización: portador 2a91d54ceb549999999 3a468582041c8c67cadb6111116888884444251511f84444444442511f844444444444425 CDE6C9
 

(6) integración Jenkins

Hay un complemento OpenSTF en Jenkins que se puede instalar, pero la versión es relativamente antigua y nadie parece mantenerla.

Después de la instalación, en el paso de compilación, puede agregar un teléfono móvil inactivo en STF para ejecutar el contenido de compilación

(7) Control de aplicaciones

Dado que recomendamos usar Docker para compilar OpenSTF, puede usar adb cuando desee controlar y realizar algunas operaciones automatizadas en la aplicación. A diferencia de la depuración de adb, puede invocar directamente los comandos de adb ingresando al contenedor de la ventana acoplable. El siguiente es un ejemplo de cómo abrir WeChat:

docker exec openstf_adb_1 adb -s $element shell am start com.tencent.mm/com.tencent.mm.ui.LauncherUI

Debido a que varios dispositivos están conectados en STF, es necesario usar adb -s para distinguir qué dispositivo está conectado. Por supuesto, si usa jenkins para compilar, puede escribir directamente un shell para atravesar la identificación del dispositivo.

Del mismo modo, las pruebas de mono y las pruebas de automatización de la interfaz de usuario se pueden realizar a través de la línea de comandos.

(8) Despliegue distribuido de STF

Hay dos esquemas para la distribución de STF, los esquemas son los siguientes:

  • El nodo maestro implementa el servicio STF y permite el acceso remoto a la API, y los nodos secundarios solo necesitan implementar ADB para garantizar que el puerto ADB 5037 esté expuesto al mundo exterior. La ventaja de esta solución es que es fácil de implementar y los nodos secundarios no necesitan implementar servicios STF. La desventaja es que la nueva máquina en el nodo secundario necesita volver a ejecutar el comando STF en el nodo principal para identificar la nueva máquina en el nodo secundario.
  • El nodo principal implementa el servicio STF y permite el acceso remoto a la API, y el subnodo también implementa el servicio STF y permite el acceso remoto a la API. El nodo maestro luego conecta los nodos secundarios. La ventaja de esta solución es que el dispositivo recién agregado del nodo secundario se puede identificar automáticamente. La desventaja es que los nodos secundarios también necesitan implementar servicios STF.

En el primer caso, tome el nodo secundario de Windows como ejemplo

(1) Abra ADB y exponga el puerto 5037 al mundo exterior

adb nodaemon server -a -P 5037

Si el puerto adb está ocupado, puede usar el comando para encontrar el proceso que ocupa el puerto 5037 y eliminar el proceso.

netstat -aon|findstr 5037
taskkill /pid 5018 /f

(2) Vaya al nodo maestro MAC Master y ejecute el comando del proveedor stf para conectarse al nodo secundario de Windows

IP de la ventana: 192.168.27.247, IP de la máquina MAC: 192.168.27.180

stf provider --name GHL.local --min-port 7400 --max-port 7700 --connect-sub tcp://127.0.0.1:7114 \
--connect-push tcp://127.0.0.1:7116 --group-timeout 900 --public-ip 192.168.27.180 \
--storage-url http://localhost:7100/ \
--adb-host 192.168.27.247 --adb-port 5037 \
--vnc-initial-size 600x800 --mute-master never --allow-remote

Para tantos parámetros anteriores, puede verificar el registro de inicio STF del nodo maestro para averiguarlo, aquí es principalmente agregando

--adb-host 192.168.27.247 --adb-port 5037 \

para conectarse a la máquina Windows.

En el segundo caso, tome el nodo secundario de Linux como ejemplo

Implemente un servicio STF en Linux y ejecute la API de acceso remoto. La IP de Linux es: 192.168.27.200, y la IP de la máquina MAC es: 192.168.27.180. Luego, solo necesitamos ejecutar el proveedor stf en Linux para conectarnos a el nodo maestro El comando es el siguiente:

stf provider --name centerOs.local --min-port 7400 --max-port 7700 \ 
--connect-sub tcp://192.168.27.180:7114 --connect-push tcp://192.168.27.180:7116 \
--group-timeout 20000 --public-ip 192.168.27.180 --storage-url http://192.168.27.180:7100/ \ 
--vnc-initial-size 600x800 --allow-remote

Aquí puede ver que no es necesario ingresar el puerto remoto de adb. En este momento, la máquina se inserta en el nodo de Linux y el nodo maestro puede ver la máquina montada en Linux en tiempo real. No es necesario volver a ingresar el comando del proveedor stf en el nodo principal.

En resumen, OpenSTF sigue siendo una herramienta de integración de control de grupo de código abierto relativamente general y simple.

El arrendador supuso que los sistemas de prueba en la nube de las principales plataformas se desarrollan de forma secundaria en base a OpenSTF. Por supuesto, los sistemas de prueba en la nube de las principales plataformas tendrán una distribución de tareas, un control de autoridad, una recuperación de registros y una salida de informes más complejos.

Supongo que te gusta

Origin blog.csdn.net/u013772433/article/details/122812422
Recomendado
Clasificación