Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Myšlienky k retryingu #1

Open
Burgyn opened this issue Jul 23, 2024 · 1 comment
Open

Myšlienky k retryingu #1

Burgyn opened this issue Jul 23, 2024 · 1 comment
Labels

Comments

@Burgyn
Copy link
Member

Burgyn commented Jul 23, 2024

Moje myšlienky k retryingu. Čisto len nápady a brainstorming, aby som to nemusel držať v hlave.
Vychádzame a používame Polly.

Default retry policy konfigurácia

{
  "retryPolicy": {
     "maxRertryAttempts": 3,
     "backoffType": "Exponential",
     "delay": "00:00:03"
  }
}

Toto je default konfigurácia pre retry policy. Nehovorí to o tom, že sa má retryovať, len aké sú parametre.

Jednoduchý retry na základe status kódu

Možno podporiť nejaký jednoduchý spôsob na retry len samotného requestu na základe očakávaného status kódu. Je to pomerne častá požiadavka. Dokonca si myslím, že ide o najčastejší dôvod na retry.

### GET Created product
## RETRY-UNTIL-STATUS: [200]
GET {{URL}}

Dávam to ako pole, lebo si viem predstaviť že môžem akceptovať viacero stavov. Je to trochu otočené, lebo zvyčajne sa robí retry na http požiadavne tak, že retryujem pokiaľ dostávaš napríklad 500.
Tu mi príde logickejšie definovať to čo očakávam a čakať dovtedy. Ale kľudne môžeme otočiť.

Toto zapne retry pre daný request, policy sa zoberie z default policy.
💁‍♂️ keď nedostanem daný status kód, tak postrequest scripty ani nespúšťam a retryuijem rovno daný request.

Retry keď failne test

Ďalšia vec kedy chcem retryiovať je keď mi failne test. Napríklad dostnem síce 200 status kód, ale prázdne pole dát. Na to môžem mať test. Tak chcem retryovať dokedy test neprejde.

### GET Created product
## RETRY-IF-TESTS-FAIL
GET {{URL}}

Predefinovanie policy na úrovni requestu

### GET Created product
## RETRY-MAX-ATTEMPTS: 5
## RETRY-MAX-BACKOFFTYPE: Exponential
## RETRY-MAX-DELAY: 00:00:03
## RETRY-IF-TESTS-FAIL
GET {{URL}}

Definovanie v rámci .csx súboru

Definovanie policy:

tp.RetryPolicy = new RetryStrategyOptions
{
    BackoffType = DelayBackoffType.Exponential,
    MaxRetryAttempts = 4,
    Delay = TimeSpan.FromSeconds(3),
};

Vynútenie retry celého requestu aj s postrequest scriptom:

[Fact]
public void ProductShouldHaveCorrectData()
{
  var data = tp.Response.Body();
  if (data.Code is null)
  {
    tp.Retry();
    return;
  }
}

Zapnutie retryu

tp.RetryIfTestsFail();
tp.RetryUntilStatus([200]);

[Fact]
public void ProductShouldHaveCorrectData()
{
   // ...
}
@Burgyn Burgyn added the idea label Jul 24, 2024
@Burgyn
Copy link
Member Author

Burgyn commented Nov 25, 2024

Nový deň, nový názor 😀

Ja by som už retry nedefinoval cez nejaký .json, tak ako je to tam v úvode napísané. Z toho ako sa nám to celé vyvíja, by som normálne mal nejaký inicializačný .csx súbor, kde by som takéto veci napísal normálne v kóde. Ale je to len názor.

Čo sa týka tohto:

tp.RetryPolicy = new RetryStrategyOptions
{
    BackoffType = DelayBackoffType.Exponential,
    MaxRetryAttempts = 4,
    Delay = TimeSpan.FromSeconds(3),
};

Tak až mi je divné, že som to písal ja 😀. Nerobil by som to priradzovaním do property.

Skôr by som šiel niečím takýmto:

tp.SetDefaultRetryPolicy(...);

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

1 participant