Pytest erreur d'assertion est le blocage de l'exécution du test

0

La question

J'ai le code suivant qui lit les données à partir d'un excel externe et a frappé le poteau demande, mais à chaque fois que j'ai rencontré une erreur d'assertion avec 1 ligne de l'ensemble de données à partir d'excel, la boucle s'arrête et le reste de l'excel lignes ne sont pas prises pour l'exécution. L'exécution du programme s'arrête à ce point. Comment surmonter cela? Mon exigence est si de 10 ensemble de données(10 lignes dans excel), l'assertion échoue dans le 5e par exemple, il doit exécuter le programme avec le reste des ensembles de données et à la marque de fin de l'essai de l'exécution a ÉCHOUÉ.

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

La meilleure réponse

0

Le problème, c'est que vous êtes à élever l'erreur, en lui permettant de passer hors de la boucle. Supprimer la raise e ligne à la fin de votre code et ajouter une sorte d'erreur de manipulation/enregistrement de passer par le biais d'un rapport.

Une liste que vous pouvez ajouter à l'est probablement la solution la plus simple, mais à l'aide de Python logging le paquet sera une meilleure solution à long terme.

Edit: d'après votre commentaire précédent, définir un indicateur dont la valeur par défaut True/succès. Si elle échoue une fois, il est automatiquement définie sur False/échec.

Par exemple:

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

    return successFlag

2021-11-23 19:31:46

retrait de la soulever de la ligne e, mais que de temps l'ensemble de l'exécution du test est de montrer que le PASSAGE dans le rapport d'essai qui est trompeur.
Apratim Chaudhuri

Ajout d'une édition avec un indicateur à suivre.
Alex D

Cette approche n'a pas fonctionné pour moi. Après l'exécution, le cas de test d'état de se montrer tel qu'ADOPTÉ
Apratim Chaudhuri

Rien dans votre code vous montre où vous vous définissez le pass/fail de la fonctionnalité, veuillez fournir des détails supplémentaires au-delà "est un échec".
Alex D

Dans d'autres langues

Cette page est dans d'autres langues

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