Софтуерно Инженерство
Loading...
+ Нов въпрос
krastevv avatar krastevv 2 Точки

Въпроси относно изпита

Здравейте,

Имам два въпроса относно изпита.

1. Какви assert-и използвахте при автоматизацията (и по-специфично техния код) ?

2. Могат ли въззможността да се регистрираш с парола от 1 символ и еднакви username и password да се считат за security bugs.(ако не можете ли да споделите какви security бъгове сте открили)?

Поздрави :)

Тагове:
1
QA Fundamentals
RoYaL avatar RoYaL SoftUni Team Trainer 6883 Точки
Best Answer

Ако всеки път когато изпълняваш теста за коментиране, правиш нов албум (fresh data), албумът няма да има коментари. Съответно като създадеш коментар той ще е единствения и xpath-ът му винаги ще е един и същ.

Друг е въпросът, че това не е достатъчен тест, тъй като би трябвало да се тества и сортирането - отгоре ли отдолу ли ще излезе последния коментар.

Да приемем, че искаме да тестваме като пуснем още един коментар дали ще излезе най-отдолу. Ако се вгледаме в структурата на коментарите в HTML-а, виждаме, че са в един <div> с клас "album-container", в него са в един <ul> и всички са разделени всеки в по едно <li>

xpath предоставя начин за по-конкретно търсене, освен това което дава файърфокс, даже някой беше показал, че от хром е малко по-умно. Естествено е малко труден за помнене, така че си помагаме с гугъл

Пиша в гугъл "xpath find element by class" на първи резултат ми излиза http://stackoverflow.com/questions/1604471/how-can-i-find-an-element-by-css-class-with-xpath

Преравям се из отговорите, че искам да намеря точно дали съвпада класът, а не дали се съдържа и малко надолу в отговорите виждам //div[@class="Test"] веднага го правя на //div[@class="album-container"] и продължавам търсенето

Намерихме този див, ама сега трябва да намерим UL и LI в UL-a.

Пиша в гугъл "xpath li in ul" на първи резултат излиза http://stackoverflow.com/questions/16372776/domxpath-extract-li-tags-from-second-ul

Човекът пита за втория UL, още на първия отговор са му казали, че може с xpath и xpath-ът бил "//ul[2]/li". Значи той искаше втория UL и най-вероятно е тази двойка, ако я махнем ще изглежда "//ul/li". Т.е. достъпваме децата само с наклонена черта. Ако погледнем и онзи xpath за класа, котйо преди това намерихме, излиза, че двете наклонени в началото са началото на xpath-а, т.е. не играят важна роля при нас. Искаме на онзи див, детето UL и децата LI. Ами ще трябват наклонени черти. xpath-ът от преди малко се превръща в //div[@class="album-container"]/ul/li

Този xpath ще ни намери множество елементи - всички li-та.За да не задълбаваме в дебрите на xpath и да не търсим как се намира последното LI е сещаме от лекциите и подготовката, че ако даден селектор (клас, xpath...) връща повече от един леемент, findElement() ще вземе първия, а findElements() ще ни върне колекция от елементи, които можем да запишем под формата на List<WebElement>

За момента обаче в най-лошия случай не знеам нищо за List колекцията. Ще вземем множество елементи и какво от това? Какъв е най-лесният начин да тестваме дали xpath-ът ни е върнал тези елементи, които искаме. Ами нека хванем някой албум, в който има коментари или просто си направим такъв със 7 коментара да речем. Да навигираме до него и да пуснем xpath-а там в тестов метод и да присвоим коментарите в този лист

List<WebElement> allComments = this.driver.findElements(By.xpath("//div[@class=\"album-container\"]/ul/li"));

Хубаво, имаме ги, сега какво? Ами пределно добре знаем, че в този албум, в който експериментираме, има 7 коментара. Как можем да разберем дали колекцията ни има 7 елемента? Гугълваме как да намерим бройката на елементите в List "java list elements count". На първи резултат излиза http://stackoverflow.com/questions/3704194/count-the-number-of-items-in-my-array-list

Там още в избрания за най-добър отговор пише, че можеш да ги вземеш с int itemCount = list.size();

Ами хубаво, нека го използвме за нашата колекци, която се казва allComments

List<WebElement> allComments = this.driver.findElements(By.xpath("//div[@class=\"album-container\"]/ul/li"));
int itemCount = allComments.size();

Имаме ги вече в променливата itemCount. Сега остава да проверим дали са 7. Варианти много, може да ползваме assert или да принтираме в конзолата

List<WebElement> allComments = this.driver.findElements(By.xpath("//div[@class=\"album-container\"]/ul/li"));
int itemCount = allComments.size();
assertEquals(7, itemCount);

Ако тестът мине, значи това е нашата колекция от LI-та. Време е да вземем последния от нея. Гугъл "java last item in list" първи резултат http://stackoverflow.com/questions/687833/how-to-get-the-last-value-of-an-arraylist

Най-добрият отговор казва E e = list.get(list.size() - 1);

Като ни казват, че голямото Е е един тип от колекцията. При положение, че при нас е колекция от WebElement, един елемент от тях ще е от тип WebElement. Нека го приложим при нас

List<WebElement> allComments = this.driver.findElements(By.xpath("//div[@class=\"album-container\"]/ul/li"));
WebElement lastComment = allComments.get(allComments.size() - 1);

Имаме вече последния елемент и тук идва въпросът как да вземем само коментара. Начини има много но не смятам, че някой от тях би бил правилен. Можем да изчистим всичко след да речем първата запетайка, но тогата трябва да сме сигурни, че в нашия коментар няма да пишем запетайки. Като цяло е доста error-prone. Вместо това защо просто не assert-нем дали ни е верен комент текста, дали е верен автора на коментара и дали е вярна датата - трябва да е днешната?

На едно от домашните трябваше да намираме текущата дата. Въпросът е, че има специфичен начин тя да се принтира в нашия албум - 29-August-2015. Т.е. Ден, пълно име на месеца и пълно име на годината.

Гугълвам за "java full month name" този път първият резултат ми даде някакви насоки нон е ми беше полезен, и отворих втория резултат - http://stackoverflow.com/questions/2219139/how-to-parse-month-full-form-string-using-dateformat-in-java

Таз виждаме, че за да получиш Име на месеца - интервал - ден - запетайка - интервал - година, трябва да напишеш

DateFormat fmt = new SimpleDateFormat("MMMM dd, yyyy", Locale.US);

MMMM явно е месецът, dd явно е денят и yyyy явно е годината, щом е такъв шаблонът.

На нас ни трябва първо денят, после тире, после името на месеца, после пак тире и после годината. Ами правим го на

DateFormat fmt = new SimpleDateFormat("dd-MMMM-yyyy", Locale.US);

Ако сме следвали на изпита конвенцията за това, че трябва постоянно да имаме fresh data това означава, че ни трябва нов юзър, нова категория и нов албум.

Приемаме, че сме си направили метод, който му се подава юзърнейм и парола и регистрира юзър, като добавя към юзърнейма нещо уникално и после връща какво е регистрирало, за да можем да го ползваме. Ще клъстим този метод register() и ще го викаме с this.register(user, pass);

На същия принцип приемаме, че правим категория с метод, който се казва createCategory(), подава му се име на категория, той слага нещо уникално и връща новонаправената категория, за да я ползваме после в албума. Ще викаме този метод с this.createCategory(categoryName)

Също така имаме метод, който създава коментар. Тъй като казахме, че искаме да имаме повече от един коментар, може да направим и този метод да прави уникален коментар и да връща стойността, за да я ползваме после в assert-а. Този метод ще се казва createComment() и ще го викаме с this.createComment(commentbody)

Накрая assert-ваме дали Comment text: [съдържанието-на-последния-коментар], User: [потребителят-който-сме-регистрирали], Created On: [датата-от-онзи-форматер]

Цялото това нещо сглобено би изглеждало така

@Test
public void testComment_successfulCreate_lastCommentAtBottom() {
    DateFormat fmt = new SimpleDateFormat("dd-MMMM-yyyy", Locale.US);
    Date date = new Date();

    String username = this.register("pesho", "123");

    String categoryName = this.createCategory("nova categoriq");
    this.createAlbum(categoryName, "nov album", "moqt nov album");

    String comment = this.createComment("posleden");
    String todayDate = fmt.format(date);

    List<WebElement> allComments = this.driver.findElements(By.xpath("//div[@class=\"album-container\"]/ul/li"));
    WebElement lastComment = allComments.get(allComments.size() - 1);

    assertEquals(
            "Comment text: " + comment + ", User: " + username + ", Created On: " + todayDate,
            lastComment.getText()
    );

}

Това естествено е успешният сценарий, идета е да се тестват и още сценарии. Опитах се да направя едно walkthrough как се стига до всяко едно от заключенията, за да се постигн теста, разбира се, всеки си има собствена логика за нещата.

 

6
30/08/2015 15:01:22
Slamster7 avatar Slamster7 47 Точки

На мен ми беше изключително трудно да намеря security bug-ове,  единствените, за които се сетих бяха, че можеш да се регистрираш използвайки само whitespace и за user и password и че няма имейл/bot верификации. 

Аз имам въпрос относно описанието на steps to reproduce, може ли някой да даде пример какви стъпки е посочил при разрешаването на някой дизайн бъг примерно ? 

0
AlexanderKotev avatar AlexanderKotev 2 Точки

Аз също изгубих много време да търся секюрите бъгове и това накрая се оказа глупаво решение, тъй като не ми стигна времето. В сайта можеш да регистрираш потребител с юзърнейм и парола от един интервал, което със сигурност е секюрити бъг. Друг бъг е, че можеш да едитваш чужд албум като го достъпиш през URL-a. Същото се случва и като опиташ да добавиш снимки в чужд албум. Администраторските креденшъли също са секюрити пропуск. Ще се радвам (а може би не) да разбера какво са открили други колеги.

Като цяло за мен само тези бъгове представляваха трудност, но в крайна сметка ми "изядоха главата", тъй като накрая бързах и не ми стигнаха 6-те часа за да довърша автоматизацията.

0
IBraynov avatar IBraynov 74 Точки

@krastevv

1. assertEquals("Welcome, user1", driver.findElement(By.xpath("............")).getText());
    или
    assertEquals("http://somesite.com", driver.getCurrentUrl());

2. Разбира се :)

 

@Slamster7

За дизайн бъг се сещам, че при празна галерия имаше разместване на бутоните Vote/Comment и thumbnail превюто на албума.
Ако съм разбрал правилно, би трябвло да е нещо подобно:

Кратко описание на това, което си намерил и после

Стъпки за възпроизвеждане (все едно пишеш автоматизиран тест)

1. отваряш браузър
2. въвеждаш юрл на сайта
3. натискаш логин
4. въвеждаш креденшъли и събмитваш
5. от навигационното меню избираш добави албум
6. въвеждаш имена за албума
7. от навигационното меню отиваш на албуми
8. навигираш до новосъздадения албум

Очакван резултат
Тук описваш как трябва да е разположението по спецификация

Актуален резултат
Тук описваш как е актуалното - грешно разположение на елементите в албум превюто.



Лично на мен ми трябваше още бая време за да изпипам нещата, както трябва да бъдат и да открия наистина качествени бъгове, но това е положението :) Другия път повече :)

1
30/08/2015 13:06:42
krastevv avatar krastevv 2 Точки

Само, че по условие нали трябваше да автоматизираме коментар на снимка  и коментар на албум. Тук не успях да създам assert, който да провери, дали новия коментар съществува, тъй като xpath-а на всеки нов коментар е различен и не видях да имат ID или class. Сетих се по време на изпита че може би ще се получи, ако assert-a сравнява само част от текста в полето Comments, но пък не ми беше ясно дали е възможно и точно как става. 

0
Debss avatar Debss 17 Точки

@IBraynov сигурен ли си, че е било позволено стъпките да се посочват на български език?

Иначе към тях трябваше да се добави и в каква среда се възпроизвеждат съответните стъпки. Пример:

Environment: Windows 7, Mozila Firefox 40.0.2

0
IBraynov avatar IBraynov 74 Точки

Не разбира се. На английски задължително, но за отговора на поста не го го съобразих и го постнах така. Надявам се да не съм подвел някой.

За средата ми убягна, но нали затова има и други участници :)

 

0
goldynne avatar goldynne 26 Точки

Здравейте, да добавя към въпроса на колегата и едно мнение. Не искам да звучи като оплакване, а като насока евентуално за втория изпит към Ванката и всеки, който има участие в съставянето му. 

Онова, което мен ме притеснява е, че в изпълнението на задачите за автоматизиране се оказва, че има много неща, които няма как да се сетиш да направиш, ако не си учил програмиране, поради простата причина, че не ги знаеш, а все пак в информацията за курса се казваше, че не е необходимо да имаш предварителни познания по програмиране. Онова, което се обяснява на лекциите, го разбирам и го прилагам, но сега като гледам решението на Ванката виждам, че има неща, за които просто нямаше как да се сетя. Аз очаквах, че ще има повече неща, които са показани на лекциите. Нека и другите колеги, които не са учили програмиране да споделят мнение. Времето също сякаш е малко, за да се направят всички неща и то в детайлите, в които се очаква. 

И един въпрос - и двете задачи ли са с еднаква тежест за крайната оценка?

Благодаря и успех на всички!

0
RoYaL avatar RoYaL SoftUni Team Trainer 6883 Точки

Здравей, goldynne,

Нека ти разкажа моята гледна точка по въпроса. Ще започна с това, че QA професията далеч не се състои в това нито да програмираш като луд, нито пък да кликаш по менюто и да гледаш дали червеното не е зелено. Нито един от тези компоненти не е светият граал, а самата професия е комплексна до неузнаваемост и специализирането й би могло да бъде до живот. Това е изпит, който тества нивото ви, като разбира се, има различни хора с различно минало преди курса - някои имат опит в програмиране, други вече са били QA-и, трети са страшни математици, четвърти са били лаборанти и имат луд поглед върху детайлите и прочие. Всеки един от тези хора би бил на различно ниво - един може да се е справил отлично с изпита, да му е стигнало времето, и да е направил автоматизациите като хората, докато друг може да е стигнал само до средата на изпита. Вторият далеч не означава, че има 2ка, а просто че има разлика между нивото на единия и другия, което е съвсем нормално, нали?

За повечето от нещата, които както казваш, трябваше човек да се сети на изпита, се искат не лекции, а опит - дали домашен или професионален няма голяма разлика, както и това човек да не се притеснява, да бъде систематизиран в действията си и да си прецени времето, така че да вземе максимално много, за максимално кратко време. Няма рецепта за това как ще изтестваш продукт, съответно няма и лекция, която да ти го каже. Продуктите се различават един от друг коренно, без значение колко е близка тяхната концепция. Това лесно се вижда на подготовката за изпит и самият изпит - два продукта доста близки един до друг като насоченост, но много различни в детайли - от техническото им изпълнение до концептуалното им развитие.

Техническите неща показани на лекции са базови, поставящи основата и на програмирането и на автоматизираното тестване, което се осланя на него. В тях показахме основи на Java, JUnit framework-а, Selenium WebDriver framework-а, правенето на проект с Maven, в който да подкараш WebDriver, както и неща като колекция от елементи, xpath и for/foreach цикъл. Това са инструменти, с които човек може да работи. Тези инструменти имат безгранични възможности и трябва да намериш начинът за текущата ситуация. В това, което обясних в поста по-горе, всъщност се залага на конпцетията:

1. Показан е xpath, който се копира от Firefox/chrome.

2. Обяснено е, че xpath намира елементи позициониране в страницата, по техните атрибути или в дървовидната структура на DOM-а.

От тук нататък:

3. Чрез гугъл, в който има необятно много информация, намирате как с xpath да направите конкретното действие, което се иска от вас

Абсолютно наясно съм, че ако това се прави по време на изпит, ако не си достатъчно спокойно настроен, това може и да не проработи много добре. Естествено, за това проверакта е ръчна, а не автоматична, защото така мога да разбера нивото на всеки един - какво се е опитал да направи, дори и да не е успял да го постигне.

В смисъла на това, което казах по-горе, че е дадена една основа, а върху нея вие ще трябва да развиете маса качества, ще спомена за един от бъговете, който беше вкаран в изпита. Когато отвориш категория - всеки втори албум не се отваряше. Предполагам сте наясно, че няма как да ви покажа на лекция точно такъв бъг и после него да го има на изпита. Ако концептуално сте разбрали нещата, ще стигнете до съответния извод, когато сте на изпита и се сблъскате с този бъг. Ако просто пробвате дали се отваря първия албум от категорията и после кажете, че всичко е наред с отварянето на албумите, естествено, няма как след това да сте на едно ниво с човек, който се е сетил. А и предполагам, че бихте се съгласили, че ако на интервю във фирма се появят двама човека, и на двамата им дадат 4 бутона за кликане и единият кликне само първия, а другия кликне и четирите и намери, че вторият и четвъртият не се кликат, фирмата ще прецени втория човек за по-добър избор.

В заключение, ще се върна към уводната част и ще кажа, че тъй като няма компонент, който да е цялостен измерител за това дали си добър QA или не, автоматизираното тестване като задача, не е 50% от изпитната оценка, а само 20%. Като всичките 20% биха се дали на хората, които са написали всички сценарии за писане на коментар и са изпълнили ограниченията (преизползване на код, чисти данни и прочие), което едва ли много хора са имали време да направят, т.е. конкуренцията е малка и няма да има големи gap-ове между това 50% от хората да са взели 20те процента от автоматизация, а останалите да са взели 1% да речем.

Не бяха обявени предварително точки за всяка една задача, за да може да се види това и как човек подхожда към цялостната задача, как ще я анализира и кое ще прецени, че ще успее да направи за 6 часа.

Ще се опитам след 1 седмица да съм изкарал резултати, така че максимално бързо да си направите преценка дали искате да отидете на втората дата за изпит. Надявам се да имам и възможността да напиша коментари, давайки съответните точки, за да разберете къде са ви съответните пропуски и да поработите над тях.

Желая лек и успешен ден,

Иван

3
goldynne avatar goldynne 26 Точки

Благодаря за изчерпателния отговор и насоките, Ванка.

0
Sveti avatar Sveti 4 Точки

Здравей @RoYaL .

 

Прочетох внимателно обяснението ти и всичко ,което си написал относно задачи,проценти и изпита.Не ми е ясно само това ,след като сте наясно ,че много малко хора ще имат време изобщо да направят автоматизацията,или да направят всичко толкова добре ,че да получат 20% ,това значи ли ,че абсолютно почти всички няма да вземат Сертификат заради това ,тъй като за него трябва да имаш над Мн.добър ? 

 

Благодаря !

0