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

пятница, 6 августа 2010 г.

Все когда нибудь ошибаются. Selenium IDE

Фукнция storeValue

Selenium IDE записал так
        ...
        $rdcategory = $this->getValue("name");
        ...
        $this->click("link=" + rdcategory);
        $this->waitForPageToLoad("30000");
        try {
            $this->assertEquals("Номер на AUTO.RU - Категория \"" + rdcategory + "\"", $this->getTitle());
        } catch (PHPUnit_Framework_AssertionFailedError $e) {
            array_push($this->verificationErrors, $e->toString());
        }
Но при запуске этого теста  выдавалась ошибка
verifytitle::testverifytitle()
PHPUnit_Framework_Exception: Response from Selenium RC server for testComplete().
ERROR: Element 0 not found.
H:\NetBeansProjects\nomer\verifytitle.php:89

Full output can be found in Output window.
Решил таким образом
        $this->click("link=$rdcategory");
        $this->waitForPageToLoad("30000");
        try {
            $this->assertEquals("Номер на AUTO.RU - Категория \"$rdcategory\"", $this->getTitle());
        } catch (PHPUnit_Framework_AssertionFailedError $e) {
            array_push($this->verificationErrors, $e->toString());

Функция verifyLocation

Selenium IDE пишет так
        try {
           $this->assertTrue((bool) preg_match('/^[\s\S]*\/map\/#lat=55\.755786&lng=37\.617633&zoom=10&type=new&date=today$/', $this->getLocation()););
        } catch (PHPUnit_Framework_AssertionFailedError $e) {
            array_push($this->verificationErrors, $e->toString());
        }
Из-за );) само собой ничего не работает -> решение очевидно :)
        try {
            $this->assertTrue((bool) preg_match('/^[\s\S]*\/map\/#lat=55\.755786&lng=37\.617633&zoom=10&type=new&date=today$/', $this->getLocation()));
        } catch (PHPUnit_Framework_AssertionFailedError $e) {
            array_push($this->verificationErrors, $e->toString());
        }
U r welcome!

суббота, 5 июня 2010 г.

Автоматическое занесение отчётов в BTS при нахождении автотестами ошибок

Немного потыкав по клавишам всё же воплотил в жизнь идею с автоматическим занесением отчётов об ошибках в багтрекинговую систему, в моём случае это mantis.

Суть идеи такова... гонятся авто-тесты в связке JUnit + Selenium RC, которые в случае нахождения ошибки автоматом создают отчёты об ошибка в багтрекере, как Вам? :)

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

Итак.... гоним первый тест
package seleniumtests;

import com.thoughtworks.selenium.*;
import java.awt.AWTException;
import java.awt.Dimension;
import java.awt.Rectangle;
import java.awt.Robot;
import java.awt.Toolkit;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.text.SimpleDateFormat;
import javax.imageio.ImageIO;

/**
 *
 * @author makeenkov
 */
public class googletest extends SeleneseTestCase {

    public static String what;
    public static String filename;
    String time = new SimpleDateFormat("dd.MM.yyyy_HH.mm.SS").format(new java.util.Date());

    void recordStep(String name) throws AWTException, IOException {
        File screenshot = new File(new File("."), name + ".png");
        Dimension screenDim = Toolkit.getDefaultToolkit().getScreenSize();
        BufferedImage image = new Robot().createScreenCapture(new Rectangle(0, 0, screenDim.width, screenDim.height));
        try {
            ImageIO.write(image, "png", screenshot);
        } catch (IOException ignore) {
            ignore.printStackTrace();
        }
    }

    @Override
    public void setUp() {
        selenium = new DefaultSelenium("0.0.0.0", 4444, "*firefox", "http://www.google.ru/");
        selenium.start();
    }

    public void test() throws Exception {
        System.out.println("Итак начнём: " + time);
        selenium.open("http://www.google.ru/");
        selenium.waitForPageToLoad("30000");
        selenium.selectWindow("Google");
        selenium.type("q", "black and white");
        selenium.click("btnG");
        selenium.waitForPageToLoad("30000");
        if (selenium.isTextPresent("Расходные материалы для лазерных принтеров") && selenium.isTextPresent("blacknwhite.ru") && selenium.isTextPresent("Картриджи по оптовым ценам: 589-49-04 Расходные материалы для лазерных принтеров.")) {
            System.out.println("Сайт в индексе в топ-5");
        } else {
            System.out.println("Сайт выпал из индекса или из топ-5");
            selenium.windowFocus();             //Gives focus to the currently selected window
            selenium.windowMaximize();           //Resize currently selected window to take up the entire screen
            recordStep("индекс_топ-5_" + time);
            what = "Сайт выпал из индекса или из топ-5" + time;
            filename = "индекс_топ-5_" + time + ".png";
        }
        selenium.close();
        selenium.stop();
        System.out.println("Конец: " + new SimpleDateFormat("dd.MM.yyyy HH.mm.SS").format(new java.util.Date()));
    }
}
который в случае ошибки на выходе даёт нам скриншот и переменные содержащие суть ошибки.
Этот класс вызывается из второго класса
package seleniumtests;

import com.thoughtworks.selenium.*;
import junit.framework.Test;
import junit.framework.TestSuite;

/**
 *
 * @author makeenkov
 */
public class obts extends SeleneseTestCase {

//    googletest gt = new googletest();

    @Override
    public void setUp() {
        selenium = new DefaultSelenium("0.0.0.0", 4444, "*firefox", "http://www.bugtrack-online.com/");
        selenium.start();
    }
   
    public void test() throws Exception {
        System.out.println(googletest.what);
        System.out.println(googletest.filename);
        if (googletest.what == null) {
            System.out.println("Сайт в индексе в топ-5");
        } else {
            selenium.open("/login_page.php");
            selenium.waitForPageToLoad("30000");
            selenium.type("username", "йцукен");
            selenium.type("password", "123456");
            selenium.click("//input[@value='Войти в систему']");
            selenium.waitForPageToLoad("30000");
            selenium.click("link=Online Bug Tracking System");
            selenium.waitForPageToLoad("30000");
            if (selenium.isTextPresent("По всем вопросам пишем в этот отчёт...")) {
            } else {
                selenium.select("project_id", "label=Online Bug Tracking System");
                selenium.waitForPageToLoad("30000");
                selenium.click("//input[@value='Переключиться']");
                selenium.waitForPageToLoad("30000");
            }
            selenium.click("link=создать отчет");
            selenium.waitForPageToLoad("30000");
            selenium.select("category", "label=Категории 1");
            selenium.select("reproducibility", "label=всегда");
            selenium.select("severity", "label=значительная");
            selenium.type("summary", "summary="+googletest.what);
            selenium.type("description", "description="+googletest.what);
            selenium.type("file", "D:\\NetBeansProjects\\seleniumtests\\"+googletest.filename);
            selenium.click("//input[@value='Создать отчет']");
            selenium.waitForPageToLoad("30000");
        }
        selenium.close();
        selenium.stop();
    }

    public static Test googletest() {
        return (Test) new TestSuite(googletest.class);
    }

    public static Test obts2() {
        return (Test) new TestSuite(obts.class);
    }

    public static void main(String args[]) {
        junit.textui.TestRunner.run(googletest());
        junit.textui.TestRunner.run(obts2());
    }
}
который в свою очередь вытягивает переменные и скриншот, а дальше создаёт на основе полученных данных отчёт в багтрекинговой системе.

В итоге получаем вот такого вида отчёт в системе отслеживания ошибок

пятница, 4 июня 2010 г.

Создание скриншотов в случае нахождения тестами ошибок

С недавних пор пишу тесты на java для связки JUnit + Selenium RC.

В какой-то момент появилась идея заносить отчёты в систему отслеживания ошибок прямо из тестов... но прикинув пока решил, что очень громоздко получается :)


И вот во время прикидывания наткнулся на интересный кусочек кода, создающий скриншоты и сохраняющий их в файлы...
void recordStep(String name) throws AWTException {
    File screenshot = new File(new File("."), name + ".png");
    Dimension screenDim = Toolkit.getDefaultToolkit().getScreenSize();
    BufferedImage image = new Robot().createScreenCapture(new Rectangle(0, 0, screenDim.width, screenDim.height));
    try {
        ImageIO.write(image, "png", screenshot);
    } catch (IOException ignore) {
        ignore.printStackTrace();
    }
}
Объяснять как работает этот метод не буду, т.к. во-первых, многие и сами понимают, а во-вторых, это сделали лучше меня там, где я этот код нашёл:
Здесь все очень просто. В качестве параметра мы передаем имя файла для скриншота.
Потом:
-объявляем файл, в качестве директории я использую здесь текущую( можно сделать в качестве параметра).
-получаем размеры скриншота.
-в BufferedImage помещаем скриншот, сделанный с помощью возможностей класса Robot.
- и наконец - создаем(помещаем) наш скриншот в сам png-файл.
И вот такое чудо получается:
import com.thoughtworks.selenium.*;
import java.awt.AWTException;
import java.awt.Dimension;
import java.awt.Rectangle;
import java.awt.Robot;
import java.awt.Toolkit;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.text.SimpleDateFormat;
import javax.imageio.ImageIO;
import junit.framework.Test;
import junit.framework.TestSuite;
/**
 *
 * @author makeenkov
 */
public class bnwintop extends SeleneseTestCase {
    String time = new SimpleDateFormat("dd.MM.yyyy HH.mm.SS").format(new java.util.Date());
    void recordStep(String name) throws AWTException {
        File screenshot = new File(new File("."), name + ".png");
        Dimension screenDim = Toolkit.getDefaultToolkit().getScreenSize();
        BufferedImage image = new Robot().createScreenCapture(new Rectangle(0, 0, screenDim.width, screenDim.height));
        try {
            ImageIO.write(image, "png", screenshot);
        } catch (IOException ignore) {
        ignore.printStackTrace();
        }
    }
    @Override
    public void setUp() {
        selenium = new DefaultSelenium("localhost", 4444, "*opera", "http://www.google.com");
        selenium.start();
    }
    public void test() throws Exception {
        System.out.println("Итак начнём: " + time);
        selenium.open("/");
        selenium.waitForPageToLoad("30000");
        selenium.type("q", "black and white");
        selenium.click("btnG");
        selenium.waitForPageToLoad("30000");
        if (selenium.isTextPresent("Расходные материалы для лазерных принтеров") && selenium.isTextPresent("blacknwhite.ru") && selenium.isTextPresent("Картриджи по оптовым ценам: 589-49-04 Расходные материалы для лазерных принтеров.")) {
            System.out.println("Сайт в индексе в топ-5");
        } else {
            System.out.println("Сайт выпал из индекса или из топ-5");
            selenium.windowFocus();             //Gives focus to the currently selected window
            selenium.windowMaximize();           //Resize currently selected window to take up the entire screen
            recordStep("индекс_топ-5_" + time);
        }
        selenium.close();
        selenium.stop();
        System.out.println("Конец: " + new SimpleDateFormat("dd.MM.yyyy HH.mm.SS").format(new java.util.Date()));
    }
    public static Test EnterGoogle() {
        return (Test) new TestSuite(bnwintop.class);
    }
    public static void main(String args[]) {
        junit.textui.TestRunner.run(EnterGoogle());
    }
}
Этот тест контролирует нахождение сайта в топ-5 googl'а и в случае ошибки делает скриншот с участниками топ-5, собственно вот, файл индекс_топ-5_05.06.2010 16.50.155.png


Может быть не всегда применимо, но мне нравится :) постараюсь развить идею с автоматическим занесением отчётов, тогда и отпишусь....

вторник, 23 марта 2010 г.

Первые шаги недогуру. Автоматизированное тестирование

Ну вот, я руководитель отдела тестирования... И что? Ну конечно же первые трудности.

Группа автоматизированного тестирования...

До недавнего времени, все мои знания об автоматизации и подходах была сведена к изучению Selenium'а на уровне Selenium IDE :) и естественно встретив группу автоматизированного тестирования, даже хорошо отлаженную, я бы был удивлён... Но, само собой, откуда взяться отлаженной, на вот Серёженька, возьми то, что есть и будь добр наладь.

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

Также интересный и думаю многим знакомый момент, группа вроде бы как-то работает и даёт какие-то результаты, но если человек варящейся в этой каше как-то сможет понять что к чему и какие результаты есть, то руководству необходимы цифры, отчёты, диаграммы... а как построить диаграмму по работе группы работающий "не понятно с какой целью, как, в какой последовательности и главное Зачем?"...

Таким образом среди первых задач в работе с группой автоматизации понять Зачем?, на основания "зачема" определится с целями и тогда уже попытаться построить работу и выдать первые результаты в том числе и отчёты, диаграммы и прочее...