Страницы

Поиск по вопросам

Показаны сообщения с ярлыком test-automation. Показать все сообщения
Показаны сообщения с ярлыком test-automation. Показать все сообщения

пятница, 24 января 2020 г.

Авто-тесты Java: как подключиться к телефону и достать из смс код подтверждения

#java #test_automation #testng


Пишу автотесты на Java + testNG. 
Для некоторых тестов, по типу регистрации, подтверждение приходит в виде 6ти значного
цифрового кода в смске на телефон. Т.к. это осуществляется сторонними сервисами, то
нет возможности создать универсальный тестовый код подтверждения, поэтому необходимо
подключаться к телефону, из смс выдергивать код подтверждения и передавать его дальше
по API или через UI. 

Немного сталкивался с Appium для выполнения тестов на телефоне (работа с браузером),
но никогда не приходилось лезть в смс и доставать оттуда какие-либо данные. 

Просьба подсказать/дать ссылку - что почитать, изучить, с помощью чего смогу реализовать
данный функционал.
    


Ответы

Ответ 1



Узнаешь app activity и app package приложения который отвечает у тебя за смс, после определяешь элементы и используешь. Что бы узнать app activity и app package делаешь следующие: открываешь командную строку вбиваешь: adb shell. В момент открытия приложения на телефоне вбиваешь dumpsys window windows | grep -E ‘mCurrentFocus’ Для следующего шага тебе понадобиться включить appium. Открываешь среду разработки -> cоздаешь класс, в него пихаешь код: static DesiredCapabilities caps; static AndroidDriver driver; static void appium_option_zte() { caps = new DesiredCapabilities(); caps.setCapability("deviceName", "Имя деваса"); caps.setCapability("udid", "f9c944bf");// тут все понято caps.setCapability("platformName", "Android"); //платформа caps.setCapability("platformVersion", "7.1.1"); //версия ведра caps.setCapability("appPackage", "mobi.sevenwinds.askedo"); caps.setCapability("appActivity", "mobi.sevenwinds.askedo.gui.start.splash.SplashActivity"); caps.setCapability("noReset", "true"); try { driver = new AndroidDriver(new URL("http://0.0.0.0:4723/wd/hub"), caps); } catch (MalformedURLException e) { System.out.println("Ошибка отправки команды на сервер"); System.out.println(e.getMessage()); } Если все сделал правильно при результатом компиляции будет открытие приложения. Дальше с помощью appium или uiautomator узнаешь id интересующий тебя компонентов. Здесь подробно описана работа с appium для начинающего

Ответ 2



как вариант еще посоветовали использовать http://codolutions.com/relayme.html для андроида. На айфоне пересылка смс на почту настраивается стандартными функциями Settings->Messages->Recieve At -> Add Email далее зайти на почту, распарсить письмо и получить код. Правда не уверен, все ли смс будут перенаправлены на почту, и сколько времени займет пересылка и доставка на почту, т.к. время жизни смс кода ограничено 120 сек.

суббота, 11 января 2020 г.

Что такое smoke test и с чем его едят?

#linux #shell #freebsd #test_automation


Что такое smoke test? Гугл дал только краткую формулировку, а хотелось бы с конкретными
примерами, литературой и т. д. Как можно запустить данные тесты ( какие команды в shell'е
) в разных unix подобных ос для разных утилит. Насколько я понимаю, для каждой программы
есть определенный набор команд ( tool -h или -version ), и проверив работоспособность
такого manpage можно сказать, что данная утилита прошла smoke test или нет.
    


Ответы

Ответ 1



какие команды в shell'е Проще всего: if tool -h then echo "Прошли smoke test" else echo "Не прошли smoke test" if tool --version then echo "Прошли smoke test" else echo "Не прошли smoke test" Но не факт, что все разработчики tool достаточно добросовестны и снабдили свой tool обработкой этих опций.

Ответ 2



Только проверку того, что тулза скомпилировалась - сложно назвать smoke-test. Smoke-test должен поверхностно протестировать наличие и корректную работу в тривиальных случаях всех самых важных функций тестируемой системы. Основная задача - охватить как можно больше функциональности за кратчайшее время. Никаких сложных кейсов. Цель - выявление проблем со сборкой перед её скармливанием более глубоким методам тестирования, экономия времени, очистка истории сборок от случайных ошибок. Дымовое тестирование имеет смысл размещать не на серверах CI, а у конкретных разработчиков либо на хуки системы контроля версий на development сервере. Его, в принципе, можно не автоматизировать(хотя тогда есть риск его пропустить). Разработчик может просто самостоятельно пробежаться по всем(не только по тем, в которые он вносил изменения) важным узлам билда вручную - это тоже вполне себе smoke-тестирование По поводу утилит, вы используете привычные вам методы тестирования, различие только в наборе тестов - вы идёте не в глубину, а в ширину.

Ответ 3



Само выражение smoke test - пришло из электроники. Собрали вы новое устройство, включили его в розетку, а оно громко бабахнуло и выпустило белый дым - значит smoke test не пройден. В программировании smoke test обозначает достаточно быстрый тест самой важной функциональности. Какой именно, зависит от программы. Например для интернет браузера будет достаточно открыть какой-нибудь https://google.com

четверг, 9 января 2020 г.

Как запустить тест с maven?

#java #maven #юнит_тесты #test_automation #allure


Добрый день, пытаюсь запустить тест командой 


  mvn clean test site


но maven выдаёт ошибку:

[INFO] Scanning for projects...
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] Building TestWebDriver 0.0.1-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[INFO]
[INFO] --- maven-clean-plugin:2.5:clean (default-clean) @ TestWebDriver ---
[INFO] Deleting C:\eclipse-workspace\TestWebDriver\target
[INFO]
[INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ TestWebDri
ver ---
[WARNING] Using platform encoding (Cp1251 actually) to copy filtered resources,
i.e. build is platform dependent!
[INFO] Copying 0 resource
[INFO]
[INFO] --- maven-compiler-plugin:3.6.1:compile (default-compile) @ TestWebDriver
---
[INFO] Changes detected - recompiling the module!
[WARNING] File encoding has not been set, using platform encoding Cp1251, i.e. b
uild is platform dependent!
[INFO] Compiling 1 source file to C:\eclipse-workspace\TestWebDriver\target\clas
ses
[INFO] -------------------------------------------------------------
[ERROR] COMPILATION ERROR :
[INFO] -------------------------------------------------------------
[ERROR] No compiler is provided in this environment. Perhaps you are running on
a JRE rather than a JDK?
[INFO] 1 error
[INFO] -------------------------------------------------------------
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 2.138 s
[INFO] Finished at: 2017-07-16T16:53:53+03:00
[INFO] Final Memory: 11M/114M
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.
6.1:compile (default-compile) on project TestWebDriver: Compilation failure
[ERROR] No compiler is provided in this environment. Perhaps you are running on
a JRE rather than a JDK?
[ERROR]
[ERROR] -> [Help 1]
[ERROR]
 [ERROR] To see the full stack trace of the errors, re-run Maven with the -e swit
ch.
 [ERROR] Re-run Maven using the -X switch to enable full debug logging.
 [ERROR]
 [ERROR] For more information about the errors and possible solutions, please rea
 d the following articles:
 [ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/MojoFailureExc
eption


как я понимаю что ему нужна jdk но как на её указать в поме я прописывал адрес но
появляется другая 

[INFO] Scanning for projects...
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] Building TestWebDriver 0.0.1-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[INFO]
[INFO] --- maven-clean-plugin:2.5:clean (default-clean) @ TestWebDriver ---
[INFO] Deleting C:\eclipse-workspace\TestWebDriver\target
[INFO]
[INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ TestWebDri
 ver ---
[WARNING] Using platform encoding (Cp1251 actually) to copy filtered resources,
i.e. build is platform dependent!
[INFO] Copying 0 resource
[INFO]
[INFO] --- maven-compiler-plugin:3.6.1:compile (default-compile) @ TestWebDriver
---
[INFO] Changes detected - recompiling the module!
[WARNING] File encoding has not been set, using platform encoding Cp1251, i.e. b
uild is platform dependent!
[INFO] Compiling 1 source file to C:\eclipse-workspace\TestWebDriver\target\clas
ses
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 2.851 s
[INFO] Finished at: 2017-07-16T17:09:44+03:00
[INFO] Final Memory: 11M/114M
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.
6.1:compile (default-compile) on project TestWebDriver: Compilation failure -> [
Help 1]
  [ERROR]
  [ERROR] To see the full stack trace of the errors, re-run Maven with the -e swit
 ch.
 [ERROR] Re-run Maven using the -X switch to enable full debug logging.
[ERROR]
 [ERROR] For more information about the errors and possible solutions, please rea
 d the following articles:
  [ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/MojoFailureExc
eption

    


Ответы

Ответ 1



[ERROR] No compiler is provided in this environment. Perhaps you are running on a JRE rather than a JDK? Maven не может найти установленную версию jdk на локальном компьютере. Попробуйте поменять переменную JAVA_HOME. На Linux export JAVA_HOME=/usr/java/jdk1.5.0_07/bin/java В Windows через командную строку сделать (естественно поменять путь к своей java): set JAVA_HOME="C:\Java\jdk7" Альтернативный вариант на Windows Взято отсюда -> https://www.java.com/ru/download/help/path.xml Windows 10 и Windows 8 В строке "Поиск" выполните поиск: Система (Панель управления) Нажмите на ссылку Дополнительные параметры системы. Нажмите Переменные среды. В разделе Переменные среды выберите переменную среды PATH. Нажмите Изменить. Если переменной PATH не существует, нажмите Создать. В окне Изменение системной переменной (или Новая системная переменная) укажите значение переменной среды PATH. Нажмите ОК. Закройте остальные открытые окна, нажимая ОК. Откройте заново окно командной строки и выполните код java.

понедельник, 6 января 2020 г.

Opera VPN Selenium Web driver

#c_sharp #selenium_webdriver #vpn #test_automation #chromium


Как при запуске operadriver по умолчанию включать opera vpn? 

Может можно как-то это автоматизировать ?
    


Ответы

Ответ 1



Можно создавать разные профили и на каждом профиле подключать vpn от определенной страны. Запускаем оперу с cmdline параметрами "--user-data-dir=C:\_opera_data_" + vpnCountries. Каждый запуск отдельного --user-data-dir создает новые сохранения настроек. Нужно вручную заходить в каждый --user-data-dir+vpnCountries (то есть запускать оперу с таким параметром) и устанавливать vpn через определенную страну. После выхода из браузера настройки включенного vpn остаются в --user-data-dir+vpnCountries. И при следующем запуске оперы с параметром --user-data-dir+vpnCountries включается тот впн, который был использован до прошлого закрытия. P.S. Способ конечно Угг. Но ничего рабочего и другого мне никто не предложил, пришлось придумать такое "ухищрение".. public static IWebDriver StartWebDriver() { IWebDriver webDriver; OperaOptions oo = new OperaOptions(); string vpnCountries = GetRandomString("vpn-countries.txt"); //MessageBox.Show(vpnCountries); oo.AddArgument(@"--user-data-dir=C:\_opera_data_" + vpnCountries); oo.AddArgument("--private"); oo.BinaryLocation = @"C:\Program Files\Opera\launcher.exe"; webDriver = new OperaDriver(oo); return webDriver; }

среда, 25 декабря 2019 г.

автоматическое тестирование проектов на gitlab

#java #github #gitlab #test_automation


начинающий юзер гитлаба, просьба не пинать ногами, меня интересует тестирование java-проектов
на автомате, то есть написал тесты закинул в проект на гитлабе и они работают на автомате

с чего необходимо начать, как это делается, куда смотреть, где копать? в общем буду
благодарен за любую информацию.
    


Ответы

Ответ 1



Есть три независимых друг от друга задачи: Написать сами тесты и реализовать возможность их запуска из командной строки. Можно просто команду, можно в .sh обернуть. Главное: тесты должны действительно фейлиться при запуске, то есть: Если тесты успешны, запускатор тестов возвращает 0. Если тесты неуспешны, запускатор возвращает что угодно другое. Установить и настроить GitLab CI Runner на машине с нужной вам ОС. Если вы пользуетесь gitlab.com, можете воспользоваться раннерами, предоставленными GitLab. Потом настроить ваш репозиторий на этот раннер. Добавить в корневую папку проекта файл .gitlab-ci.yml. Это файл в разметке Yaml, он описывает конвейер (pipeline) сборки проекта. Если GitLab видит этот файл в коммите, он пытается запустить сборку. Содержимое .gitlab-ci.yml примерно такое # если используем Docker-runner # то, например, такой образ Java можно использовать image: openjdk:7 # у нас будет только один этап сборки — тест stages: - test # и в нём только одна задача test_job: stage: test script: # предположим, что тесты мы запускаем с помощью Maven - mvn test

Ответ 2



Вам нужно прочитать документацию по настройке файла .gitlab-ci.yml Он запускает ранеры для выполнения задач при комите или мерже в зависимости он его настроек. https://docs.gitlab.com/ce/ci/yaml/ Вам также нужно будет настроить сам ранер (в начале можно на той-же машине что и gitlab ) https://docs.gitlab.com/runner/

воскресенье, 22 декабря 2019 г.

Как передавать значения переменных из Jenkins в Java проект

#java #maven #test_automation #jenkins


Привет. Подскажите, пожалуйста, 

есть проект, авто-тесты, которые, например создают некоторую сущность. Данные для
этих сущностей беруться либо из .properties по ключам, либо из .txt документов опять
же из ресурcов (директория).

Теперь задание, выложить это на дженкинс и настроить джобы с возможностью запуска
с разными значениями.
Выложить то выложил, все собирается, но с теми данными, которые в файлах внутри проекта.

Нашел, что в Jenkins можно настраивать параметризацию, т.е. запускать с параметром.

Решил поступить так (пример возьмем, что нам при билде надо менять урл, это как пример,
т.е. вместо урлы может быть абсолютно любое значение и их может быть несколько):


на Jenkins создаю Job Item, указываю параметр "This project is parameterized" = True


Создаю переменную:

String Parameter
Name = generalUrl
Default Value = http://ru.stackoverflow.com


далее, указываю, что этот job item должен собираться с помощью maven, путь к pom.xml
и все такое.
И в goal прописываю - clean test

Сохраняю.


Иду в проект, в файле pom.xml указываю



http://maven.apache.org/maven-v4_0_0.xsd">
    4.0.0

com
erm-nav-qa-integration-test
1.0-SNAPSHOT


    2.53.1
    6.9.10
    3.9.2
    4.12
    1.4.23
    2.19.1
    1.8.5
    3.5.1
    9.3.11.v20160721
    2.5
    3.9
    smoke_ui_tests.xml
    http://ru.stackoverflow.com




    
        org.testng
        testng
        ${testng.version}
    

    
        com.codeborne
        selenide
        ${selenide.version}
    

    
        junit
        junit
        ${junit.vesrion}
    

    
        ru.yandex.qatools.allure
        allure-testng-adaptor
        ${allure.version}
        
            
                junit
                junit
            
        
    

    
        org.apache.poi
        poi
        ${apache.poi.version}
        
            
                xml-apis
                xml-apis
            
        
    
    
        org.apache.poi
        poi-ooxml
        ${apache.poi.version}
        
            
                xml-apis
                xml-apis
            
        
    





    

        

            
                org.apache.maven.plugins
                maven-resources-plugin
                3.0.1
            

            
                org.apache.maven.plugins
                maven-surefire-plugin
                ${maven.surefire.version}
                

                    
                        ${suiteName}
                    

                    true
                    
                        -javaagent:"${settings.localRepository}/org/aspectj/aspectjweaver/${aspectj.version}/aspectjweaver-${aspectj.version}.jar"
                    

                    
                        ${generalUrl}
                    

                

                
                    
                        org.aspectj
                        aspectjweaver
                        ${aspectj.version}
                    
                

            

            
                org.apache.maven.plugins
                maven-compiler-plugin
                ${maven.compiler.version}
                
                    1.8
                    1.8
                    true
                    true
                
            

            
            
                org.eclipse.jetty
                jetty-maven-plugin
                ${jetty.version}
                
                    ${project.build.directory}/site/allure-maven-plugin
                    stop
                    1234
                
            

        

    

    
        
            src/main/resources
            true
        
    





    true
    
        
            ru.yandex.qatools.allure
            allure-maven-plugin
            ${allure.maven.version}
            
                
                    ${basedir}/target/allure-reports/
                    ${basedir}/target/allure-results
                
            
        

    

    ${basedir}/site






В файле .properties есть ключ с значнием baseUrl=${generalUrl}.
Вроде бы все сделал как находил по кусочкам где-то, запускаю свои тесты, получаю ошибку:

org.openqa.selenium.WebDriverException: unknown error: unhandled inspector error:
{"code":-32603,"message":"Cannot navigate to invalid URL"}
  (Session info: chrome=53.0.2785.89)


Включаю дебаггер и вижу, что на этапе чтения файла .properties, система берет просто
${generalUrl}, т.е. просто как текст...

Подскажите, как можно из Jenkins передавать переменные, т.е. как настроить сам pom.xml,
.properties, чтобы можно было выполнять параметризированный запуск.

Спасибо.

UPD: Добавил pom.xml
    


Ответы

Ответ 1



У вас по сути есть две задачи: пробросить значения параметров сборки из Jenkins в свойство maven-проекта (property). обработать .properties-файл(ы), заменяя заглушки ${generalUrl} на значения свойств maven-а. Maven интерпретирует аргументы JVM -Dfoo=bar в качестве свойств проекта. Значения параметров сборки Jenkins доступны в виде макросов вида ${MYPARAM}. Чтобы передать параметр из Jenkins в maven, в соответствующем шаге сборки в поле Goals and options остается связать свойство maven с параметром Jenkins примерно так: clean install -DgeneralUrl=${generalUrl} (замените clean install на то, что используетя в вашем случае) Для подстановки свойств в ресурсы у maven есть готовое решение в составе Maven Resources Plugin - фильтрация ресурсов. Добавьте в pom.xml плагин актуальной версии: org.apache.maven.plugins maven-resources-plugin 3.0.1 Просто в секции вашего pom-файла включите фильтрацию для нужных ресурсов: src/test/resources true Теперь при выполненнии maven-ом фазы process-test-resources будет выполняться задача resources:testResources, которая заменит выражение ${generalUrl} в файле src/main/resources/data.properties на свойство generalUrl из pom-файла, которое в свое очередь может пробрасываться из Jenkins.

Ответ 2



Всем спасибо! Решил с помощью профилей http://software-testing.ru/library/testing/general-testing/1984 И немного переписал загрузку из проперти файлов. По ссылке выше, все детально рассказывается и есть ссылка на архетип проекта, с примером пома с профилями. Теперь тесты запускаются как локально из IDE, береться дефолтное значение из "дибаг.проперти", так и с помощью команды mvn clean -DgeneralUrl=http://google.com test, которое пробрасывает это значение переменной в проект. Дальше с настройкой в Jenkins, дело житейское :).

суббота, 7 декабря 2019 г.

UI/Acceptance/Integration тестирование iOS-приложений

#android #uiautomation #ios #test_automation


Здравствуйте,
Я хочу узнать о том, чем на практике различаются между существующие решения для тестирования
мобильных приложений.
Как показывает заголовок этого топика, я имею в виду не unit-тестирование, а именно
black box тестирование работы всего приложения целиком: этот вид тестирования обычно
называется Acceptance или Integration Testing или еще иногда его называют просто "тестирование UI".
Вот существующие решения, о которых я знаю:

Apple UI Automation
Frank / Calabash
KIF
ios-driver
Appium

(если интересно, я собрал все эти библиотеки здесь).
Буду признателен, если кто-то поделится опытом использования любого из этих решений
применительно к не-малым проектам на iOS.

Попробую перечислить пункты, по которым, как я предполагаю, можно сравнить эти решения:
Язык, на котором пишутся сценарии

UI Automation использует Javascript (странно!).
Frank/Calabash основаны на Ruby/Cucumber (ОК для тех, у кого есть Ruby/Rails бэкграунд).
KIF - Objective-C (Хорошо, ибо нативно!).
ios-driver - Java (WTF?).
Appium (сразу несколько, но в первую очередь Ruby и Javascript).

Удобство интеграции

UI Automation - часть Apple Instruments, поэтому вроде как все должно быть хорошо.
Frank/Calabash - встраиваются через кастомизацию основного таргета приложения, с
этим вроде можно помириться. В основной таргет встраивается HTTP-сервер, который слушает
инструкции от Cucumber и заставляет приложение им подчиняться (нажатия кнопок, заполнения
текстовых полей, свайпы итд).
KIF - через конфигурацию тестового таргета. ОК.
ios-driver, Appium - ?

Использование VCR Tools
VCR Tools, например VCRURLConnection, позволяют записывать все сетевое взаимодействие
при реальном обходе сценария вручную, а потом проигрывать записанное с JSON-кассеты
при прогоне тестового сценария.
Мне представляется, что, например, UI Automation будет не очень-то просто подружить
с такой практикой, когда используется VCR.
Буду рад услышать о таком опыте использования VCR.
Хорошая поддержка доступа к view-иерархии и хорошая поддержка основных жестов (swipes
и др.)
Наверное, лучше всего это должно быть у UI Automation, и, наверное, и в остальных
решения все это должно быть более-менее в наличии.
Опять же буду рад, если кто-то опишет ограничения, с которыми пришлось столкнуться
в работе с тем или иным решением.
Кроссплатформенность

UI Automation (хм, только Apple)
Frank (вроде только iOS), Calabash (iOS, Android и скорее всего Windows, так как
автор Calabash работает в Xamarin)
KIF (только Objective-C/iOS)
ios-driver (вроде только iOS)
Appium (iOS, Android)

Будет интересно, если кто-то поделиться опытом разработки сценариев сразу под две
или более платформ!
Настройка CI-серверов
Здесь от себя ничего не напишу, так как еще ни разу этим не занимался, но подозреваю,
что по этому пункту тоже могут быть значительные различия (легкость, удобство).

Подчеркну, что буду признателен за развёрнутые ответы. Интересует реальный опыт использования
этих решений: удобство, проблемы, достоинства/недостатки - словом, всё, что сможет
мне и другим потенциальным читателям этого топика определиться с тем, какое решение
предпочтительнее использовать.
P.S. Я сам склоняюсь к KIF или Calabash.
P.S. #2 По слухам известно, что Яндекс использует в некоторых iOS-проектах Calabash
и CI. 

ОБНОВЛЕНО ПОЗЖЕ
Я принимаю замечательный ответ Дмитрия, как верный, и это не означает, что тема закрыта:
если Вам есть что рассказать, можете поделиться опытом, как это сделал Дмитрий, - прошу,
обязательно пишите ваши ответы, так как эта тема интересна мне и, наверное, всем тем
из из нас, кто связан с iOS-, да и вообще мобильной разработкой :)    


Ответы

Ответ 1



Привет. Делал сравнение в конце прошлого года: http://www.slideshare.net/dmitrycheremushkin/appium-sqa-days-15-2014/8 Но для меня были важны Java и поддержка WebDriver API, приоритетна кроссплатформенность. Поскольку это была интеграция мобильного решения в существующий фреймворк. На текущий момент есть опыт использования Appium и Calabash. Внесу ясность по нескольким вопросам: Язык, на котором пишутся сценарии; Удобство интеграции ios-driver - Java (WTF?). Appium (сразу несколько, но в первую очередь Ruby и Javascript). ios-driver и Appium преобразуют WebDriver API запросы (от тестов) в команды UI Automation: How Appium works How ios-driver works Серверная часть в них — это Selenium-сервер с поддержкой некоторых дополнительных команд. Отсюда поддержка такого количества языков для написания тестов. Хорошая поддержка доступа к view-иерархии и хорошая поддержка основных жестов (swipes и др.) Здесь могу сказать только про Appium — у них всё, что нужно поддерживается (Appium's gestures), при этом они достаточно часто вносят улучшения и выполняют запросы пользователей. Из примеров, недавно был добавлен direction в scrollTo. У Appium есть GUI-инспектор элементов, сейчас должен работать достаточно стабильно. Через него же можно записывать сценарий — кликаешь по элементам, генерится код. Кроссплатформенность Calabash (iOS, Android и скорее всего Windows, так как автор Calabash работает в Xamarin) Calabash — только Android и iOS, Windows Phone не поддерживается Appium (iOS, Android) Appium — iOS, Android и FirefoxOS Настройка CI-серверов Здесь важно понимать масштаб. :) Простой случай — когда нужно проверить одно приложение, пусть на нескольких версиях ОС, но когда нет сильных временных ограничений. И другое дело — если нужно делать распределённый запуск, а то и полноценный мобильный CI, для нескольких приложений с несколькими платформами, версиями, устройствами. В первом случае — по сути подойдёт любое из перечисленных решений. Нужен лишь CI, умеющий запускать shell-скрипт и в случае с iOS — работающий на Mac OS, либо включающий агенты на Mac OS. Во втором случае — либо распределять запуск с помощью нативных CI-агентов либо включать мобильные ноды в Selenium Grid (поддерживается ios-driver и Appium) либо написать свою реализацию, если позволяет инструментарий — зависит прежде всего от того, как он работает с устройствами/эмуляторами "внутри" и позволяет ли их инициализировать (знаю, что c Calabash так можно сделать) 2 и 3 — можно распределять не по сьютам, а по отдельным тестам, это преимущество + меньше нагрузки на CI Ещё мысли Не знаю, как с UI Automation, но с использованием других средств можно построить полноценный фреймворк — с аналогом Page Objects, BDD, репортингом и пр. Appium и ios-driver особенно хороши, если уже имеются веб-тесты и требуется их погонять в мобильных браузерах. Из них я для себя выбрал Appium, т.к. лучше поддержка, развивается интенсивней и кроссплатформенен. Насколько я знаю, в Яндексе в основном используют Appium (источник: http://www.slideshare.net/yandex/ss-28743339)

Ответ 2



Позволю себе процитировать пару ответов, которые я получил по другим источникам, чтобы насытить этот топик контентом: Мы у себя пробовали Frank и KIF. Frank пробовали года полтора назад, и тогда он показался немного сыроватым. С тех пор они, насколько я знаю, перешли на KIF-овский движок и многое допилили, но я лично не юзал. В принципе, если есть бэкграунд на руби, это отличное решение. Ну а KIF - лучшее решение для суровых iOS-ников :) А если немного отойти вбок от темы, то сейчас набирают популярность MVVM-подобные темы, которые позволяют полностью протестировать UI без, собственно, самого UI https://github.com/ReactiveCocoa/ReactiveViewModel вот тут немного инфы Мы использовали KIF. Еще нашими QA использовался Appium — форк от селениума но KIF как-то оказался проще в реализации. Нативный. Проблема только в том, что приходится для его впиливания делать изменения в самом коде (впиливать лэйблы контролам). > На практике у нас всегда на проектах ручное тестирование применялось. Хотябы потому, что UI постоянно апдейтится, темпы разработки и изменений довольно быстрые а экранов много. Тут прелесть KIF в том, что не зависимо от географического положения контрола, фреймворк находит его именно по лэйблу. По сему изменения в лэйауте, как правило, не ломают тесты Еще один лаконичный ответ: UI testing sucks : http://www.youtube.com/watch?v=h1TRkDSmnOc

среда, 12 июня 2019 г.

Как запустить тест с maven?

Добрый день, пытаюсь запустить тест командой
mvn clean test site
но maven выдаёт ошибку:
[INFO] Scanning for projects... [INFO] [INFO] ------------------------------------------------------------------------ [INFO] Building TestWebDriver 0.0.1-SNAPSHOT [INFO] ------------------------------------------------------------------------ [INFO] [INFO] --- maven-clean-plugin:2.5:clean (default-clean) @ TestWebDriver --- [INFO] Deleting C:\eclipse-workspace\TestWebDriver\target [INFO] [INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ TestWebDri ver --- [WARNING] Using platform encoding (Cp1251 actually) to copy filtered resources, i.e. build is platform dependent! [INFO] Copying 0 resource [INFO] [INFO] --- maven-compiler-plugin:3.6.1:compile (default-compile) @ TestWebDriver --- [INFO] Changes detected - recompiling the module! [WARNING] File encoding has not been set, using platform encoding Cp1251, i.e. b uild is platform dependent! [INFO] Compiling 1 source file to C:\eclipse-workspace\TestWebDriver\target\clas ses [INFO] ------------------------------------------------------------- [ERROR] COMPILATION ERROR : [INFO] ------------------------------------------------------------- [ERROR] No compiler is provided in this environment. Perhaps you are running on a JRE rather than a JDK? [INFO] 1 error [INFO] ------------------------------------------------------------- [INFO] ------------------------------------------------------------------------ [INFO] BUILD FAILURE [INFO] ------------------------------------------------------------------------ [INFO] Total time: 2.138 s [INFO] Finished at: 2017-07-16T16:53:53+03:00 [INFO] Final Memory: 11M/114M [INFO] ------------------------------------------------------------------------ [ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3. 6.1:compile (default-compile) on project TestWebDriver: Compilation failure [ERROR] No compiler is provided in this environment. Perhaps you are running on a JRE rather than a JDK? [ERROR] [ERROR] -> [Help 1] [ERROR] [ERROR] To see the full stack trace of the errors, re-run Maven with the -e swit ch. [ERROR] Re-run Maven using the -X switch to enable full debug logging. [ERROR] [ERROR] For more information about the errors and possible solutions, please rea d the following articles: [ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/MojoFailureExc eption
как я понимаю что ему нужна jdk но как на её указать в поме я прописывал адрес но появляется другая
[INFO] Scanning for projects... [INFO] [INFO] ------------------------------------------------------------------------ [INFO] Building TestWebDriver 0.0.1-SNAPSHOT [INFO] ------------------------------------------------------------------------ [INFO] [INFO] --- maven-clean-plugin:2.5:clean (default-clean) @ TestWebDriver --- [INFO] Deleting C:\eclipse-workspace\TestWebDriver\target [INFO] [INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ TestWebDri ver --- [WARNING] Using platform encoding (Cp1251 actually) to copy filtered resources, i.e. build is platform dependent! [INFO] Copying 0 resource [INFO] [INFO] --- maven-compiler-plugin:3.6.1:compile (default-compile) @ TestWebDriver --- [INFO] Changes detected - recompiling the module! [WARNING] File encoding has not been set, using platform encoding Cp1251, i.e. b uild is platform dependent! [INFO] Compiling 1 source file to C:\eclipse-workspace\TestWebDriver\target\clas ses [INFO] ------------------------------------------------------------------------ [INFO] BUILD FAILURE [INFO] ------------------------------------------------------------------------ [INFO] Total time: 2.851 s [INFO] Finished at: 2017-07-16T17:09:44+03:00 [INFO] Final Memory: 11M/114M [INFO] ------------------------------------------------------------------------ [ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3. 6.1:compile (default-compile) on project TestWebDriver: Compilation failure -> [ Help 1] [ERROR] [ERROR] To see the full stack trace of the errors, re-run Maven with the -e swit ch. [ERROR] Re-run Maven using the -X switch to enable full debug logging. [ERROR] [ERROR] For more information about the errors and possible solutions, please rea d the following articles: [ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/MojoFailureExc eption


Ответ

[ERROR] No compiler is provided in this environment. Perhaps you are running on a JRE rather than a JDK?
Maven не может найти установленную версию jdk на локальном компьютере.
Попробуйте поменять переменную JAVA_HOME.
На Linux
export JAVA_HOME=/usr/java/jdk1.5.0_07/bin/java
В Windows через командную строку сделать (естественно поменять путь к своей java):
set JAVA_HOME="C:\Java\jdk7"
Альтернативный вариант на Windows
Взято отсюда -> https://www.java.com/ru/download/help/path.xml
Windows 10 и Windows 8
В строке "Поиск" выполните поиск: Система (Панель управления) Нажмите на ссылку Дополнительные параметры системы. Нажмите Переменные среды. В разделе Переменные среды выберите переменную среды PATH. Нажмите Изменить. Если переменной PATH не существует, нажмите Создать. В окне Изменение системной переменной (или Новая системная переменная) укажите значение переменной среды PATH. Нажмите ОК. Закройте остальные открытые окна, нажимая ОК. Откройте заново окно командной строки и выполните код java.

понедельник, 4 марта 2019 г.

Opera VPN Selenium Web driver

Как при запуске operadriver по умолчанию включать opera vpn?
Может можно как-то это автоматизировать ?


Ответ

Можно создавать разные профили и на каждом профиле подключать vpn от определенной страны.
Запускаем оперу с cmdline параметрами "--user-data-dir=C:\_opera_data_" + vpnCountries. Каждый запуск отдельного --user-data-dir создает новые сохранения настроек. Нужно вручную заходить в каждый --user-data-dir+vpnCountries (то есть запускать оперу с таким параметром) и устанавливать vpn через определенную страну. После выхода из браузера настройки включенного vpn остаются в --user-data-dir+vpnCountries. И при следующем запуске оперы с параметром --user-data-dir+vpnCountries включается тот впн, который был использован до прошлого закрытия.
P.S. Способ конечно Угг. Но ничего рабочего и другого мне никто не предложил, пришлось придумать такое "ухищрение"..
public static IWebDriver StartWebDriver() { IWebDriver webDriver;
OperaOptions oo = new OperaOptions();
string vpnCountries = GetRandomString("vpn-countries.txt");
//MessageBox.Show(vpnCountries);
oo.AddArgument(@"--user-data-dir=C:\_opera_data_" + vpnCountries);
oo.AddArgument("--private");

oo.BinaryLocation = @"C:\Program Files\Opera\launcher.exe";
webDriver = new OperaDriver(oo);
return webDriver; }

четверг, 11 октября 2018 г.

UI/Acceptance/Integration тестирование iOS-приложений

Здравствуйте, Я хочу узнать о том, чем на практике различаются между существующие решения для тестирования мобильных приложений. Как показывает заголовок этого топика, я имею в виду не unit-тестирование, а именно black box тестирование работы всего приложения целиком: этот вид тестирования обычно называется Acceptance или Integration Testing или еще иногда его называют просто "тестирование UI". Вот существующие решения, о которых я знаю: Apple UI Automation Frank / Calabash KIF ios-driver Appium (если интересно, я собрал все эти библиотеки здесь). Буду признателен, если кто-то поделится опытом использования любого из этих решений применительно к не-малым проектам на iOS. Попробую перечислить пункты, по которым, как я предполагаю, можно сравнить эти решения: Язык, на котором пишутся сценарии UI Automation использует Javascript (странно!). Frank/Calabash основаны на Ruby/Cucumber (ОК для тех, у кого есть Ruby/Rails бэкграунд). KIF - Objective-C (Хорошо, ибо нативно!). ios-driver - Java (WTF?). Appium (сразу несколько, но в первую очередь Ruby и Javascript). Удобство интеграции UI Automation - часть Apple Instruments, поэтому вроде как все должно быть хорошо. Frank/Calabash - встраиваются через кастомизацию основного таргета приложения, с этим вроде можно помириться. В основной таргет встраивается HTTP-сервер, который слушает инструкции от Cucumber и заставляет приложение им подчиняться (нажатия кнопок, заполнения текстовых полей, свайпы итд). KIF - через конфигурацию тестового таргета. ОК. ios-driver, Appium - ? Использование VCR Tools VCR Tools, например VCRURLConnection, позволяют записывать все сетевое взаимодействие при реальном обходе сценария вручную, а потом проигрывать записанное с JSON-кассеты при прогоне тестового сценария. Мне представляется, что, например, UI Automation будет не очень-то просто подружить с такой практикой, когда используется VCR. Буду рад услышать о таком опыте использования VCR. Хорошая поддержка доступа к view-иерархии и хорошая поддержка основных жестов (swipes и др.) Наверное, лучше всего это должно быть у UI Automation, и, наверное, и в остальных решения все это должно быть более-менее в наличии. Опять же буду рад, если кто-то опишет ограничения, с которыми пришлось столкнуться в работе с тем или иным решением. Кроссплатформенность UI Automation (хм, только Apple) Frank (вроде только iOS), Calabash (iOS, Android и скорее всего Windows, так как автор Calabash работает в Xamarin) KIF (только Objective-C/iOS) ios-driver (вроде только iOS) Appium (iOS, Android) Будет интересно, если кто-то поделиться опытом разработки сценариев сразу под две или более платформ! Настройка CI-серверов Здесь от себя ничего не напишу, так как еще ни разу этим не занимался, но подозреваю, что по этому пункту тоже могут быть значительные различия (легкость, удобство). Подчеркну, что буду признателен за развёрнутые ответы. Интересует реальный опыт использования этих решений: удобство, проблемы, достоинства/недостатки - словом, всё, что сможет мне и другим потенциальным читателям этого топика определиться с тем, какое решение предпочтительнее использовать. P.S. Я сам склоняюсь к KIF или Calabash. P.S. #2 По слухам известно, что Яндекс использует в некоторых iOS-проектах Calabash и CI. ОБНОВЛЕНО ПОЗЖЕ Я принимаю замечательный ответ Дмитрия, как верный, и это не означает, что тема закрыта: если Вам есть что рассказать, можете поделиться опытом, как это сделал Дмитрий, - прошу, обязательно пишите ваши ответы, так как эта тема интересна мне и, наверное, всем тем из из нас, кто связан с iOS-, да и вообще мобильной разработкой :)


Ответ

Привет. Делал сравнение в конце прошлого года: http://www.slideshare.net/dmitrycheremushkin/appium-sqa-days-15-2014/8 Но для меня были важны Java и поддержка WebDriver API, приоритетна кроссплатформенность. Поскольку это была интеграция мобильного решения в существующий фреймворк. На текущий момент есть опыт использования Appium и Calabash. Внесу ясность по нескольким вопросам: Язык, на котором пишутся сценарии; Удобство интеграции ios-driver - Java (WTF?). Appium (сразу несколько, но в первую очередь Ruby и Javascript). ios-driver и Appium преобразуют WebDriver API запросы (от тестов) в команды UI Automation: How Appium works How ios-driver works Серверная часть в них — это Selenium-сервер с поддержкой некоторых дополнительных команд. Отсюда поддержка такого количества языков для написания тестов. Хорошая поддержка доступа к view-иерархии и хорошая поддержка основных жестов (swipes и др.) Здесь могу сказать только про Appium — у них всё, что нужно поддерживается (Appium's gestures), при этом они достаточно часто вносят улучшения и выполняют запросы пользователей. Из примеров, недавно был добавлен direction в scrollTo. У Appium есть GUI-инспектор элементов, сейчас должен работать достаточно стабильно. Через него же можно записывать сценарий — кликаешь по элементам, генерится код. Кроссплатформенность Calabash (iOS, Android и скорее всего Windows, так как автор Calabash работает в Xamarin) Calabash — только Android и iOS, Windows Phone не поддерживается Appium (iOS, Android) Appium — iOS, Android и FirefoxOS Настройка CI-серверов Здесь важно понимать масштаб. :) Простой случай — когда нужно проверить одно приложение, пусть на нескольких версиях ОС, но когда нет сильных временных ограничений. И другое дело — если нужно делать распределённый запуск, а то и полноценный мобильный CI, для нескольких приложений с несколькими платформами, версиями, устройствами. В первом случае — по сути подойдёт любое из перечисленных решений. Нужен лишь CI, умеющий запускать shell-скрипт и в случае с iOS — работающий на Mac OS, либо включающий агенты на Mac OS. Во втором случае — либо распределять запуск с помощью нативных CI-агентов либо включать мобильные ноды в Selenium Grid (поддерживается ios-driver и Appium) либо написать свою реализацию, если позволяет инструментарий — зависит прежде всего от того, как он работает с устройствами/эмуляторами "внутри" и позволяет ли их инициализировать (знаю, что c Calabash так можно сделать) 2 и 3 — можно распределять не по сьютам, а по отдельным тестам, это преимущество + меньше нагрузки на CI Ещё мысли Не знаю, как с UI Automation, но с использованием других средств можно построить полноценный фреймворк — с аналогом Page Objects, BDD, репортингом и пр. Appium и ios-driver особенно хороши, если уже имеются веб-тесты и требуется их погонять в мобильных браузерах. Из них я для себя выбрал Appium, т.к. лучше поддержка, развивается интенсивней и кроссплатформенен. Насколько я знаю, в Яндексе в основном используют Appium (источник: http://www.slideshare.net/yandex/ss-28743339)