tema de automatización de Python (1)

Pregunta 1: ¿la diferencia entre json y diccionario?

Json es un formato ligero de interacción de datos que guarda los datos en forma de pares clave-valor clave-valor con una estructura clara. Se puede decir que es el formato de interacción de datos más utilizado en el desarrollo de proyectos de Internet.
Un diccionario también es un par clave-valor para almacenar datos, que es un tipo de datos en Python.

Pregunta 2: Cuando realiza pruebas de automatización de interfaces, ¿dónde coloca los datos de prueba?

  1. Para alguna configuración básica, como la configuración de la base de datos, puede ponerlo en el archivo de propiedades (archivo yaml, no lo expanda si no lo ha usado)
  2. Los datos necesarios para las pruebas de interfaz se pueden colocar en una tabla de base de datos o en Excel

Pregunta 3: ¿Qué se basa en datos?

Basado en datos es mantener los datos de prueba a través de estructuras de datos como excel, xml, base de datos, etc., y procesarlos a través de las tecnologías correspondientes para obtener datos de prueba para probar, logrando así el desacoplamiento de los datos de prueba y el código. Las pruebas dirigidas son parametrización avanzada.

Pregunta 4: ¿Cómo diseñar su caso de uso en Excel?

  1. Toda la información de la interfaz se mantiene en una forma
  2. Los datos de casos de uso sobre la interfaz se mantienen en un formulario
  3. Los parámetros de la interfaz se pasan en una columna. Al construir una cadena de formato json, se puede resolver el problema de pasar múltiples parámetros y se mejora la capacidad de mantenimiento del caso de uso.

Pregunta 5: ¿Cómo obtener los datos en Excel?

A través de la biblioteca de terceros openpyxl para completar, el proyecto solo necesita introducir la biblioteca openpyxl, y la operación de Excel se puede completar a través de la API proporcionada por él, e incluso podemos hacer algunos paquetes secundarios nosotros mismos para que la operación sea más conveniente . Una fila de datos es un caso de uso.

Pregunta 6: Si algunas interfaces están autenticadas (requiere autoridad de autenticación), ¿cómo realizar pruebas automatizadas de estas interfaces?

En primer lugar, es necesario aclarar el mecanismo de autenticación mediante el cual se implementa la interfaz

  1. Si la autenticación se logra a través de la identificación de sesión (JSESSIONID), primero llame a la interfaz de inicio de sesión - "obtenga los datos devueltos por ella -" almacénelos - "cuando llame a otras interfaces más tarde, puede traer directamente estos datos al pasado. Arriba.
  2. Si la autenticación se logra a través de tokens, solo necesita llamar a la interfaz de inicio de sesión, "obtener los datos devueltos", almacenarlos, y las siguientes operaciones son las mismas que las anteriores.

Primero responda uno de los pasos de implementación básicos anteriores y luego agregue los siguientes detalles de implementación:

  1. Cómo obtener este JSESSIONID o token

    ** Cómo obtener esta información primero debe comprender cómo se devuelve, que puede ser de las siguientes dos formas:
    a. El encabezado de respuesta de la
    interfaz de inicio de sesión b. El
    desarrollador debe confirmar el mensaje de respuesta de la interfaz de inicio de sesión . Los diferentes métodos tienen diferentes métodos.

  2. .Cómo almacenar este JSESSIONID o token a .archivo
    (excel, el archivo de propiedades puede ser)
    b. Base de datos
    c. Variables estáticas públicas definidas en el código como datos compartidos

  3. Cuando solicite otras interfaces que requieran autenticación, cómo traer estos datos en el pasado,
    primero solicite al desarrollador que confirme y luego cómo llamar a estas interfaces que requieren autenticación para llevar la información de autenticación (ticket).
    Por lo general, no es más que lo siguiente:
    a. Empalmar la URL para cargar el pasado para la verificación del servidor
    b. Establecerlo en el cuerpo de la solicitud
    c. Después de comprender cómo pasarlo a través del encabezado de la solicitud, intente guardar la información de autenticación Saque el lugar -> Páselo

Pregunta 7: ¿Qué es una conversación?

La llamada sesión es la sesión, y la sesión es una tecnología de almacenamiento en caché del servidor, creada por el servidor, cuando el usuario inicia sesión en el sistema, generalmente la información del usuario que inició sesión se guardará en el objeto de sesión, y luego se guardará el id (JSESSIONID) correspondiente a la sesión. Retorno, por lo que la mayoría de los sistemas usarán el mecanismo de sesión para lograr la autenticación. La sesión guarda los datos en forma de clave-valor.

Pregunta 8: ¿Qué es un token?

El llamado token es en realidad una cadena devuelta por el servidor (algo similar a: xys73494954sdhcdr83435 una cadena de este tipo). Según el algoritmo que se generan estos datos, debe ser confirmado por el desarrollo. Por lo general, estos datos son únicos y el El token devuelto por el servidor será diferente cada vez. La razón por la que el token se puede utilizar para la autenticación se basa en el siguiente principio: el
usuario a llama a la interfaz de inicio de sesión - "inició sesión en el sistema b-" el servidor genera una información de token única (asumiendo c) y luego toma el número del usuario id (Suponga que d) haga una asignación: cd, y luego almacene dicha relación de asignación en la base de datos o caché de redis, y luego devuelva este token al cliente- "Cuando el cliente llama a otras interfaces que requieren autenticación, solo necesita Bring the token almacenado en caché al pasado para verificación: "El servidor comprueba si hay información de usuario que ha iniciado sesión según este token para determinar si la solicitud es un usuario autorizado que ha iniciado sesión. (Aquí, cómo el cliente obtiene el token, cómo guardarlo y cómo traerlo cuando lo solicita nuevamente, como se explica en la sección de autenticación de la interfaz anterior).

Pregunta 9: Para una solicitud de interfaz, el parámetro depende de los datos de retorno de la interfaz anterior, ¿cómo tratarlo (asociación de interfaz)?

Escenario: al llamar a la interfaz b, los parámetros dependen de los datos de retorno de la interfaz a. Solución:
a. Después de llamar a la interfaz- "Elimine el parámetro del que depende b de la respuesta-" Guárdelo - "Cuando se llame a b, saque esta información-" Páselo como parámetro.

Pregunta 10: La llamada de interfaz se basa en la interfaz b de terceros, y no se le ha proporcionado la interfaz b. ¿Cómo solucionarlo?

Cree su propio sistema / plataforma simulada a través del marco simulado (de hecho, desarrolla su propia interfaz), y puede simular esta interfaz simulada de terceros, de modo que esta dependencia se resuelva

Pregunta 11: ¿Cómo limpiar datos basura en las pruebas de interfaz?

Puede preparar un entorno separado (base de datos independiente) usted mismo, de modo que los datos generados por la llamada de interfaz se puedan eliminar ejecutando el script sql después de que se ejecute toda la suite (@AfterSuite).

Pregunta 12: Automatiza la interfaz, ¿qué base de datos usa el proyecto y qué base de datos se usa para operar esta base de datos?

Mysql, puede agregar, eliminar, verificar y modificar la base de datos a través de jdbc.

Pregunta 13: ¿Cómo se realiza la verificación de datos cuando se automatiza la interfaz?

La verificación de datos incluye principalmente dos aspectos:

  1. Verificación de los mensajes de respuesta de la interfaz
    Utilice jsonpath para recuperar los valores de los campos clave en los datos de respuesta (en la mayoría de los casos json) y afirme si los valores de estos campos clave cumplen con las expectativas a través de Assert. El valor esperado y la expresión del valor jsonpath se pueden configurar en Excel.
  2. Para verificar los datos de la tabla de la base de datos, primero debe comprender dos puntos para la verificación de los datos de la tabla:
    a. La verificación de los datos de la tabla primero debe comprender el negocio básico de esta interfaz, qué tablas y qué campos se verán afectados, y luego prepararse para consultar sql para ser objetivo. Verifique los datos.
    b. No todos los casos de uso operarán en la base de datos y afectarán los datos de la tabla. Por lo tanto, solo los casos de uso que afectan los datos de la tabla son scripts de consulta preparados.
    Método específico:
    preparación de casos de uso de Excel aa, bb, cc tres columnas, script de transferencia aa, bb, cc dos columnas se utilizan para volver a escribir los resultados de la consulta SQL antes de la ejecución del caso de uso y los resultados de la consulta SQL después de la ejecución del caso de uso, el Se pueden comparar dos datos Si los cambios en los datos cumplen con las expectativas.

Pregunta 14: Cómo mejorar la eficiencia de ejecución del conjunto de pruebas

  1. Reduzca la lectura y escritura de Excel, reduzca las operaciones io innecesarias
  2. Los datos de Excel leen los datos de prueba y los almacenan todos en variables estáticas).
  3. Para volver a escribir datos de Excel, intente escribir en lotes.

Pregunta 15: ¿Ha utilizado un marco de pruebas unitarias, qué marco es y cuáles son las operaciones comunes?

Usado, unittest, pytest (si no está familiarizado con él), estos marcos de prueba nos ayudan a definir conjuntos de pruebas para administrar nuestro código de caso de prueba. Al mismo tiempo, las anotaciones enriquecidas proporcionadas por estos marcos de prueba no solo pueden controlar el probar cómodamente La secuencia de ejecución de los casos de uso controla todo el proceso de prueba y también puede proporcionar soporte para la realización de varios escenarios de prueba.
Operaciones comunes:
seutp, teardown, adecuado para la inicialización y limpieza ambiental de un solo caso de prueba.
seutpClass, teardownClass: adecuado para la inicialización global y la limpieza del entorno de clases de prueba.
assertXXXX: varios métodos de aserción
testLoader's discover: se usa para descubrir casos de prueba
addTests de testSuite: se usa para cargar casos de prueba
@ddt
html basado en datosTestRunner: se usa para generar informes de prueba html

Pregunta 16: Cuénteme sobre su comprensión de las interfaces

La interfaz es un servicio, una realización de punto de función, un canal de transmisión de datos y uno del lado del servidor que implementa un cierto protocolo (como el protocolo http ...) y un mecanismo de mapeo (cuando se accede a una URL, se resuelto a través del mecanismo de procesamiento de mapeo del lado del servidor, cayendo a la función de procesamiento correspondiente), el parámetro de interfaz es el parámetro de función, y los datos de respuesta de la interfaz son el valor de retorno de la función

Pregunta 17: ¿Alguna vez ha realizado una prueba de interfaz? ¿Cuáles son algunas de las herramientas conocidas?

Lo he hecho (incluso si no ha utilizado una herramienta de visualización para realizar pruebas de interfaz antes, pero ahora ha aprendido las pruebas de automatización de interfaz incluso si tiene experiencia).
Herramientas familiares: herramientas
visuales como: jmeter, cartero, soapui, etc. (qué se ha utilizado, decir cuál) Código: solicita tecnología de paquete para implementar pruebas de interfaz.

Pregunta 18: ¿Cuáles son los métodos de solicitud comunes para interfaces?

OBTENER, PUBLICAR, PONER, ELIMINAR, etc. (se puede decir que no es familiar)

Pregunta 19: Hable brevemente sobre la diferencia entre los dos métodos de solicitud: ¿obtener y publicar?

Obtener :

  1. Generalmente, las solicitudes para obtener datos del servidor se pueden configurar para obtener
  2. Al pasar parámetros en el método Get, los parámetros generalmente se empalman directamente en la URL (por ejemplo: http: // xxx? Id = 1 & type = 2)
  3. La cantidad de datos de parámetros que puede pasar el método de solicitud Get es limitada (porque los parámetros generales se empalman en la URL y el navegador tiene un límite en la longitud de la URL)
  4. Debido a que la solicitud Get empalma directamente los datos en la URL, la seguridad no es tan fuerte como la publicación (relativa), pero la eficiencia de ejecución de la obtención es más rápida que la publicación.

Publicación :

  1. Generalmente, las solicitudes para enviar datos al servidor se establecerán para publicar
  2. Pasar parámetros en el modo de publicación generalmente coloca los parámetros en el cuerpo de la solicitud en lugar de empalmarlos en la URL
  3. La cantidad de datos que se pueden enviar mediante el método de solicitud posterior no está limitada
  4. La transferencia de parámetros de solicitud posterior es más segura que get (relativamente no absoluta), pero la eficiencia de ejecución de la publicación no es tan eficiente como get

Pregunta 20: ¿Qué sucede después de ingresar la URL en el navegador y presionar Enter?

  1. Resolución de URL
  2. Búsqueda de DNS
  3. Conexión TCP
  4. Solicitud de procesamiento
  5. Aceptar respuesta
  6. Renderizar la página

Pregunta 21: Para unir la lista a = ["h", "e", "l", "l", "o"] en una cadena, utilice varios métodos para lograr

a = ["h","e","l","l","o"]

方式一:字符串函数调用
print("".join(a))  

方式二:for循环
s = ""
for item in a:
    s += item
print(s)

Pregunta 22: Hay un archivo llamado data.log. El contenido en data.log está separado por una coma, y ​​TestID, TestTime, Success (0 éxito; 1 fracaso) de una prueba se almacenan secuencialmente. Los datos del archivo son todos números enteros no negativos. Escriba un programa (sin límite de idioma), para todas las pruebas exitosas (éxito = 0), resultado:

  1. Imprime el TestTime máximo y mínimo;
  2. Imprima el TestTime promedio con 2 decimales.
    El formato de contenido de data.log es el siguiente:
    TestID, TestTime, Success
    0,149,0
    1,69,0
    2,45,0
    3,18,1
    4,18,1
"""
打开data.log文件 。除了第一行,剩下的第一行都是数据。
只需要按行解析数据,将success对应的值为0的提取出来,将TestTime放在一个新的列表当中。
取这个列表当中,最大的值,和最小的值。
同时,对这个列表的所有数据进行取平均值即可。
"""
import os

def anaysis_data():
    test_times = []
    # 打开data.log文件
    with open(os.getcwd() + "/data.log") as fs:
        for line in fs.readlines():  # 按行读取
            temp = line.strip("\n").split(",") # 去掉换行符之后,再按,分割
            print("temp",temp)
            if temp[-1] == str(0): # 筛选success字段为0的TestTime
                test_times.append(int(temp[-2]))

    if len(test_times) > 0:
        avg_time = sum(test_times) / len(test_times) # 平均值
        max_time = max(test_times)
        min_time = min(test_times)
        print("最大的TestTime: ",max_time,",最小的TestTime: ",min_time,",平均TestTime: ",avg_time)


if __name__ == '__main__':
    anaysis_data()
    
    """
    输出结果为:
    temp ['TestID', 'TestTime', 'Success']
    temp ['0', '149', '0']
    temp ['1', '69', '0']
    temp ['2', '45', '0']
    temp ['3', '18', '1']
    temp ['4', '18', '1']
    最大的TestTime:  149 ,最小的TestTime:  45 ,平均TestTime:  87.66666666666667
    """

Supongo que te gusta

Origin blog.csdn.net/weixin_44102466/article/details/104857230
Recomendado
Clasificación