Фокус на тестирование
Paralect QA BarCamp
Uladzimir Kryvenka
Май 2013
Обо мне
Владимир Кривенко
Инструменты: Selenium, Coded UI Test
Один из основателей:Пишу блог :
В тестировании 6+ лет
Автор портала:
Автоматизацией занимаюсь 3+ года
Это я:
Работаю:
Head of QA в Paralect
Опыт:
План
• Введение в MongoDB
• Особенности при тестировании
• Рассмотрим в деле
• Инструменты
Определение
Документо-ориентированная база данных с
открытым исходным кодом, не требующая
описания схемы таблиц. Написана на языке
C++. Название происходит «humongous —
огромный. Управляет наборами JSON-
подобных документов, хранимых в двоичном
виде в формате BSON.
Основные возможности
• Документо-ориентированное хранилище, нет схем
данных
• Гибкий язык (JSON) для формирования запросов
• Полная поддержка индексов
• Профилирование запросов
• Эффективное хранение данных больших объемов
• Репликация и поддержка отказоустойчивости
• Профилирование, административный интерфейс,
серверные функции, Map/Reduce
Термины MongoDB vs РСУБД
• База данных – База данных
• Таблица – Коллекция
• Индекс – Индекс
• Строка – Документ
• Join – Embedding and Linking
• Primary key -_id field
• Group by – Aggregation
Характерные особенности
• Денормализация данных
• Избыточность данных
• Распределение данных
• Не используется SQL
• Контроль данных из приложения, а не из
базы
Типы данных
• String
• Integer
• Double
• Byte array
• Boolean
• Null
• BSON Object
Сервер & Консоль
• mongod.exe – сервер базы данных
(основное приложение)
> mongod --dbpath=”D:db1” --port=27017
• mongo.exe – консоль управления базой
данных
> mongo --port=27017 admin
Авторизация в MongoDB
> db.addUser(‘user’, ‘pass’)
{“n” : 0, “connectionId” : 16, “err” “ null, “ok” : 1}
{ "user" : "user",
"readOnly" : false,
"pwd" : "e0c4a7b97d4db31f5014e9694e567d6b",
"_id" : ObjectId("51a32a72c9aa9a049d203c37")
}
> mongo --port=27017 --username=user --password= pass test
Пример коллекции
{
"_id" : "b8b589-8c96-4f1e-ab51-0aa7946b4c",
"FirstName" : "test",
"LastName" : "test",
"MiddleName" : null,
"UserName" : "ttest151",
"Email" : "aasdf@asdasd.aaa",
"Notes" : null,
"IsArchived" : false,
}
Примеры. Вставка данных
SQL:
INSERT INTO db1.students SET fname = ‘Johnny’;
MongoDB:
> db.students.insert({fname:” Johnny”})
Примеры. Запросы
SQL:
SELECT * FROM students
MongoDB:
> db.students.find()
SQL:
SELECT * FROM students WHERE SchoolId =’5179b17c’
MongoDB:
> db.students.find({"SchoolId":"51710cb990bd7515ec79b17c"})
Примеры. Запросы
SQL:
SELECT id, FullName FROM students WHERE SchoolId = 517115ec79b17c’
MongoDB:
> db.students.find({"SchoolId":"517115ec79b17c"},{_id:1, FullName:2 })
Операторы условий
• $gt — больше, чем
• $lt — меньше, чем
• $gte — больше, чем или равно
• $lte — меньше, чем или равно
> db.students.find({Age:{$lte:18}})
> db.students.find({Age:{$gt:18}})
Операторы
• $exists – используется для проверки наличия или
отсутствия поля.
• $type – вернет все поля с заданным типом.
• $where – передача JS
• $in & $nin - выборка по конкретным значениям
> db.students.find({referrals: {$exists: false}})
> db.teachers.find({ student_in_class: { $in : [20, 30, 40]}});
Логические операторы
• $or
• $and
• $not
• $nor
> db.students.find({$and:[{"SchoolId":"51710c17c"},{"FName": "Dave Gan" }]})
> db.сlasses.find( { total: { $not: { $gt: 5 } } } )
Sort, limit, skip
> db.students.find().sort({Age: 1})
> db.students.find().sort({FullName: -1, Age: 1})
> db.students.find().limit(3);
> db.students.find({"Age":{$gt:9}} ).limit(5).skip(5).sort({"FName":1} )
Пример. Обновление
SQL:
UPDATE students SET fname = “Johnny” WHERE lname = “Jacobs”
MongoDB:
> db.students.update({fname:” Johnny”}, {$set:{lname:” Jacobs”}})
Удаление данных
SQL:
DELETE FROM students WHERE ID=1
DELETE FROM students WHERE fname=”Johnny”
MongoDB:
> db.students.remove ({_id:ObjectID(“1”)})
> db.students.remove({fname:”Johnny”})
Инструменты управления
• Robomongo
• MongoVUE
• Opricot
• Database Master
• MongoVision
• …
Robomongo
Robomongo
• Shell-centric
• Использует официальный MongoDB движок
• Mac, Win, Linux
• Tree mode, text mode
• Бесплатный
MongoVUE
MongoVUE
• Лог shell – команд
• «ключ:значение» для поиска
• Ограниченная бесплатная версия
Примеры поиска:
{"Title" : "test"}
{"username": new RegExp("^a")} или то же самое
{"Title":/se/}
А теперь ваши
-ы
Пообщаемся? 
http://bugscatcher.net/
u.kryvenka@gmail.com
u.kryvenka

MongoDB. Фокус на тестирование