Versión completa de la entrevista de prueba de Alibaba (1) con respuestas

Un artículo extenso de 10.000 palabras, se recomienda recopilarlo.

1 ¿Qué es POM y por qué debería usarlo?

POM es la abreviatura de Page Object Model y es una idea de diseño, no un marco. El significado general es que cada página se trata como un objeto, y los elementos de la página y las operaciones entre los elementos son las propiedades y comportamientos del objeto de la página, por lo que es natural utilizar la idea de clases para organizar nuestras páginas. Generalmente, se escribe un archivo de clase para una página, que contiene el posicionamiento de los elementos y los métodos de operación comercial de la página.

Para escribir nuestros casos de prueba de manera simple y clara, a menudo encapsulamos muchos métodos de operaciones comerciales en el objeto de la página, y el script de prueba solo necesita llamar a los métodos relevantes.

2. ¿Qué haces si los requisitos de los elementos de la página cambian con frecuencia?

Adopte el pensamiento POM. La ventaja es que siempre que se cambie una página, modificaré la posición del elemento y los métodos relacionados del objeto de la página, y no es necesario modificar el script.

3. ¿Encontró algún problema durante el proceso de automatización? Por ejemplo

Cambie con frecuencia la interfaz de usuario y modifique con frecuencia el código en el objeto de la página.

Ejecute el caso de uso para informar y manejar errores, como excepciones como que el elemento no es visible o no se puede encontrar.

Reutilice scripts de prueba y reutilice tanto código como sea posible

Problemas de posicionamiento de elementos de página causados ​​por algunos marcos nuevos, como el editor ck, tablas dinámicas, etc.

4 Dé algunos ejemplos de excepciones que haya encontrado durante las pruebas automatizadas de Selenium.

ElementNotSelectableException: el elemento no se puede seleccionar.

ElementNotVisibleException: el elemento no es una excepción visible

NoSuchAttributeException: no existe tal excepción de atributo

NoSuchElementException: no hay excepción para el elemento

NoSuchFrameException: no hay excepción en este marco

TimeoutException: excepción de tiempo de espera

Elemento no visible en este punto: El elemento no es visible en el punto actual

5 Cómo lidiar con las ventanas emergentes de alerta

Hay dos ventanas emergentes de alerta comunes que tenemos: ventanas emergentes basadas en ventanas y ventanas emergentes basadas en páginas web.

Webdriver puede manejar ventanas emergentes de alerta y Selenium proporciona la interfaz de alerta.

Los códigos de operación relevantes son los siguientes:

Alerta alerta = driver.switchTo().alert() // Cambiar a alerta

alert.accept() // Haga clic en el botón Aceptar en la ventana emergente

alert.dismiss() // Haga clic en el botón cancelar de la ventana emergente

alert.getText() // Obtiene el contenido del texto en la ventana emergente

alert.sendkeys() // Algunas ventanas emergentes también admiten la entrada de texto, en este caso los caracteres a ingresar se pueden ingresar mediante el método sendkeys.

6 ¿Cómo manejar múltiples ventanas en Selenium?

Este procesamiento de salto entre múltiples ventanas se encuentra a menudo en las pruebas automatizadas de selenio reales. Es decir, cuando hace clic en un enlace, el enlace se abrirá en una nueva pestaña y luego deberá encontrar la página donde se abre el elemento en la nueva pestaña, por lo que debe usar el método switchTo aquí.

Es necesario obtener el identificador de ventanas múltiples del navegador actual y luego saltar al nuevo identificador o al antiguo según su criterio.

# Último identificador

current_window_handles = self.driver.window_handles

self.driver.switch_to.window(current_window_handles[-1])

elif window_reference == "predeterminado":

self.driver.switch_to.default_content() #Manejador actual predeterminado

demás:

self.driver.switch_to.window(window_reference) #Especificar identificador

7. ¿Alguna vez ha encontrado elementos en un Marco al buscarlos? ¿Cómo maneja el posicionamiento de los elementos en un Marco?

A veces sabemos que no hay ningún problema con la expresión de posicionamiento del elemento, pero aún no solicitamos dicho elemento, entonces debemos considerar si el elemento está en el marco. Si es así, necesitamos cambiar al marco de destino desde la ventana superior mediante el método switchTo.Frame(). Podemos localizar el marco a través del nombre, identificación e índice del marco.

8 ¿Cómo lidiar con el menú desplegable?

Por lo general, también podemos hacer clic en los elementos del menú desplegable a través del método Click. Hay otro método. Hay una clase llamada Select en Selenium que admite este tipo de operación interactiva del menú desplegable.

La sintaxis de uso básica es esta:

Se=nuevo Seleccionar(elemento)

Se.selectByIndex(índice)

Se.selectByvalue(valor)

Se.selectByVisibleText(texto)

9 ¿Cuál es la diferencia entre salir y cerrar al cerrar el navegador?

cerrar es cerrar la pestaña en la que se está enfocando actualmente;

Y salir es cerrar todas las pestañas del navegador y salir de la sesión del navegador;

Salir se usa generalmente antes de finalizar la prueba y cerrar se usa para cerrar una página durante la ejecución del caso de prueba.

10 ¿Qué es imlicitlyWait (espera implícita)?

webdriver continuará buscando elementos dentro del rango de tiempo de espera especificado hasta que se encuentre el elemento o se agote el tiempo de espera.

11 ¿Qué es la espera explícita? (espera explícita)

Por lo general, es un fragmento de código que personalizamos y que se utiliza para esperar a que ocurra una determinada condición antes de continuar ejecutando el código posterior.

12 ¿Cómo subir archivos?

Cuando cargamos archivos en la página web, podemos colocar directamente la ruta completa del archivo en el disco y cargarlo mediante el método sendKeys.

13 ¿Cómo implementar eventos de desplazamiento del mouse, eventos de teclado y acciones de arrastre?

En Webdriver, para manejar eventos de teclado y eventos de mouse, generalmente se usan los métodos proporcionados por la clase Acciones, incluido el desplazamiento del mouse, el arrastre y la entrada de combinaciones de teclas.

Aquí hay algunos métodos

Método: hacer clic y mantener()

Escenario de uso: busque un elemento, haga clic con el botón izquierdo del mouse y no lo suelte. Puede probar este escenario usted mismo haciendo clic con el mouse sin soltarlo.

Método: contenidoClic()

Escenario de uso: Simule un clic derecho del mouse. Generalmente, al hacer clic derecho se abrirá el menú.

Método: doble clic()

Escenario de uso: simular doble clic del mouse

Método: arrastrar y soltar (fuente, destino)

Escenario de uso: simule arrastrar un elemento desde la posición de origen a la posición de destino

Métodos de evento de teclado: keyDown(keys.ALT), keyUp(keys.SHIFT)

Escenario de uso: haga clic en el evento del teclado, que se divide en dos acciones, una es hacer clic en el teclado y la segunda acción es soltar el clic (liberar)

14 En las pruebas automatizadas de selenio, ¿qué tipos de pruebas suele realizar?

Principalmente pruebas de humo y pruebas de regresión. Las pruebas de regresión escriben principalmente algunos escenarios con funciones estables y fácil implementación, y los implementan a través de medios automatizados para ahorrar tiempo de prueba.

15 ¿Cómo gestiona y ejecuta sus casos de prueba?

Implementado a través de marcos de pruebas unitarias, los más comunes incluyen unittest y pytest.

16 Generación automatizada de informes de prueba

Seducir

17 ¿Se puede empaquetar un marco de pruebas automatizado?

El marco central principal del marco de automatización es el modelo en capas + PO:

Son: capa de encapsulación básica BasePage, capa de objeto de página PO y capa de caso de prueba TestCase. Luego agregue el módulo de procesamiento de registros, el módulo de lectura del archivo de configuración ini, el módulo de controlador de datos unittest+ddt y el modo de integración continua de jenkins.

18 ¿Alguna vez las pruebas automatizadas han informado errores falsamente? ¿Qué debo hacer si ocurre un falso positivo?

Ha habido falsos positivos. A veces, el informe de prueba automatizado muestra que se ha encontrado un error, pero en realidad se utilizan pruebas manuales para confirmar que el error no existe.

Las causas comunes de los falsos positivos son:

1. El posicionamiento del elemento es inestable y es necesario mejorar la estabilidad del guión tanto como sea posible;

2. ¡El desarrollo actualizó la página pero la prueba no la actualizó ni la mantuvo a tiempo!

19 ¿Qué problemas encontró durante el proceso de prueba automatizado y cómo los resolvió?

1. Cambie la página con frecuencia y, a menudo, modifique el código en la clase de objeto de la página.

2. Ocasionalmente se producen falsos positivos en las pruebas automatizadas.

3. Se cubren los resultados de las pruebas automatizadas: Jenkins crea carpetas según el tiempo.

4. El mantenimiento automatizado del código de prueba es problemático

5. Pruebas automatizadas para datos de comparación de bases de datos.

20 ¿Qué marco se utilizó para las pruebas automatizadas en la empresa anterior?

Puedes nombrar uno de los siguientes en los que eres bueno:

1.python+selenio+unittest+htmltestrunner

2.python+selenio+pytest+encanto

3.robotframework+Selenium2Biblioteca

21 ¿Cómo lidiar con la página de marco?

Primero use driver.switch_to.frame() para saltar al marco.

Luego opere los elementos de la página,

Después de la operación, use driver.swith_to.default_content() para saltar.

22 ¿Cómo lidiar con la ventana emergente de alerta?

Utilice el método driver.switch_to.alert() para saltar primero a la ventana emergente de alerta

Luego haga clic en el botón Aceptar hasta aceptar;

Es difícil cancelar haciendo clic en descartar;

Obtenga el texto de la ventana emergente a través de texto;

23 ¿Qué es la afirmación?

La aserción se utiliza en el código para verificar que los resultados reales cumplan con los resultados esperados. Si el caso de prueba falla, se lanza una excepción y se proporciona el registro de aserción.

24 Cómo mejorar la velocidad de ejecución de los scripts de Selenium

1. Optimice el tiempo de espera y utilice la espera inteligente WebDriverWait en lugar de la espera forzada, el sueño y la espera implícita.

2. Reducir operaciones innecesarias

3. Si el servidor lo permite, utilice subprocesos múltiples para implementar la ejecución simultánea de casos de prueba.

25 Cómo automatizar las pruebas de funciones que contienen códigos de verificación

El reconocimiento de imágenes es difícil y el efecto no es bueno. No recomendado.

Bloquee códigos de verificación, invite al procesamiento de desarrollo y restaure en el entorno de prueba, en el entorno de prelanzamiento y en el entorno oficial.

Obtener códigos de verificación de la base de datos

26 ¿Cuáles son las categorías de pruebas automatizadas?

Automatización de la interfaz de usuario: dividida en automatización web y de aplicaciones

Automatización de interfaz

27 ¿Cuáles son los escenarios de uso de las pruebas automatizadas?

La demanda es estable y no cambia con frecuencia.

El ciclo de desarrollo y prueba es largo y es necesario realizar pruebas de regresión con frecuencia.

Escenarios en los que es necesario ejecutar la misma prueba repetidamente en múltiples plataformas.

Algunos elementos de prueba no se pueden implementar mediante pruebas manuales o el costo manual es demasiado alto.

El desarrollo del software bajo prueba está relativamente estandarizado y puede garantizar la capacidad de prueba del sistema.

28 Describa el proceso de prueba automatizado.

1. Escriba un plan de prueba automatizado

2. Diseñar casos de prueba automatizados

3. Escribir scripts y marcos de pruebas automatizados.

4. Depuración y mantenimiento de scripts

5. Pruebas desatendidas

6. Mantenimiento posterior al script (agregar casos de uso, desarrollar versiones actualizadas)

29 ¿Cómo se utiliza la respuesta de una interfaz en la siguiente interfaz? (Una solicitud depende del resultado de otra solicitud)

reflexión de la variable global de cookies

Almacenar en una tabla de Excel y recuperar cuando sea necesario

Resultados esperados en el marco: después de verificar con éxito el usuario dependiente de la biblioteca

30 ¿Cuál es la diferencia entre automatización web y de aplicaciones?

1 diferencias de inicio

Lado de la aplicación: al ejecutar el caso de uso, un teléfono Android solo puede abrir un paquete apk al mismo tiempo para su funcionamiento.

Lado web: en el lado web, abra varios navegadores al mismo tiempo a través de subprocesos múltiples (o procesos múltiples) de Python, lo que permite que Selenium opere múltiples navegadores;

2 Verificación de instalación

Lado de la aplicación: debe verificar si el software está instalado antes de realizar la prueba.

Lado web: no requiere instalación, simplemente ingrese la URL en el navegador para probar.

3 operaciones de elementos de página

Lado de la aplicación: debe asegurarse de que se muestren elementos invisibles en la página móvil antes de poder operarlos.

Lado web: si encuentra una página que requiere bajar para cargar, puede usar js para operar la barra de desplazamiento.

Posicionamiento de 4 elementos

Lado de la aplicación: algunos métodos de posicionamiento no son compatibles, como css_selector y link_text

Lado web: nombre, id, nombre_clase, css, xpath, link_text, partrail_link_text, tag_name, coordenadas, reconocimiento de imágenes

5 métodos de inicio

Lado de la aplicación: el contenido deseado_caps debe formularse porque contiene información del dispositivo, etc.

Lado web: obtenga el controlador iniciando diferentes clases de navegador de webdriver, como webdriver.Chrome(). También puede simular la carga de la página wap en el teléfono móvil para probar la página wap.

31 Explicación de los marcos unitest y pytest y ¿cuál se usa y por qué no el otro?

En comparación con unittest, pytest tiene las siguientes ventajas

Descubra automáticamente módulos de prueba y métodos de prueba

Afirmar usando afirmar + expresión

Puede configurar accesorios a nivel de sesión, nivel de módulo, nivel de clase, nivel de función, preparación de datos + trabajo de limpieza

Existe una rica biblioteca de complementos, actualmente más de 300.

32 Explicar los métodos de posicionamiento de elementos web y de aplicaciones respectivamente.

Web: id, xpath, nombre, nombre de clase, nombre de etiqueta, texto de enlace, texto de enlace parcial, css_selector

aplicación: id, nombre de clase, xpath

33 Diferencias entre obtener y publicar

GET: solicita datos de un recurso específico. Los datos solicitados se agregarán a la URL para dividir la URL y transmitir datos. Múltiples parámetros están conectados con &

POST: envía datos para ser procesados ​​al recurso especificado. La solicitud POST colocará los datos solicitados en el cuerpo del paquete de solicitud HTTP.

34 Diferencias entre http y https

1. El protocolo HTTPS requiere solicitar un certificado a una CA (Autoridad de Certificación), generalmente hay menos certificados gratuitos, por lo que se requiere una determinada tarifa. (El sitio web oficial de NetEase anterior era http y la dirección de correo electrónico de NetEase era https).

2. HTTP es un protocolo de transferencia de hipertexto, la información se transmite en texto sin formato, mientras que HTTPS es un protocolo de transmisión cifrado SSL seguro.

3. HTTP y HTTPS utilizan métodos de conexión completamente diferentes y utilizan puertos diferentes: el primero es 80 y el segundo es 443.

4. La conexión HTTP es muy simple y sin estado. El protocolo HTTPS es un protocolo de red creado a partir del protocolo SSL+HTTP que puede realizar transmisión cifrada y autenticación de identidad. Es más seguro que el protocolo HTTP. (Sin estado significa que el envío, transmisión y recepción de paquetes de datos son independientes entre sí. Sin conexión significa que ninguna de las partes comunicantes mantiene información sobre la otra parte durante mucho tiempo).

35 principio de selenio

Cuando se utiliza Selenium 2.0 para iniciar el navegador, el servicio web basado en el protocolo WebDriver Wire también se iniciará en segundo plano como el servidor remoto de Selenium y se vinculará al navegador. Posteriormente, el Servidor Remoto comienza a escuchar las solicitudes de operación del cliente;

Al ejecutar la prueba, el caso de prueba actuará como cliente y enviará la solicitud de operación de página para que se ejecute al servidor remoto en forma de solicitud Http. El cuerpo de la solicitud Http está en el formato JSON especificado por el protocolo WebDriver Wire para describir las operaciones específicas que debe realizar el navegador;

Después de que el servidor remoto reciba la solicitud, la analizará y enviará el resultado del análisis a WebDriver, que realmente realizará la operación del navegador;

WebDriver puede considerarse como un componente nativo que opera directamente el navegador, por lo que al configurar un entorno de prueba, generalmente primero debe descargar el WebDriver correspondiente al navegador.

Código fuente: inicie el programa chromedriver.exe a través de subprocess.Popen para proporcionar servicios

Driver.get, driver.find_element y otros métodos llaman al método self.execute en la parte inferior y, en última instancia, acceden a la dirección de interfaz proporcionada por chromedriver.

36 principio de apio

Una herramienta de prueba de automatización de UI multiplataforma de código abierto que admite scripts de prueba escritos en varios idiomas.

principio:

scripts de prueba (el script de prueba envía una solicitud al servidor de appium)

Después de que el servidor appium recibe la solicitud, la analiza y la reenvía a bootstrap.jar.

El jar recibe el comando appium y llama al comando UIAutomator para implementar la operación.

El resultado final se devuelve al servidor Appium mediante bootstrap.jar.

37 La diferencia entre los principios de implementación de automatización de Android e iOS (diferencia en el entorno de instalación)

Todos necesitan instalar jdk, nodejs, appium, appi-client

Principio de automatización de Appium:

Appium proporciona bibliotecas de terceros en varios idiomas, convierte scripts de prueba en URL bajo el protocolo WebDriver y los envía a las herramientas proxy en cada plataforma a través del servicio Node. Las herramientas proxy reciben continuamente URL durante el proceso de ejecución y analizan los comandos. para ejecutarse de acuerdo con el protocolo WebDriver Operación, luego llame al marco de prueba nativo en cada plataforma para completar la prueba y luego devuelva los resultados de la prueba al servidor Node.

El principio de automatización de Appium Android es:

El SDK oficial de Google viene con un marco para operar la interfaz de usuario de la aplicación llamado uiautomator. Luego, cuando se inicializa appium, enviará un bootstrip.jar al teléfono móvil, y luego el cliente de appium envía una solicitud al servidor de appium, y luego el servidor envía a bootstrip.jar. bootstrip.jar llama a la interfaz uiautomator, que controla el funcionamiento de la interfaz UI de la aplicación, y luego bootstrip.jar devuelve el resultado de la operación al servidor appium.

Principio de Appium iOS:

Appium en realidad usa WebDriverAgent en iOS y, como capa de controlador para implementar el protocolo webdriver, completa la automatización de iOS impulsando el marco UIAutomationUI de Apple.

38 módulos utilizados en pruebas automatizadas.

solicitudes+unittest+ddt+httptestrunner+pymysql+openpyxl+automatización de la interfaz de registro

selenio+pytest+allure automatización web

appium+selenium+pytest+allure+yaml automatización de aplicaciones

39 modelo OSI de siete capas

Capa física, capa de enlace de datos, capa de red, capa de transporte, capa de sesión, capa de presentación, capa de aplicación

40 Las diferencias entre cookie, sesión y token

cookie: almacenada en el lado del cliente para almacenar información de la sesión

Sesión: en el lado del servidor, registra el estado de la solicitud del usuario, el tiempo predeterminado es generalmente de 30 minutos.

El session_id se almacenará en la cookie. Toda la información de la cookie se pasará al servidor para cada solicitud. El servidor utiliza el session_id para identificar si se trata de la misma solicitud del usuario. Si no es el mismo usuario, preguntará para iniciar sesión nuevamente.

token: derechos de acceso

Autenticación: si la interfaz a la que se accede es normal y si el acceso ilegal pasa por alto el front-end. Evite saltar páginas y acceder directamente a la interfaz. simbólico

Autorización: si tiene permiso para acceder a la interfaz. El único globalmente dinámico. llave

41 códigos de estado comunes

Serie 100: La solicitud ha sido recibida y continúa procesándose;

Serie 200: indica éxito

200: Normal, el servidor respondió a la solicitud correctamente

Serie 300: redirección de recursos;

301: Redireccionamiento permanente; la página web solicitada se ha movido permanentemente a una nueva ubicación

302: 2 Redirección temporal; el documento solicitado se ha movido temporalmente a otro lugar y la nueva URL de este documento se proporciona en el encabezado de respuesta de ubicación.

303: El navegador redirige la respuesta POST a una nueva URL

307: la respuesta del navegador a GET redirige a una nueva URL

Serie 400: Error del cliente:

400: Solicitud incorrecta; el servidor no comprende la sintaxis de la solicitud.

401: No autorizado; como parámetros de solicitud, métodos, formatos, etc.

403: Acceso denegado; el servidor comprende la solicitud del cliente pero se niega a procesarla (sin permiso)

404: El recurso solicitado no existe

Serie 500: error del lado del servidor

500: error interno del servidor

501: Aún no implementado; el servidor no tiene la funcionalidad para completar la solicitud

502: error de puerta de enlace del servidor

503: El servidor no respondió debido a mantenimiento o sobrecarga.

504 tiempo de espera de solicitud

42 comandos adb escritos a mano

ayuda de adb: adb --ayuda

Iniciar servicio adb: adb start-server

Cerrar el servicio adb: adb kill-server

Obtenga el número de dispositivo: dispositivos adb

Obtenga la versión del sistema: adb shell getprop ro.build.version.release

Enviar archivos al teléfono móvil: ruta del archivo adb push en la computadora/ruta de almacenamiento del archivo que se enviará al teléfono móvil

adb push C:\Users\win\Desktop\xx.png /sdcard

Extraer archivos desde el teléfono móvil: ruta de extracción de adb en el teléfono móvil/ruta del archivo de almacenamiento del nombre del archivo de extracción en la computadora

adb pull /sdcard/xx.png C:\Users\win\Desktop

Verifique el registro de ejecución del teléfono móvil: adb logcat

Ingrese al terminal móvil: adb shell

Instalar la aplicación en el teléfono móvil: adb install path/xxx.apk

Desinstalar aplicación móvil: aplicación de desinstalación adb

Obtenga el nombre del paquete de inicio de la aplicación y el nombre de inicio (⚠El teléfono debe abrir primero la aplicación correspondiente)

Mac/Linux: ventana de dumpsys de adb shell | grep mFocusedApp

Ejecutar en la terminal de Windows: adb shell dumpsys ventana windows | findstr mCurrent

Obtener la hora de inicio de la aplicación: adb shell am start -W nombre del paquete/.nombre de inicio

Verifique la dirección IP del dispositivo:

adb shell ifconfig wlan0

adb shell netcfg

Ver información de la CPU del dispositivo: adb shell cat /proc/cpuinfo

Ver información de la memoria del dispositivo: adb shell cat /proc/meminfo

43 encabezados de solicitud http y encabezados de respuesta

Solicitud http y su estructura:

La información de la solicitud incluye: línea de solicitud (solicitud), encabezado de solicitud, línea en blanco y datos de solicitud.

Respuesta y su estructura.

Componentes de respuesta: línea de estado, encabezados de respuesta, líneas en blanco y cuerpo de respuesta

44 funciones de uso común para las operaciones del mouse

context_click() clic derecho --> Este método simula el efecto del clic derecho del mouse

double_click() doble clic --> Este método simula el efecto de doble clic

drag_and_drop() arrastrar--> Este método simula el efecto de arrastre de doble clic

move_to_element() hover--> Este método simula el efecto de desplazamiento del mouse

ejecución de perform() --> Este método se utiliza para ejecutar todos los métodos del mouse anteriores

45 funciones de uso común para operaciones de teclado

send_keys(Keys.BACK_SPACE) Eliminar claves (Retroceso)

send_keys(Keys.SPACE) Tecla de espacio (Espacio)

send_keys(Keys.TAB) tecla de tabulación (Tab)

send_keys(Keys.ESCAPE) Tecla de escape (Esc)

send_keys(Keys.ENTER) Tecla Intro (Entrar)

send_keys(Keys.CONTROL,'a') Seleccionar todo (Ctrl+A)

send_keys(Keys.CONTROL,'c') Copiar (Ctrl+C)

send_keys(Keys.CONTROL,'v') Seleccionar todo (Ctrl+V)

enviar_keys(Keys.CONTROL,'x') copiar (Ctrl+X)

46 Resuelve el problema de la creación manual de datos.

parametrizar

Número de teléfono:

El número de teléfono móvil inicial se almacena en Excel y cada vez que se ejecuta se vuelve a escribir el nuevo número de teléfono móvil (número original + 1).

Cada vez que se consulta el número máximo de teléfono móvil de la base de datos, se suma 1 a esta base.

Sustitución de variables: dependencia de la base de datos ${mobile} ${regtime} ${memberid} ${loanid}

Lo más crítico: diseño de casos de uso y dependencias entre parámetros de casos de uso.

47 ¿Cuánto tiempo te llevó escribir el marco?

Modelo preliminar: 1-2 semanas, un mes

48 Uso de casos de prueba

Importe el módulo unittest, el archivo bajo prueba o una clase dentro de él

Cree una clase de prueba y herede unitest.TestCase

Defina la función de prueba, el nombre de la función comienza con test_, caso de prueba

Llame al método unittest.main() para ejecutar el caso de prueba

49 ¿Cómo garantizar la tasa de éxito de los elementos operativos en Selenium? En otras palabras, ¿cómo puedo asegurarme de que se pueda hacer clic en el elemento en el que hago clic?

1. Agregue el elemento de tiempo de espera inteligente (implícito) driver.implicitly_wait(30)

2. Agregue tiempo de espera obligatorio time.sleep()

3. Intente colocar el selector id, nombre, clas, xpath, css de diferentes maneras. Si el primer método falla, puede probar automáticamente el segundo.

50 ¿Cuál es su estrategia de ejecución para casos de uso de automatización?

Utilizar herramientas de prueba automatizadas y realizar análisis de requisitos de prueba;

Diseñar casos de prueba automatizados;

Construir un marco de pruebas automatizado, diseñar y escribir scripts automatizados;

Verifique la exactitud del script de prueba y finalmente complete el script de prueba automatizado (es decir, el software de aplicación cuya función principal es probar)

Resultados de la prueba de salida

51 métodos comunes de envío de datos POST

Hay cuatro formas principales:

aplicación/x-www-form-urlencoded;

multiparte/formulario-datos;

aplicación/json;

texto/xml

52 lenguajes y marcos de prueba automatizados de aplicaciones convencionales actuales adecuados para cada automatización

aplicación macaca, robot, UiAutomator

53 ¿Cuáles son los métodos de posicionamiento de Selenium? ¿Cuál se usa más?

Hay 8 métodos de posicionamiento de un solo elemento y 8 métodos de posicionamiento de múltiples elementos correspondientes; todos los métodos se basan en los métodos driver.find_element() y driver.find_elements(), de la siguiente manera:

desde el controlador web de importación de selenio

de selenium.webdriver.common.by importar por

controlador = webdriver.Chrome()

conductor.get('www.baidu.com')

driver.find_element_by_id('id') # Localiza el elemento a través del atributo de identificación del elemento

driver.find_element_by_name('name') # Localiza el elemento a través del atributo de nombre del elemento

driver.find_element_by_tag_name('tag_name') # Localiza el elemento por su nombre de etiqueta

driver.find_element_by_class_name('class_name') # Localiza el elemento por su nombre de clase

driver.find_element_by_link_text('link_text') # Localiza el elemento por el texto de visualización completo del elemento de enlace

driver.find_element_by_partial_link_text('partial_link_text') # Mostrar elemento de posicionamiento de texto por parte del elemento de enlace

driver.find_element_by_xpath('xpath') # Localiza elementos a través de expresiones xpath

driver.find_element_by_css_selector('css_selector') # Localizar elementos mediante expresiones css

driver.find_elements_by_id('id') # También hay 8 tipos de series find_elements_by_xxx, que pueden ubicar múltiples elementos que cumplan las condiciones.

driver.find_element(By.ID, 'id') # Cada método find_element_by_xxx se basa en el método find_element

driver.find_elements(By.ID, 'id') # La forma plural del método find_element() puede localizar múltiples elementos que cumplan las condiciones

Para garantizar la unidad del código, el método más utilizado es driver.find_element_by_xpath (), que pasa el localizador. Incluso si usamos id como localizador, todavía se escribe como una expresión de localizador xpath basada en id, como sigue:

baidu_yi_xia_locator = '//input[@id="su"]' # El localizador del botón de clic de Baidu está escrito como xpath, pero se basa en el atributo id

baidu_yi_xia = driver.find_element_by_xpath(baidu_yi_xia_locator) #Localiza el elemento y lo devuelve a la variable

baidu_yi_xia.click() # Haga clic en Baidu

54 ¿Cuántos errores puede encontrar la automatización de la interfaz de usuario?

El propósito de la automatización de la interfaz de usuario no es encontrar muchos errores, sino principalmente reducir la función de las operaciones básicas repetidas y el monitoreo en línea.

55 ¿El mono pertenece a la automatización?

Monkey no pertenece a la automatización en sentido estricto: Monkey genera eventos pseudoaleatorios de usuarios o sistemas y activa eventos de clic aleatorios en la pantalla.

56 ¿Qué casos suele automatizar y en qué etapa suele tener lugar la automatización?

Se utiliza principalmente para automatizar el proceso principal que es más fácil de implementar. Esta versión generalmente se monitorea automáticamente durante la fase de integración. Normalmente, se monitoreará en línea todo el tiempo.

57 ¿Qué herramientas utilizas generalmente para posicionar elementos en la automatización de aplicaciones?

Clientes para Uiautomatorview y appium

58 ¿Necesita una máquina servidor para ejecutar pruebas en Appium?

No se requiere ninguna máquina servidor para ejecutar pruebas en Appium. Appium facilita una arquitectura de 2 niveles donde la máquina de prueba se conecta al servidor de prueba que ejecuta Appium y automatiza todo. Puede ejecutar Appium en la misma máquina donde ejecuta sus pruebas.

59 ¿Cuáles son los errores que puede encontrar al usar Appium?

Error 1: se requiere la siguiente funcionalidad requerida pero no se proporciona: nombre del dispositivo, nombre de la plataforma

Error 2: adb no encontrado. Configure la variable de entorno ANDROID_HOME utilizando la ruta raíz del SDK de Android

Error 3: openqa.selenium.SessionNotCreatedException: no se puede crear una nueva sesión

Error 4: ¿Cómo encontrar elementos DOM o XPath en aplicaciones móviles?

60 Describa brevemente los principios de Appium?

Appium es un "servidor HTTP" escrito utilizando la plataforma Node.js y utiliza el protocolo de conexión Webdriver JSON para controlar las sesiones de iOS y Android.

Antes de inicializar Appium Server, Node.js debe estar preinstalado en el sistema. Cuando Appium esté descargado e instalado, configure un servidor en nuestra máquina que exponga la API REST.

Recibe solicitudes de conexión y comando del cliente y ejecuta el comando en el dispositivo móvil (Android/iOS),

Responde a respuestas HTTP.

Nuevamente, para realizar esta solicitud, utiliza un marco de automatización de pruebas móviles para controlar la interfaz de usuario de la aplicación. Frameworks como Apple Instruments para iOS (solo disponible en OS X v10.5 y superior con Xcode 3.0 o superior) Google UIAutomator para Android API nivel 16 o superior Selendroid para Android API nivel inferior a 15.

61 ¿Cómo mejorar la velocidad de ejecución del script de Selenium?

Como la velocidad de la red, la complejidad de los pasos de la operación, la velocidad de carga de la página, el tiempo de espera establecido en el script, la cantidad de subprocesos que ejecutan el script, etc. Por lo tanto, no podemos perseguir unilateralmente la velocidad de carrera, debemos garantizar la estabilidad y la clave es poder implementar pruebas de regresión de manera estable.

Reducir los pasos de operación: si se necesitan tres o cuatro pasos para abrir la página que queremos probar, podemos abrirla directamente a través de la URL para reducir operaciones innecesarias.

Interrumpa la carga de la página. Si la página carga demasiado contenido, podemos verificar el motivo de la carga lenta. Si el contenido cargado no afecta nuestra prueba, establezca un tiempo de espera e interrumpa la carga de la página.

Al configurar el tiempo de espera, puedes dormir por un tiempo fijo, o puedes interrumpir la espera después de detectar la aparición de un determinado elemento para mejorar la velocidad.

Cuarto, configure testNG para implementar subprocesos múltiples. Al escribir casos de prueba, asegúrese de lograr un acoplamiento flexible y luego, si el servidor lo permite, intente configurar la ejecución de subprocesos múltiples para mejorar la velocidad de ejecución.

62 ¿Qué es la integración continua?

La integración continua se origina en Extreme Programming (XP) y es una práctica de software. El paso de integración en el proceso de desarrollo de software es un proceso largo e impredecible. Puede ocurrir una gran cantidad de problemas durante el proceso de integración, por lo que el proceso de integración debe ser lo más pequeño y numeroso posible. De hecho, la integración continua se trata de integrar software constantemente. La integración continua, en su forma más simple, incluye una herramienta para monitorear los cambios en el control de versiones (SVN, etc.). Esta herramienta compila y prueba automáticamente su aplicación cuando se descubren cambios.

63 ¿Qué es el patrón de diseño de objetos de página?

Se logra mediante la abstracción de la separación de objetos de prueba y scripts de prueba.

64 ¿Cuál crees que es el mayor defecto de las pruebas automatizadas?

inestable

fiabilidad

No es fácil de mantener

costos y beneficios

65 ¿Selenium admite pruebas automatizadas de software de aplicaciones de escritorio?

Selenium no admite pruebas automatizadas de software de escritorio. Selenium ubica elementos según los atributos de los elementos de la página web, mientras que otras herramientas de prueba automatizadas de software de escritorio ubican elementos según la ubicación de los elementos del escritorio. Por supuesto, también se posicionan según los atributos. de elementos de escritorio.

66 ¿Qué es el TDC? ¿Cuánto sabes? ¿Qué es TDD?

BDD: Desarrollo impulsado por el comportamiento

TDD: desarrollo basado en pruebas

67 ¿Puede Selenium leer directamente los casos de prueba en la tabla de Excel para realizar pruebas relacionadas?

Sí, necesitas utilizar una biblioteca de terceros.

68 ¿Cuáles son los componentes del Selenio?

El más antiguo es Selenium IDE, que solo admite la instalación de un complemento en fiefox y admite la grabación de scripts de automatización. además

RC remoto, Grid, controlador web. Generalmente, lo más importante para nosotros es utilizar webdriver.

69 Si encuentra un iFrame al colocar un elemento, ¿cómo lo coloca? Si no se encuentran el atributo de identificación y el atributo de nombre, ¿cómo solucionarlo?

El primer problema: cuando encuentre cualquier elemento en el iFrame, simplemente escriba el localizador como antes. Sin embargo, al ejecutar el script, el localizador es correcto, pero el script aún no se ejecuta y se informa el error "no se puede encontrar". ". La razón es que este elemento está incrustado en un marco en línea iFrame (también lo llamamos subtrama), por lo que debe escribir el siguiente código antes de posicionar el elemento. La función es cambiar del marco principal actual al marco en línea. De cuantas maneras:

# Hay tres formas de cortar el marco.

# (1) A través del atributo id o atributo de nombre del marco

driver.switch_to.frame('layui-capa-iframe1')

# (2) Pase el índice del marco, comenzando desde 0 (el primer iframe)

controlador.cambiar_a.marco(0)

# (3) Utilice el localizador y el método find_element() para localizar el elemento del marco y luego ingrese el elemento del marco posicionado en el parámetro iframe_loc = '//iframe[@id="layui-layer-iframe1"]'

controlador.switch_to.frame(driver.find_element_by_xpath(iframe_loc))

Segunda pregunta: no hay ningún atributo de identificación o nombre. Solo necesita usar xpath para escribir una expresión. La expresión usa una combinación de otros atributos únicos o múltiples del elemento, siempre que se pueda garantizar la unicidad del elemento, como se muestra en el siguiente ejemplo:

//entrada[@value="Baidu"]

70 Está claro que el elemento que posicionaste es correcto, pero se reporta un error al ejecutar el script de prueba automatizado ¿Cuantos métodos tienes para solucionar este problema? Por favor escriba su solución.

(1) El elemento está en iFrame: primero córtelo en iFrame

(2) El elemento está en la nueva ventana que se abre: primero cambie a la nueva ventana

(3) El elemento está en la página recién redirigida, pero por varias razones, la nueva página salta muy lentamente, lo que ha excedido el tiempo de espera máximo para el posicionamiento del elemento en Selenium: aumente el tiempo de espera implícito o espere inteligentemente a este elemento.

El código para la espera implícita es el siguiente:

desde el controlador web de importación de selenio

controlador = webdriver.Chrome()

#Establecer espera global (es decir, espera implícita), tenga en cuenta que solo necesita configurarla una vez

driver.implicitly_wait(60) #Extender a 60 segundos

El código para mostrar la espera (espera inteligente) es el siguiente:

desde el controlador web de importación de selenio

desde selenium.webdriver.support.wait importar WebDriverWait

desde selenium.webdriver.support importe condiciones_esperadas como EC

controlador = webdriver.Chrome()

mobile_phone_loc = (Por.XPATH, '//input[@name="mobilephone"]')

elem = WebDriverWait(controlador, 60).hasta(EC.element_to_be_clickable(mobile_phone_loc))

elem.send_keys('13812345678')

71 Explique brevemente cómo utilizar scripts de prueba automatizados para implementar la función de clic para atravesar casillas de verificación (requiere todas las marcas).

xPathRadio = '//entrada[@type="radio"]'

# Objeto de casilla de verificación Radiobox Debemos usar el método find_elements para ubicar múltiples elementos (las casillas de verificación son múltiples elementos)

cajas de radio = driver.find_elements_by_xpath(xPathRadio)

# Utilice el recorrido en bucle para hacer clic en estos elementos posicionados uno por uno

para radiobox en radioboxes:

radiobox.hacer clic()

72 Escriba un script automatizado, sin límite de idioma, y ​​requiera que se genere aleatoriamente un número de teléfono móvil cada vez que se ejecute el script.

importar aleatorio # Importar módulo de números aleatorios

# Al principio, el número de teléfono móvil está vacío.

teléfono_movil = ''

# En China, el primer dígito de los números de teléfonos móviles es siempre 1

número_teléfono_1 = '1'

# Empalme el primer número generado con el número de teléfono móvil

teléfono_móvil = teléfono_móvil + número_teléfono_1

# Según los diferentes operadores, el segundo y tercer dígito del número de teléfono móvil tienen valores fijos, aquí tienes algunos aleatorios y ponlos en la lista.

phone_num_2_to_3 = ['38', '82', '88', '36', '30']

#El método de opciones puede seleccionar aleatoriamente elementos de la lista para generar el segundo y tercer dígito del número de teléfono móvil y unirlos en el número de teléfono móvil.

phone_num_2_to_3 = opciones.aleatorias(phone_num_2_to_3)[0]

teléfono_móvil = teléfono_móvil + número_teléfono_2_a_3

#Los últimos 8 números se generan por bucle

para i en el rango(8):

# El método randint puede generar valores aleatoriamente de 0 a 9, pero para unir cadenas, usamos el método str() para convertir

número_teléfono = str(random.randint(0, 9))

# Cada bucle generará un número y continuará empalmándose con el número de teléfono existente

teléfono_móvil = teléfono_móvil + núm_teléfono

#Imprimir el número de teléfono móvil final generado

imprimir (teléfono_móvil)

73 ¿Cuánto sabes sobre los marcos de pruebas unitarias?

prueba unitaria, pruebang, nariz, pytest,

74. ¿Cuál es la diferencia entre copia profunda y copia superficial?

Copia superficial: una copia superficial es una copia de nivel superior de un objeto. Comprensión simple: la referencia se copia, pero el contenido (objeto) no se copia.

Copia profunda: copiar todos los niveles de un objeto (recursivamente)

Todos son tipos de datos inmutables: copy.copy y copy.deepcopy son puntos de referencia.

Contiene datos de tipos inmutables: deepcopy es una copia profunda, copy.copy es un puntero a una referencia

Los objetos inmutables incluyen objetos mutables: copy.copy es un punto de referencia y deepcopy es para abrir una nueva dirección de memoria, es decir, una copia profunda.

75 Cómo posicionar elementos dinámicos en web/aplicación

Para la dinámica del valor del atributo:

Utilice el método de posicionamiento xpath+coincidencia difusa:

driver.find_element_by_xpath("//nombre de etiqueta [contiene(@attribute,'valor de fragmento parcial')]")

driver.find_element_by_xpath("//Nombre de etiqueta [empieza-con(@attribute,'Valor del fragmento de encabezado')]")

driver.find_element_by_xpath("//nombre de etiqueta[ends-with(@attribute,'valor del fragmento final')]")

Los atributos pueden ser id, nombre, nombre_etiqueta, texto_enlace, texto_enlace_parcial, etc.

Utilice una combinación difusa para localizar:

driver.find_element_by_xpath("//nombre de etiqueta [contiene(@attribute1,'valor de fragmento') y @attribute2='valor de atributo' y...]")

Actualizaciones de ubicación:

Posicionamiento mediante el método de nodo hermano/nodo padre-hijo

//*[contiene(@resource-id,"fixedWrap")]//*[@content-desc="自选"]

//android.widget.LinearLayout[contiene(@resource-id,"home_item_layout_bg") y @index="1"]

//*[contiene(@resource-id,"myfund_name_text_view") y @text="${fund_name}"]/../..//android.widget.LinearLayout[1]

76 ¿Cuál podría ser la razón para no encontrar el elemento?

La expresión de posicionamiento de elementos está escrita incorrectamente

Los valores de los atributos de los elementos posicionados cambiarán dinámicamente

solución:

1) Consultar el valor del atributo a través de la base de datos y luego pasarlo dinámicamente

2) Posicionamiento combinado: nodo hermano, nodo padre-hijo, método de nodo descendiente

3) Métodos de posicionamiento difuso: comienza con, termina con, contiene (referencia 75)

Elemento no cargado

Solución: agregue espera implícita globalmente

self.driver.implicitly_wait(time_to_wait=5)

El elemento se agrega en la posición apropiada para mostrar la espera:

WebDriverWait(self.driver, timeout).until(EC.element_to_be_clickable(locator)) #¿Se puede hacer clic en el elemento?

WebDriverWait(self.driver, timeout).until(EC.visibility_of_element_located(locator)) #¿Está visible el elemento?

WebDriverWait(self.driver, timeout).until(EC.presence_of_element_located(locator)) # Si el elemento existe

La carga de la página es lenta, agregue espera forzada

El elemento no está en esta página.

Cambie a iframe (id, nombre, modo índice) y luego procese los elementos

ventana (cambio de manija: self.driver.switch_to.window(current_window_handles[-1]))

alerta (cambie a alerta primero (self.driver.switch_to.alert)

77 Cómo lidiar con el código de verificación

Método de deslizamiento de elementos:

Coloque el control deslizante -> Simule hacer clic en el control deslizante para que aparezcan el rompecabezas y el espacio -> Obtenga la posición del espacio -> Calcule la distancia requerida para deslizarse -> Deslícese a través de la función ActionChains

Calcule el fondo y la brecha de coincidencia de umbral a través de la biblioteca opencv (recomendado)

Referencia: https://segmentfault.com/a/1190000019218588

78 Cómo manejar el inicio de sesión en la automatización de la interfaz de usuario

Defina el dispositivo en conftest.py y llámelo en el caso de prueba correspondiente

@pytest.accesorio()

controlador def():

global d

d = controlador web.Chrome()

d.implícitamente_esperar(5)

d.maximize_window()

rendimiento d

d.salir()

@pytest.accesorio()

def login(driver): # Al llamar al dispositivo, asegúrese de pasar el controlador en la función de definición; de lo contrario, se informará un error

lg = Página de inicio de sesión (controlador)

lg.login('1a2b','abcd')

tiempo.dormir(5)

conductor de regreso

def test_xxxx(self, login): # Iniciar sesión de llamada

conductor = iniciar sesión

página = Página de inicio de sesión (controlador)

79 ¿Cómo obtener el valor cuando un diccionario o lista está anidada en un diccionario?

A través del método re.search()

importar re

importar json

res = {'código': 0, 'éxito': Verdadero, 'datos': {

'resultado': {'isSucceed': Verdadero, 'mensaje': '44704', 'mdmId': 0, 'setMessage': Verdadero, 'setIsSucceed': Verdadero,

'setMdmId': Falso}}, 'msg': Ninguno}

res = json.dumps (res)

info = re.compile(r'"mensaje": ".*?"')

print(info.search(res).group().split(":")[1].strip(' ,"'))

# código = re.search(r'"message": ".*?"',res)[0].split(":")[1].strip(' "')

# imprimir (código)

80 Cómo usar Docker (comandos comunes)

Espejo:

Iniciar ventana acoplable: sudo systemctl iniciar ventana acoplable

Vista de espejo: imágenes acoplables

Eliminar Imagen:

ID de imagen docer imagen rmi

número de versión de la imagen de Docker Image RM: nombre de la etiqueta

envase:

Inicie el contenedor:

docker ejecuta nombre de imagen

docker run -dit nombre de la versión de la imagen: nombre de la etiqueta/bin/bash

Especifique el puerto y el volumen de datos: docker run -dit --name nombre del contenedor -v directorio de host: directorio del contenedor -P puerto de host: nombre de la imagen del puerto asignado

Ingrese el contenedor: docker exec -it nombre del contenedor/bin/bash

Enumere todos los contenedores del sistema: docker ps -a

Detener el contenedor: Docker Stop ContainerID

Reinicie el contenedor: Docker reinicie el nombre del contenedor (ID del contenedor)

Eliminar contenedor:

Eliminar un contenedor en ejecución (eliminación forzada): docker rm -f containerID

ID del contenedor Docker RM

Ver registros de contenedor: registros de contenedor de Docker contenedor_id

81 ¿Cómo automatizar el subprograma WeChat?

Conéctese a un dispositivo real: active el modo de depuración USB

Active el modo de depuración del kernel x5: http://debugmm.qq.com/?forcex5=true

Android Screen Monitor muestra la pantalla real del teléfono

Parámetros de configuración principales

deseada_caps["recreateChromeDriverSessions"] = True # Admite la configuración automática de la aplicación del kernel X5

deseado_caps["chromedriverExecutableDir"] = r'D:\xxxx\chromedriver' # Especificar la versión del controlador

deseada_caps["chromeOptions"] = {"androidProcess": "com.tencent.mm:appbrand0"}

82. Cómo convertir una cadena en un diccionario

s = '{"nombre":"zhangsan","edad":13,"sexo":"男"}'

# Método 1 json.loads()

importar json

# imprimir(json.cargas))

# Método 2: evaluar()

# imprimir(evaluaciones))

# Capítulo 3: ast.literal_eval()

importar ast

imprimir(ast.literal_eval(s))

Supongo que te gusta

Origin blog.csdn.net/a448335587/article/details/133100062
Recomendado
Clasificación