1 / 106

Тестируем SQL Server код с tSQLt

Тестируем SQL Server код с tSQLt. SQA Days #25 Белковский Никита. Обо мне. Никита Белковский QA Engineer в JSC Arcadia Inc nikita.belkovskiy@arcadia.spb.ru 5 лет в QA/Testing 3 года в Аркадии. Контекст. Контекст. ETL. Src #1. ETL. ETL. SP. Src #. ETL. SQL Server.

mauricef
Download Presentation

Тестируем SQL Server код с tSQLt

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Тестируем SQL Server код с tSQLt SQA Days #25 БелковскийНикита

  2. Обо мне НикитаБелковский QA Engineer в JSC Arcadia Inc nikita.belkovskiy@arcadia.spb.ru 5 лет в QA/Testing 3 года в Аркадии

  3. Контекст

  4. Контекст ETL Src#1 ETL ETL SP Src#... ETL SQL Server API ETL Src#N

  5. Выбор подхода

  6. Зачем тестировать код БД (вообще)?

  7. Автотесты VS. ручные тесты Облегченный регресс Кто вообще делает ручное unit-тестирование?

  8. Автотесты VS. ручные тесты Тесты как вспомогательная документация

  9. Автотесты VS. ручные тесты Никаких спонтанных мержей (CI)

  10. SQL-Powered VS. non-SQL-Powered • Не требуютсядополнительные тулы • Тесты независимы от остального кода приложения

  11. SQL-Powered VS. non-SQL-Powered • Не требуется привлечение программистов • Легче применятьfake’и и assertion’ы

  12. SQL-Powered VS. non-SQL-Powered НО: требуется установка доп. объектов в базу

  13. Альтернативы

  14. T-SQL Powered: даты

  15. T-SQL Powered: возможности

  16. T-SQL Powered: прочее

  17. T-SQL Powered: Google trends (5 лет)

  18. Non-T-SQL-Powered

  19. Non-T-SQL-Powered

  20. Non-T-SQL-Powered

  21. Non-T-SQL-Powered: Google trends (5 лет)

  22. Об инструменте

  23. tSQLt Unit-testing framework Семейство xUnit SQL Server 2005 SP2+ Реализован на T-SQL + CLR Тесты пишутся на T-SQL https://tsqlt.org/

  24. Лицензия Open source Apache 2.0 license https://github.com/tSQLt-org/tsqlt

  25. Механика работы

  26. Механика работы RunAll

  27. Вывод данных

  28. Вывод данных

  29. Вывод данных

  30. Вывод данных

  31. Установка

  32. Установка • Активировать CLRs на сервере • Выполнить скрипт tSQLt.class.sql Все: создаем тестклассы, пишем тесткейсы

  33. Возможности/примеры

  34. Пример #1: CsvSql CSV Query Warehouse

  35. Result set

  36. Содержимое БД COUNT(*)

  37. Запрос SELECT COUNT(*), ... FROM dbo.Trial LEFT JOIN dbo.Clinic ON Trial.ID = Clinic.TrialID WHERE Trial.Name = @trialName GROUP BY ...

  38. Запрос SELECT COUNT(*), ... FROM dbo.Trial LEFT JOIN dbo.Clinic ON Trial.ID = Clinic.TrialID WHERE Trial.Name = @trialName GROUP BY ...

  39. Запрос SELECT COUNT(*), ... FROM dbo.Trial LEFT JOIN dbo.Clinic ON Trial.ID = Clinic.TrialID WHERE Trial.Name = @trialName GROUP BY ...

  40. Запрос SELECT COUNT(*), ... FROM dbo.Trial LEFT JOIN dbo.Clinic ON Trial.ID = Clinic.TrialID WHERE Trial.Name = @trialName GROUP BY ...

  41. FakeTable EXECtSQLt.FakeTable 'dbo.Trial'; EXECtSQLt.FakeTable 'dbo.Clinic';

  42. “Cannot insert...” problem Msg 515, Level 16, State 2, Line 4 Cannot insert the value NULL into column 'NNNNNNN', table 'DB.dbo.Trial'; column does not allow nulls. INSERT fails. The statement has been terminated.

  43. Inserts INSERT INTO dbo.Trial ([ID], [Name]) VALUES (1, 'Valerian');

  44. Inserts INSERT INTO dbo.Clinic ([ID], [TrialID], [Name]) VALUES (1, 1, 'Clinic1'), (2, 1, 'Clinic2');

  45. Заполняем Actual DECLARE @sqlStatement NVARCHAR(MAX) = (SELECT… CREATE TABLE actual ([TrialID], ...); INSERT INTO actual EXEC sp_executesql ...

  46. Заполняем Actual DECLARE @sqlStatement NVARCHAR(MAX) = (SELECT… CREATE TABLE actual ([TrialID], ...); INSERT INTOactual EXECsp_executesql @sqlStatement, ...

  47. Заполняем Expected CREATE TABLE expected ( ClinicsNum INT ); INSERT INTO expected SELECT 2

  48. Заполняем Expected CREATE TABLE expected ( ClinicsNum INT ); INSERT INTO expected SELECT 2

  49. Assertions EXEC tSQLt.AssertEqualsTable 'expected', 'actual', 'incorrect number of clinics';

  50. AssertEqualsTable Actual: Expected:

More Related