Software quality assurance days
20 Международная конференция
по вопросам качества ПО
sqadays.com
Минск. 24–26 ноября 2016
Илья Рогожин
Mediatech. Санкт-Петербург, Россия
Автоматизация тестирования базы на
примере PostgreSQL
Автоматизация тестирования базы на примере PostgreSQL
О себе
• В тестировании 4 года;
• Проект Adsterra.com,
рекламный нетворк;
• 6 типов серверов с базами
данных;
• Более 300 статических
таблиц;
• Более 200 исполняемых
процедур в базе данных;
Автоматизация тестирования базы на примере PostgreSQL
Цели
● Тестировать отдельно (локализовано);
● Быстро находить проблемы;
● Проведения регрессий при высокой
сложности логики работы;
● Unit - тесты;
Автоматизация тестирования базы на примере PostgreSQL
Что такое PgTap
● Это расширение для PostgreSQL;
● В расширении есть большой набор assert
функций;
● Тесты пишутся на SQL или PL/PgSql;
● Результаты прогона тестов выводятся в
формате TAP;
Автоматизация тестирования базы на примере 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 );
Автоматизация тестирования базы на примере 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;
Автоматизация тестирования базы на примере 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$;
Автоматизация тестирования базы на примере PostgreSQL
Различия подходов
Параметры для
сравнения
Scripting-Style xUnit-Style
Простота
Запуск отдельных тестов
Транзакционность
Повторное использование
Отчеты
Автоматизация тестирования базы на примере PostgreSQL
Запуск тестов через psql
Автоматизация тестирования базы на примере PostgreSQL
Запуск тестов через pg_prove
Автоматизация тестирования базы на примере PostgreSQL
Интеграция с CI
● Teamcity plugin "TAP Parser";
● Jenkins plugin;
Автоматизация тестирования базы на примере PostgreSQL
Для других баз данных
● MySQL:
○ mytap;
○ stk-unit;
● Oracle:
○ oratap;
○ utplsql;
Выводы по PgTap
Плюсы:
● Один язык для разработки и тестирования;
● Высокая скорость выполнения;
Минусы:
● Язык для разработки тестов SQL;
● Отчеты (на больших объемах);
● Использование кода для других тестов;
Автоматизация тестирования базы на примере PostgreSQL
Автоматизация тестирования базы на примере 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
Вывод по Gherkin
Плюсы:
● Использование различных языков для
автоматизации;
● Отчетность;
● Повторное использование шагов;
Минусы:
● Скорость выполнения;
Автоматизация тестирования базы на примере PostgreSQL
Полезные ссылки
● pgtap.org
● https://habrahabr.ru/post/209932/
● cucumber.io
Автоматизация тестирования базы на примере PostgreSQL
Автоматизация тестирования базы на примере PostgreSQL
Спасибо за внимание
Мои контакты:
● Telegram: @smallcreep
● Skype: smallcreep1
● E-mail: ilia.rogozhin@gmail.com

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

  • 1.
    Software quality assurancedays 20 Международная конференция по вопросам качества ПО sqadays.com Минск. 24–26 ноября 2016 Илья Рогожин Mediatech. Санкт-Петербург, Россия Автоматизация тестирования базы на примере PostgreSQL
  • 2.
    Автоматизация тестирования базына примере PostgreSQL О себе • В тестировании 4 года; • Проект Adsterra.com, рекламный нетворк; • 6 типов серверов с базами данных; • Более 300 статических таблиц; • Более 200 исполняемых процедур в базе данных;
  • 3.
    Автоматизация тестирования базына примере PostgreSQL Цели ● Тестировать отдельно (локализовано); ● Быстро находить проблемы; ● Проведения регрессий при высокой сложности логики работы; ● Unit - тесты;
  • 4.
    Автоматизация тестирования базына примере PostgreSQL Что такое PgTap ● Это расширение для PostgreSQL; ● В расширении есть большой набор assert функций; ● Тесты пишутся на SQL или PL/PgSql; ● Результаты прогона тестов выводятся в формате TAP;
  • 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.
    Автоматизация тестирования базына примере 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.
    Автоматизация тестирования базына примере 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.
    Автоматизация тестирования базына примере PostgreSQL Различия подходов Параметры для сравнения Scripting-Style xUnit-Style Простота Запуск отдельных тестов Транзакционность Повторное использование Отчеты
  • 9.
    Автоматизация тестирования базына примере PostgreSQL Запуск тестов через psql
  • 10.
    Автоматизация тестирования базына примере PostgreSQL Запуск тестов через pg_prove
  • 11.
    Автоматизация тестирования базына примере PostgreSQL Интеграция с CI ● Teamcity plugin "TAP Parser"; ● Jenkins plugin;
  • 12.
    Автоматизация тестирования базына примере PostgreSQL Для других баз данных ● MySQL: ○ mytap; ○ stk-unit; ● Oracle: ○ oratap; ○ utplsql;
  • 13.
    Выводы по PgTap Плюсы: ●Один язык для разработки и тестирования; ● Высокая скорость выполнения; Минусы: ● Язык для разработки тестов SQL; ● Отчеты (на больших объемах); ● Использование кода для других тестов; Автоматизация тестирования базы на примере PostgreSQL
  • 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.
    Вывод по Gherkin Плюсы: ●Использование различных языков для автоматизации; ● Отчетность; ● Повторное использование шагов; Минусы: ● Скорость выполнения; Автоматизация тестирования базы на примере PostgreSQL
  • 16.
    Полезные ссылки ● pgtap.org ●https://habrahabr.ru/post/209932/ ● cucumber.io Автоматизация тестирования базы на примере PostgreSQL
  • 17.
    Автоматизация тестирования базына примере PostgreSQL Спасибо за внимание Мои контакты: ● Telegram: @smallcreep ● Skype: smallcreep1 ● E-mail: ilia.rogozhin@gmail.com