
ãããããã©ããã«ããã¹ãã¢ãŒããã¯ãã£ã®ãããã¯ãå³åº§ã«å®å šã«æããã«ããæžã蟌ã¿ãèªã¿åããããã³ä¿å®ã容æã§ãå®è£ ãšã¢ããªã±ãŒã·ã§ã³é åã®äŸã䜿çšããŠåå¿è ãçè§£ã§ããçæ³çãªèšäºããããŸãããã®ãçæ³çãªèšäºãã®ããžã§ã³ããæåã®ã¿ã¹ã¯ãèªåãã¹ãã®äœæããåãåã£ãåŸã§ãç§ã倢èŠãŠãã圢åŒã§æäŸããããšæããŸãããããè¡ãããã«ãWebèªåãã¹ããžã®ããç¥ãããã¢ãããŒããšããŸãç¥ãããŠããªãã¢ãããŒãããããã䜿çšããçç±ãæ¹æ³ãã¿ã€ãã³ã°ãããã³ããŒã¿ã®ä¿åãšäœæã«æåãããœãªã¥ãŒã·ã§ã³ã«ã€ããŠèª¬æããŸãã
ããã«ã¡ã¯ãHabrïŒç§ã®ååã¯ãã€ã¢ãã§ãããŠãŒã¶ãŒã€ã³ã¿ãŒãã§ã€ã¹ãã¹ãã°ã«ãŒãã®è²¬ä»»è ã§ãã5幎éãWebãã¹ããšãã¹ã¯ããããã¹ããèªååããŠããŸããã³ãŒãäŸã¯javaããã³Webçšã§ãããå®éã«ã¯ãã¹ãæžã¿ã§ãããã¢ãããŒãã¯ãã¹ã¯ããããåããpythonã«é©çšã§ããŸãã
æåã¯...
æåã¯åèªããããå€ãã®åèªããããã¢ãŒããã¯ãã£ãDRYã®ååã«é¢ä¿ãªãããã¹ãŠã®ããŒãžãã³ãŒãã§åçã«åããããŠããŸããïŒç¹°ãè¿ããŠã¯ãããŸãããäžèšã®3ã€ã®æ®µèœã§ãã§ã«æžããã³ãŒããç¹°ãè¿ãå¿ èŠã¯ãããŸããïŒã
ã·ãŒã
å®éãããããã¯ãã¹ããå¥åãã·ãŒãããå¥åéæ§é åã³ãŒãã®ã¢ãŒããã¯ãã£ã¯ãç»é¢å šäœã«åçã«è¡šç€ºãããããŒãã«ç©ã¿äžããããŠãããããã»ã©æªãã¯ãªããæ¬¡ã®ç¶æ³ã«éåžžã«é©ããŠããŸãã
- éåžžã«å°ããªãããžã§ã¯ãã®å Žåã¯ã3è¡ïŒå€§äžå€«ã233ïŒã§ãã°ããã¯ãªãã¯ããŸãã
- ãããã¢ã®ã³ãŒãäŸã«ã€ããŠã¯ã
- èªåãã¹ãã®äžã§ãHelloWordãã¹ã¿ã€ã«ã®æåã®ã³ãŒãã
ãããã·ãŒãã®ã¢ãŒããã¯ãã£ãååŸããã«ã¯ãäœãããå¿ èŠããããŸããïŒå¿ èŠãªãã¹ãŠã®ã³ãŒãã1ã€ã®ãã¡ã€ã«ãã€ãŸãå ±éã®ãã£ã³ãã¹ã«æžã蟌ãã ãã§ãã
import com.codeborne.selenide.Condition;
import com.codeborne.selenide.WebDriverRunner;
import org.testng.annotations.Test;
import static com.codeborne.selenide.Selenide.*;
public class RandomSheetTests {
@Test
void addUser() {
open("https://ui-app-for-autotest.herokuapp.com/");
$("#loginEmail").sendKeys("test@protei.ru");
$("#loginPassword").sendKeys("test");
$("#authButton").click();
$("#menuMain").shouldBe(Condition.appear);
$("#menuUsersOpener").hover();
$("#menuUserAdd").click();
$("#dataEmail").sendKeys("mail@mail.ru");
$("#dataPassword").sendKeys("testPassword");
$("#dataName").sendKeys("testUser");
$("#dataGender").selectOptionContainingText("");
$("#dataSelect12").click();
$("#dataSelect21").click();
$("#dataSelect22").click();
$("#dataSend").click();
$(".uk-modal-body").shouldHave(Condition.text(" ."));
WebDriverRunner.closeWebDriver();
}
}
èªåãã¹ãã«æ £ãå§ããã°ããã®å Žåãç¹ã«ãã¹ãèšèšãšã«ãã¬ããžã«ã€ããŠã®ååãªç¥èã瀺ããŠããå Žåã¯ããã·ãŒããã§ç°¡åãªãã¹ãã¿ã¹ã¯ãå®äºããã®ã«ååã§ããããããããã¯å€§èŠæš¡ãªãããžã§ã¯ãã«ã¯ç°¡åããããããéå¿ã¯ããããåãã¹ãã±ãŒã¹ãå®å šã«å®è¡ããæéããªãå Žåã¯ãå°ãªããšãããªãã®gitaã«ã¯ããè€éãªã¢ãŒããã¯ãã£ã®äŸãå¿ èŠã§ãã
PageObject
PageObjectãéæšå¥šã«ãªããšããåãèããããšããããŸããïŒããªãã¯ããã調çããæ¹æ³ãç¥ããªãã ãã§ãïŒ
ãã®ãã¿ãŒã³ã®äž»ãªäœæ¥åäœã¯ãããŒãžãã§ããã€ãŸããèŠçŽ ãšããããå«ãã¢ã¯ã·ã§ã³ã®å®å šãªã»ããã§ããããšãã°ãMenuPageã¯ãã¡ãã¥ãŒã䜿çšããŠãã¹ãŠã®ã¢ã¯ã·ã§ã³ã説æããã¯ã©ã¹ã§ããã€ãŸããã¿ãã®ã¯ãªãã¯ãããããããŠã³ã¢ã€ãã ã®å±éãªã©ã§ãã
ãªããžã§ã¯ãäœæã®ã¢ãŒãã«ãŠã£ã³ããŠïŒç¥ããŠãã¢ãŒãã«ãïŒçšã«PageObjectãäœæããã®ã¯å°ãé£ããã§ããã¯ã©ã¹ãã£ãŒã«ãã®ã»ããã¯æç¢ºã§ãïŒãã¹ãŠã®å ¥åãã£ãŒã«ãããã§ãã¯ããã¯ã¹ãããããããŠã³ãªã¹ããã¡ãœããã«ã¯2ã€ã®ãªãã·ã§ã³ããããŸããããã¹ãŠã®ã¢ãŒãã«ãã£ãŒã«ãã«å ¥åããããã¹ãŠã®ã¢ãŒãã«ãã£ãŒã«ãã«ã©ã³ãã ãªå€ãå ¥åããããã¹ãŠã®ã¢ãã«ã¯ãã£ãŒã«ãããã§ãã¯ããããã³ãååãå ¥åãããååããã§ãã¯ãã®äž¡æ¹ã®ãŠãããŒãµã«ã¡ãœãããäœæã§ããŸãã ã説æãèšå ¥ããŠãã ããããªã©ãç¹å®ã®å Žåã«äœã䜿çšãããã¯ãåªå é äœã«ãã£ãŠæ±ºãŸããŸãããã¢ãŒãã«å šäœã«å¯ŸããŠ1ã€ã®æ¹æ³ãã¢ãããŒãã¯ãã¹ãã®äœæé床ãåäžãããŸãããããã£ãŒã«ãããšã«1ã€ã®æ¹æ³ãã¢ãããŒããšæ¯èŒãããšããã¹ãã®èªã¿ããããå€§å¹ ã«äœäžããŸãã
äŸ
Page Object :
:
:
. : , , , , â . , , , .
public class UsersPage {
@FindBy(how = How.ID, using = "dataEmail")
private SelenideElement email;
@FindBy(how = How.ID, using = "dataPassword")
private SelenideElement password;
@FindBy(how = How.ID, using = "dataName")
private SelenideElement name;
@FindBy(how = How.ID, using = "dataGender")
private SelenideElement gender;
@FindBy(how = How.ID, using = "dataSelect11")
private SelenideElement var11;
@FindBy(how = How.ID, using = "dataSelect12")
private SelenideElement var12;
@FindBy(how = How.ID, using = "dataSelect21")
private SelenideElement var21;
@FindBy(how = How.ID, using = "dataSelect22")
private SelenideElement var22;
@FindBy(how = How.ID, using = "dataSelect23")
private SelenideElement var23;
@FindBy(how = How.ID, using = "dataSend")
private SelenideElement save;
@Step("Complex add user")
public UsersPage complexAddUser(String userMail, String userPassword, String userName, String userGender,
boolean v11, boolean v12, boolean v21, boolean v22, boolean v23) {
email.sendKeys(userMail);
password.sendKeys(userPassword);
name.sendKeys(userName);
gender.selectOption(userGender);
set(var11, v11);
set(var12, v12);
set(var21, v21);
set(var22, v22);
set(var23, v23);
save.click();
return this;
}
@Step("Fill user Email")
public UsersPage sendKeysEmail(String text) {...}
@Step("Fill user Password")
public UsersPage sendKeysPassword(String text) {...}
@Step("Fill user Name")
public UsersPage sendKeysName(String text) {...}
@Step("Select user Gender")
public UsersPage selectGender(String text) {...}
@Step("Select user variant 1.1")
public UsersPage selectVar11(boolean flag) {...}
@Step("Select user variant 1.2")
public UsersPage selectVar12(boolean flag) {...}
@Step("Select user variant 2.1")
public UsersPage selectVar21(boolean flag) {...}
@Step("Select user variant 2.2")
public UsersPage selectVar22(boolean flag) {...}
@Step("Select user variant 2.3")
public UsersPage selectVar23(boolean flag) {...}
@Step("Click save")
public UsersPage clickSave() {...}
private void set(SelenideElement checkbox, boolean flag) {
if (flag) {
if (!checkbox.isSelected()) checkbox.click();
} else {
if (checkbox.isSelected()) checkbox.click();
}
}
}
:
@Test
void addUser() {
baseRouter.authPage()
.complexLogin("test@protei.ru", "test")
.complexOpenAddUser()
.complexAddUser("mail@test.ru", "pswrd", "TESTNAME", "", true, false, true, true, true)
.checkAndCloseSuccessfulAlert();
}
:
@Test
void addUserWithoutComplex() {
//Arrange
baseRouter.authPage()
.complexLogin("test@protei.ru", "test");
//Act
baseRouter.mainPage()
.hoverUsersOpener()
.clickAddUserMenu();
baseRouter.usersPage()
.sendKeysEmail("mail@test.ru")
.sendKeysPassword("pswrd")
.sendKeysName("TESTNAME")
.selectGender("")
.selectVar11(true)
.selectVar12(false)
.selectVar21(true)
.selectVar22(true)
.selectVar23(true)
.clickSave();
//Assert
baseRouter.usersPage()
.checkTextSavePopup(" .")
.closeSavePopup();
}
. : , , , , â . , , , .
ã€ãŸããããŒãžãå«ããã¹ãŠã®ã¢ã¯ã·ã§ã³ã¯ããŒãžå ã«ã«ãã»ã«åãããŠããããïŒå®è£ ã¯é衚瀺ã§ãè«çã¢ã¯ã·ã§ã³ã®ã¿ã䜿çšå¯èœã§ãïŒãããžãã¹é¢æ°ã¯ãã§ã«ãã¹ãã§äœ¿çšãããŠããŸãããããŠããã«ããããã¹ãã倿Žããããšãªãããã©ãããã©ãŒã ïŒWebããã¹ã¯ããããæºåž¯é»è©±ïŒããšã«ç¬èªã®ããŒãžãäœæã§ããŸãã
å¯äžã®æ®å¿µãªç¹ã¯ããŸã£ããåãã€ã³ã¿ãŒãã§ã€ã¹ãç°ãªããã©ãããã©ãŒã ã§ã¯ãŸãã§ãããšããããšã§ãã
ã€ã³ã¿ãŒãã§ã€ã¹éã®äžäžèŽãæžããããã«ãåã ã®ã¹ããããè€éã«ããããšããèªæãããããããã¯å¥ã ã®äžéã¯ã©ã¹ã«åãåºããããã¹ãã¯ãŸããŸãèªã¿ã«ãããªããŸããæå€§2ã€ã®ã¹ãããïŒããã°ã€ã³ãããŸããããããã¹ãã¯çµäºããŸããWebã«å ããŠããããžã§ã¯ãã«ã¯è¿œå ã®ã€ã³ã¿ãŒãã§ã€ã¹ããªããæžã蟌ã¿ãããã±ãŒã¹ãé »ç¹ã«èªã¿åãå¿ èŠããããããèªã¿ãããããããã«ãéå»ã®PageObjectsã¯æ°ããå€èгã«ãªããŸããã
PageObjectã¯ã誰ããç¥ã£ãŠããå€å žã§ãããã®ã¢ãããŒãã«é¢ããå€ãã®èšäºãšãã»ãŒãã¹ãŠã®ããã°ã©ãã³ã°èšèªã®äŸãèŠã€ããããšãã§ããŸããPageObjectã®äœ¿çšã¯ãåè£è ããŠãŒã¶ãŒã€ã³ã¿ãŒãã§ã€ã¹ã®ãã¹ãã«ã€ããŠäœãç¥ã£ãŠãããã©ããã倿ããããã«ãã䜿çšãããŸãããã®ã¢ãããŒãã䜿çšããŠãã¹ãå²ãåœãŠãå®è¡ããããšã¯ãã»ãšãã©ã®éçšäž»ãæåŸ ããããšã§ãããWebã®ã¿ããã¹ãããŠããå Žåã§ãããã®å€ãã¯æ¬çªãããžã§ã¯ãã«ååšããŸãã
ä»ã«äœãèµ·ãããŸããïŒ
å¥åŠãªããšã«ãåäžã®PageObjectã§ã¯ãããŸããïŒ
- ScreenPlayãã¿ãŒã³ãé »ç¹ã«çºçããŸããããã«ã€ããŠã¯ãããšãã°ãããã§èªãããšãã§ããŸããã³ãŒããèªããªã人ãå·»ã蟌ãŸãã«bddã¢ãããŒãã䜿çšããããšã¯ããªãŒãããã³ã«å¯Ÿããç¡æå³ãªæŽåã§ãããããããã¯ç§ãã¡ã®åœã«æ ¹ä»ããŠããŸããã§ããã
- js- , PageObject, - , , .
- - , , ModelBaseTesting, . , .
ãŸããããŒãžèŠçŽ ã«ã€ããŠè©³ãã説æããŸããããã«ãããåãã¿ã€ãã®ã³ãŒãã®éãæžãããªãããèªã¿ããããåäžããããããžã§ã¯ãã«ç²ŸéããŠããªã人ã§ããã¹ãããã°ããçè§£ã§ããŸãããããŠãã®äžã«ïŒãã¡ãããç¬èªã®ãã©ãã¯ãžã£ãã¯ãšèšå®ããããŸãïŒïŒäººæ°ã®ããéjsãã¬ãŒã ã¯ãŒã¯ã®htmlElementsãAtlasãããã³Epamã®JDIãæ§ç¯ãããŠããŸãã
ããŒãžèŠçŽ ãšã¯äœã§ããïŒ
ããŒãžèŠçŽ ãã¿ãŒã³ãäœæããã«ã¯ãæäžäœã¬ãã«ã®èŠçŽ ããå§ããŸããWiktionaryãèšãããã«ãããŠã£ãžã§ãããã¯ãæšæºã®å€èгãæã¡ãæšæºã®ã¢ã¯ã·ã§ã³ãå®è¡ããã°ââã©ãã£ã«ã«ãŠãŒã¶ãŒã€ã³ã¿ãŒãã§ã€ã¹ã®ãœãããŠã§ã¢ããªããã£ãã§ããããšãã°ãæãåçŽãªãŠã£ãžã§ããããã¿ã³ã-ã¯ãªãã¯ãããšãããã¹ããšè²ã確èªã§ããŸãã ãå ¥åãã£ãŒã«ããã§ã¯ãããã¹ãã®å ¥åãå ¥åå 容ã®ç¢ºèªãã¯ãªãã¯ããã©ãŒã«ã¹è¡šç€ºã®ç¢ºèªãå ¥åæåæ°ã®ç¢ºèªãããã¹ãã®å ¥åãšãEnterãã®å ¥åããã¬ãŒã¹ãã«ããŒã®ç¢ºèªããå¿ é ããã£ãŒã«ãã®åŒ·èª¿è¡šç€ºãšãšã©ãŒããã¹ãã®ç¢ºèªãè¡ãããšãã§ããŸããç¹å®ã®å Žåã«ä»ã«äœãå¿ èŠã«ãªãããããã«ããã®ãã£ãŒã«ãã䜿çšãããã¹ãŠã®ã¢ã¯ã·ã§ã³ã¯ãã©ã®ããŒãžã§ãæšæºã§ãã
å 容ã®ããªãŒããŒãã«ãªã©ãã¢ã¯ã·ã§ã³ãããã»ã©æçœã§ã¯ãªããããè€éãªãŠã£ãžã§ããããããŸããããããæžããšããããªãã¯ãŠãŒã¶ãŒãããã°ã©ã ã®ãã®é åã§äœããããã«åºã¥ããŠæ§ç¯ããå¿ èŠããããŸããäŸãã°ïŒ
- æå®ãããããã¹ããå«ãç®æ¬¡ã®èŠçŽ ãã¯ãªãã¯ãã
- æå®ãããããã¹ãã§èŠçŽ ã®ååšã確èªãã
- æå®ãããããã¹ãã§èŠçŽ ã®ã€ã³ãã³ãããã§ãã¯ããŸãã
ãŠã£ãžã§ããã«ã¯2ã€ã®ã¿ã€ãããããŸããã³ã³ã¹ãã©ã¯ã¿ãŒã«ãã±ãŒã¿ãŒã䜿çšããå ŽåãšããŠã£ãžã§ããã倿Žããã«ãã±ãŒã¿ãŒããŠã£ãžã§ããã«çž«ãä»ããå Žåã§ããéåžžãç®æ¬¡ã¯ããŒãžäžã®1ã€ã§ãããããŒãžäžã®æ€çŽ¢æ¹æ³ã¯ãç®æ¬¡ã®ã¢ã¯ã·ã§ã³ã®ãå éšãã«æ®ãããšãã§ããŸãããã±ãŒã¿ãŒã誀ã£ãŠå€éšããæå·ããå¯èœæ§ãããããããã±ãŒã¿ãŒãåå¥ã«åãåºãããšã¯æå³ããªããåå¥ã«ä¿åããã¡ãªããã¯ãããŸãããåæ§ã«ãããã¹ããã£ãŒã«ãã¯æ®éçãªãã®ã§ããéã«ãäžåºŠã«å€ãã®å ¥åãã£ãŒã«ããååšããå¯èœæ§ããããããã³ã³ã¹ãã©ã¯ã¿ãŒããã®ãã±ãŒã¿ãŒãä»ããŠã®ã¿ããã¹ããã£ãŒã«ããæäœããå¿ èŠããããŸããããšãã°ãããããããŠã³ãã³ããããã«ã¯ãªãã¯ãããªã©ã1ã€ã®ç¹å¥ãªå ¥åãã£ãŒã«ãã®ã¿ã察象ãšããã¡ãœãããå°ãªããšã1ã€è¡šç€ºãããå Žåãããã¯åãªãå ¥åãã£ãŒã«ãã§ã¯ãªããç¬èªã®ãŠã£ãžã§ãããäœæãããšããæ¥ãŸããã
å šäœçãªæ··ä¹±ãæžããããã«ãããŒãžèŠçŽ ã®ãããªãŠã£ãžã§ãããåãããŒãžã«çµåãããããããããŒãžèŠçŽ ãšããååãæ§æãããŠããããã§ãã
public class UsersPage {
public Table usersTable = new Table();
public InputLine email = new InputLine(By.id("dataEmail"));
public InputLine password = new InputLine(By.id("dataPassword"));
public InputLine name = new InputLine(By.id("dataName"));
public DropdownList gender = new DropdownList(By.id("dataGender"));
public Checkbox var11 = new Checkbox(By.id("dataSelect11"));
public Checkbox var12 = new Checkbox(By.id("dataSelect12"));
public Checkbox var21 = new Checkbox(By.id("dataSelect21"));
public Checkbox var22 = new Checkbox(By.id("dataSelect22"));
public Checkbox var23 = new Checkbox(By.id("dataSelect23"));
public Button save = new Button(By.id("dataSend"));
public ErrorPopup errorPopup = new ErrorPopup();
public ModalPopup savePopup = new ModalPopup();
}
ãã¹ãã§äœæãããäžèšã®ãã¹ãŠã䜿çšããã«ã¯ãããŒãžããŠã£ãžã§ãããã¢ã¯ã·ã§ã³ãé çªã«åç §ããå¿ èŠããããããæ¬¡ã®ããã«æ§æãããŸãã
@Test
public void authAsAdmin() {
baseRouter
.authPage().email.fill("test@protei.ru")
.authPage().password.fill("test")
.authPage().enter.click()
.mainPage().logoutButton.shouldExist();
}
ãã¬ãŒã ã¯ãŒã¯ã§ãããå¿ èŠãªå ŽåïŒããšãã°ãRobotFrameworkçšã®Javaã§ã®ãªã¢ãŒãã©ã€ãã©ãªã®å®è£ ã«ã¯å ¥åãšããŠã¹ãããã¯ã©ã¹ãå¿ èŠã§ãïŒããŸãã¯çŸããã¬ããŒãã®æ³šéã远å ããå Žåã¯ãã¯ã©ã·ãã¯ã¹ãããã¬ã€ã€ãŒã远å ã§ããŸããæ³šéããŒã¹ã®ãžã§ãã¬ãŒã¿ãŒã«ããŸãããèå³ãããã°ãã³ã¡ã³ããæžããŠãã ããã
æ¿èªã¹ãããã¯ã©ã¹ã®äŸ
public class AuthSteps{
private BaseRouter baseRouter = new BaseRouter();
@Step("Sigh in as {mail}")
public BaseSteps login(String mail, String password) {
baseRouter
.authPage().email.fill(mail)
.authPage().password.fill(password)
.authPage().enter.click()
.mainPage().logoutButton.shouldExist();
return this;
}
@Step("Fill E-mail")
public AuthSteps fillEmail(String email) {
baseRouter.authPage().email.fill(email);
return this;
}
@Step("Fill password")
public AuthSteps fillPassword(String password) {
baseRouter.authPage().password.fill(password);
return this;
}
@Step("Click enter")
public AuthSteps clickEnter() {
baseRouter.authPage().enter.click();
return this;
}
@Step("Enter should exist")
public AuthSteps shouldExistEnter() {
baseRouter.authPage().enter.shouldExist();
return this;
}
@Step("Logout")
public AuthSteps logout() {
baseRouter.mainPage().logoutButton.click()
.authPage().enter.shouldExist();
return this;
}
}
public class BaseRouter {
// , ,
public AuthPage authPage() {return page(AuthPage.class);}
public MainPage mainPage() {return page(MainPage.class);}
public UsersPage usersPage() {return page(UsersPage.class);}
public VariantsPage variantsPage() {return page(VariantsPage.class);}
}
ãããã®æé ã¯ãããŒãžå ã®æé ãšéåžžã«ãã䌌ãŠããŸãããå®è³ªçã«éãã¯ãããŸããããã ããããããå¥ã ã®ã¯ã©ã¹ã«åå²ãããšã察å¿ããããŒãžãšã®ããŒããªã³ã¯ã倱ãããããšãªããã³ãŒãçæã®ç¯å²ãåºãããŸããåæã«ãããŒãžã«ã¹ããããèšè¿°ããªãå Žåãã«ãã»ã«åã®æå³ã¯ãªããªããpageElementã«ã¹ãããã®ã¯ã©ã¹ã远å ããªãå ŽåãããŒãžãšã®å¯Ÿè©±ã¯ããžãã¹ããžãã¯ããåé¢ããããŸãŸã«ãªããŸãã
, , . . , , , « , ». â , page object , !
ãã¹ãããŒã¿ã䟿å©ã«æäœããæ¹æ³ã«è§Šããã«ããããžã§ã¯ãã®ã¢ãŒããã¯ãã£ã«ã€ããŠè©±ãã®ã¯ééãã§ãã
æãç°¡åãªæ¹æ³ã¯ããçŸç¶ã®ãŸãŸããŸãã¯å€æ°ã§ãã¹ãã«çŽæ¥ããŒã¿ãæž¡ãããšã§ããããã¯ã·ãŒãã¢ãŒããã¯ãã£ã«ã¯åé¡ãããŸãããã倧ããªãããžã§ã¯ãã¯é¢åã«ãªããŸãã
ãã1ã€ã®æ¹æ³ã¯ãããŒã¿ããªããžã§ã¯ããšããŠä¿åããããšã§ããããã¯ã1ã€ã®ãšã³ãã£ãã£ã«é¢é£ãããã¹ãŠã®ããŒã¿ã1ã€ã®å Žæã«åéãããã¹ãŠãæ··åããŠééã£ãå Žæã§äœãã䜿çšããèªæãåãé€ããããç§ãã¡ã«ãšã£ãŠæé©ã§ããããšãããããŸãããããã«ããã®æ¹æ³ã«ã¯ãåã ã®ãããžã§ã¯ãã§åœ¹ç«ã€å¯èœæ§ã®ããå€ãã®è¿œå ã®æ¹åããããŸãã
ãšã³ãã£ãã£ããšã«ãããã説æããã¢ãã«ãäœæãããŸããæãåçŽãªã±ãŒã¹ã§ã¯ããã£ãŒã«ãã®ååãšã¿ã€ããå«ãŸããŠããŸããããšãã°ããŠãŒã¶ãŒã¢ãã«ã¯æ¬¡ã®ãšããã§ãã
public class User {
private Integer id;
private String mail;
private String name;
private String password;
private Gender gender;
private boolean check11;
private boolean check12;
private boolean check21;
private boolean check22;
private boolean check23;
public enum Gender {
MALE,
FEMALE;
public String getVisibleText() {
switch (this) {
case MALE:
return "";
case FEMALE:
return "";
}
return "";
}
}
}
ã©ã€ãããã¯ïŒ1ïŒã¯ã©ã€ã¢ã³ããšãµãŒããŒã®çžäºäœçšã®äŒæ¯ã®ãããªã¢ãŒããã¯ãã£ãããå ŽåïŒjsonãŸãã¯xmlãªããžã§ã¯ãã¯ã¯ã©ã€ã¢ã³ããšãµãŒããŒã®éãè¡ãæ¥ããèªã¿åãäžå¯èœãªã³ãŒãã®æçã§ã¯ãããŸããïŒãjsonã<your language>ãªããžã§ã¯ãã«ã°ãŒã°ã«ã§ããŸãããããããå¿ èŠãªãžã§ãã¬ãŒã¿ãŒããã§ã«ãããŸãã ..ã
ã©ã€ãããã¯ïŒ2ïŒãµãŒããŒéçºè ãåããªããžã§ã¯ãæåã®ããã°ã©ãã³ã°èšèªã§èšè¿°ããŠããå Žåã¯ãã¢ãã«ã䜿çšã§ããŸãã
ã©ã€ãããã¯ïŒ3ïŒããªãããžã£ãã¹ãã§ãããäŒç€ŸããµãŒãããŒãã£ã®ã©ã€ãã©ãªã®äœ¿çšãèš±å¯ããŠããŠãåšãã«ç¥çµè³ªãªååãããªãå ŽåãçŽç²ã§çŸããJavaã®ä»£ããã«è¿œå ã®ã©ã€ãã©ãªã䜿çšããç°ç«¯è ã«ãšã£ãŠå€ãã®èŠçãäºæž¬ããŠããå Žåã¯ãLombokã䜿çšããŠãã ããïŒã¯ããéåžžã¯IDEã²ãã¿ãŒãã»ãã¿ãŒãtoStringããã«ããŒãçæã§ããŸããããããLombokã¢ãã«ãšLombokã䜿çšããªãéçºã¢ãã«ãæ¯èŒãããšãåã¯ã©ã¹ã®ããžãã¹ããžãã¯ãæããªãæ°çŸè¡ã®ã空ã®ãã³ãŒãã®å©çãèŠãããŸãã Lombokã䜿çšããå Žåããã£ãŒã«ããšã²ãã¿ãŒãã»ãã¿ãŒãçµã¿åãããäººã®æãæã€å¿ èŠã¯ãããŸãããã¯ã©ã¹ã¯èªã¿ãããã3ã€ã®ç»é¢ãã¹ã¯ããŒã«ããªããŠãããªããžã§ã¯ãã®ã¢ã€ãã¢ãäžåºŠã«åŸãããšãã§ããŸãã
ãããã£ãŠããã¹ãããŒã¿ãã¹ãã¬ããããå¿ èŠããããªããžã§ã¯ãã®ã¯ã€ã€ãŒãã¬ãŒã ããããŸããããŒã¿ã¯æçµçãªéç倿°ãšããŠä¿åã§ããŸããããšãã°ãããã¯ãä»ã®ãŠãŒã¶ãŒãäœæããã¡ã€ã³ã·ã¹ãã 管çè ã«ãšã£ãŠäŸ¿å©ã§ãããã¹ãã®ããŒã¿ã倿Žããèªæããªãããã«ãfinalã䜿çšããããšããå§ãããŸãããããããšã管çè ã®ä»£ããã«æ¬¡ã®ãã¹ãã§ããã¹ãã®äžŠè¡èµ·åã¯èšããŸã§ããªãããç¡åãªããŠãŒã¶ãŒãååŸã§ããããã§ãã
public class Users {
public static final User admin = User.builder().mail("test@protei.ru").password("test").build();
}
ä»ã®ãã¹ãã«åœ±é¿ãäžããªãããŒã¿ãååŸããã«ã¯ãããããã¿ã€ãããã¿ãŒã³ã䜿çšããŠãåãã¹ãã§ã€ã³ã¹ã¿ã³ã¹ã®ã¯ããŒã³ãäœæããŸããç°¡åã«ããããšã«ããŸãããã¯ã©ã¹ã®ãã£ãŒã«ããã©ã³ãã åããã¡ãœãããäœæããã«ã¯ã次ã®ããã«ããŸãã
public static User getUserRandomData() {
User user = User.builder()
.mail(getRandomEmail())
.password(getShortLatinStr())
.name(getShortLatinStr())
.gender(getRandomFromEnum(User.Gender.class))
.check11(getRandomBool())
.check21(getRandomBool())
.check22(getRandomBool())
.check23(getRandomBool())
.build();
//business-logic: 11 xor 12 must be selected
if (!user.isCheck11()) user.setCheck12(true);
if (user.isCheck11()) user.setCheck12(false);
return user;
}
åæã«ãçŽæ¥ã©ã³ãã æ§ãäœæããã¡ãœããã¯ãä»ã®ã¢ãã«ã§ã䜿çšããããããå¥ã®ã¯ã©ã¹ã«é 眮ããæ¹ãé©åã§ãã
ã©ã³ãã ãŠãŒã¶ãŒãååŸããã¡ãœããã§ã¯ãããã«ããŒããã¿ãŒã³ã䜿çšãããŸãããããã¯ãå¿ èŠãªã»ããããšã«æ°ããã¿ã€ãã®ã³ã³ã¹ãã©ã¯ã¿ãŒãäœæããªãããã«å¿ èŠã§ããç°çã代ããã«ããã¡ãããç®çã®ã³ã³ã¹ãã©ã¯ã¿ãŒãåŒã³åºãã ãã§æžã¿ãŸãã
ããŒã¿ãä¿åãããã®æ¹æ³ã§ã¯ãå€ãªããžã§ã¯ããã¿ãŒã³ã䜿çšããŸããããã«åºã¥ããŠããããžã§ã¯ãã®ããŒãºã«å¿ããŠãä»»æã®åžæã远å ã§ããŸããä¿åãªããžã§ã¯ããããŒã¿ããŒã¹ã«è¿œå ããŠããã¹ãã®åã«ã·ã¹ãã ãæºåããããšãã§ããŸãããŠãŒã¶ãŒãã©ã³ãã åããããšã¯ã§ããŸããããããããã£ãã¡ã€ã«ïŒããã³å¥ã®ã¯ãŒã«ãªã©ã€ãã©ãªïŒãããŠãŒã¶ãŒãããŒãããŸãïŒãã©ãã§ãåããŠãŒã¶ãŒã䜿çšã§ããŸããããªããžã§ã¯ãã®ã¿ã€ãããšã«ããããããŒã¿ã¬ãžã¹ããªãäœæããŸãããã®ã¬ãžã¹ããªã§ã¯ããšã³ãããŒãšã³ãã«ãŠã³ã¿ã®å€ããªããžã§ã¯ãã®ååãŸãã¯ãã®ä»ã®äžæã®ãã£ãŒã«ãã«è¿œå ããããã¹ãã«ã¯åžžã«äžæã®testUser_135ããããŸãã
ç¬èªã®ãªããžã§ã¯ãã¹ãã¬ãŒãžïŒgoogleãªããžã§ã¯ãããŒã«ãšflyweightïŒãäœæããŠããã¹ãã®éå§æã«å¿ èŠãªãšã³ãã£ãã£ãèŠæ±ã§ããŸããå庫ã¯ãããã«äœ¿çšã§ãããªããžã§ã¯ãã®1ã€ãæäŸãããããå ææžã¿ãšããŠããŒã¯ããŸãããã¹ããçµäºãããšããªããžã§ã¯ãã¯ã¹ãã¬ãŒãžã«æ»ãããå¿ èŠã«å¿ããŠã¯ãªãŒãã³ã°ããã空ããšããŒã¯ãããŠã次ã®ãã¹ãã«æž¡ãããŸããããã¯ããªããžã§ã¯ããäœæããæäœãéåžžã«ãªãœãŒã¹ãæ¶è²»ããå Žåã«å®è¡ãããŸãããã®ã¢ãããŒãã§ã¯ãã¹ãã¬ãŒãžã¯ãã¹ããšã¯ç¬ç«ããŠæ©èœããæ¬¡ã®å Žåã®ããŒã¿ãæºåã§ããŸãã
ããŒã¿äœæ
ãŠãŒã¶ãŒç·šéã®å Žåãç·šéããäœææžã¿ãŠãŒã¶ãŒãå¿ ãå¿ èŠã«ãªããŸããéåžžãç·šéãã¹ãã§ã¯ããã®ãŠãŒã¶ãŒãã©ãããæ¥ãã®ãã¯é¢ä¿ãããŸããããããäœæããããã€ãã®æ¹æ³ããããŸãïŒ
- ãã¹ãã®åã«æã§ãã¿ã³ãæŒããŠãã ããã
- åã®ãã¹ãã®ããŒã¿ãæ®ããŠã
- ããã¯ã¢ãããããã¹ãã®åã«å±éãã
- ãã¹ãã§ãã¿ã³ãçŽæ¥ã¯ãªãã¯ããŠäœæãã
- APIã䜿çšããŸãã
ããããã¹ãŠã®æ¹æ³ã«ã¯æ¬ ç¹ããããŸãããã¹ãã®åã«æåã§ã·ã¹ãã ã«äœããå ¥åããå¿ èŠãããå Žåãããã¯æªããã¹ãã§ãããããå¯èœãªéã人éã®æããç¬ç«ããŠåäœããå¿ èŠããããããèªåãã¹ããšåŒã°ããŸãã
åã®ãã¹ãã®çµæã䜿çšãããšãã¢ãããã¯æ§ã®ååã«éåãããã¹ããåå¥ã«å®è¡ã§ããªããªããŸãããããå šäœãå®è¡ããå¿ èŠããããuiãã¹ãã¯ããã»ã©é«éã§ã¯ãããŸããã誰ããèŠäºãªå€ç«ç¶æ ã§ã远å ã®ãã³ã¹ãªãã§å®è¡ã§ããããã«ããã¹ããäœæããããšã¯è¯ã圢åŒãšèããããŠããŸãããŸããååã®ãã¹ããèœãšãããªããžã§ã¯ãã®äœæã®ãã°ã¯ãç·šéã®ãã°ãä¿èšŒãããã®ã§ã¯ãªãããã®ãããªæ§æã§ã¯ã次ã«ç·šéãã¹ãã倱æããç·šéãæ©èœãããã©ããã確èªã§ããŸããã
ãã¹ãã«å¿ èŠãªããŒã¿ã§ããã¯ã¢ããïŒããŒã¿ããŒã¹ã®ä¿åãããã€ã¡ãŒãžïŒã䜿çšããããšã¯ãç¹ã«ããã¯ã¢ãããèªåçã«å±éãããå ŽåããŸãã¯ãã¹ãèªäœãããŒã¿ãããŒã¿ããŒã¹ã«é 眮ããå Žåããã§ã«ããŸãè¯ãã¢ãããŒãã§ã¯ãããŸããããã ãããã®ç¹å®ã®ãªããžã§ã¯ãããã¹ãã§äœ¿çšãããçç±ã¯æããã§ã¯ãããŸãããããŒã¿äº€å·®ã®åé¡ã¯ã倿°ã®ãã¹ãããå§ãŸãå ŽåããããŸããããšãã°ãå€ãããŒãžã§ã³ã§ãã¹ããå®è¡ããå¿ èŠããããããã¯ã¢ããã«ãã§ã«æ°ãããã£ãŒã«ããå«ãŸããŠããå Žåãªã©ãããŒã¿ããŒã¹ã¢ãŒããã¯ãã£ã®æŽæ°ã«ãããããã¯ã¢ãããæ£ããæ©èœããªããªãããšããããŸããã¢ããªã±ãŒã·ã§ã³ã®ããŒãžã§ã³ããšã«ããã¯ã¢ããã¹ãã¬ãŒãžãç·šæããããšã§ãããã«å¯Ÿæã§ããŸããããŒã¿ããŒã¹ã¢ãŒããã¯ãã£ã®æŽæ°ã«ãããããã¯ã¢ãããåã³æå¹ã§ãªããªãããšããããŸããæ°ãããã£ãŒã«ãã宿çã«è¡šç€ºããããããããã¯ã¢ããã宿çã«æŽæ°ããå¿ èŠããããŸãããããŠçªç¶ããã¯ãããããŸãããŸãã«ãã®ãããªåäžã®ããã¯ã¢ããããã®ãŠãŒã¶ãŒãã¯ã©ãã·ã¥ããããšã¯ãªãããŠãŒã¶ãŒãäœæãããã°ããããååãå°ãã©ã³ãã ã«ä»ããããå Žåããã°ãèŠã€ãããŸããããã¯ã蟲è¬å¹æããšåŒã°ããã¢ããªã±ãŒã·ã§ã³ãåãããŒã¿ã«ãæ £ããŠããããèœäžãããæšªã«ããããªãããããã¹ãã¯ãã°ã®æ€åºã忢ããŸãã
åãã€ã³ã¿ãŒãã§ã€ã¹ãã¯ãªãã¯ããŠãŠãŒã¶ãŒããã¹ãã§äœæãããå Žåã蟲è¬ãæžå°ãããŠãŒã¶ãŒã®å€èгã®éèªææ§ãæ¶ããŸããæ¬ ç¹ã¯ãåã®ãã¹ãã®çµæã䜿çšããå Žåãšåæ§ã§ããé床ã¯ãŸããŸãã§ãäœæã«ãã°ãããå Žåã§ãïŒç¹ã«ãã¹ããã°ãããšãã°ãä¿åãã¿ã³ã®ãã±ãŒã¿ãŒã倿ŽãããïŒãç·šéãæ©èœãããã©ããã¯ããããŸããã
æåŸã«ããŠãŒã¶ãŒãäœæããå¥ã®æ¹æ³ã¯ããã¹ãããhttp-APIã䜿çšããããšã§ããã€ãŸãããã¿ã³ãã¯ãªãã¯ãã代ããã«ãç®çã®ãŠãŒã¶ãŒãäœæããããã®èŠæ±ãããã«éä¿¡ããŸãããããã£ãŠã蟲è¬ã¯å¯èœãªéãåæžããããŠãŒã¶ãŒãã©ãããæ¥ãã®ããæããã§ããããã¿ã³ãã¯ãªãã¯ããå Žåãããäœæé床ãã¯ããã«éããªããŸãããã®æ¹æ³ã®æ¬ ç¹ã¯ãã¯ã©ã€ã¢ã³ããšãµãŒããŒéã®éä¿¡ãããã³ã«ã«jsonãŸãã¯xmlããªããããžã§ã¯ãã«ã¯é©ããŠããªãããšã§ãïŒããšãã°ãéçºè ãgwtã䜿çšããŠèšè¿°ãããã¹ã¿ãŒçšã«è¿œå ã®apiãèšè¿°ããããªãå ŽåïŒã APIã䜿çšãããšã管çããã«ã«ãã£ãŠå®è¡ãããããžãã¯ã®äžéšã倱ãããç¡å¹ãªãšã³ãã£ãã£ãäœæãããå¯èœæ§ããããŸãã APIã倿ŽãããŠãã¹ãã倱æããå¯èœæ§ããããŸãããéåžžããã¯æ¢ç¥ã§ããã倿Žã®ããã«å€æŽãå ããå¿ èŠã¯ãããŸããããããããããã¯ãŸã ãã§ãã¯ããå¿ èŠãããæ°ããããžãã¯ã§ããAPIã¬ãã«ã§ãã°ãçºçããå¯èœæ§ããããŸãããæ¢è£œã®ããã¯ã¢ãã以å€ã®åäžã®æ¹æ³ãå®å šã§ã¯ãªããããããŒã¿äœæã®ã¢ãããŒããçµã¿åãããæ¹ãé©åã§ãã
ããããã¬ããAPIã远å ãã
ããŒã¿ãæºåããæ¹æ³ã®äžã§ãå¥ã®ãã¹ãã®çŸåšã®ããŒãºã«å¯Ÿå¿ãããã¹ãã§å€æŽãããªã远å ã®ãã¹ãããŒã¿ïŒãªããžã§ã¯ãã®ã¢ã€ã³ã³ãªã©ïŒã®ããã¯ã¢ãããå±éããŠãã¢ã€ã³ã³ãããŒãããããšãã«ãããã®ãªããžã§ã¯ãã®ãã¹ããã¯ã©ãã·ã¥ããªãããã«ããããã®http-APIãæé©ã§ãã
Javaã§APIãä»ããŠãªããžã§ã¯ããäœæããã«ã¯ãrestAssuredã©ã€ãã©ãªã䜿çšããã®ãæã䟿å©ã§ããããšãããããŸããããããã¯å®éã«ã¯æå³ãããŠããŸãããèŠã€ãã£ãããããããã€ãå ±æãããã®ã§ããããã£ãšç¥ã£ãŠããŸã-æžããŠãã ããïŒ
æåã®åé¡ã¯ãã·ã¹ãã ã§ã®æ¿èªã§ãããã®æ¹æ³ã¯ãããžã§ã¯ãããšã«åå¥ã«éžæããå¿ èŠããããŸãããå ±éç¹ã1ã€ãããŸããããšãã°ã次ã®ããã«ãèŠæ±ä»æ§ã«æ¿èªãé 眮ããå¿ èŠããããŸãã
public class ApiSettings {
private static String loginEndpoint="/login";
public static RequestSpecification testApi() {
RequestSpecBuilder tmp = new RequestSpecBuilder()
.setBaseUri(testConfig.getSiteUrl())
.setContentType(ContentType.JSON)
.setAccept(ContentType.JSON)
.addFilter(new BeautifulRest())
.log(LogDetail.ALL);
Map<String, String> cookies = RestAssured.given().spec(tmp.build())
.body(admin)
.post(loginEndpoint).then().statusCode(200).extract().cookies();
return tmp.addCookies(cookies).build();
}
}
ç¹å®ã®ãŠãŒã¶ãŒã®Cookieãä¿åããæ©èœã远å ãããšããµãŒããŒãžã®ãªã¯ãšã¹ãã®æ°ãæžããŸãããã®ã¡ãœããã®2çªç®ã®å¯èœãªæ¡åŒµã¯ãçŸåšã®ãã¹ãçšã«åä¿¡ããCookieãä¿åããæ¿èªæé ãã¹ãããããŠããããããã©ãŠã¶ãŒãã©ã€ããŒã«æããããšã§ããè³éã¯æ°ç§ã§ããããã¹ãã®æ°ãæãããšãããªãã¹ããŒãã¢ããã§ããŸãïŒ
æ©ãæ¹ãšçŸããã¬ããŒãã®ããã®ãã³ããããŸããã©ã€ã³ã«æ³šæããŠ
.addFilter(new BeautifulRest())ãã ããïŒ
BeautifulRestã¯ã©ã¹
public class BeautifulRest extends AllureRestAssured {
public BeautifulRest() {}
public Response filter(FilterableRequestSpecification requestSpec, FilterableResponseSpecification responseSpec, FilterContext filterContext) {
AllureLifecycle lifecycle = Allure.getLifecycle();
lifecycle.startStep(UUID.randomUUID().toString(), (new StepResult()).setStatus(Status.PASSED).setName(String.format("%s: %s", requestSpec.getMethod(), requestSpec.getURI())));
Response response;
try {
response = super.filter(requestSpec, responseSpec, filterContext);
} finally {
lifecycle.stopStep();
}
return response;
}
}
ã©ã€ãã©ãªèªäœãjson / xmlå ã®ã¢ãã«ã®ã·ãªã¢ã«åãšéã·ãªã¢ã«åïŒjson / xml圢åŒããç¹å®ã®ã¯ã©ã¹ã®ãªããžã§ã¯ããžã®å€æïŒãåŠçããããããªããžã§ã¯ãã¢ãã«ã¯restAssuredã«å®å šã«é©åããŸãã
@Step("create user")
public static User createUser(User user) {
String usersEndpoint = "/user";
return RestAssured.given().spec(ApiSettings.testApi())
.when()
.body(user)
.post(usersEndpoint)
.then().log().all()
.statusCode(200)
.body("state",containsString("OK"))
.extract().as(User.class);
}
ãªããžã§ã¯ããäœæããããã«é£ç¶ããŠããã€ãã®ã¹ããããæ€èšãããšãã³ãŒãã®IDã«æ°ä»ãããšãã§ããŸããåãã³ãŒããæžããããã«ããªããžã§ã¯ããäœæããããã®äžè¬çãªã¡ãœãããæžãããšãã§ããŸãã
public static Object create(String endpoint, Object model) {
return RestAssured.given().spec(ApiSettings.testApi())
.when()
.body(model)
.post(endpoint)
.then().log().all()
.statusCode(200)
.body("state",containsString("OK"))
.extract().as(model.getClass());
}
@Step("create user")
public static User createUser(User user) {
create(User.endpoint, user);
}
ããäžåºŠæ¥åžžã®æäœã«ã€ããŠ
ãªããžã§ã¯ãã®ç·šéããã§ãã¯ããäžç°ãšããŠãéåžžããªããžã§ã¯ããã·ã¹ãã ã«ã©ã®ããã«è¡šç€ºããããïŒapiçµç±ãŸãã¯ããã¯ã¢ããããïŒããŸãã¯uiãã¹ãã«ãã£ãŠäœæããããã©ããã¯é¢ä¿ãããŸãããéèŠãªã¢ã¯ã·ã§ã³ã¯ããªããžã§ã¯ããèŠã€ãããã®äžã«ãã[ç·šé]ã¢ã€ã³ã³ãã¯ãªãã¯ãããã£ãŒã«ããã¯ãªã¢ããŠæ°ããå€ãå ¥åãã[ä¿å]ãã¯ãªãã¯ããŠããã¹ãŠã®æ°ããå€ãæ£ããä¿åãããŠãããã©ããã確èªããããšã§ãããã¹ãã«çŽæ¥é¢ä¿ããªããã¹ãŠã®äžèŠãªæ å ±ã¯ãå¥ã®ã¡ãœããã§ãããšãã°ã¹ãããã¯ã©ã¹ã§åé€ããå¿ èŠããããŸãã
@Test
void checkUserVars() {
//Arrange
User userForTest = getUserRandomData();
// ,
// - ,
// ,
usersSteps.createUser(userForTest);
authSteps.login(userForTest);
//Act
mainMenuSteps
.clickVariantsMenu();
//Assert
variantsSteps
.checkAllVariantsArePresent(userForTest.getVars())
.checkVariantsCount(userForTest.getVarsCount());
//Cleanup
usersSteps.deleteUser(userForTest);
}
ãè€éãªãã¢ã¯ã·ã§ã³ã®ã¿ã§æ§æããããã¹ãã¯èªã¿ã«ãããªããã³ãŒããæãäžããã«åçŸããããšãé£ãããªãããã倢äžã«ãªããªãããšãéèŠã§ãã
@Test
void authAsAdmin() {
authSteps.login(Users.admin);
// , . .
// , ?
å®è³ªçã«åããã¹ããã¹ã€ãŒãã«è¡šç€ºãããããŒã¿ã®æºåã®ã¿ãç°ãªãå ŽåïŒããšãã°ã3ã€ã®ã¿ã€ãã®ãç°ãªãããŠãŒã¶ãŒãã¹ãŠãåãã¢ã¯ã·ã§ã³ãå®è¡ã§ããããšã確èªããå¿ èŠãããããç°ãªãã¿ã€ãã®ã³ã³ãããŒã«ãªããžã§ã¯ãããããããããã«ã€ããŠç¢ºèªããå¿ èŠããããŸããåäžã®äŸåãªããžã§ã¯ããäœæããå ŽåããŸãã¯10çš®é¡ã®ãªããžã§ã¯ãã¹ããŒã¿ã¹ã«ãããã£ã«ã¿ãªã³ã°ã確èªããå¿ èŠãããå Žåã§ããç¹°ãè¿ãéšåãå¥ã®ã¡ãœããã«ç§»åããããšã¯ã§ããŸãããèªã¿ããããããªãã«ãšã£ãŠéèŠã§ãããªãã°ããŸã£ãããããŸããïŒ
代ããã«ãããŒã¿é§ååãã¹ãã«ã€ããŠèªãå¿ èŠããããŸããJava+ TestNGã®å Žåãæ¬¡ã®ããã«ãªããŸãã
@Test(dataProvider = "usersWithDifferentVars")
void checkUserDifferentVars(User userForTest) {
//Arrange
usersSteps.createUser(userForTest);
authSteps.login(userForTest);
//Act
mainMenuSteps
.clickVariantsMenu();
//Assert
variantsSteps
.checkAllVariantsArePresent(userForTest.getVars())
.checkVariantsCount(userForTest.getVarsCount());
}
// .
// , -.
@DataSupplier(name = "usersWithDifferentVars")
public Stream<User> usersWithDifferentVars(){
return Stream.of(
getUserRandomData().setCheck21(false).setCheck22(false).setCheck23(false),
getUserRandomData().setCheck21(true).setCheck22(false).setCheck23(false),
getUserRandomData().setCheck21(false).setCheck22(true).setCheck23(false),
getUserRandomData().setCheck21(false).setCheck22(false).setCheck23(true),
getUserRandomData().setCheck21(true).setCheck22(true).setCheck23(false),
getUserRandomData().setCheck21(true).setCheck22(false).setCheck23(true),
getUserRandomData().setCheck21(false).setCheck22(true).setCheck23(true),
getUserRandomData().setCheck21(true).setCheck22(true).setCheck23(true)
);
}
ããã¯ãTestNGããŒã¿ãããã€ããŒã®ã¢ããªã³ã§ããããŒã¿ãµãã©ã€ã€ãŒã©ã€ãã©ãªã䜿çšããŸããããã«ããããªããžã§ã¯ã[] []ã®ä»£ããã«åä»ãã³ã¬ã¯ã·ã§ã³ã䜿çšã§ããŸãããæ¬è³ªã¯åãã§ãããããã£ãŠãå ¥åããŒã¿ãåä¿¡ããåæ°ã ãå®è¡ããã1ã€ã®ãã¹ããååŸããŸãã
çµè«
ãããã£ãŠããŠãŒã¶ãŒã€ã³ã¿ãŒãã§ã€ã¹ã®èªåãã¹ãã®å€§èŠæš¡ã§äŸ¿å©ãªãããžã§ã¯ããäœæããã«ã¯ã次ã®ãã®ãå¿ èŠã§ãã
- ã¢ããªã±ãŒã·ã§ã³ã§èŠã€ãã£ããã¹ãŠã®å°ããªãŠã£ãžã§ããã«ã€ããŠèª¬æããŸãã
- ãŠã£ãžã§ãããããŒãžã«åéãã
- ããããçš®é¡ã®ãšã³ãã£ãã£ã®ã¢ãã«ãäœæãã
- ã¢ãã«ã«åºã¥ããŠããããçš®é¡ã®ãšã³ãã£ãã£ãçæããã¡ãœããã远å ãã
- 远å ã®ãšã³ãã£ãã£ãäœæããããã®é©åãªæ¹æ³ãæ€èšãã
- ãªãã·ã§ã³ïŒã¹ããããã¡ã€ã«ãæåã§çæãŸãã¯åéããŸãã
- ç¹å®ã®ãã¹ãã®äž»ãªã¢ã¯ã·ã§ã³ã®ã»ã¯ã·ã§ã³ã«è€éãªã¢ã¯ã·ã§ã³ããªãããŠã£ãžã§ããã䜿çšããæãããªæäœã®ã¿ãè¡ãããããã«ãã¹ããèšè¿°ããŸãã
ããã§ãããŒã¿ãä¿åãçæãæºåããããã®ç°¡åãªã¡ãœãããåããPageElementããŒã¹ã®ãããžã§ã¯ããäœæãããŸãããããã§ãç°¡åã«ä¿å®ã管çãããã³ååãªæè»æ§ãåããã¢ãŒããã¯ãã£ãã§ããŸããããŠãŒã¶ãŒã¢ã¯ã·ã§ã³åœ¢åŒã®èªåãã¹ãã¯èªã¿ãçè§£ããã®ã«æã䟿å©ãªã®ã§ãçµéšè±å¯ãªãã¹ã¿ãŒãšåå¿è ã®6æã®äž¡æ¹ããããžã§ã¯ããç°¡åã«ããã²ãŒãã§ããŸãã
宿ãããããžã§ã¯ãã®åœ¢ã§ã®èšäºã®ã³ãŒãäŸãgitã«è¿œå ãããŸãã