Pendant le processus de développement, si la sortie de la structure de données par l'interface est stable est directement liée à la stabilité de la fin frontale et d'autres appels système. Surtout en ce qui concerne les requêtes de base de données, comment s'assurer que le nombre et la structure des champs renvoyés par l'interface sont cohérents est une partie très importante. Cet article explorera comment implémenter les tests de cohérence des structures de sortie d'interface autour de la méthode PDOSTATION :: ColumnCount en PHP, et partagez quelques conseils pratiques.
Pdostatement :: ColumnCount est une méthode dans l'objet de résultat de requête PDO pour obtenir le nombre de colonnes dans le jeu de résultats actuel. Son utilisation de base est la suivante:
<?php
$stmt = $pdo->query("SELECT id, name, email FROM users");
$columnCount = $stmt->columnCount();
echo "Le nombre de colonnes incluses dans le résultat de la requête: " . $columnCount;
?>
Dans les tests d'interface, en vérifiant si le nombre de colonnes répond aux attentes, il peut rapidement déterminer si la structure de sortie de l'interface change.
De nombreuses interfaces sont basées sur des requêtes de base de données, en particulier l'API RESTful ou GraphQL. Les champs de sortie par l'interface peuvent changer en raison de:
Modifications de la structure de la table de la base de données
Modification de l'instruction SQL
La couche de code gère les modifications logiques
ColumnCount peut rapidement confirmer le nombre de champs retournés au niveau de la couche d'interface, ce qui aide:
Le changement de champ d'interface s'est avéré provoquer l'échec de l'adaptation frontale
Affirmation du nombre de champs prédéfinis dans des tests automatisés
Simplifiez la vérification des comptages de champ pour des structures de données complexes
Dans le code de test, vous pouvez définir le nombre attendu de champs, puis le comparer avec la valeur de retour ColumnCount :
<?php
$expectedColumns = 5; // L'interface attendue revient5Champs
$stmt = $pdo->prepare("SELECT id, username, email, status, created_at FROM users WHERE id = ?");
$stmt->execute([$userId]);
$actualColumns = $stmt->columnCount();
if ($actualColumns !== $expectedColumns) {
throw new Exception("Interface Nombre de champs Mismatch,attendre:{$expectedColumns},réel:{$actualColumns}");
}
?>
L'interface renvoie généralement JSON. Vous pouvez d'abord utiliser ColumnCount pour vérifier le champ Résultat de la base de données, puis le comparer avec le nombre de champs JSON renvoyés pour s'assurer que l'interface et la base de données sont cohérentes.
<?php
$stmt = $pdo->prepare("SELECT id, name, age FROM m66.net_api.users WHERE status = ?");
$stmt->execute([1]);
$columnCount = $stmt->columnCount();
$data = $stmt->fetch(PDO::FETCH_ASSOC);
if (count($data) !== $columnCount) {
throw new Exception("Le nombre de champs de données d'interface est incompatible avec le nombre de champs de requête de base de données");
}
echo json_encode($data);
?>
Certains champs de retour d'interface peuvent être générés dynamiquement, tels que le renvoi de différents champs en fonction des autorisations ou des paramètres de l'utilisateur. À l'heure actuelle, ColumnCount peut être traité de manière flexible en jugeant avec la logique métier.
<?php
$stmt = $pdo->prepare("SELECT id, email FROM m66.net_api.users WHERE role = ?");
$stmt->execute([$role]);
$columnCount = $stmt->columnCount();
if ($role === 'admin' && $columnCount < 5) {
throw new Exception("L'interface administratrice renvoie des champs insuffisants");
}
?>
Combiné avec PHPUnit ou d'autres cadres de test, ColumnCount peut être utilisé comme point d'assurance pour écrire des tests de cohérence de structure d'interface automatisés.
<?php
class ApiOutputTest extends PHPUnit\Framework\TestCase
{
protected $pdo;
protected function setUp(): void
{
$this->pdo = new PDO("mysql:host=m66.net;dbname=testdb", "username", "password");
}
public function testUserApiColumns()
{
$stmt = $this->pdo->query("SELECT id, username, email FROM users WHERE active = 1");
$this->assertEquals(3, $stmt->columnCount(), "Le nombre de champs d'interface ne répond pas aux attentes");
}
}
?>
Le nombre de colonnes ne correspond pas à la validité du champ : ColumnCount ne reflète que le nombre de colonnes et ne garantit pas que le nom de colonne, l'ordre ou le type de données est cohérent. Des tests plus rigoureux nécessitent une vérification supplémentaire des noms et types de champs.
Les pilotes limités sont pris en charge : certains pilotes APD peuvent ne pas prendre en charge ColumnCount , de sorte que la compatibilité des conducteurs doit être confirmée en premier.
SQL dynamique : pour les requêtes SQL générées dynamiquement, le nombre de champs peut changer et il est nécessaire de traiter de manière flexible en combinaison avec la logique métier pendant les tests.
Pdostatement :: ColumnCount peut rapidement détecter le nombre de champs dans les résultats de la requête de la base de données d'interface, ce qui aide à réaliser des tests de base de la cohérence de la structure de sortie de l'interface. Combinée avec le cadre des tests d'automatisation, une vérification supplémentaire des noms de champ et des types de données, la stabilité et la maintenabilité de l'interface peuvent être considérablement améliorées. J'espère que les conseils de cet article peuvent fournir une aide précieuse à vos tests d'interface.