четверг, 16 апреля 2015 г.

Автоматизируй это!

В данном Посте поговорим не про автоматизацию тестов, а про автоматизацию вообще всего( тестов, окружений, рутинных действий, настроек и прочего прочего...)

Нужно ли это?

От многих можно услышать такое возражение: "У нас нет времени автоматизировать это - мы и так загружены по самое `не могу`". 
Есть еще такой вариант: "Мы погрязнем в этой автоматизации по самые помидоры и только и будем делать что править и чинить в ней что-то!"
Я по своему опыту могу сказать однозначно - это нужно, но все это необходимо внедрять постепенно и аккуратно.


Так все-таки: автоматизация это хорошо или плохо? Быть ей или не быть?
Ответ на этот вопрос неоднозначный. Давайте рассмотрим все плюсы и минусы ручного подхода и автоматизации.

Плюсы:

  • Избавляемся от человеческого фактора
  • Возрастает скорость выполнения тасков (количество закрытых человекотасков в день)
  • Появиться больше возможностей

Минусы:

  • Это может быть дороже 
  • Начальная разработка может занять много времени
  • Постоянная поддержка и доработка



Уважаемый читатели хочется услышать ваше мнение относительно вопроса автоматизации.
Возможно весь этот скомканный сумбур это только мое мнение.

пятница, 27 марта 2015 г.

Блог жив!

Уважаемые читатели, после долгого переыва у меня наконец-то появилось немного времени для ведения блога. И в ближайшее время постараюсь наполнить его парочкой интересных постов.

понедельник, 11 ноября 2013 г.

Сравнение скорости работы наиболее популярных языков для автоматизации( обновление, добавлен PHP)

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

В качестве единого теста для всех будет использоваться один сценарий:


  1. Открываем страницу http://yopolis.ru/site/login
  2. Вводим данные для авторизации
  3. Кликаем по кнопке войти
  4. Проверяем что присутствует элемент со ссылкой на профиль пользователя
 Итак код теста:

Java:

package com.yopolis.tests;


import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.seleniumhq.selenium.fluent.FluentWebDriver;
import org.seleniumhq.selenium.fluent.Period;
import static org.hamcrest.Matchers.is;
import static org.junit.Assert.assertThat;
import static org.openqa.selenium.By.*;
import static org.seleniumhq.selenium.fluent.Period.secs;


public class YopolisExample {

    Long start=null;
    WebDriver wd=null;
    FluentWebDriver fwd=null;
    Long stop =null;

    @Before
    public void setUp(){
       start = System.currentTimeMillis();
       wd = new FirefoxDriver();
       fwd = new FluentWebDriver(wd);
    }

    @Test
    public void firstTest(){
        wd.get("http://yopolis.ru/site/login");
        fwd.input(id("LoginForm_username")).sendKeys("****@yandex.ru");
        fwd.input(name("LoginForm[password]")).sendKeys("******");
        fwd.button(name("yt0")).click();
        assertThat(fwd.within(secs(5)).has().link(xpath("//a[contains(@href,'/profile')]")),is(true));

    }

    @After
    public void tearDown(){
        wd.close();
        stop = System.currentTimeMillis();
        System.out.println("That took " + (double)((stop - start)/1000) + " seconds");

    }
}



Ruby:

require('selenium/webdriver')

beginning = Time.now
wd= Selenium::WebDriver.for :firefox
wd.navigate.to "http://yopolis.ru/site/login"
wd.find_element(:id,'LoginForm_username').send_keys "****@yandex.ru"
wd.find_element(:name,'LoginForm[password]').send_keys "******"
wd.find_element(:name,'yt0').click
puts wd.find_element(:xpath,'//a[contains(@href,"/profile")]').displayed?
wd.close
puts "Time elapsed #{Time.now - beginning} seconds"


Python:

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from datetime import datetime

startTime = datetime.now()

driver = webdriver.Firefox()
driver.get("http://yopolis.ru/site/login")
driver.find_element_by_id("LoginForm_username").send_keys("****@yandex.ru")
driver.find_element_by_name("LoginForm[password]").send_keys("******")
driver.find_element_by_name("yt0").click()

wait = WebDriverWait(driver, 10)
element = wait.until(EC.element_to_be_clickable((By.XPATH,'//a[contains(@href,"/profile")]')))
driver.quit()

print(datetime.now()-startTime)



WebDriverJs:

var assert=require('assert');
var webdriver = require('selenium-webdriver'),
    SeleniumServer = require('selenium-webdriver/remote').SeleniumServer;

var server = new SeleniumServer('/Users/aalekseev/selenium-server-standalone-2.37.0.jar', {
    port: 4444
});

server.start();

console.time('test exec');

var driver = new webdriver.Builder().
    usingServer(server.address()).
    withCapabilities(webdriver.Capabilities.firefox()).
    build();

driver.get("http://yopolis.ru/site/login");
driver.findElement(webdriver.By.id("LoginForm_username")).sendKeys("****@yandex.ru");
driver.findElement(webdriver.By.name("LoginForm[password]")).sendKeys("******");
driver.findElement(webdriver.By.name("yt0")).click();
var disp=driver.findElement(webdriver.By.xpath('//a[contains(@href,"/profile")]')).isDisplayed();
assert.ok(disp);

driver.quit().then(function(){
    console.timeEnd('test exec');
});

server.stop();

PHP:
Используется: php-webdriver
$start = time();
 
$capabilities = array(WebDriverCapabilityType::BROWSER_NAME => 'firefox');
$driver = RemoteWebDriver::create('http://localhost:4444/wd/hub', $capabilities);
 
$driver->get("http://yopolis.ru/site/login");
 
$driver->findElement(WebDriverBy::id('LoginForm_username'))->sendKeys("****@yandex.ru");
$driver->findElement(WebDriverBy::name('LoginForm[password]'))->sendKeys("******");
$driver->findElement(WebDriverBy::name('yt0'))->click();
 
try {
echo $driver->findElement(WebDriverBy::xpath('//a[contains(@href,"/profile")]'))->isDisplayed();
} catch (NoSuchElementWebDriverError $e) {
}
 
$driver->close();
 
echo "Time elapsed ".(time()-$start)." seconds";
Результаты: Java: 14 секунд
Ruby: 8 секунд
Python: 7 секунд
JS: 20 секунд
PHP: 9 секунд

пятница, 11 октября 2013 г.

четверг, 12 сентября 2013 г.

Selenium IDE - одно из самых скачиваемых дополнений

25 июля количество загрузок Selenium IDE превысило 10 миллионов !
Пруф письмо:
Hi,

I thought you would like to know that the total Selenium IDE downloads has crossed 10 Million on 25/July/2013. Thanks Patrick for the logs! And thanks to everyone that has contributed to its success.

Cheers,
Samit Badle
Selenium IDE Maintainer
Twitter: @samitbadle
Blog: http://blog.reallysimplethoughts.com/