Селениум Тест гэж юу вэ? Scenario testing

2B | +1% better 2day | c.005

--

Гар аргаар тест хийх (зураг)

Вэб хөгжүүлэлтийн явцад хийх шаардлагатай туйлын чухал нэг хэсэг нь тест, тэр дундаа нэгдмэл тест (Integration Test) байдаг. Тестийг байнга гараар хийх нь их цаг үрсэн, хүний алдаа гарах магадлалтай бас уйтгартай процесс мэт надад санагддагаа нуух юун.

Энэ л процессыг хялбарчилж автоматжуулсан, өнөөдөр дэлхий даяар хамгийн түгээмэл хэрэглэгдэж буй Селениум (Selenium)-ийн түүх, ерөнхий мэдээлэл, амьдрал дээрх хэрэглээний талаар багахан хуримтлуулсан мэдлэгээсээ хуваалцахаар шийдлээ.

Селениум нь вэб аппликэйшнийг янз бүрийн үйлдлийн систем (OS) дээрх төрөл бүрийн вэб хөтчүүдийг (web browser) ашиглан тест хийх хэрэгсэл (tool) юм.

Селениум хувилбарууд (зураг)

Селениумийн хувилбарууд :

  • IDE - вэб хөтчийн нэмэлт хэрэгсэл /extension/
  • RC - анхны хувилбар /одоо хөгжүүлэлт нь зогссон/
  • WebDriver - үндсэн хувилбар /одоо 3.x/
  • Grid - нэгэн зэрэг олон тест гүйлгэх боломжтой хувилбар

Түүх :

Эхлэл : JavaScriptTestRunner -> Selenium Core
Анх 2004 онд Жэйсон Хаггинс өөрийн хийдэг ажлыг хөнгөвчлөхийн тулд “JavaScriptTestRunner” нэртэйгээр үүсгэсэн. Удалгүй энэ төсөл нь бусдад ч хэрэгтэйг анзаарч нээлттэй эх болгон “Selenium Core” гэж нэрийг нь өөрчилжээ.

Тухайн үед гарч байсан Same Origin Policy Issue-нээс болж хөгжүүлэгчдэд тулгарч байсан хүндрэлийг дараачийн буюу Селениум 1.0 гэгдэх “Selenium RC” хувилбар дээр шийдэж өгсөн нь хэрэглээг улам хялбар болгосон байна.

Selenium RC : JavaScript for automation/Programming languages
Same Origin Policy Issue-г аргалахын тулд Пол Хаммант HTTP proxy маягаар ажилладаг “RC server” гэж үүсгэн вэб аппликэйшн болон “Selenium Core” хоёр нэг domain дээр байгаа мэт болгож чадсан. Энэхүү хувилбараа “Selenium Remote Control” гэж нэрлэсэн бөгөөд өмнөхөөсөө давуу нэг зүйл нь програмчлалын хэд хэдэн хэл дээр бичих боломжтой болсон явдал байлаа.

Selenium WebDriver : 2.0 ->3.0
Анх 2006 онд Симон Стеварт үйлдлийн системээс (OS) вэб хөтөчтэй шууд харьцаж чаддаг “WebDriver” хувилбарыг хөгжүүлж эхэлсэн бөгөөд дараа нь 2008 онд “RC” болон “WebDriver” хоёр нь нэгдэж одоогийн бидний мэдэх хувилбар үндсэн төрхөө олсон байна.

Selenium Grid : Hub -> nodes
Селениум тест нь өөрөө вэб хөтөч дээр хүний хийх үйлдлийг дуурайдаг учир тийм ч хурдан байдаггүй. Олон тестийг гүйлгэх нь дараалал үүсгэж, цаг хугацаа их шаарддаг. Энэ асуудлыг шийдсэн Патрик Лайтбоди-ийн хувилбар нь “Selenium Grid” юм. Нэг төвөөс олон цэгүүдрүү (Hub->nodes) холбогдон зэрэг олон машин дээр тест хийж нийт хугацааг X дахин багасгах боломжтой болгосон.

Selenium IDE : plugin/extension
Тест кэисийг илүү хурдан, амархан үүсгэх зорилготойгоор Шиняа Касатани анхны ‘record/playback’ хийх боломжтой вэб хөтчийн нэмэлтийг хөгжүүлсэн. Тухайн үедээ зөвхөн Firefox-д зориулсан байсан бол одоо Chrome-ийн хувилбартай болсон.

Мөнгөн усны ерөндөг (зураг)

Түүхийн талаар илүү ихийг эндээс, эндээс эсвэл эндээс

Давуу тал VS Сул тал

Давуу тал

  • Нээлттэй эх (Open Source) болохоор хэрэглэхийн тулд заавал төлбөр төлөх шаардлагагүй
  • Жава, С#, Руби, Пайтон, ЖаваСкрипт зэрэг 7 хэл дээр ашиглах боломжтой
  • Үйлдлийн систем болон вэб хөтчүүдийн олон сонголттой

Сул тал

  • Албан ёсны тусламж байдаггүй (no official support)
  • Зураг тест хийхэд бэлэн биш (Хүсвэл Sikuli-г хамт ашиглаж хийж болно)
  • Автоматаар дэлгэрэнгүй тайлан гаргадаггүй (TestNG ашиглаж болно)
Селениум хэрхэн ажилладаг вэ (зураг)

Best practices

Селениум ашиглаж тест код бичих үед нэг үйлдлийг хийж болох хэд хэдэн сонголт байдаг. Тэр болгоноос аль нь илүү тохиромжтой болохыг туршиж байж л мэдэх тохиолдол бий. Энд би өөрийн туршлага дээрээс гаргаж авсан зарим нэг best practice-г орууллаа. Мэдээж эдгээр нь заавал ийм байх ёстой гэсэн үг биш бөгөөд зөвхөн миний хувийн үзэл бодол юм шүү.

  • FindById :
    Вэб элементийг хайж олох хэд хэдэн аргууд бий. XPath, Css, TagName гэх мэт. Харин сайн код бичсэн бол анхнаасаа зөв нэршил өгч id-аар олж хэвших нь найдвартай бөгөөд илүү цэгцтэй кодын баазтай болоход эерэгээр нөлөөлнө. Дараа нь ямар нэг өөрчлөлт орох үед XPath эсвэл CSS-ээр олсон тест код өөрчлөгдөх магадлал хэд дахин их байдаг.
// HTML
<button id="submitButton" type="submit" class="btn btn-primary"...>
// In selenium test code
webDriver.findElement(By.id("submitButton"));
  • Wait :
    Селениум тест дээр хамгийн их гардаг алдаа бол вэб элемент олдохгүй байх. Энэ нь ихэвчлэн вэб хуудас ачаалж байх үед гарах ба хэсэг зуур хүлээх үйлдлийг заавал ашиглах шаардлага бий болдог. Үүнээс гадна AJAX хүсэлтийн хариуг хүлээх шаардлага түгээмэл байдаг.
// wait time for finding web element /all/
webDriver.manage().timeouts().implicitlyWait(X, TimeUnit.SECONDS);
// wait time for finding web element /specific/
wait = new WebDriverWait(webDriver, X);
// wait until condition is met /or specific time expires/
wait.until(ExpectedConditions.elementToBeClickable(By.id(id)))
  • POM (Page Object Model) :
    Үйлдэл хийх бүрдээ тухайн элементээ хайж олох нь нэгдүгээрт удаан, хоёрдугаарт илүү их код бичигдэхээс өөр аргагүйд хүргэдэг. Харин тухайн хуудсыг анхнаас нь хайж олж, вэб элемент рүү холбож өгснөөр дараа нь хийх засвар болон код бичих үйл явцыг хялбар болгодог нэг арга нь POM юм.
// formPage - POM
private static final String submitButtonId = "submitButton";
@FindBy(id = submitButtonId)
public WebElement submitButton;
// In test file for formPage
...
formPage.submitButton.click();
...
  • Retry :
    Зарим тохиолдолд тест унах үед зөвхөн тухайн тестийг л дахиж гүйлгэх хэрэгцээ байдаг. 100 тестээс нэг нь унах үед бүгдийг эхнээс нь эхлэх шиг муу шийдвэр гэж үгүй байх. Энэ тохиолдолд цаг хэмнэхийн тулд унасан тестийг дахиж гүйлгэх Дүрэм (Rule) хэрэг болно.
@Rule
Retry retryTestOnFailure = new Retry(FAILED_TEST_RETRY_COUNT);
  • Screenshot :
    Хэдий тестийг дахиж гүйлгэсэн ч давахгүй байх юм бол ЯАГААД, ЯМАР ШАЛТГААНААР унасныг нь мэдэх хамгийн сайн арга нь зургийг нь авах байдаг. Хэдий селениум тест удаан боловч хүний гар ажиллагаанаас хамаагүй хурдан учир алдаа гарах тухайн агшинд юу болсныг Screenshot л авч үлдэж чадна.
((TakesScreenshot) webDriver).getScreenshotAs(OutputType.FILE);
Селениум == автоматжуулалт (зураг)

Селениумын тест огт бичиж үзээгүй бол эхлээд Selenium IDE ашиглаад жижигхэн тест хийгээд үзэхэд гэмгүй. Програмчлалын хэл мэдэх шаардлагагүй болохоор анхан шатны хүмүүст хамгийн тохиромжтой байдаг. Хийх үйлдлээ record хийж аваад ажиллуулах (playback), эсвэл алхам алхмаар нь үйлдлээ зааж өгч тестийн файлаа үүсгэх боломжтой. Тэгээд нэг танилцаж аваад гайгүйхэн ойлголттой болоод ирэхээрээ Selenium WebDriver-тай гүнзгий дотносно биз дээ.

Өнөөдөртөө энэ хүрээд дуусгая. Дараа харин Selenium IDE, Selenium WebDriver ашигласан бүтэн жишээгээр уулзъя.

--

--

Билигүн.Б (Програмч аав)
2B +1% better 2day

I am who I am... || өөрийнхөөрөө байхаас ичихгүй