allure-framework / allure-framework/allure-java
Add precondition method and annotation for update precondition field in test case from test result
- 主要言語
- Java
- スター
- 376
- フォーク
- 240
- 平均マージ
- 1日 7時間
- マージ済み PR(30日)
- 45
説明
### What problem should this solve?
There is "Precondition" update policy in testops. And when the test result is selected, there is no way to specify what should be selected to fill in the field.
I talked to testops support and they said that there is no label that they could add to this field. And that you need to add the task to the appropriate framework.
### What would you like to happen?
It would be convenient for the Allure.precondition method and the @Precondition annotation to appear, which would preserve the group of steps as a separate entity. Then, during the processing of the test results, these steps would fall into the corresponding block in both lunch and test cases.
### Alternatives considered
_No response_
### Additional context
An example of how to use this at the test level. The tests are designed to show what is required. In 1 test, it's just using a method, in the second, there are 2 method calls in a row, and the third test is an example of how an annotated method is used.
For the second test, 2 calls were used because sometimes it is necessary to prepare several different entities for the test, but it is impossible to return 2 values from anonymity without creating additional entities of the Map/Array type or class fields.
```
package ...
import org.testng.annotations.BeforeClass;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Test;
public class Example {
private User user;
@BeforeClass(description = "Подготовка данных для тестов")
public void prepareTestData() {
dbSteps().cleanUsers();
user = prepareUser("main-region-user-name", "test", "region-main");
}
@BeforeMethod(description = "Подготовка между тестами")
public void prepareTests() {
dbSteps().cleanUserJoins(user);
}
@Test(description = "Объединение пользователя в главный регион")
public void joinUserToMainRegion() {
var userForJoin = Allure.precondition(() -> prepareUser("region-1-user-name", "test", "region-1"));
apiSteps().joinUsers(user, userForJoin).check(
response -> response.shouldOk()
.userIdShould(equalTo(user.id()))
.joinedUserIdsShould(hasSize(1))
.joinedUserIdsShould(everyItem(equalTo(userForJoin.id())))
);
}
@Test(description = "Объединение нескольких пользователей из разных регионов в главный регион")
public void joinUsersFromDifferentRegionsToMainRegion() {
var firstUserForJoin = Allure.precondition(() -> prepareUser("region-1-user-name", "test", "region-1"));
var secondUserForJoin = Allure.precondition(() -> prepareUser("region-2-user-name", "test", "region-2"));
apiSteps().joinUsers(user, firstUserForJoin, secondUserForJoin).check(
response -> response.shouldOk()
.userIdShould(equalTo(user.id()))
.joinedUserIdsShould(hasSize(2))
.joinedUserIdsShould(equalTo(List.of(firstUserForJoin.id(), secondUserForJoin.id())))
);
}
@Precondition
public User userInBlockedRegion(String name, String lastName, String regionId) {
dbStesp().setRegionBlocked(regionId);
return prepareUser(name, lastName, regionId);
}
@Test(description = "Объединение пользователя в главный регион из заблокированного")
public void joinUserToMainRegionFromBlocked() {
var regionId = "region-35";
var userForJoin = userInBlockedRegion("region-blocked-user-name", "test", regionId);
apiSteps().joinUsers(user, userForJoin).check(
response -> response.shouldError(new ApiError(500, "Region '%s' blocked".formatted(regionId)))
);
}
}
```
コントリビューションガイド
調査の方向性
まず、テスト結果を処理する Java 統合のエントリポイントと、既存の Allure API およびアノテーションのパターンを追跡します。issue ではファイルやテストが指定されていません。要求されたメソッドとアノテーションを、複数の precondition 呼び出しと返却値を含む、提供された TestNG の例と比較します。完了とは、precondition のステップが個別に保持され、テストケースと launch に対応する TestOps の precondition ブロックに表示されることです。
索引モデルが issue の本文から書いたものです。
評価
- 技術スタック
- java
- 領域
- testing
- issue の種類
- 機能追加
- 難易度
- 5/5
- 見積もり時間
- 1週間以上
- 活発さ
- 静か
- 明瞭さ
- おおむね明確
- 初心者へのやさしさ
- 45/100