البرامج النصية Soapui & Groovy ، تنفذ عبارات SQL متعددة في واحدة
سؤال
لقد تلقيت بعض اختبارات Soapui ، التي تستخدم البرامج النصية الرائعة لإدراج بعض البيانات أولاً في جدول
في السابق ، كنت أستخدم مقتطف الكود التالي للقيام بذلك:
def conn = context.dbConnEtopup
conn.execute( "INSERT INTO A(ID, NAME) VALUES (1, "Johnny")" )
هذا يعمل بشكل جيد ، ومع ذلك لدي العديد من البرامج النصية للاختبار التي تقوم الآن ببيانات SQL مماثلة (إن لم يكن نفس الشيء) ، لذلك أحاول التعامل مع هذا عن طريق تحميله من ملف الخصائص ، لذلك فإن بيان SQL الفعلي الخاص بي هو فقط في واحد المكان ، للحصول على سهولة التحرير
ومع ذلك ، فإن بيان SQL الخاص بي الذي أحاول استخدامه هو في الواقع 2 إدراج (أو حذف) ، وبالتالي فإن الخاصية التي يتم تحميلها هي:
DELETE * FROM TABLE_A; DELETE * FROM TABLE_B;
conn.execute()
لا يمكن التعامل مع ;
, مما يعني أنه لا يمكنني استخدام الأول إلا DELETE
بيان
كيف يمكنني الالتفاف حول هذا؟ لا أريد تحميل كل خاصية بشكل منفصل وتنفيذها. من الناحية المثالية ، أريد فقط خاصية واحدة ، حتى أتمكن من إضافة المزيد من العبارات الحذف في المستقبل
المحلول
لا يمكنك تخزينها فقط في ملف الخصائص مع Semicolons ، ثم إزالتها بعد قراءتها ، على سبيل المثال
String sqlProperty = // read SQL property from file
def statements = sqlProperty.split(";")
// Execute each statment using conn (an instance of groov.sql.Sql?)
statements.each { conn.execute(it);
نصائح أخرى
تدعم بعض برامج تشغيل JDBC عبارات متعددة وستتوفر هذه الوظيفة من خلال فئة SQL من Groovy ، على سبيل المثال مع MySQL:
def props = [user: 'myuser', password: 'mypassword', allowMultiQueries: 'true'] as Properties
def url = 'jdbc:mysql://127.0.0.1:3306/mydb'
def driver = 'com.mysql.jdbc.Driver'
def sql = Sql.newInstance(url, props, driver)
sql.execute """
insert into PERSON (id, firstname, lastname) values (1, 'Dierk', 'Koenig');
insert into PERSON (id, firstname, lastname) values (2, 'Guillaume', 'Laforge');
insert into PERSON (id, firstname, lastname) values (3, 'Jon', 'Skeet');
"""
في بعض الأحيان هذا ليس جيدًا بما فيه الكفاية. تحقق من الحل: تشغيل عبارات SQL متعددة من Groovy