mabl では、データベースクエリステップを使用して、接続されたデータベース内のデータを作成、読み取り、更新、および削除できます。データベースクエリーを作成する前に、あなた、またはチーム内の誰かが、クエリー対象のデータベースのスキーマを理解し、安全にクエリーを構築する方法を把握している必要があります。この記事では、クエリー編集者でクエリーを記述する際にサポートされている構文と書式について説明します。
クエリー編集者
mablでクエリーが実行されるときは、クエリー編集者、Trainerの再生、ローカル実行やクラウド実行のいずれの場合でも、接続されているデータベースにリアルタイムでアクセスします。データの作成、削除、または更新を行う際は注意してください。
SQLクエリー
SQLデータベースを操作する際は、クエリーがデータベース固有のSQL構文に従っていることを確認してください。たとえば、直近10分間に作成されたレコードをtest_usersテーブルから取得するクエリーは、MySQLとOracleで異なります。
MySQL では、クエリーは NOW() 関数とシンプルな INTERVAL 構文を使用します。
SELECT * FROM test_users WHERE created_at > NOW() - INTERVAL 10 MINUTE;Oracle では、同じクエリーで SYSDATE 関数を使用し、INTERVAL の値にはシングルクォートが必要です。
SELECT * FROM test_users WHERE created_at > SYSDATE - INTERVAL '10' MINUTE;構文や規則の詳細については、ご利用のデータベースの公式ドキュメントをご参照ください。
NoSQLクエリー
多くのNoSQLシェルでは、db.todo.find( { completed: false }, { "dueDate" : 1 } ) のように、1つの完全なコマンドを入力する必要があります。しかし、mablクエリー編集者では、コマンドの各要素を分解し、「メソッド」、「コレクション」、「フィルター」、「オプション」といった個別のフィールドに入力する必要があります。
NoSQLクエリーを記述する際にdb.collection()の表記に慣れている場合は、次の表でその1行コマンドをどのように分解し、mablクエリー編集者に入力するかを説明しています。
| 標準コマンドコンポーネント | mablクエリー編集者フィールド | 入力 |
|---|---|---|
db.todo |
入力 | todo |
.find() |
メソッド | find |
{"completed":false} |
フィルター | { "completed": false } |
{"dueDate":1} |
オプション | { "dueDate": 1 } |
フィルターで使用できる MongoDB のデータ型
ObjectId でフィルタリングする場合、MongoDB シェルで通常使用する単一引用符は省いてください。mabl クエリー編集者のフィルターフィールドは値を JSON として解析するため、ObjectId('...') 関数内の単一引用符が予期しない結果を引き起こす可能性があります。
例えば、MongoDB シェルで特定の ObjectId でフィルターする場合は、次のように記述します。
{protocolId: ObjectId('507f1f77bcf86cd799439011')}mabl クエリー 編集者のフィルター フィールドで、ID の値を囲んでいるシングルクオートを削除します。
{"protocolId": "ObjectId(507f1f77bcf86cd799439011)"}クエリーの保存
クエリー編集者では、次の保存オプションを利用できます。
1 回限りのクエリーとして保存
クエリーを再利用する予定がない場合は、このオプションを選択してください。後で気が変わった場合でも、「新しい再利用可能クエリーとして保存」をクリックすれば、ワンタイムクエリーを再利用可能なクエリーに変換できます。ワンタイムクエリーも他のテストステップと同様にバージョン管理されますが、テスト > クエリーページからは利用できません。
新しい再利用可能なクエリーとして保存
このオプションを選択すると、新しいクエリーを作成し、複数のテストで再利用できます。このオプションは、mablトレーナーで作成したクエリーにのみ利用できます。テスト > クエリーページの既存のクエリーから新しいクエリーを作成することはできません。
クエリーとブランチ
再利用可能なクエリーはブランチには対応していません。再利用可能なクエリーに加えた変更は、そのクエリーを使用しているすべての箇所に同期されます。クエリーをブランチで管理したい場合は、クエリーを一度限りのクエリーとして保存し、ブランチ化した再利用可能なフローに追加してください。
保存
既存のクエリーの変更を更新します。再利用可能なクエリーの場合、変更を保存すると、そのクエリーを使用しているすべてのテストに反映されます。
クエリーを保存した後、mablトレーナーのデータベースクエリーステップでアサーションを追加したり、変数を作成したりできます。これらのアサーションや変数は、特定のテストステップに紐づいています。再利用可能なクエリーに対しては、直接クエリーページ(テスト > クエリー)からアサーションや変数を設定できません。
クエリーメタデータ
クエリーステップでは、行数、列数、影響を受けた行数、レスポンスメッセージなどのクエリーメタデータに基づいて、アサーションや変数を作成できます。たとえば、UPDATE クエリーが成功したことを確認するには、rows_affected が 1 と等しいことをアサートできます。
このメタデータの意味は、クエリーを実行しているデータベースの種類によって異なります。
- リレーショナルデータベース – メタデータ属性は、データが厳密な表形式の構造に結び付いているため、リレーショナルな SQL データベースではより分かりやすくなります。たとえば、列数はテーブル内の固定された列の数を指し、行数は結果セット内の行の数を指します。
-
NoSQLデータベース - NoSQLデータベースは、より構造化されていないスキーマレスなデータを扱えるため、メタデータの概念は異なる解釈になります。
- row count - NoSQLのクエリーでは、これはテーブルの行ではなく、返されるドキュメントの数を指します。
- rows affected - NoSQL の文脈では、クエリーによって影響を受けたドキュメントの数を指します。
- column count - ドキュメントは固定のフィールド数やあらかじめ定義された列構造を持たないため、NoSQL クエリーのメタデータにはこの属性が存在しません。
制限事項
クエリー編集者には、次の既知の制限があります。これらの制限があなたのユースケースで問題になる場合は、mabl Product Portalでフィードバックを共有してください。
サイズの制限
クエリー結果は100行または1MBを超えることはできません。これらのサイズ制限を超えるクエリーを返さないように、必要な行や列だけを取得するよう、より正確なクエリーを書くことを検討してください。このような精度の高いクエリーは、テストを構築する際のベストプラクティスとして一般的に推奨されています。あるいは、すべての情報が必要な場合は、複数のデータベースクエリーステップを作成してください。
サポートされていないカラムタイプ
ほとんどのデータベース列タイプはサポートされていますが、クエリー編集者では、JSONやBufferタイプなど一部の特殊な列タイプはサポートされていません。
複数のテーブルからクエリーする
複数のテーブルから結果を返すクエリーはサポートされていません。例えば、次のような場合です。
SELECT * FROM TABLE1; SELECT * FROM TABLE2;該当する場合は、代わりにJOINまたはUNIONを使ってクエリーを書いてください。