Pytest error de aserción es el bloqueo de la ejecución de la prueba

0

Pregunta

Tengo el siguiente código que lee datos de un excel externo y golpeó la solicitud post pero siempre me encontré con un error de aserción con 1 fila del conjunto de datos en el excel, el bucle se detiene y el resto de las filas de excel no son tomados para la ejecución. La ejecución del programa se detiene en ese punto. Cómo superar esto? Mi requisito es que si fuera de 10 conjunto de datos(10 filas en excel), la aserción falla en el 5º por ejemplo, debe ejecutar el programa con el resto de los conjuntos de datos y en la marca de final de la ejecución del caso de prueba como ERROR.

def test_1A():

url_plan = getCOnfigurations()['API']['URL'] + APIResources.endpoints_plans
classic_sum_values = [200000, 300000, 400000]
payload_plan = open('C:/Users/aprat/PycharmProjects/RSAHealthPytest/PayLoads/plans/1A.json','r')
json_payload_plan = json.loads(payload_plan.read())

obj = Library.BaseClass("C:/Users/aprat/PycharmProjects/RSAHealthPytest/TestData/1A/TestData1A.xlsx","sheet1")
col = obj.fetch_column_count()
row = obj.fetch_row_count()
key_age = obj.fetch_key_names()
key_dob = obj.fetch_key_names()
key_sum = obj.fetch_key_names()
key_ten = obj.fetch_key_names()
key_pr_mem_age = obj.fetch_key_names()

for i in range(2, row+1):
    datadriven_json_data_plan = obj.update_request_with_data_plan1A(i,json_payload_plan,key_age,key_dob,key_pr_mem_age,key_sum,key_ten)
    a1_age = json_payload_plan['payload']['data']['insured'][0]['age']
    a1_dob = json_payload_plan['payload']['data']['insured'][0]['dob']
    prim_mem_age = json_payload_plan['payload']['data']['primary_member_age']
    tot_sum = json_payload_plan['payload']['data']['sum_insured']
    tenure = json_payload_plan['payload']['data']['tenure']
    response = requests.post(url_plan, json=datadriven_json_data_plan,)
    json_response_plan = response.json()
    print(json_response_plan)
    if int(tenure) == 1 or int(tenure) == 2 or int(tenure) == 3:
        if int(tot_sum) in classic_sum_values:
            if int(18) <= int(a1_age) <= int(50):
                print(json_response_plan[0]['article_code'])
                try:
                    assert int(json_response_plan[0]['premium']) > int(1)
                    assert int(json_response_plan[0]['term']) == int(tenure)
                    assert int(json_response_plan[0]['validity']) == int(tenure)
                    assert int(json_response_plan[0]['sa']) == int(tot_sum)
                except Exception as e:
                    json_data = datadriven_json_data_plan
                    sys.stdout = open("plans_classic_1A.log", "a")
                    _, _, tb = sys.exc_info()
                    traceback.print_tb(tb)
                    tb_info = traceback.extract_tb(tb)
                    filename, line, func, text = tb_info[-1]
                    print('An error occurred on line {} in statement {}'.format(line, text))
                    print("Test failure due to assertion error")
                    print("adult1 age=" + " " + str(a1_age))
                    print("sum insured=" + " " + str(tot_sum))
                    print("tenure=" + " " + str(tenure))
                    print(json.dumps(json_data, indent=2))
                    print("**************************************************************************")
                    raise e
api automation pytest python
2021-11-23 17:28:41
1

Mejor respuesta

0

El problema es que ustedes están planteando el error, permitiendo que pase fuera del bucle. Quitar el raise e de línea al final de su código y añadir algún tipo de manejo de errores/registro de pasar a través de un informe.

Una lista que se puede anexar a es probablemente la solución más simple, pero el uso de Python logging paquete será una mejor solución a largo plazo.

Edit: basado en el comentario anterior, se establece un indicador de que el valor predeterminado es True/éxito. Si falla una vez, automáticamente se establece en False/fracaso.

Por ejemplo:

def test1a():
    successFlag = True
...
    except Exception as e:
        successFlag = False

    return successFlag

2021-11-23 19:31:46

la eliminación de la subida línea e, pero que el tiempo, la ejecución de la prueba se muestra como PASE en el informe de la prueba que es engañoso.
Apratim Chaudhuri

Se ha agregado una edición con una bandera de la pista.
Alex D

Este enfoque funcionó para mí. Después de la ejecución, el caso de prueba de estado se muestra como se PASA
Apratim Chaudhuri

Nada en su código de la muestra, donde se establece la pass/fail funcionalidad - por favor proporcione detalles adicionales más allá de "no".
Alex D

En otros idiomas

Esta página está en otros idiomas

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Slovenský
..................................................................................................................