第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

如何在生成器中重復(fù)執(zhí)行一個(gè)良率步驟?

如何在生成器中重復(fù)執(zhí)行一個(gè)良率步驟?

偶然的你 2022-08-25 15:06:55
我正在編寫(xiě)涉及HTTP請(qǐng)求的測(cè)試。我必須按特定順序提出一些請(qǐng)求,但我想檢查每個(gè)步驟的響應(yīng)。所以我認(rèn)為生成器適合強(qiáng)制執(zhí)行序列:# Main codedef sequence_of_requests(arg1, arg2):    yield request_a(arg1)    yield request_b(arg1, arg2)    yield request_c(arg1, arg2)然后在我的測(cè)試代碼中,我可以寫(xiě):# Test codegenerator_responses = sequence_of_requests()r = next(generator_responses)assert r.status_code == 200r = next(generator_responses)assert r.status_code == 204r = next(generator_responses)assert r.status_code == 404問(wèn)題是,在第一次嘗試時(shí)并不總是收到正確的狀態(tài),因此我一直在測(cè)試代碼中使用裝飾器包裝此函數(shù),以便它反復(fù)嘗試,直到成功或超時(shí)。request_c()我想知道是否有某種方法可以在生成器上進(jìn)行此包裝,因此我仍然可以獲得強(qiáng)制的事件序列。因此,我基本上想知道是否有某種方法可以反復(fù)調(diào)用生成器的一個(gè)屈服步長(zhǎng)。注意:我不想將代碼直接放在函數(shù)中等待響應(yīng),因?yàn)樗皇菧y(cè)試代碼。該函數(shù)僅用于確保以正確的順序完成這些步驟。sequence_of_requestssequence_of_requests
查看完整描述

2 回答

?
至尊寶的傳說(shuō)

TA貢獻(xiàn)1789條經(jīng)驗(yàn) 獲得超10個(gè)贊

您沒(méi)有非常具體地說(shuō)明超時(shí)和重試次數(shù),或者成功的條件...但是,為簡(jiǎn)單起見(jiàn),假設(shè)您希望重試最多 5 次,重試間隔為 1,并且您希望繼續(xù)執(zhí)行 500(或 5xx)以外的錯(cuò)誤代碼。


然后你可以使用類(lèi)似的東西:


import time


def sequence_of_requests(arg1, arg2):

    yield request_a(arg1)

    yield request_b(arg1, arg2)

    for retries in range(5):

        result = request_c(arg1, arg2)

        if result.status_code < 500:

            break

        time.sleep(1)

    yield result

如果達(dá)到最大重試次數(shù),則只需返回上次收到的響應(yīng)。如果獲得有效的響應(yīng),則脫離循環(huán)并返回良好的響應(yīng)。


有一個(gè)小的低效率,因?yàn)槿绻氵_(dá)到重試總數(shù),你仍然會(huì)睡1秒,然后再返回值。您可以通過(guò)顯式管理變量并檢查循環(huán)中的限制來(lái)解決此問(wèn)題。但是,對(duì)于如何管理放棄,您可能還有其他想法(例如,超時(shí),而不是固定次數(shù)的重試),因此您應(yīng)該調(diào)整該部分代碼以遵循對(duì)您有意義的邏輯。retries


查看完整回答
反對(duì) 回復(fù) 2022-08-25
?
呼啦一陣風(fēng)

TA貢獻(xiàn)1802條經(jīng)驗(yàn) 獲得超6個(gè)贊

您可以生成函數(shù),而不是生成響應(yīng)值本身,然后可以重復(fù)調(diào)用這些函數(shù)。函數(shù)的參數(shù)可以使用 應(yīng)用。functools.partial


from functools import partial



def sequence_of_requests(arg1, arg2):


    yield partial(request_a, arg1)

    yield partial(request_b, arg1, arg2)

    yield partial(request_c, arg1, arg2)

現(xiàn)在可以測(cè)試這些步驟:


generator_functions = sequence_of_requests()


r = next(generator_functions)()

assert r.status_code == 200


r = next(generator_functions)()

assert r.status_code == 204


# Repeatedly make the request until the expected status code is returned.

func_slow_request = next(generator_functions)

wait_for_status(404)(func_slow_request)


查看完整回答
反對(duì) 回復(fù) 2022-08-25
  • 2 回答
  • 0 關(guān)注
  • 91 瀏覽
慕課專(zhuān)欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢(xún)優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)