how automate repetitive qa tasks using excel macros
Това задълбочено ръководство за макро мисленето на QA обяснява как да автоматизирате повтарящи се задачи за QA с помощта на макроси на Excel с примери и екранни снимки на Excel Sheets:
Нуждата от автоматизация в днешния свят е едно от съществените и нарастващи изисквания. Днес всеки търси нещо, което улеснява работата му или неприятностите, свързани с рутинната работа.
В днешно време никой не иска да посещава мобилен магазин, да стои на опашки, за да презареди телефона си, удобно е да не посещавате физически никъде, а да зареждате телефона онлайн за част от секундата.
Започвайки от плащането на сметките си за комунални услуги чрез мрежово банкиране, резервиране и проследяване на кабината ви онлайн, закупуване на неща онлайн на различни сайтове за електронна търговия до използване на различни автоматизирани уреди като перални машини, микровълнова печка, гейзер и постоянно развиващите се смартфони и т.н., светът днес е наистина жажда за интелигентни и автоматизирани продукти под формата на услуги или приспособления.
В тази статия няма да обсъждаме използването на какъвто и да е инструмент за автоматизация или каквото и да било относно изкуствения интелект или машинното обучение, но фокусът ще бъде върху простото използване на Excel за автоматизиране на ежедневните рутинни задачи на QA.
Какво ще научите:
QA’s Macro Mindset
Ръчните тестери обикновено мислят, че като ръчен тестер нямам нищо общо с нищо техническо или с други думи, „ноу-хау за кодиране не е моята чаша чай“. Това вероятно е погрешното мислене, което може да спре растежа ни като инженери.
Ръчен QA има много ежедневни задачи, които могат да се повтарят след един и същ работен процес. QA може много добре да идентифицира такива задачи и да ги автоматизира с помощта на Excel Macros и / или формули.
Това може да помогне по два начина:
- Намалява времето, изразходвано за ръчни усилия.
- Също така, вдъхновява QA да се научи и да се адаптира към логическото мислене и по-високо умение от техническа гледна точка.
Нещата могат да бъдат автоматизирани за всички фази на тестване, изброени по-долу:
- Планиране и оценка на теста.
- Дизайн на теста или подготовка на тестови казуси.
- Актуализиране на състоянието на тестовото изпълнение.
- Отчет за теста и създаване на показатели.
Бърза настройка на контекста
# 1) Ексел, запазен с. xlsxm разширението е Excel с активиран макрос.
# две) За да активирате макрос в Excel, изберете Файл -> Опции -> Център за доверие -> Настройки на центъра за доверие -> Настройки на макроса -> Избор на радио бутон „Активиране на всички макроси“ и поставете отметка в квадратчето „Доверете се на достъпа до обектния модел на проекта VBA“. Щракнете върху OK.
# 3) Изберете менюто Преглед -> Макроси -> Запис на макроси -> Извършете някаква дейност и Спрете макросите . Можете да редактирате макроса и да видите VBA кода, записан в VBA редактор прозорец. По същия начин можете да добавите кодовете си изрично, за да създадете макрос.
# 4) Ще разгледаме някои примери за такива повтарящи се задачи, които биха могли да бъдат добри кандидати за автоматизация чрез макроси / формули на Excel.
Пример за използване # 1
В края на всяка функционална фаза трябва да бъдат идентифицирани някои тестови случаи за регресия от функционалния пакет. Това е процес, който трябва да се следва при всеки спринт или итерация.
Решение
За да се намалят усилията за идентифициране и ръчно създаване на регресионен пакет, може да се приложи иновационният процес по-долу.
- Можете да създадете лист с функционални тестови случаи с допълнителна колона за маркиране на тестовите случаи / сценарии като Да / Не за регресия.
- След това създайте макрос за същото, така че когато макросът се изпълни, всички тестови случаи / сценарии с регресия, маркирани като „Да“, да бъдат копирани на друг лист.
- По този начин това ще избегне допълнително упражнение за преминаване през всички функционални тестови случаи в края на спринта и след това полагане на допълнителни усилия за извличане на всеки тестов случай в регресионния пакет.
Демонстрация
- Първият лист „FunctionalTestScenarios“ съдържа всички функционални тестови сценарии / тестови случаи.
- Има допълнителна графа ‘Включване в регресионен пакет?’ добавени в края на тестовите колони, за да отбележат „Да“ или „Не“, като идентифицират дали всеки от тестовите сценарии трябва да бъде включен в пакета за регресия.
- Има втори лист, създаден като ‘RegressionSuite’ и това автоматично ще извлече всички сценарии на теста за регресия чрез макроса.
- CTRL + SHIFT + S е зададен като пряк път за изпълнение на макроса.
FunctionalTestScenarios
Регресия Суит
VBA (макро) код
Sub RegressionSuite() ' Keyboard Shortcut: Ctrl+Shift+S Sheets('FunctionalTestScenarios').Activate Rows('1:1').Select Selection.AutoFilter Sheet1.Range('$A:$D').AutoFilter Field:=4, Criteria1:='Yes' Lastrow=Sheets('FunctionalTestScenarios') .Cells(Sheets('FunctionalTestScenarios').Rows.Count, 'A').End(xlUp).Row Range('A2:C2' & Lastrow).Select Selection.Copy Sheets('RegressionSuite').Select Range('A2').Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _:=False, Transpose:=False End Sub
Обяснение на кода
- Таблици („Функционални тестови сценарии“). Активирате: Когато в Excel има няколко листа, методът Activate активира първия лист и следователно фокусът е изрично зададен на първия лист.
- Редове („1: 1“). Изберете: Този оператор избира първия ред за всички колони на първия лист.
- Избор, AutoFilter: Това изявление прилага филтъра към избрания първи ред.
- Лист 1. Обхват („$ A $ 1: $ D $ 38 ″). Поле за автоматично филтриране: = 4, Критерии1: =„ Да “: Това твърдение прилага автоматичния филтър за колона номер 4, т.е. ‘Включване в регресионен пакет?’ и филтрира записите за стойност „Да“.
- Lastrow = Листове („FunctionalTestScenarios'). Клетки (Sheets („FunctionalTestScenarios'). Редове. Брой, „A'). Край (xlUp). Ред: Това изявление получава последния брой редове на първия лист.
- Обхват (“A2: C2” & Lastrow). Изберете: Това изявление избира всички редове и колони на първия лист с Включване в регресионен пакет? = Да.
- Selection.Copy: Това изявление копира всички избрани записи.
- Листове („RegressionSuite“). Изберете: Това изявление отваря 2ndлист.
- Обхват (“A2”). Изберете: Това изявление избира клетка A2 от 2ndлист.
- Selection.PasteSpecial Paste: = xlPasteValues, Операция: = xlNone, SkipBlanks _: = False, Transpose: = False: Този оператор копира стойността на избраната клетка в целевия лист. Диапазонът на целевите клетки съдържа само изчислените стойности, използвайки формулите. Като алтернатива може да се използва и Paste: = xlValues. Не се пропускат заготовки. Изходните клетки не се транспонират и не се извършват математически операции.
Пример за използване # 2
Има моменти, когато трябва да създадете тестови случаи за да речем 100 държави или 1000 обекта (като 1000 застрахователни форми). Тестовите стъпки за този огромен списък от държави или образувания могат да бъдат еднакви и повтарящи се.
Въпреки това, подготовката на тестови казуси може да бъде една от най-трудоемките дейности, тъй като наличието на документа за тестовия казус е много важно, за да се откупят необходимите оценки от клиента и екипът на QA да тества всеки от тестовите случаи в рамките на правилно изчислените срокове.
Решение
В такива случаи дългите часове на усилията за подготовка на тестови случаи могат да бъдат намалени до части от секундите с помощта на макроса.
- Можете да създадете лист, в който просто предоставяте входните данни като идентификатор на тестовия случай и уникалния списък на обектите.
- Създайте макрос, който при изпълнение добавя повтарящи се редове от тестови стъпки за всеки от тези обекти и документът за тестовия случай е готов за няколко секунди, без да се налага да изразходвате значителното количество ръчни усилия, необходими за подготовката на тестовите случаи.
Демонстрация
- Първият лист „GetTestcasesASAP“ е единственият лист, управляван от макроси, който първоначално е празен.
- Още един лист ‘Примерни входни данни’ не играе роля в макроса. Той просто съхранява примерните входни данни за демонстрационни цели.
- Копирайте и поставете данни от примерни входни данни от диапазон A2 до B12 на първия лист.
- Можете да копирате и поставите входните данни във формата - Колона A = ……. и колона В =.
- След като входните данни са готови, натиснете CTRL + SHIFT + T като клавишни комбинации за изпълнение на макроса.
- Тестовите стъпки се добавят автоматично за всеки идентификатор на тестови случаи и документът за тестовия случай се изготвя само за няколко секунди.
GetTestcasesASAP
Примерни входни данни
Входните данни се поставят в първия лист.
Изображение при изпълнение на макрос чрез натискане на CTRL + SHIFT + T.
VBA (макро) код
Sub GetTestcasesQuick() ' GetTestcasesQuick Macro ' Keyboard Shortcut: Ctrl+Shift+T Sheets('GetTestcasesASAP').Activate lastrow =Sheets('GetTestcasesASAP').Cells(Sheets('GetTestcasesASAP').Rows.Count, 'A').End(xlUp).Row Dim AddRows As Integer AddRows = 5 Dim i As Integer i = lastrow Do While i <> 1 Rows(i & ':' & i + AddRows).Insert i = i - 1 Loop ScreenUpdating = True lastrow = Sheets('GetTestcasesASAP').Cells(Sheets('GetTestcasesASAP').Rows.Count, 'A').End(xlUp).Row i = 2 While i <= lastrow + 6 Sheets('GetTestcasesASAP').Cells(i, 3) = 'Validate rates-factor combinations' Sheets('GetTestcasesASAP').Cells(i + 1, 3) = 'Batch job schedules and runs. ' Sheets('GetTestcasesASAP').Cells(i + 2, 3) = 'Commissioning calculations settlements' Sheets('GetTestcasesASAP').Cells(i + 3, 3) = 'Quick and detailed quote' Sheets('GetTestcasesASAP').Cells(i + 4, 3) = 'Benefit illustration ' Sheets('GetTestcasesASAP').Cells(i + 5, 3) = 'Benefit summary validation' i = i + 7 Wend End Sub
Обяснение на кода
(а) Листове („GetTestcasesASAP“). Активирайте: Това изявление активира първия лист.
безплатно изтегляне на видео за Windows 10
(b) lastrow = Листове („GetTestcasesASAP'). Клетки (Листове („GetTestcasesASAP'). Редове. Брой, „A'). Край (xlUp). Ред: Този оператор получава последния брой редове. Този път ще получи общия брой на редовете за първоначалните идентификатори на тестови случаи, току-що добавени като част от входните данни преди изпълнението на макроса.
(c) Затъмняване на AddRows като цяло число: Този оператор декларира променливата AddRows като цяло число тип данни.
(г) AddRows = 5: Този оператор инициализира AddRows с 5. Променливата се използва за вмъкване на няколко реда след всеки идентификатор на тестовия случай, така че да могат да се добавят статични тестови стъпки за всеки тестов случай.
(д) Dim i As Integer: Този оператор декларира променлива i като цяло число.
(f) i = lastrow : Този оператор присвоява първоначалния брой на последния ред на променливата i.
(g) Правете докато i 1 : Това прави while цикъл вмъква 6 празни реда след всеки идентификатор на тестовия случай. Цикълът започва от последния идентификатор на тестовия случай, прогресиращ до идентификатора на първия тест.
Редове (i & “:” & i + AddRows)
i = i - 1
Примка
(h) ScreenUpdating = Вярно : Това изявление прави всяка актуализация на екрана видима. Следователно, производителността на макроса може да е малко бавна. За да оптимизирате работата на макроса, можете също да зададете ScreenUpdating = Невярно .
Задаването на ScreenUpdating на False подобрява производителността на макроса и ускорява изпълнението му, но няма да можете да видите периодичните промени, които се случват по време на изпълнението на макроса. Вместо това промените ще се покажат само след като изпълнението на макроса завърши.
(i) lastrow = Листове („GetTestcasesASAP'). Клетки (Листове („GetTestcasesASAP'). Редове. Брой, „A'). Край (xlUp). Ред : Този оператор отново изчислява броя на последните редове след добавяне на нови 6 реда за всеки тестов случай.
(j) i = 2
(к) Докато i<= lastrow + 6
Таблици („GetTestcasesASAP'). Клетки (i, 3) = 'Проверка на комбинации коефициенти-фактор“
Таблици („GetTestcasesASAP'). Клетки (i + 1, 3) = 'Групови графици за работа и изпълнения. „
Таблици („GetTestcasesASAP“). Клетки (i + 2, 3) = „Разчети за въвеждане в експлоатация“
Листове („GetTestcasesASAP“). Клетки (i + 3, 3) = „Бърза и подробна оферта“
Таблици („GetTestcasesASAP“). Клетки (i + 4, 3) = „Илюстрация на предимството“
Таблици („GetTestcasesASAP“). Клетки (i + 5, 3) = „Проверка на обобщеното предимство“
i = i + 7
Приложи
Този фрагмент от цикъла while добавя 6 стъпки от статични тестови стъпки за всеки тест, като задава тези редове впоследствие след всеки идентификатор на теста.
Статичните стъпки за тестване, добавени за всеки тест са следните:
- Етап 1: Валидирайте комбинации ставки-фактор.
- Стъпка 2: Партидни работни графици и писти.
- Стъпка 3: Разчети за въвеждане в експлоатация.
- Стъпка 4: Бърза и подробна оферта.
- Стъпка 5: Илюстрация на предимството.
- Стъпка 6: Обобщена проверка на ползите.
Освен това, той също изтласква следващия тест на Id в последователността на 6 + 2, т.е. 8тиред.
E.g: Ако TC1 е на първия ред, стъпките се добавят от втория до седмия ред и TC2 се премества към осмия ред. Подобна мода се следва и за останалите идентификатори на тестовия случай.
Пример за използване # 3
Има случаи, когато клиент предоставя огромен файл с данни някъде близо 1000 записа или повече и писането на тестови случаи за тези огромни записи и картографирането на всяка информация спрямо всяка тестова стъпка е досадна работа. Macro може да съкрати дните на усилията до няколко минути, като по този начин спестява време за подготовка на тестовия случай.
Решение
Предоставеният от клиента файл с данни може да бъде копиран в листа с активиран макрос. При изпълнение на макроса тестовите случаи се създават автоматично във втория лист чрез автоматично съпоставяне на тестови данни спрямо всяка тестова стъпка за всеки тестов случай.
Демонстрация
- Първият лист ‘InputFile’ и втория лист ‘ReadyTestCases’ са основните участници в макроса.
- Друг лист ‘Sample -InputFile’ не играе никаква роля в макроса. Той просто държи примерния файл с входни данни за демонстрационни цели.
- След като данните от ‘Sample-InputFile’ или предоставеният от клиента файл с данни се копира в първия лист, т.е. ‘InputFile’,
- Изпълнете макроса и тестовите случаи се създават автоматично за всеки тестов случай, където идентификаторите на поръчките са зададени като идентификатори на тестови случаи ( Забележка: Не забравяйте да поставите уникалния идентификатор, поставен като първата колона във InputFile).
- Към момента нямаме зададен клавиш за бърз достъп за изпълнение на макроса, вместо това трябва да го изпълним чрез опцията за изпълнение на Преглед -> Макроси -> Изберете макроса -> Редактиране -> Прозорец VBA.
- Макрокодът обработва динамично добавянето на тестовите стъпки. Накрая прави проверка дали някоя от стойностите на полето е празна, ако отговорът е да, тя изтрива тестовата стъпка за същото, като стъпката не би била необходима за празно поле. Например, ако погледнете входния файл по-долу, 2ndЗаписът няма стойност за Дата на изпращане, а третият ред няма стойност за Регион. Следователно след изпълнението на макроса тестовите случаи, които се създават автоматично, няма да имат тестови стъпки, съответстващи на тези празни стойности.
Пример - InputFile
InputFile: След извършване на копиране на данни за поставяне от проба InputFile в InputFile
Забележка:
- Не поставяйте заглавката на колоната от листа ‘Sample-InputFile’.
- Жълтите маркирани полета са празни, следователно тестовите стъпки, съответстващи на тези празни стойности, не трябва да се създават чрез макроса.
Изображение на ReadyTestcases Sheet след изпълнение на макро.
VBA (макро) код
Sub Macro1() ScreenUpdating = False '-------- Assign the first column value of Inputfile sheet to first column of ReadyTestCases sheet' This is the TC Id -- ThisWorkbook.Sheets('InputFile').Activate nrow = ThisWorkbook.Sheets('InputFile').Cells(Rows.Count, 1).End(xlUp).Row ncol = ThisWorkbook.Sheets('InputFile').Cells(1, Columns.Count).End(xlToLeft).Column i = 1 j = 1 For i = 1 To nrow ThisWorkbook.Sheets('ReadyTestCases').Cells(i, 1) = ThisWorkbook.Sheets('InputFile').Cells(i, 1) Next i ' ---------------------Inserting 20 buffer blank rows for each row in InputFile sheet--------- lastrow = Sheets('InputFile').Cells(Sheets('InputFile').Rows.Count, 'A').End(xlUp).Row ThisWorkbook.Sheets('InputFile').Activate AddRows = 21 i = lastrow Do While i <> 1 Rows(i &; ':' & i + AddRows - 1).Insert i = i - 1 Loop ' Inserting 21 buffer blank rows for each row in ReadyTestCases sheet----------- lastrow = Sheets('ReadyTestCases').Cells(Sheets('ReadyTestCases').Rows.Count, 'A').End(xlUp).Row ThisWorkbook.Sheets('ReadyTestCases').Activate AddRowsTC = 21 j = lastrow Do While j <> 1 ' 1 because we dont need extra blank lines after last row Rows(j & ':' & j + AddRowsTC - 1).Insert j = j - 1 Loop '------- Input values into ReadyTestCases sheet from each row of inputfile sheet lastrow = Sheets('ReadyTestCases').Cells(Sheets('ReadyTestCases').Rows.Count, 'A').End(xlUp).Row Dim a a = 1 ThisWorkbook.Sheets('ReadyTestCases').Activate For a = 1 To lastrow ThisWorkbook.Sheets('ReadyTestCases').Cells(a,3) = ThisWorkbook.Sheets('InputFile').Cells(a, 2) ThisWorkbook.Sheets('ReadyTestCases').Cells(a + 1, 3) = ThisWorkbook.Sheets('InputFile').Cells(a, 3) ThisWorkbook.Sheets('ReadyTestCases').Cells(a + 2, 3) = ThisWorkbook.Sheets('InputFile').Cells(a, 4) ThisWorkbook.Sheets('ReadyTestCases').Cells(a + 3, 3) = ThisWorkbook.Sheets('InputFile').Cells(a, 5) ThisWorkbook.Sheets('ReadyTestCases').Cells(a + 4, 3) = ThisWorkbook.Sheets('InputFile').Cells(a, 6) ThisWorkbook.Sheets('ReadyTestCases').Cells(a + 5, 3) = ThisWorkbook.Sheets('InputFile').Cells(a, 7) ThisWorkbook.Sheets('ReadyTestCases').Cells(a + 6, 3) = ThisWorkbook.Sheets('InputFile').Cells(a, 8) ThisWorkbook.Sheets('ReadyTestCases').Cells(a + 7, 3) = ThisWorkbook.Sheets('InputFile').Cells(a, 9) ThisWorkbook.Sheets('ReadyTestCases').Cells(a + 8, 3) = ThisWorkbook.Sheets('InputFile').Cells(a, 10) ThisWorkbook.Sheets('ReadyTestCases').Cells(a + 9, 3) = ThisWorkbook.Sheets('InputFile').Cells(a, 11) ThisWorkbook.Sheets('ReadyTestCases').Cells(a + 10, 3) = ThisWorkbook.Sheets('InputFile').Cells(a, 12) ThisWorkbook.Sheets('ReadyTestCases').Cells(a + 11, 3) = ThisWorkbook.Sheets('InputFile').Cells(a, 13) ThisWorkbook.Sheets('ReadyTestCases').Cells(a + 12, 3) = ThisWorkbook.Sheets('InputFile').Cells(a, 14) ThisWorkbook.Sheets('ReadyTestCases').Cells(a + 13, 3) = ThisWorkbook.Sheets('InputFile').Cells(a, 15) ThisWorkbook.Sheets('ReadyTestCases').Cells(a + 14, 3) = ThisWorkbook.Sheets('InputFile').Cells(a, 16) ThisWorkbook.Sheets('ReadyTestCases').Cells(a + 15, 3) = ThisWorkbook.Sheets('InputFile').Cells(a, 17) ThisWorkbook.Sheets('ReadyTestCases').Cells(a + 16, 3) = ThisWorkbook.Sheets('InputFile').Cells(a, 18) ThisWorkbook.Sheets('ReadyTestCases').Cells(a + 17, 3) = ThisWorkbook.Sheets('InputFile').Cells(a, 19) a = a + 21 Next a '------- Add verbiages reserved for each row lastrow = Sheets('ReadyTestCases').Cells(Sheets('ReadyTestCases').Rows.Count, 'C').End(xlUp).Row a = 1 ThisWorkbook.Sheets('ReadyTestCases').Activate For a = 1 To lastrow ThisWorkbook.Sheets('ReadyTestCases').Cells(a, 2) = 'Verify Order Date' ThisWorkbook.Sheets('ReadyTestCases').Cells(a + 1, 2) = 'Verify Ship Date' ThisWorkbook.Sheets('ReadyTestCases').Cells(a + 2, 2) = 'Verify Ship Mode' ThisWorkbook.Sheets('ReadyTestCases').Cells(a + 3, 2) = 'Verify Customer Id' ThisWorkbook.Sheets('ReadyTestCases').Cells(a + 4, 2) = 'Verify Customer Name' ThisWorkbook.Sheets('ReadyTestCases').Cells(a + 5, 2) = 'Verify Segment' ThisWorkbook.Sheets('ReadyTestCases').Cells(a + 6, 2) = 'Verify City' ThisWorkbook.Sheets('ReadyTestCases').Cells(a + 7, 2) = 'Verify State' ThisWorkbook.Sheets('ReadyTestCases').Cells(a + 8, 2) = 'Verify Postal Code' ThisWorkbook.Sheets('ReadyTestCases').Cells(a + 9, 2) = 'Verify Region' ThisWorkbook.Sheets('ReadyTestCases').Cells(a + 10, 2) = 'Verify Product Id' ThisWorkbook.Sheets('ReadyTestCases').Cells(a + 11, 2) = 'Verify Category' ThisWorkbook.Sheets('ReadyTestCases').Cells(a + 12, 2) = 'Verify Sub-Category' ThisWorkbook.Sheets('ReadyTestCases').Cells(a + 13, 2) = 'Verify Product Name' ThisWorkbook.Sheets('ReadyTestCases').Cells(a + 14, 2) = 'Verify Sales' ThisWorkbook.Sheets('ReadyTestCases').Cells(a + 15, 2) = 'Verify Quantity' ThisWorkbook.Sheets('ReadyTestCases').Cells(a + 16, 2) = 'Verify Discount' ThisWorkbook.Sheets('ReadyTestCases').Cells(a + 17, 2) = 'Verify Profit' a = a + 21 Next a '------Second last step- remove blank rows from ReadyTestCases and InputFile----- Deleteblankrows ('ReadyTestCases') 'call Delete blank row function for TC sheet ScreenUpdating = True End Sub ‘-------------------------------------------------------------------------------- Sub Deleteblankrows(ByVal Sheet As String) Dim wks As Worksheet Set wks = ThisWorkbook.Worksheets(Sheet) Dim i As Long wks.Activate lastrow = wks.Cells(Sheets(Sheet).Rows.Count, 'C').End(xlUp).Row With ActiveSheet For i = 1 To lastrow 'check each row of column B , if any row is empty then countA=0, delete that entire row If WorksheetFunction.CountBlank(Range(Cells(i, 2), Cells(i, 3))) = 1 Then Selection.Rows(i).EntireRow.Delete End If Next i End With End Sub
Обяснение на кода
# 1) ScreenUpdating = False: Актуализациите на екрана няма да се виждат, като зададете ScreenUpdating на False.
# 2) ThisWorkbook.Sheets (“InputFile”). Активирайте: Това изявление активира листа „InputFile“.
# 3) nrow = ThisWorkbook.Sheets (“InputFile”). Клетки (Rows.Count, 1) .End (xlUp) .Row: Този оператор получава броя на общите редове.
# 4) ncol = ThisWorkbook.Sheets (“InputFile”). Клетки (1, Columns.Count) .End (xlToLeft). Това изявление получава броя на общите колони.
# 5) i = 1: Този оператор инициализира i с 1.
# 6) j = 1: Този оператор инициализира j с 1.
# 7) За i = 1 да се прехвърли
ThisWorkbook.Sheets („ReadyTestCases'). Клетки (i, 1) = ThisWorkbook.Sheets („InputFile'). Клетки (i, 1)
Следващ i: Този фрагмент от For loop copy поставя стойността на първата колона (Идентификационен номер на поръчката в този случай) на листа „InputFile“ във всеки ред на листа „ReadyTestCases“ като идентификатор на тестовия случай.
# 8) lastrow = Листове („InputFile'). Клетки (Листове („InputFile'). Редове. Брой, „A'). Край (xlUp). Ред: Този оператор преизчислява последния брой редове на InputFile.
# 9) AddRows = 21: Този оператор присвоява 21 на променливата AddRows. Тази променлива е присвоена 21 с намерение да вмъкне 21 допълнителни празни реда за всеки тестов случай за добавяне на тестови стъпки.
# 10) i = lastrow: Това изявление присвоява последния брой последни редове на i.
# 11) Правете докато i 1
Редове (i & “:” & i + AddRows - 1)
i = i - 1
Примка: Това изявление добавя 20 реда за всеки тестови случай, започвайки отдолу нагоре.
# 12) lastrow = Таблици („ReadyTestCases“). Клетки (Листове ('ReadyTestCases'). Редове. Брой, 'A'). Край (xlUp). Ред: Това изявление преизчислява последния общ брой редове.
# 13) ThisWorkbook.Sheets („ReadyTestCases“). Активирате: Вторият лист се активира чрез това изявление.
# 14) Затъмняване на: Този оператор декларира променлива a.
# 15) a = 1: Това изявление присвоява 1 на a.
# 16) За a = 1 до последно
ThisWorkbook.Sheets („ReadyTestCases'). Клетки (a, 3) = ThisWorkbook.Sheets („InputFile'). Клетки (a, 2)
ThisWorkbook.Sheets („ReadyTestCases'). Клетки (a + 1, 3) = ThisWorkbook.Sheets („InputFile'). Клетки (a, 3)
ThisWorkbook.Sheets („ReadyTestCases'). Клетки (a + 2, 3) = ThisWorkbook.Sheets („InputFile'). Клетки (a, 4)
ThisWorkbook.Sheets („ReadyTestCases'). Клетки (a + 3, 3) = ThisWorkbook.Sheets („InputFile'). Клетки (a, 5)
ThisWorkbook.Sheets („ReadyTestCases'). Клетки (a + 4, 3) = ThisWorkbook.Sheets („InputFile'). Клетки (a, 6)
ThisWorkbook.Sheets („ReadyTestCases'). Клетки (a + 5, 3) = ThisWorkbook.Sheets („InputFile'). Клетки (a, 7)
ThisWorkbook.Sheets („ReadyTestCases'). Клетки (a + 6, 3) = ThisWorkbook.Sheets („InputFile'). Клетки (a, 8)
ThisWorkbook.Sheets („ReadyTestCases'). Клетки (a + 7, 3) = ThisWorkbook.Sheets („InputFile'). Клетки (a, 9)
ThisWorkbook.Sheets („ReadyTestCases'). Клетки (a + 8, 3) = ThisWorkbook.Sheets („InputFile'). Клетки (a, 10)
ThisWorkbook.Sheets („ReadyTestCases'). Клетки (a + 9, 3) = ThisWorkbook.Sheets („InputFile'). Клетки (a, 11)
ThisWorkbook.Sheets („ReadyTestCases'). Клетки (a + 10, 3) = ThisWorkbook.Sheets („InputFile'). Клетки (a, 12)
ThisWorkbook.Sheets („ReadyTestCases'). Клетки (a + 11, 3) = ThisWorkbook.Sheets („InputFile'). Клетки (a, 13)
ThisWorkbook.Sheets („ReadyTestCases'). Клетки (a + 12, 3) = ThisWorkbook.Sheets („InputFile'). Клетки (a, 14)
ThisWorkbook.Sheets („ReadyTestCases'). Клетки (a + 13, 3) = ThisWorkbook.Sheets („InputFile'). Клетки (a, 15)
ThisWorkbook.Sheets („ReadyTestCases'). Клетки (a + 14, 3) = ThisWorkbook.Sheets („InputFile'). Клетки (a, 16)
ThisWorkbook.Sheets („ReadyTestCases'). Клетки (a + 15, 3) = ThisWorkbook.Sheets („InputFile'). Клетки (a, 17)
ThisWorkbook.Sheets („ReadyTestCases'). Клетки (a + 16, 3) = ThisWorkbook.Sheets („InputFile'). Клетки (a, 18)
ThisWorkbook.Sheets („ReadyTestCases'). Клетки (a + 17, 3) = ThisWorkbook.Sheets („InputFile'). Клетки (a, 19)
a = a + 21
Следваща а: Фрагментът на цикъл for картографира стойностите от всяка колона на лист InputFile спрямо всяка тестова стъпка за всеки идентификатор на тестовия случай.
# 17) lastrow = Sheets (“ReadyTestCases”). Клетки (Sheets (“ReadyTestCases”). Rows.Count, “C”). End (xlUp) .Row : Този оператор преизчислява общия брой редове на ReadyTestCases лист след добавяне на 21 реда за всеки идентификатор на тестовия случай.
# 18) a = 1: Този оператор присвоява 1 на променлива a.
# 19) ThisWorkbook.Sheets (“ReadyTestCases”). Активирайте: Това изявление активира ReadyTestCases лист.
# 20) За a = 1 до последно
ThisWorkbook.Sheets (“ReadyTestCases”). Клетки (a, 2) = “Проверка на датата на поръчката”
ThisWorkbook.Sheets („ReadyTestCases'). Клетки (a + 1, 2) = 'Проверка на датата на изпращане“
ThisWorkbook.Sheets („ReadyTestCases'). Клетки (a + 2, 2) = 'Проверка на корабния режим“
ThisWorkbook.Sheets („ReadyTestCases'). Клетки (a + 3, 2) = 'Проверка на идентификатора на клиента“
ThisWorkbook.Sheets („ReadyTestCases'). Клетки (a + 4, 2) = 'Проверка на името на клиента“
ThisWorkbook.Sheets (“ReadyTestCases”). Клетки (a + 5, 2) = “Проверка на сегмента”
ThisWorkbook.Sheets („ReadyTestCases'). Клетки (a + 6, 2) = „Потвърждаване на града'
ThisWorkbook.Sheets („ReadyTestCases'). Клетки (a + 7, 2) = „Проверка на състоянието'
ThisWorkbook.Sheets („ReadyTestCases'). Клетки (a + 8, 2) = 'Проверка на пощенския код“
ThisWorkbook.Sheets („ReadyTestCases'). Клетки (a + 9, 2) = 'Проверка на региона'
ThisWorkbook.Sheets („ReadyTestCases'). Клетки (a + 10, 2) = 'Проверка на идентификатор на продукта“
ThisWorkbook.Sheets („ReadyTestCases'). Клетки (a + 11, 2) = „Проверка на категорията'
ThisWorkbook.Sheets („ReadyTestCases'). Клетки (a + 12, 2) = 'Проверка на подкатегория“
ThisWorkbook.Sheets („ReadyTestCases'). Клетки (a + 13, 2) = 'Проверка на името на продукта“
ThisWorkbook.Sheets (“ReadyTestCases”). Клетки (a + 14, 2) = “Проверка на продажбите”
ThisWorkbook.Sheets („ReadyTestCases'). Клетки (a + 15, 2) = 'Проверка на количеството“
ThisWorkbook.Sheets („ReadyTestCases'). Клетки (a + 16, 2) = 'Проверка на отстъпката“
ThisWorkbook.Sheets („ReadyTestCases'). Клетки (a + 17, 2) = 'Проверка на печалбата“
a = a + 21
Следваща а - Този фрагмент от цикъл For добавя статични тестови стъпки за всеки тестов случай.
# 21) Deleteblankrows („ReadyTestCases“): Извикайте функцията Deleteblankrow за „Ready TestCases’sheet“.
# 22) ScreenUpdating = Вярно: Това ви позволява да визуализирате актуализациите на екрана, случващи се като част от изпълнението на макроса.
# 23) Sub Deleteblankrows (ByVal Sheet As String): Кодът по-долу е за функцията Deletblankrows, която ще проверява динамично дали в полетата за данни има празни стойности. Ако да, тестовата стъпка, създадена за празните данни, ще бъде изтрита на свой ред чрез изтриване на такива редове.
# 24) Dim wks като работен лист: Това изявление обявява променливата wks като работен лист.
# 25) Задайте wks = ThisWorkbook.Worksheets (Sheet): Този оператор присвоява листа wks, предоставен като входен параметър.
# 26) Dim i As Long: Този лайнер обявява I като Long.
# 28) wks.Активирайте: Това изявление активира листа.
# 29) lastrow = wks.Cells (Sheets (Sheet) .Rows.Count, “C”). End (xlUp) .Row: Това изявление получава броя на последния ред на листа.
# 30) За i = 1 до последно: Цикълът For итерира от първия ред до последния ред.
# 31) Ако WorksheetFunction.CountBlank (Обхват (клетки (i, 2), клетки (i, 3))) = 1 Тогава: Това условие проверява дали за всеки ред втората и третата колона се броят за празната стойност като 1.
# 32) Selection.Rows (i) .EntireRow.Delete: Този оператор изтрива избрания ред, ако условието е вярно.
Пример за употреба # 4
Формулите на Excel в шаблона за тестови оценки също могат да се изпълняват с помощта на макрос. С помощта на макроса се създава и диаграма.
Демонстрация
- Поддържа се лист „Оценки“, който ще позволи на потребителите да добавят прогнозни часове за фази на тестване, започвайки от разбиране на бизнес изискванията до създаване, изпълнение и преработка при актуализиране на тестови скриптове.
- Зелените маркирани клетки са разрешени за въвеждане от потребителя. Това са полетата за въвеждане.
- Сините маркирани са автоматично получени.
- Вторият лист включва метрики за преработка, а третият включва метрики за сложност.
- Потребителят въвежда размера на сложността по отношение на H, L и M в колона D, а колоната E автоматично извлича фактора за сложност, използвайки vlookup от „Показатели за сложност“ лист.
- Потребителят въвежда размера на преработката по H, L и M в колона F, а колоната G автоматично извлича фактора за сложност, използвайки vlookup от листа „Rework metrics“.
- След това факторите се използват в колона Н за извличане на общите усилия за оценка.
- Друг макрос, когато се изпълни, подготвя диаграмата и я добавя на четвъртия лист ‘Chart’.
- Включените формули се управляват чрез макроса, като се използва клавишната комбинация CTRL + SHIFT + E.
Оценки
Преработете метрики
Метрики на сложността
Диаграма
VBA (макро) код за лист с оценки
' Keyboard Shortcut: Ctrl+Shift+E ThisWorkbook.Sheets(1).Activate Sheets('Estimates').Cells(4, 8) = Sheets('Estimates').Cells(4, 2) * Sheets('Estimates').Cells(4, 3) * Sheets('Estimates').Cells(4, 5) * Sheets('Estimates').Cells(4, 7) Sheets('Estimates').Cells(5, 8) = Sheets('Estimates').Cells(5, 2) * Sheets('Estimates').Cells(5, 3) * Sheets('Estimates').Cells(5, 5) * Sheets('Estimates').Cells(5, 7) Sheets('Estimates').Cells(6, 8) = Sheets('Estimates').Cells(6, 2) * Sheets('Estimates').Cells(6, 3) * Sheets('Estimates').Cells(6, 5) * Sheets('Estimates').Cells(6, 7) Sheets('Estimates').Cells(7, 8) = Sheets('Estimates').Cells(7, 2) * Sheets('Estimates').Cells(7, 3) * Sheets('Estimates').Cells(7, 5) * Sheets('Estimates').Cells(7, 7) Sheets('Estimates').Cells(8, 8) = Sheets('Estimates').Cells(8, 2) * Sheets('Estimates').Cells(8, 3) * Sheets('Estimates').Cells(8, 5) * Sheets('Estimates').Cells(8, 7) Sheets('Estimates').Cells(9, 8) = Sheets('Estimates').Cells(9, 2) * Sheets('Estimates').Cells(9, 3) * Sheets('Estimates').Cells(9, 5) * Sheets('Estimates').Cells(9, 7) Sheets('Estimates').Cells(10, 8) = Sheets('Estimates').Cells(10, 2) * Sheets('Estimates').Cells(10, 3) * Sheets('Estimates').Cells(10, 5) * Sheets('Estimates').Cells(10, 7) Sheets('Estimates').Cells(11, 8) = Sheets('Estimates').Cells(4, 8) + Sheets('Estimates').Cells(5, 8) + Sheets('Estimates').Cells(6, 8) + Sheets('Estimates').Cells(7, 8) + Sheets('Estimates').Cells(8, 8) + Sheets('Estimates').Cells(9, 8) + Sheets('Estimates').Cells(10, 8) ‘--------------------------------------------------- For i = 3 To 10 Sheets('Chart').Cells(i - 2, 1) = Sheets('Estimates').Cells(i, 1) Sheets('Chart').Cells(i - 2, 2) = Sheets('Estimates').Cells(i, 8) Next i End Sub
Обяснение на кода
(a) ThisWorkbook.Sheets (1) .Activat: Активира се първият лист „Оценки“.
(б) Листове („Оценки'). Клетки (4, 8) = Листове („Оценки'). Клетки (4, 2) * Листове („Оценки'). Клетки (4, 3) * Листове („Оценки' ). Клетки (4, 5) * Листове („Оценки'). Клетки (4, 7): Този оператор изчислява колона B * колона C * колона E * колона G и присвоява на колона H за ред 4.
(в) Листове („Оценки'). Клетки (5, 8) = Листове („Оценки'). Клетки (5, 2) * Листове („Оценки'). Клетки (5, 3) * Листове („Оценки' ). Клетки (5, 5) * Листове („Оценки'). Клетки (5, 7): Този оператор изчислява колона B * колона C * колона E * колона G и присвоява на колона H за ред 5.
(г) Листове („Оценки'). Клетки (6, 8) = Листове („Оценки'). Клетки (6, 2) * Листове („Оценки'). Клетки (6, 3) * Листове („Оценки' ). Клетки (6, 5) * Листове („Оценки'). Клетки (6, 7): Този оператор изчислява колона B * колона C * колона E * колона G и присвоява на колона H за ред 6.
(д) Листове („Оценки'). Клетки (7, 8) = Листове („Оценки'). Клетки (7, 2) * Листове („Оценки'). Клетки (7, 3) * Листове („Оценки' ). Клетки (7, 5) * Листове („Оценки'). Клетки (7, 7): Този оператор изчислява колона B * колона C * колона E * колона G и присвоява на колона H за ред 7.
(е) Листове („Оценки'). Клетки (8, 8) = Листове („Оценки'). Клетки (8, 2) * Листове („Оценки'). Клетки (8, 3) * Листове („Оценки' ). Клетки (8, 5) * Листове („Оценки'). Клетки (8, 7): Този оператор изчислява колона B * колона C * колона E * колона G и присвоява на колона H за ред 8.
(ж) Листове („Оценки'). Клетки (9, 8) = Листове („Оценки'). Клетки (9, 2) * Листове („Оценки'). Клетки (9, 3) * Листове („Оценки' ). Клетки (9, 5) * Листове („Оценки'). Клетки (9, 7): Този оператор изчислява колона B * колона C * колона E * колона G и присвоява на колона H за ред 9.
(з) Листове („Оценки'). Клетки (10, 8) = Листове („Оценки'). Клетки (10, 2) * Листове („Оценки'). Клетки (10, 3) * Листове („Оценки' ). Клетки (10, 5) * Листове („Оценки'). Клетки (10, 7): Този оператор изчислява колона B * колона C * колона E * колона G и присвоява на колона H за ред 10.
(i) Листове („Оценки'). Клетки (11, 8) = Листове („Оценки'). Клетки (4, 8) + Листове („Оценки'). Клетки (5, 8) + Листове („Оценки' ). Клетки (6, 8) + Листове („Оценки'). Клетки (7, 8) + Листове („Оценки'). Клетки (8, 8) + Листове („Оценки'). Клетки (9, 8) + Листове („Оценки'). Клетки (10, 8): Това изявление обобщава клетка H2 до H10 и присвоява крайната стойност на H11. Тази стойност осигурява общо усилие (в часове).
(j) За i = 3 до 10
Листове („Графика'). Клетки (i - 2, 1) = Листове („Оценки'). Клетки (i, 1)
Листове („Графика'). Клетки (i - 2, 2) = Листове („Оценки'). Клетки (i, 8)
Следващата аз: Това копие For Loop поставя данни от колона 1 и колона 8 от листа с оценки в лист с диаграми. Това се прави, за да могат данните от листа с диаграми да се използват за изготвяне на кръгова диаграма. Има още един макрос, написан за лист „Chart“, който подготвя диаграма за същото.
VBA (макро) код за диаграма
Sub CreateChart() Dim rng As Range Dim cht As Object ThisWorkbook.Sheets('Chart').Activate Set rng = ActiveSheet.Range('A2:B8') Set est = ThisWorkbook.Sheets('Chart').Shapes.AddChart2 est.Chart.SetSourceData Source:=rng est.Chart.ChartType = xl3DPieExploded est.Chart.HasTitle = True est.Chart.ChartTitle.Text = 'Test Estimates' est.Chart.SetElement (msoElementDataLabelCenter) est.Chart.SetElement (msoElementLegendBottom) End Sub
Обяснение на кода
- Dim rng As Range: Това изявление декларира rng като стойност на диапазон.
- Dim е като обект: Този оператор декларира est като стойност на обект.
- Тази работна книга.Листове („Диаграма“). Активирайте: Това изявление активира Графичен лист.
- Задайте rng = ActiveSheet.Range (“A2: B8”): Диапазонът от A2 до B8 на диаграмата на листа е зададен на rng.
- Set est = ThisWorkbook.Sheets („Chart“). Shapes.AddChart2: Това изявление се използва за иницииране на създаването на нова диаграма на листа-диаграма.
- est.Chart.SetSourceData Източник: = rng: Това изявление предоставя диапазон от данни за съзерцание в диаграмата.
- est.Chart.ChartType = xl3DPieExploded: Типът на диаграмата е зададен на 3D Pie от тип Exploded. xl3DPieExploded помага да се определи този тип диаграма.
- est.Chart.HasTitle = Вярно: Това изявление проверява дали диаграмата вече има заглавие.
- est.Chart.ChartTitle.Text = „Тестови оценки“: Това изявление заменя заглавието на диаграмата на „Тестови оценки“.
- est.Chart.SetElement (msoElementDataLabelCenter): Това изявление задава етикетите с данни и легендите за диаграмата.
- est.Chart.SetElement (msoElementLegendBottom): Това изявление задава етикетите с данни в долната част на диаграмата.
Начини за изпълнение на макрос
Макросът може да бъде изпълнен по 4 начина:
- Използване на иконата Run в прозореца на редактора на VBA.
- Във файла Excel изберете опцията от менюто Изглед -> Макроси -> Преглед на макрос -> Изберете името на макроса и изберете Изпълнение.
- Създайте пряк път, докато създавате макроса и натискането на клавишните комбинации ще задейства изпълнението на макроса.
- Най-удобният за потребителя начин е създаването на бутон за действие ( E.g. Команден бутон), към който ще бъде присвоен макрос, който при щракване ще задейства изпълнението на макроса.
Ще видим как да добавим команден бутон и да присвоим макрос на бутона. При щракване бутонът ще изпълни макроса.
Добавете бутон за контрол на формуляри в Excel
- Изберете Меню ‘Разработчик’ -> Вмъкване -> Контроли на формуляри -> Икона за избор на бутон и добавете бутона на листа на Excel.
- Въведете името и текстовата стойност за бутона. Името на бутона се използва в кодирането на VBA за разпознаване на този команден бутон, докато текстът е това, което се показва на бутона.
- Сега щракнете с десния бутон върху командния бутон и изберете опцията „Присвояване на макрос“ , списъкът с макроси се показва, изберете името на макроса, който искате да зададете.
- След като макросът е присвоен, щракването върху бутона задейства изпълнението на зададения макрос.
- В този пример, ‘Получаване на тестови оценки’ бутонът е присвоен на „Оценки“ макрос.
- По същия начин ще добавим команден бутон за листа Chart и ще присвоим макроса за Chart, за да задействаме генерирането на диаграмата.
- Щракване върху „Създаване на диаграма“ бутон стартира макроса за диаграма. Това подобрява използваемостта на макроса.
Заключение
Това бяха няколко примера в реално време, които биха могли да бъдат част от ежедневието на тестера по време на работа, което би могло да бъде интелигентно идентифицирано за генериране на макроси и следователно да спести достатъчно време за неподходящи и повтарящи се ръчни усилия чрез автоматизиране на задачата.
Съответните екранни снимки, VBA кодът и подробното разбиране на всеки ред код са разгледани в тази статия. Надявам се, това ще даде добър старт на QA за това как да се трансформирате от ръчно тестване на мислене към макро мислене.
За хората, които смятат, че работата на ръчните тестери е чисто нетехническа работа, нека ги докажем, че грешат чрез необходимото прилагане на технически знания за подобряване на производителността.
Автор: Тази задълбочена полезна публикация е написана от Shobha D. Тя работи като ръководител на проекта и има 9+ години опит в ръчно тестване, автоматизация (IBM RFT и Selenium с помощта на Java) и API тестване.
Препоръчително четене
- Работа с VBScript Excel Обекти
- Създаване на Framework Selenium и достъп до тестови данни от Excel - Урок № 21 за Selenium
- 5 най-често срещани задачи за тестване Тестерите забравят да тестват (и как да избегнете това)
- Топ 5 неща, които тестерът трябва да има в Excel (и променящите се перспективи на тестера на софтуер)
- Подзадача JIRA с пример (JIRA Create Sub-task)