2009/10/02

11 интереснейших бесплатных онлайн-семинаров по юзабилити и UX от международных специалистов


Сейчас открыта бесплатая регистрация на второй юзабилити-марафон.

Для проведения вебинаров используется приложение GoToWebinar.


Вебинары проводят лучшие специалисты по юзабилити из США, Китая, Австралии, Германии.

Регистрация здесь.

2009/08/10

Дополнения для Firefox в помощь тестировщику - часть 1

1. Firebug

С помощью этого дополнения все необходимые инструменты будут у вас под рукой во время использования браузера. Вы можете редактировать, отлаживать и исследовать CSS, HTML, JavaScript на любой веб-странице.


2. Web Developer Toolbar

Набор утилит, который в сочетании с Firebug составляет незаменимый инструментарий как для веб-разработчика, так и для тестировщика.

3. XSS me

Межсайтовый скриптинг (XSS) - это одна из самых распостраненных уязвимостей веб-приложений на сегодняшний день. Обнаружение XSS уязвимостей на ранних стадиях разработки позволит защитить веб-приложение от опасных атак.

4. SQL Inject Me

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

5. Firesizer

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

2009/08/05

Тест знаний Тестирование ПО - Основы

Случайно нашла очень интересный сервис онлайн тестирования - Quizful.

В нем есть тест знаний по основам тестирования ПО. Правда он пока что не сертификационный, но дает возможность проверить свои теоретические знания и поучаствовать в рейтинге тестировщиков :-)

Я на некоторые вопросы даже ответила неправильно - стыд и позор. Надо подтянуть пробелы в знаниях. В этом тесте очень не хватает практических вопросов. Я думаю, что практика намного важнее в работе тестировщика.

"Суха теория, мой друг, а древо жизни вечно зеленеет". Но такая информация дает хорошие результаты в дальнейшей работе.

Скриншот моих скромных результатов ниже. Советую пройти этот тест.

2009/07/28

Рассылка результатов тестирования при использовании Selenium+TestNG

Если вы для запуска автоматизированных тестов используете связку Selenium+TestNG, то результаты запуска тестов легко рассылать всем заинтересованным лицам автоматически.

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

Достаточно будет просто просматривать отчеты в вашем почтовом клиенте. Запуск автоматизированных тестов можно настроить с помощью шедулера. Об этом я расскажу позже.

Результаты прогона автоматизированных тестов хранятся в файле /test-output/emailable-report.html. Этот отчет предназначен специально для рассылки по электронной почте всем участникам процесса.

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

Скриншоты в рассматриваемом примере во время прогона автоматизированных тестов помещаются в папку /test-output/screenshots и имеют довольно-таки информативное название.

Например, DailyPack.Administrator_otdelov.Admin_Otdel_5_Clients_
Sorting.testDeleteClients_07_01_2009_17_58.png


DailyPack.Administrator_otdelov – название пакета

Admin_Otdel_5_Clients_Sorting – название класса

testDeleteClients – название метода

07_01_2009_17_58 – время, когда скриншот был получен

Для рассылки результатов я использую JavaMail 1.4.2. Это набор классов для работы с почтовой системой.

Вот так выглядит полученный отчет в The Bat!:



Собственно, код класса для рассылки ниже:


import java.text.SimpleDateFormat;
import java.util.*;
import java.io.*;
import javax.activation.DataHandler;
import javax.activation.FileDataSource;
import javax.mail.*;
import javax.mail.internet.*;
import java.util.Calendar;

public final class DemoMailer {
public static void main( String... aArguments ) throws IOException{
Emailer emailer = new Emailer();

      // Получаем текущую дату

      Calendar c = Calendar.getInstance();

        SimpleDateFormat sdf = new SimpleDateFormat("MM.dd.yyyy kk:mm");

        // от кого будет письмо

        String from = "tester@qa-testlab.com";

        // получатель 1

        String to1 = "tester2@qa-testlab.com";  

        // получатель 2

        String to2 = "developer@qa-testlab.com";

// получатель 3

        String to3 = "pm@qa-testlab.com";

// результаты прогона тестов для какого проекта

        String project = "Book Shop";

        // путь к отчету emailable-report.html

        String path1 = "C:\\B2B_Pack\\test-output\\emailable-report.html";  

// путь к скриншотам

        String path2 = "C:\\B2B_Pack\\test-output\\screenshots";

    emailer.sendEmail(

      from, to1, to2, to3,

       "Test Results for " + project + " " + sdf.format(c.getTime()), path1, path2);

   }

public void sendEmail(

    String aFromEmailAddr, String aToEmailAddr, String aToEmailAddr2, String aToEmailAddr3,

    String aSubject, String attach, String screenpath

  ) throws IOException{

Session session = Session.getDefaultInstance( fMailServerConfig, null );

    MimeMessage message = new MimeMessage( session );

try {

      // добавляем получателя 1

      message.addRecipient(

        Message.RecipientType.TO, new InternetAddress(aToEmailAddr)

      );

     // добавляем получателя 2

      message.addRecipient(

      Message.RecipientType.TO, new InternetAddress(aToEmailAddr2)

      );

// добавляем получателя 3

      message.addRecipient(

      Message.RecipientType.TO, new InternetAddress(aToEmailAddr3)

      );

      // тема письма
message.setSubject( aSubject );

// от кого письмо
message.setFrom(new InternetAddress(aFromEmailAddr));
MimeBodyPart attachFilePart = new MimeBodyPart();
FileDataSource fds = new FileDataSource(attach);
attachFilePart.setDataHandler(new DataHandler(fds));
attachFilePart.setFileName(fds.getName());
MimeBodyPart textPart = new MimeBodyPart();
textPart.setContent(attachFilePart, "text/html");
Multipart mp = new MimeMultipart();
mp.addBodyPart(attachFilePart);
// аттачим все скриншоты
File dir = new File(screenpath);
String[] children = dir.list();
if (children == null) {
System.out.println("dir does not exist");
} else {
for (int i=0; i                                                                                                                           
String filename = children[i];
System.out.println("Adding: " + filename);
attachFilePart = new MimeBodyPart();
fds = new FileDataSource(screenpath+"\\"+filename);
attachFilePart.setDataHandler(new DataHandler(fds));
attachFilePart.setFileName(fds.getName());
mp.addBodyPart(attachFilePart);
}
}
message.setContent(mp);
Transport.send( message );

      System.out.println("Mail was sent to " + aToEmailAddr + ", " + aToEmailAddr2 + ", " + aToEmailAddr3);
}
catch (MessagingException ex){
System.err.println("Cannot send email. " + ex);
}
}

public static void refreshConfig() {
fMailServerConfig.clear();
fetchConfig();
}

// PRIVATE //
private static Properties fMailServerConfig = new Properties();
static {
fetchConfig();
}

  private static void fetchConfig() {
InputStream input = null;
try {
// конфигурационный файл
input = new FileInputStream("C:\\B2B_Pack\\mail.txt" );
fMailServerConfig.load( input );
}

    catch ( IOException ex ){
System.err.println("Cannot open and load mail server properties file.");
}

    finally {
try {
if ( input != null ) input.close();
}
catch ( IOException ex ){
System.err.println( "Cannot close mail server properties file." );
}
}
}
}                   


Конфигурационный файл для javax.mail (пример)



# Configuration file for javax.mail

# If a value for an item is not provided, then
# system defaults will be used. These items can
# also be set in code.
# Host whose mail services will be used
# (Default value : localhost)
mail.host=zoo. qa-testlab.com
# Return address to appear on emails
# (Default value : username@host)
#mail.from=tester@ qa-testlab.com
# Other possible items include:
#mail.user=irinach@ qa-testlab.com
# mail.store.protocol=
#mail.transport.protocol=POP3
mail.smtp.host=zoo.web100.com.ua
# mail.smtp.user=
# mail.debug=

2009/05/26

Проверка соответствия реализованного UI макетам

Часто возникает задача по проверке соответствия реализованного UI макетам, сделанных дизайнером.

Здесь проверяется абсолютно все - цвета, шрифты, выравнивание, размеры элементов.

Хочу предложить несколько полезных вещей, которые облегчат эту задачу.

1) Электронная линейка - с ее помощью можно получить точную информацию о размере фрагмента любого приложения Windows, работающего в оконном режиме.



2) Пипетка -
просто продвинутая пипетка, ни больше, ни меньше. С её помощью можно узнать всю подноготную пикселя, на который в данный момент указывает курсор. Основное отличие от похожих программ в том, что этот инструмент работает со всем, что в данный момент находится на рабочем столе.

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

2009/02/18

А сколько тестировщиков в странах СНГ?

По данным службы занятости США 349 140 людей тестировали программное обеспечение в штатах в 2007 году.

Эти люди тестируют операционные системы, компиляторы, софт для медицины, производства, ПО для военных и ученых, ПО для полетов в атмосфере и космосе.......... и много чего еще.

Интересно, сколько у людей заняты у нас этим занятием.

Я даже не могу представить :-)

2009/02/16

7 вещей, которые необходимо узнать перед началом автоматизации

1. Что такое автоматизированное тестирование?

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

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

Автоматизируйте тестовые сценарии, используемые в регрессионном тестировании.

2) Вы тестируете веб-приложение, которое могут использовать тысячи пользователей одновременно? Как вы будете тестировать такое веб-приложение? Как вы будете создавать такое количество пользователей и эмулировать их работу? Это очень сложная задача, если ее делать вручную.

Автоматизируйте нагрузочное тестирование по созданию виртуальных пользователей для проверки запаса производительности тестируемого приложения.

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

Автоматизируйте тестирование, когда GUI уже практически стабилен, но происходит еще много функциональных изменений.

4) Для изучения процессов автоматизиции нужно время
У вас должны быть хорошие навыки программирования.
5) Инструменты автоматизации стоят довольно дорого.
Даже если вы используете опенсорсные инструменты - поддержка и написание тестов дорогое удовольствие.

6) Не автоматизируйте нестабильный функционал.

Зря потратите время.
7) Не пытайтесь покрыть приложение функциональными тестами на 100%