Я создал важную базу данных MySQL, с множеством представлений, триггеров, функций и процедур.
Очень сложно протестировать и ничего не забыть, поэтому я написал сценарии Cucumberдля всех функций моей БД (Вставка, Выбор и т. д., запрос функций, процедур и т. д., а также представлений)
Это нам очень помогает, когда мы тестируем поведение всего этого и даже раньше.при написании представления и другого кода очень полезно определить, чего мы действительно хотим.
Моя проблема: после написания функций Cucumber мы все тестируем вручную в MySQL Shell.
IЯ новичок в методах BDD / TDD и Agile, но я провел некоторый поиск, чтобы узнать, как сделать некоторую автоматизацию, но не нашел ничего очень интересного для моего случая.
Есть ли кто-нибудь, кто может предоставить какой-то интересный способсоздать автоматизацию для этого?
Я не знаю Ruby, но на примере можно ли использовать RSPec напрямую с MySQL (с некоторыми примерами)?
Или на другом языке, илиy решение, которое вы можете придумать!
Заранее спасибо!
[EDIT]
Если найдены некоторые интересные вещи с RSpec и MySQL:
Поддержка Mysql для огурца Nagios
mysql_steps.rb
Моя проблема: я неУ меня есть опыт работы с Ruby, RSPec и т. д.
Я работаю над этим с превосходной книгой "Pick Axe" и книгой RSPec от PragProg
Но я буду очень благодарен заНебольшой пример шагов RSpec с приведенным ниже кодом:
Процедура MySQL
DELIMITER $$
CREATE PROCEDURE `prc_liste_motif` (
IN texte TEXT,
IN motif VARCHAR(255),
OUT nb_motif INT(9),
OUT positions TEXT)
BEGIN
DECLARE ER_SYNTAXE CONDITION FOR SQLSTATE '45000';
DECLARE sousChaine TEXT;
DECLARE positionActuelle INT(9) DEFAULT 1;
DECLARE i INT(9) DEFAULT 1;
IF
LENGTH(motif) > LENGTH(texte)
THEN
SIGNAL ER_SYNTAXE
SET MESSAGE_TEXT =
'Bad Request: Le motif est plus long que le texte.',
MYSQL_ERRNO = 400;
END IF;
SET positions = '';
SET nb_motif = 0;
REPEAT
SET sousChaine = SUBSTRING_INDEX(texte, motif, i);
SET positionActuelle = LENGTH(sousChaine) + 1;
IF
positionActuelle < LENGTH(texte) + 1
THEN
IF
LENGTH(positions) > 0
THEN
SET positions = CONCAT(positions, ',');
END IF;
SET positions = CONCAT(positions, positionActuelle);
SET nb_motif = nb_motif + 1;
END IF;
SET i = i + 1;
UNTIL LENGTH(sousChaine) >= LENGTH(texte)
END REPEAT;
END$$
Функция огурца:
Feature: Procedure prc_liste_motif
In order to precess a string according to a given unit
I want to know the number of units present in the chain and their positions
Knowing that the index starts at 1
Background: the database mydatabase in our SGBDR server
Given I have a MySQL server on 192.168.0.200
And I use the username root
And I use the password xfe356
And I use the database mydatabase
Scenario Outline: Using the procedure with good values in parameters
Given I have a procedure prc_liste_motif
And I have entered <texte> for the first parameter
And I have entered <motif> for the second parameter
And I have entered <nb_motif> for the third parameter
And I have entered <positions> for the fourth parameter
When I call prc_liste_motif
Then I should have <out_nb_motif> instead of <nb_motif>
Then I should have <out_positions> instead of <positions>
Exemples:
| texte | motif | nb_motif | positions | out_nb_motif | out_positions |
| Le beau chien | e | | | 3 | 2,5,12 |
| Allo | ll | | | 1 | 2 |
| Allo | w | | | 0 | |
Пример пройденного теста вручную в MySQL:
$ mysql -h 192.168.0.200 -u root -p xfe356
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 1
Server version: 5.5.9 MySQL Community Server (GPL)
Copyright (c) 2000, 2010, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql> USE mydatabase
Database changed
mysql> SET @texte = 'Le beau chien';
Query OK, 0 rows affected (0.00 sec)
mysql> SET @motif = 'e';
Query OK, 0 rows affected (0.00 sec)
mysql> SET @nb_motif = NULL;
Query OK, 0 rows affected (0.00 sec)
mysql> SET @positions = NULL;
Query OK, 0 rows affected (0.00 sec)
mysql> SET @out_nb_motif = 3;
Query OK, 0 rows affected (0.00 sec)
mysql> SET @out_positions = '2,5,12';
Query OK, 0 rows affected (0.00 sec)
mysql> CALL prc_liste_motif(@texte, @motif, @nb_motif, @positions);
Query OK, 0 rows affected (0.00 sec)
mysql> SELECT @nb_motif = @out_nb_motif AND @positions = @out_positions;
+-----------------------------------------------------------+
| @nb_motif = @out_nb_motif AND @positions = @out_positions |
+-----------------------------------------------------------+
| 1 |
+-----------------------------------------------------------+
1 row in set (0.00 sec)
Заранее спасибо за помощь!