Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Автоматизация тестирования базы на примере PostgreSQL

693 views

Published on

Доклад Ильи Рогожина на конференции SQA Days-20. 24-26 ноября 2016. Минск
www.sqadays.com

Published in: Education
  • Be the first to comment

  • Be the first to like this

Автоматизация тестирования базы на примере PostgreSQL

  1. 1. Software quality assurance days 20 Международная конференция по вопросам качества ПО sqadays.com Минск. 24–26 ноября 2016 Илья Рогожин Mediatech. Санкт-Петербург, Россия Автоматизация тестирования базы на примере PostgreSQL
  2. 2. Автоматизация тестирования базы на примере PostgreSQL О себе • В тестировании 4 года; • Проект Adsterra.com, рекламный нетворк; • 6 типов серверов с базами данных; • Более 300 статических таблиц; • Более 200 исполняемых процедур в базе данных;
  3. 3. Автоматизация тестирования базы на примере PostgreSQL Цели ● Тестировать отдельно (локализовано); ● Быстро находить проблемы; ● Проведения регрессий при высокой сложности логики работы; ● Unit - тесты;
  4. 4. Автоматизация тестирования базы на примере PostgreSQL Что такое PgTap ● Это расширение для PostgreSQL; ● В расширении есть большой набор assert функций; ● Тесты пишутся на SQL или PL/PgSql; ● Результаты прогона тестов выводятся в формате TAP;
  5. 5. Автоматизация тестирования базы на примере PostgreSQL Основные функции PgTap ● has_table( :schema, :table, :description ); ● tables_are( :schema, :tables, :description ); ● columns_are( :schema, :table, :columns, :description ); ● has_function( :schema, :function, :args, :description ); ● results_eq( :sql, :sql, :description );
  6. 6. Автоматизация тестирования базы на примере PostgreSQL Scripting-Style тест BEGIN; SELECT plan( 5 + 3 ); SELECT has_table(‘public', 'members'); SELECT has_table('public', 'logs'); SELECT columns_are('public', 'members', ARRAY['id', 'name', 'type']); SELECT columns_are('public', 'logs', ARRAY['id', 'member_id', 'functions', 'data']); SELECT has_function('calculate_percent', ARRAY['text', 'integer']); -- 3 i tests/test_function_calculate_percent.sql SELECT * FROM finish(); ROLLBACK;
  7. 7. Автоматизация тестирования базы на примере PostgreSQL xUnit-Style тест CREATE OR REPLACE FUNCTION test.test_schema() RETURNS SETOF text LANGUAGE 'plpgsql' AS $function$ BEGIN RETURN NEXT tables_are( 'public', ARRAY['members', 'logs']); RETURN NEXT columns_are( 'public', 'members', ARRAY['id', 'name', 'type'] ); RETURN NEXT columns_are( 'public', 'logs', ARRAY['id', 'member_id', 'functions', 'data'] ); RETURN NEXT has_function( 'calculate_percent', ARRAY['text', 'integer']); END; $function$;
  8. 8. Автоматизация тестирования базы на примере PostgreSQL Различия подходов Параметры для сравнения Scripting-Style xUnit-Style Простота Запуск отдельных тестов Транзакционность Повторное использование Отчеты
  9. 9. Автоматизация тестирования базы на примере PostgreSQL Запуск тестов через psql
  10. 10. Автоматизация тестирования базы на примере PostgreSQL Запуск тестов через pg_prove
  11. 11. Автоматизация тестирования базы на примере PostgreSQL Интеграция с CI ● Teamcity plugin "TAP Parser"; ● Jenkins plugin;
  12. 12. Автоматизация тестирования базы на примере PostgreSQL Для других баз данных ● MySQL: ○ mytap; ○ stk-unit; ● Oracle: ○ oratap; ○ utplsql;
  13. 13. Выводы по PgTap Плюсы: ● Один язык для разработки и тестирования; ● Высокая скорость выполнения; Минусы: ● Язык для разработки тестов SQL; ● Отчеты (на больших объемах); ● Использование кода для других тестов; Автоматизация тестирования базы на примере PostgreSQL
  14. 14. Автоматизация тестирования базы на примере PostgreSQL In order to add user to table “test_user.users” As a database administrator I want call function “add_user” in schema “test_user” with name user as parameter Background: Given I am administrator database Scenario: Check the function “add_user ” adds a user into a table “test_user.users” Given Add to test_user.users table rows: | user_name | | test | When Call function test_user.add_user with parameters: | user_name | | test2 test2 | Then Table test_user.users have rows: | user_name | | test | | test2 test2 | Пример на Gherkin
  15. 15. Вывод по Gherkin Плюсы: ● Использование различных языков для автоматизации; ● Отчетность; ● Повторное использование шагов; Минусы: ● Скорость выполнения; Автоматизация тестирования базы на примере PostgreSQL
  16. 16. Полезные ссылки ● pgtap.org ● https://habrahabr.ru/post/209932/ ● cucumber.io Автоматизация тестирования базы на примере PostgreSQL
  17. 17. Автоматизация тестирования базы на примере PostgreSQL Спасибо за внимание Мои контакты: ● Telegram: @smallcreep ● Skype: smallcreep1 ● E-mail: ilia.rogozhin@gmail.com

×