Pytest onaylama hatası test yürütülmesini engelliyor

0

Soru

Harici bir excel'den veri okuyan ve post isteğine isabet eden aşağıdaki koda sahibim, ancak excel'den 1 satır veri kümesiyle bir onaylama hatasıyla karşılaştığımda, for döngüsü durur ve excel satırlarının geri kalanı yürütme için alınmaz. Program yürütme bu noktada durdurulur. Bunun üstesinden nasıl gelinir? Benim gereksinimim, 10 veri kümesinden(excel'de 10 satır), onaylama işleminin 5'inde başarısız olması durumunda, örneğin programı kalan veri kümeleriyle yürütmesi ve sonunda test durumu yürütmesini başarısız olarak işaretlemesidir.

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

En iyi cevabı

0

Sorun, döngüden geçmesine izin vererek hatayı yükseltmenizdir. Kaldır raise e kodunuzun sonuna satır ekleyin ve bir rapordan geçmek için bir tür hata işleme/günlüğe kaydetme ekleyin.

Eklediğiniz bir liste muhtemelen en basit çözümdür, ancak Python'u kullanarak logging paket daha iyi bir uzun vadeli çözüm olacaktır.

Düzenleme: önceki yorumunuza dayanarak, varsayılan olarak True / success olan bir bayrak ayarlayın. Bir kez başarısız olursa, otomatik olarak False / failure olarak ayarlanır.

Örneğin:

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

    return successFlag

2021-11-23 19:31:46

yükseltme e satırını kaldırıyorum, ancak bu sefer tüm test yürütme, yanıltıcı olan test raporunda GEÇİŞ olarak gösteriliyor.
Apratim Chaudhuri

İzlemek için bayraklı bir düzenleme eklendi.
Alex D

Bu yaklaşım benim için işe yaramadı. Yürütmeden sonra, test durumu durumu GEÇTİ olarak gösteriliyor
Apratim Chaudhuri

Kodunuzdaki hiçbir şey, pass / fail işlevini nerede ayarladığınızı göstermez - lütfen "başarısız oluyor" un ötesinde ek ayrıntılar sağlayın.
Alex D

Diğer dillerde

Bu sayfa diğer dillerde

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