2012-06-09 6 views
5

Estoy a punto de diseñar una arquitectura de base de datos más grande. Contendrá un conjunto de tablas, varias vistas y algunos procedimientos almacenados. Como se trata de una base de datos del tipo más grande y en las primeras etapas de desarrollo (en realidad, todavía está en la etapa de diseño inicial), siento la necesidad de un conjunto de pruebas para verificar la integridad durante la refactorización.MySQL: ¿Cómo puedo probar la arquitectura de mi base de datos (consistencia de clave externa, procedimientos almacenados, etc.)

Estoy bastante familiarizado con los conceptos de prueba en lo que respecta a la lógica de la aplicación, tanto en el lado del servidor (principalmente PHPUnit) como del lado del cliente (Selenium y la infraestructura de prueba de Android).

Pero, ¿cómo puedo probar la arquitectura de mi base de datos?

  • ¿Hay algún tipo de estrategias de ensayo y herramientas similares para bases de datos MySQL en general y en particular?

  • ¿Cómo puedo verificar que mis vistas, procedimientos almacenados, desencadenantes y Dios sabe qué siguen siendo válidos después de cambiar una tabla subyacente?

  • ¿Debo envolver la base de datos con, por ejemplo, una capa PHP para permitir la prueba de la lógica de la base de datos (procedimientos almacenados, activadores, etc.)?

Respuesta

2

Para probar una base de datos, algunas de las cosas que se necesitan son:

  1. Una base de datos de prueba que contiene todos los casos de prueba de datos, los datos iniciales, y así sucesivamente. Esto le permitirá probar desde una posición de inicio conocida cada vez.
  2. Un conjunto de transacciones (INSERT, DELETE, UPDATE) que mueven su base de datos a través de los estados que desea probar. Estos pueden almacenarse en la base de datos de prueba.
  3. Su conjunto de pruebas, expresadas como consultas en la base de datos, que hacen la comprobación real de los resultados de sus acciones. Estos resultados serán probados por su suite de pruebas.
  4. Las excepciones pueden ser lanzadas por una base de datos, pero si obtiene excepciones, es probable que tenga preocupaciones mucho más serias en su base de datos y datos. Puede probar la acción de la base de datos de una manera similar, pero a excepción de "casos de esquina" esto debería ser menos necesario, ya que los motores de base de datos modernos son bastante robustos en su tarea de servicio de datos.

No debería necesitar envolver su base de datos con una capa de PHP; si sigue la estructura anterior, debería tener su conjunto de pruebas completo en el DML y DDL de su base de datos real combinado con su suite de prueba normal .

+0

¡Excelente respuesta! Simple ("simple es hermoso") y fácil de usar rápidamente y sin necesidad de configurar un conjunto adicional de herramientas. – dbm

4

Existen dos lados de las pruebas de bases de datos.

  • Una está orientado a la base de datos de pruebas de la lógica de negocio punto de vista y no debe preocupar a datos persistentes. En ese nivel hay una técnica bien conocida: ORM.Algoritmo en este caso es simple: describen un modelo y crear un conjunto de casos únicos o criterios para probar si las acciones de todas las cascadas realizan como deberían (Es decir, si creamos Product y vincularlo a Category, que después de guardar una sesión obtenemos todas las entidades escritas en DB con todas las relaciones requeridas entre). Más que decir: algunos ORM ya ofrecen un módulo de prueba unitaria (por ejemplo, NHibernate) y algunos de ellos son herramientas aún más geniales: la manera más fácil y rápida de crear esquemas de bases de datos, modelos, casos de prueba: por ejemplo, Fluido NHibernate.

  • Segunda se orienta a probar el esquema de base de datos sí. Para ello, puede consultar una buena biblioteca DbUnit. Presupuesto de sitio oficial:

DbUnit es una extensión de JUnit (también utilizable con Ant) dirigidos a proyectos de bases de datos que, entre otras cosas, pone su base de datos en un estado conocido entre la prueba se ejecuta. DbUnit tiene la capacidad de exportar e importar sus datos de base de datos hacia y desde conjuntos de datos XML. Desde la versión 2.0, DbUnit también puede funcionar con conjuntos de datos muy grandes cuando se usa en modo de transmisión. DbUnit también puede ayudarlo a verificar que los datos de su base de datos coincidan con un conjunto esperado de valores.

Por último, le recomiendo leer el artículo "Evolutionary Database Design" en Martin Fowler's site. Está un poco desactualizado (2003), pero aún vale la pena leerlo.

+0

+1 ¡Gran respuesta! No estoy necesariamente interesado en probar los datos contenidos en la base de datos (todavía). Sin embargo, el consejo sobre 'DbUnit' definitivamente lo voy a ver más de cerca (¿quizás puedo integrar esto en mi servidor de Jenkins?). ¡Gracias! – dbm

Cuestiones relacionadas