Суть идеи такова... гонятся авто-тесты в связке 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());
}
}
В итоге получаем вот такого вида отчёт в системе отслеживания ошибок