Игорь Любин - Автотестирование веб-сервиса с ruby и rspec
DESCRIPTION
Доклад на SQAdays-10TRANSCRIPT
![Page 1: Игорь Любин - Автотестирование веб-сервиса с Ruby и Rspec](https://reader035.vdocuments.mx/reader035/viewer/2022062220/558c962cd8b42aeb248b46a1/html5/thumbnails/1.jpg)
1
Автотестированиевеб-сервиса с Ruby и
RspecИгорь Любин
![Page 2: Игорь Любин - Автотестирование веб-сервиса с Ruby и Rspec](https://reader035.vdocuments.mx/reader035/viewer/2022062220/558c962cd8b42aeb248b46a1/html5/thumbnails/2.jpg)
2
Игорь Любин Канд. физ.-мат. наук
Тестировщик с 1.12.2007
SQAdays 3, 5, 8, 9, 10!
О себе
![Page 3: Игорь Любин - Автотестирование веб-сервиса с Ruby и Rspec](https://reader035.vdocuments.mx/reader035/viewer/2022062220/558c962cd8b42aeb248b46a1/html5/thumbnails/3.jpg)
3
undev.ru
![Page 4: Игорь Любин - Автотестирование веб-сервиса с Ruby и Rspec](https://reader035.vdocuments.mx/reader035/viewer/2022062220/558c962cd8b42aeb248b46a1/html5/thumbnails/4.jpg)
4
Рассказать о своей работе На примере автоматизации веб-сервиса Получить обратную связь
Цель доклада
![Page 5: Игорь Любин - Автотестирование веб-сервиса с Ruby и Rspec](https://reader035.vdocuments.mx/reader035/viewer/2022062220/558c962cd8b42aeb248b46a1/html5/thumbnails/5.jpg)
5
UI
![Page 6: Игорь Любин - Автотестирование веб-сервиса с Ruby и Rspec](https://reader035.vdocuments.mx/reader035/viewer/2022062220/558c962cd8b42aeb248b46a1/html5/thumbnails/6.jpg)
6
Data Server
xmlDownloade
rjson Web
Постановка задачи
![Page 7: Игорь Любин - Автотестирование веб-сервиса с Ruby и Rspec](https://reader035.vdocuments.mx/reader035/viewer/2022062220/558c962cd8b42aeb248b46a1/html5/thumbnails/7.jpg)
7
Язык Библиотеки
Драйвер Фреймворк
Автоматизация
Из презентации А. Баранцева
![Page 8: Игорь Любин - Автотестирование веб-сервиса с Ruby и Rspec](https://reader035.vdocuments.mx/reader035/viewer/2022062220/558c962cd8b42aeb248b46a1/html5/thumbnails/8.jpg)
8
RubyWebrick
Iconv
Helpers Rspec
Автоматизация. Что есть?
![Page 9: Игорь Любин - Автотестирование веб-сервиса с Ruby и Rspec](https://reader035.vdocuments.mx/reader035/viewer/2022062220/558c962cd8b42aeb248b46a1/html5/thumbnails/9.jpg)
9
DataServerHelper
xmlDownloader
Helperjson …
Описание тестируемых сервисов
![Page 10: Игорь Любин - Автотестирование веб-сервиса с Ruby и Rspec](https://reader035.vdocuments.mx/reader035/viewer/2022062220/558c962cd8b42aeb248b46a1/html5/thumbnails/10.jpg)
10
DataServerHelper
xmlDownloader
Helperjson …
Запуск web-сервера
@data_server.start
WEBrick::HTTPServer.new(:DocumentRoot=>dir).start
![Page 11: Игорь Любин - Автотестирование веб-сервиса с Ruby и Rspec](https://reader035.vdocuments.mx/reader035/viewer/2022062220/558c962cd8b42aeb248b46a1/html5/thumbnails/11.jpg)
11
DataServerHelper
xmlDownloader
Helperjson …
Подготовка данных
XML JSON
schedule = Schedule.new(Time.now + 1.day)
![Page 12: Игорь Любин - Автотестирование веб-сервиса с Ruby и Rspec](https://reader035.vdocuments.mx/reader035/viewer/2022062220/558c962cd8b42aeb248b46a1/html5/thumbnails/12.jpg)
12
DataServerHelper
xmlDownloader
Helperjson …
Создание расписания
XML
@data_server.create_schedule(schedule)
![Page 13: Игорь Любин - Автотестирование веб-сервиса с Ruby и Rspec](https://reader035.vdocuments.mx/reader035/viewer/2022062220/558c962cd8b42aeb248b46a1/html5/thumbnails/13.jpg)
13
DataServerHelper
xmlDownloader
Helperjson …
Скачивание расписания
act_schedule = @downloader.download_schedule(schedule)
![Page 14: Игорь Любин - Автотестирование веб-сервиса с Ruby и Rspec](https://reader035.vdocuments.mx/reader035/viewer/2022062220/558c962cd8b42aeb248b46a1/html5/thumbnails/14.jpg)
14
DataServerHelper
xmlDownloader
Helperjson …
Проверка
JSON
act_schedule.should == schedule.expected
![Page 15: Игорь Любин - Автотестирование веб-сервиса с Ruby и Rspec](https://reader035.vdocuments.mx/reader035/viewer/2022062220/558c962cd8b42aeb248b46a1/html5/thumbnails/15.jpg)
15
describe "downloader" do
before :all do
@data_server = DataServerHelper.new
@downloader = DownloaderHelper.new
@data_server.start
end
before :each do
@data_server.delete_all_schedules
@downloader.clear_jobs_queue
end
it "download schedule for tomorrow" do
schedule = Schedule.new(Time.now + 1.day)
@data_server.create_schedule(schedule)
act_schedule = @downloader.download_schedule(schedule)
act_schedule.should == schedule.expected
end
after :all do
@data_server.stop
end
end
Rspec
![Page 16: Игорь Любин - Автотестирование веб-сервиса с Ruby и Rspec](https://reader035.vdocuments.mx/reader035/viewer/2022062220/558c962cd8b42aeb248b46a1/html5/thumbnails/16.jpg)
16
describe "downloader" do
before :all do
@data_server = DataServerHelper.new
@downloader = DownloaderHelper.new
@data_server.start
end
before :each do
@data_server.delete_all_schedules
@downloader.clear_jobs_queue
end
it "download schedule for tomorrow" do
schedule = Schedule.new(Time.now + 1.day)
@data_server.create_schedule(schedule)
act_schedule = @downloader.download_schedule(schedule)
act_schedule.should == schedule.expected
end
after :all do
@data_server.stop
end
end
Rspec
![Page 17: Игорь Любин - Автотестирование веб-сервиса с Ruby и Rspec](https://reader035.vdocuments.mx/reader035/viewer/2022062220/558c962cd8b42aeb248b46a1/html5/thumbnails/17.jpg)
17
describe "downloader" do
before :all do
@data_server = DataServerHelper.new
@downloader = DownloaderHelper.new
@data_server.start
end
before :each do
@data_server.delete_all_schedules
@downloader.clear_jobs_queue
end
it "download schedule for tomorrow" do
schedule = Schedule.new(Time.now + 1.day)
@data_server.create_schedule(schedule)
act_schedule = @downloader.download_schedule(schedule)
act_schedule.should == schedule.expected
end
after :all do
@data_server.stop
end
end
Rspec
![Page 18: Игорь Любин - Автотестирование веб-сервиса с Ruby и Rspec](https://reader035.vdocuments.mx/reader035/viewer/2022062220/558c962cd8b42aeb248b46a1/html5/thumbnails/18.jpg)
18
describe "downloader" do
before :all do
@data_server = DataServerHelper.new
@downloader = DownloaderHelper.new
@data_server.start
end
before :each do
@data_server.delete_all_schedules
@downloader.clear_jobs_queue
end
it "download schedule for tomorrow" do
schedule = Schedule.new(Time.now + 1.day)
@data_server.create_schedule(schedule)
act_schedule = @downloader.download_schedule(schedule)
act_schedule.should == schedule.expected
end
after :all do
@data_server.stop
end
end
Rspec
![Page 19: Игорь Любин - Автотестирование веб-сервиса с Ruby и Rspec](https://reader035.vdocuments.mx/reader035/viewer/2022062220/558c962cd8b42aeb248b46a1/html5/thumbnails/19.jpg)
19
$ rspec spec -f doc
downloader
download schedule for today
download schedule for week
not download yesterday schedule
not download schedule after 7th day
download schedule if it was updated
download schedule with different event names
Finished in 120.089 seconds
6 examples, 1 failures
Rspec отчет
![Page 20: Игорь Любин - Автотестирование веб-сервиса с Ruby и Rspec](https://reader035.vdocuments.mx/reader035/viewer/2022062220/558c962cd8b42aeb248b46a1/html5/thumbnails/20.jpg)
20
test
lib
spec
data
log
public
Структура проекта
![Page 21: Игорь Любин - Автотестирование веб-сервиса с Ruby и Rspec](https://reader035.vdocuments.mx/reader035/viewer/2022062220/558c962cd8b42aeb248b46a1/html5/thumbnails/21.jpg)
21
<?xml version="1.0" encoding="windows-1251"?><Grid> <Event>…</Event> <Event>…</Event> <Event>…</Event> <Event>…</Event> <Event>…</Event> <Event>…</Event> …</Grid>
XML расписания
Event
Iconv
![Page 22: Игорь Любин - Автотестирование веб-сервиса с Ruby и Rspec](https://reader035.vdocuments.mx/reader035/viewer/2022062220/558c962cd8b42aeb248b46a1/html5/thumbnails/22.jpg)
22
XML расписания<Event> <ID>33894863</ID> <DayNo> ... </DayNo> <Start>__DAY__ 07:00:00</Start> <Finish>__DAY__ 07:15:00</Finish> <Star>0</Star> <Name>Test Name</Name> <Info id="89724" type="2"> ... </Info> <Flag><ID>4</ID><Name>Инфо</Name></Flag> <Location> <ID> ... </ID> <Type>1</Type> </Location> <Gate> ... <Info>Test Description</Info> ... </Gate> <Type ... >other</Type></Event>
__DAY__
Event
![Page 23: Игорь Любин - Автотестирование веб-сервиса с Ruby и Rspec](https://reader035.vdocuments.mx/reader035/viewer/2022062220/558c962cd8b42aeb248b46a1/html5/thumbnails/23.jpg)
23
[ { "name": "Test Name", "id": "33894863", "beginning": "__DAY__ 07:00:00", "ending": "__DAY__ 07:15:00", "description": "Test Description", "type": "other" }, …]
JSON расписания
Event
![Page 24: Игорь Любин - Автотестирование веб-сервиса с Ruby и Rspec](https://reader035.vdocuments.mx/reader035/viewer/2022062220/558c962cd8b42aeb248b46a1/html5/thumbnails/24.jpg)
24
Данные Тестируем как
name, description текстовые поля
beginning - ending интервал времени
id числовое поле
Тестирование данных
![Page 25: Игорь Любин - Автотестирование веб-сервиса с Ruby и Rspec](https://reader035.vdocuments.mx/reader035/viewer/2022062220/558c962cd8b42aeb248b46a1/html5/thumbnails/25.jpg)
25
Нормальное название Длинное название Стандартные разделители
“ ‘ ` | / \ , ; : & < > ^ * ! ? « » Пустое название Пробелы ЧуВсТвИтЕлЬнОсТь К рЕгИсТрУ Окончания строк
^M, \n, \r Диакритические знаки
àáâãäå Плохие символы
♂ ♠ ♪ Греческий, арабский, китайский Другая кодировка Плохое выражение
“[|]’~<!--@/*$%^&#*/()?>,.*/\-->
Пример. Тестирование name
![Page 26: Игорь Любин - Автотестирование веб-сервиса с Ruby и Rspec](https://reader035.vdocuments.mx/reader035/viewer/2022062220/558c962cd8b42aeb248b46a1/html5/thumbnails/26.jpg)
26
1. Учить язык программирования2. Использовать готовые библиотеки3. Писать обертки4. Отделять данные от тестов5. Не забывать о «тестировании по
выходу»
Финальные тезисы
![Page 27: Игорь Любин - Автотестирование веб-сервиса с Ruby и Rspec](https://reader035.vdocuments.mx/reader035/viewer/2022062220/558c962cd8b42aeb248b46a1/html5/thumbnails/27.jpg)
27
Ruby Вики-учебник http://ru.wikibooks.org/wiki/Ruby Упражнения http://rubymonk.com
Rspec http://kerryb.github.com/iprug-rspec-presentation
Контакты E-mail: [email protected] Skype: igor.lyubin
Спасибо за внимание