Colección de citas famosas - Colección de máximas - Utilice archivos yaml para gestionar datos de prueba

Utilice archivos yaml para gestionar datos de prueba

Después de comprender el uso básico de ddt, practique el uso de unittest+ddt para implementar casos de prueba de interfaz previamente mantenidos por archivos de Excel.

Aquí, elijo el archivo yaml para administrar los parámetros de la interfaz. Al principio quería usar json, pero json no puede agregar comentarios, por lo que es ilegible.

La siguiente captura de pantalla muestra las interfaces en el documento de interfaz. Cada interfaz tiene un número de serie fijo, por lo que al diseñar los datos de prueba para cada interfaz, el número de serie se utiliza para distinguir diferentes interfaces.

El contenido del archivo yaml es el siguiente. Cabe señalar que la sintaxis de yaml es:

(1) Los pares clave-valor están separados por dos puntos, pero a. Es necesario agregar espacio después de los dos puntos.

(2) Los caracteres de tabulación prohíben la sangría y solo se puede usar la barra espaciadora, no hay límite para la longitud de la sangría. Siempre que los elementos estén alineados, significa que estos elementos pertenecen a una jerarquía. estructura.

(3) La cadena puede estar sin comillas o con comillas. Si desea convertir un número en una cadena, simplemente agregue comillas.

(4) Utilice # para indicar comentarios.

Para obtener más información, consulte el blog:/Vincent _ HBL/Article/Details/75411243.

2. Demostración simple: Python lee el archivo yaml y extrae los parámetros de la interfaz.

Importar yaml

FP = open ('../dataconfig/information interaction module interface.yaml, encoding ='utf-8') #Si hay caracteres chinos, agregue Formato de codificación.

testdata = YAML . cargar (FP)

t = testdata【'5 2 .4'】

Imprimir

(. 1) Método de empaquetado para leer archivos yaml

handle_yaml.py

#Encoding: utf-8

#Author: hmk

Importaciones

importos

classHandleYaml:

? def _ _ init _ _(self, file_path=Ninguno):

? Si la ruta del archivo:

? self.file_path = ruta_archivo

? En caso contrario:

? root_dir = ruta del sistema operativo. nombre del directorio (sistema operativo. ruta. abspath '.'))

? # OS.path.abspath ('.') significa obtener el directorio donde se encuentra el archivo actual; Os.path.dirname significa obtener el directorio principal del archivo, por lo que todo el proyecto es la ruta en sí. file_path = root_dir+‘/data config/interfaz del módulo de interacción de información.

Yaml? #Obtener la ruta relativa donde se encuentra el archivo (relativa a todo el proyecto)

? #elf.data = self.get_data()

def get_data(self):

? FP = open(self. file_path, codificación = ‘utf-8‘)

? datos = YAML.load(FP)

? Datos de retorno

if __name__ == '__main__ ':

? prueba = HandleYaml()

? p = test.get_data()

? Imprimir(p[‘5 . 2 . 1.1‘])

[¡Si! 【endif】

(2) Solicitar método de encapsulación

[If! 【endif】

#Codificación: utf-8

#Autor: Archer

Solicitud de importación

Bienes importados

método de ejecución de clase:

? def post_main(self, url, data, headers=Ninguno): si los encabezados no son Ninguno:

RES = request(URL = URL, data=data, headers=header)

? En caso contrario:

? RES = solicitudes . (URL = URL, datos = datos)

? #Imprimir (código de estado del recurso)

? # devolver res.json()

? ¿Devolver resolución? # Para facilitar afirmaciones posteriores, la respuesta del servidor ya no está codificada en formato json.

def get_main(self, url, data=Ninguno, encabezado=Ninguno): si el encabezado no es Ninguno:

? RES = solicitudes get(URL = URL, parámetros = datos, encabezados = encabezado)

? En caso contrario:

? RES = solicitudes get(URL = URL, parámetros = datos)

? imprimir (código de estado del recurso)

? #Return

res.json()

? ¿Devolver recursos

? def run_main(self, método, url, datos = Ninguno, encabezados = Ninguno):

if método = = ‘POST‘:

? RES = self . post_main(URL, datos, título)

? En caso contrario:

? RES = self .get_main(URL, datos, encabezado)

? returnres

? # devolver JSON .dumps(RES, sangría=2, sort_keys=False, asegurar_ascii=False)? #Utilice el módulo json para formatear los resultados mostrados

[If! 【endif】

③Un caso de prueba de interfaz

[If! 【endif】

#Codificación: utf-8

#Autor: Archer

Forzado

DDT importado

desde base. run_method importRunMethod

Desde utilidades handle_YAML importHandleYaml

get_data = HandleYaml()? #Obtenga los parámetros de la interfaz del archivo yaml.

params = get_data.get_data()[‘5.2.1.4‘]

@DDT. DDT

prueba de clase(prueba unitaria. caso de prueba):

? """Cargar interfaz de detalles de la consulta"""

? defsetUp(self):

? self URL = 'http://localhost:8088/appexclusiveinterface/API/enterprise/info/consult/load detalle'

? self.run =RunMethod()

? @DDT.data(*params)

? más hábil(yo, valor):

? r = self run . run _ main ("OBTENER", self.url, valor)

? imprimir(r)

? self . afirmar verdadero (valor[‘assert‘]INR . texto)

if __name__ == '__main__ ':

? unittest.main()

(4) Utilice HTMLTestRunner para generar un informe de prueba.

run_report. py

#Codificación: utf-8

#Author: hmk

Desde HTMLTestRunner importtmltestrunner

Forzado

Hora de importación, sistema operativo

root_dir = OS dirname (OS.path.abspath'.'))?#Obtener la ruta absoluta del directorio principal del directorio donde se encuentra el archivo actual. Ubicado, es decir, donde se encuentra el proyecto. La ruta es E:\DDT_Interface.

case_dir=root_dir+‘/test_case/‘? #Encuentre la ruta del proyecto relativo donde se encuentra el caso de uso según la ruta del proyecto.

Imprimir (directorio raíz)

Imprimir (directorio de casos)

"""Definir método de descubrimiento"""

discover = unittest Cargador de pruebas predeterminado . discover(case_dir,

pattern = 'test *.py', directorio superior = Ninguno)

"""

1 .case_dir es el directorio donde se encuentra el caso de prueba

2.patrón ='test _ 'py': indica el principio de coincidencia del nombre del archivo del caso de prueba, "*" indica cualquier número de caracteres

3.top_level_dir=None: el directorio de nivel superior del módulo de prueba. Si no hay un directorio de nivel superior (es decir, el caso de prueba no se coloca en un directorio de varios niveles), el valor predeterminado. es Ninguno.

"""

if _ _ name _ _ = ="_ _ main _ _":

?"""Descubrimiento de carga directa"""

? ahora = tiempo . strftime("% Y-% M-% d % H _ % M _ % S)

? nombre de archivo=dir_raíz+‘/report/‘+ahora+‘_resultado.html‘? #¿Definir ruta de almacenamiento de informes

? Imprimir(nombre de archivo)

? fp=open(nombre de archivo,‘WB‘)

? runner = html test runner (stream = FP, title = 'Informe de prueba de interfaz de red empresarial de red personal', descripción = 'Los resultados de la prueba son los siguientes:').

? runner.run(descubrimiento)

? fp.close()

Está bien, unittest+ddt completará la prueba de la interfaz, pero todavía hay muchas deficiencias. El archivo de configuración yaml se puede seguir diseñando y optimizando, por ejemplo, se puede agregar la URL de solicitud.

De hecho, creo que cómo diseñar casos de prueba y cómo organizar los datos de prueba también es algo muy interesante. Muchas cosas deben tener un buen concepto de diseño para funcionar sin problemas. En resumen, sea diligente al pensar y consulte las ideas de otras personas. ¿No hay un dicho que dice que aprender sin pensar conduce al fracaso y pensar sin aprender conduce al peligro?