Pernyataan di SoapUI: Skrip, XQuery, Tutorial Tipe XPath

Apa Itu Penegasan?

Penegasan berarti tindakan menegaskan atau menyatakan sesuatu. Dapat juga diartikan sebagai check point atau titik validasi.

Setelah permintaan dikirim ke server web, respons diterima. Kita perlu memvalidasi apakah responnya berisi data yang kita harapkan. Untuk memvalidasi respons, kita perlu menggunakan pernyataan.

Jenis-Jenis Penegasan

Ada berbagai cara untuk menyatakan suatu tanggapan; namun, kami akan fokus pada jenis Pernyataan SoapUI yang umum digunakan saat memvalidasi respons. Di bawah ini adalah yang tersedia di SoapUI versi Open Source.

  1. Konten Properti
  2. Standar Status Kepatuhan
  3. Naskah
  4. SLA
  5. J.M.S.
  6. Security
Jenis Pernyataan di SoapUI
Jenis Pernyataan di SoapUI

Selain yang tercantum di atas, versi PRO juga memiliki Pernyataan JDBC bawaan yang dapat digunakan untuk menegaskan apakah layanan web telah memperbarui database dengan benar.

BERISI ASSERSI

Mencari keberadaan string yang ditentukan. Ini juga mendukung ekspresi reguler.

Kami akan melanjutkan dengan contoh yang sama dari tutorial sebelumnya dengan permintaan WSDL sebagai http://www.dneonline.com/calculator.asmx.

Langkah 1: Secara Default tidak ada pernyataan.

  • Jumlah Pernyataan ditampilkan di Tab Pernyataan.
  • Untuk menambahkan pernyataan baru, klik tombol 'Tambahkan Pernyataan Baru'.

Berisi Penegasan

Langkah 2: Sekarang,

  1. Pilih Kategori Pernyataan.
  2. Pilih Jenis Pernyataan.
  3. Klik 'Tambah'

Berisi Penegasan

Langkah 3: Mari kita validasi apakah string '46' ada di respons. Klik 'OK'

Catatan: Kita juga dapat mengabaikan huruf besar-kecil dan menambahkan ekspresi reguler.

Berisi Penegasan

Langkah 4: Setelah menambahkannya, pernyataan segera dijalankan dan menunjukkan apakah VALID atau INVALID.

Berisi Penegasan

Langkah 5: Sekarang katakanlah kita mengubah konten 'Berisi Pernyataan di SoapUI' menjadi '47' dan lihat apa yang terjadi.

Berisi Penegasan

Langkah 6: Pernyataan dijalankan dan hasilnya diberikan kepada pengguna. Karena kita tidak memiliki string '47' dalam respons, pernyataan tersebut gagal.

Berisi Penegasan

TIDAK MENGANDUNG ASSERSI

Mencari Ketidakberadaan string yang ditentukan. Ini juga mendukung ekspresi reguler.

Langkah 1: Sekarang setelah mengklik tombol 'tambahkan pernyataan baru',

  1. Pilih Kategori Pernyataan.
  2. Pilih Jenis Pernyataan – Dalam hal ini 'TIDAK Berisi'
  3. Klik 'Tambah'

Tidak Berisi Penegasan

Langkah 2: Mari kita validasi apakah string 'intA' ada dalam respons. Masukkan string 'FromCurrency' dan Klik 'OK'

Tidak Berisi Penegasan

Langkah 3: Segera setelah pernyataan ditambahkan, pernyataan tersebut dijalankan dan menampilkan hasilnya. Sejauh ini kami telah menambahkan dua pernyataan sehingga kedua pernyataan tersebut dijalankan dan hasilnya ditampilkan.

Tidak Berisi Penegasan

Langkah 4: Sekarang mari kita ubah isi 'Pernyataan Tidak Berisi' dan lihat apa yang terjadi. Kami akan memeriksa tidak adanya string “AddResult”.

Tidak Berisi Penegasan

Langkah 5: String 'AddResult' sebenarnya ada dalam respons, sehingga pernyataan 'TIDAK Berisi' akan gagal seperti yang ditunjukkan di bawah ini.

Tidak Berisi Penegasan

PERNYATAAN PERTANDINGAN XPATH

penggunaan XPath ekspresi untuk memilih node target dan nilainya. XPath, adalah bahasa kueri XML untuk memilih node dari dokumen XML.

Langkah 1: Sekarang setelah mengklik tombol 'Tambahkan Pernyataan Baru',

  1. Pilih Kategori Pernyataan.
  2. Pilih Jenis Pernyataan – Dalam hal ini 'XPath Match'
  3. Klik 'Tambah'

Pernyataan Kecocokan XPath

Langkah 2: Tambahkan Jendela XPath terbuka.

Sebelum Menambahkan SoapUI XPath, kita perlu mendeklarasikan NameSpace. Namespace XML adalah kumpulan nama, yang diidentifikasi oleh referensi Uniform Resource Identifier (URI), yang digunakan dalam dokumen XML sebagai nama elemen dan atribut. Hal yang sama digunakan dalam Pernyataan SOAP UI XPath.

Untuk mendeklarasikan Namespace XML, kita hanya perlu mengklik tombol 'Deklarasikan' yang akan melakukan tugasnya. Selain itu, kita juga dapat mendeklarasikan namespace sendiri secara manual.

Setelah mendeklarasikan namespace kita perlu merujuk XPath menggunakan namespace yang dibuat.

Setelah mengklik tombol 'Deklarasikan', dua namespace akan muncul karena kita memiliki dua URI. Salah satunya adalah URL skema dan yang lainnya sesuai dengan URL layanan web sebenarnya. Kita perlu menggunakan namespace aktual tempat layanan web berada dan BUKAN namespace skema saat mereferensikan XPath.

Pernyataan Kecocokan XPath

deklarasikan namespace sabun='http://schemas.xmlsoap.org/soap/envelope/';

mendeklarasikan namespace ns1='http://tempuri.org/';

Pernyataan Kecocokan XPath

Langkah 3: Sekarang kita perlu memasukkan XPath dari node XML yang perlu kita validasi.

//ns1:AddResult Memberi kita Nilai dari node yang diapit di antaranya & dan ns1 sesuai dengan namespace yang dideklarasikan yang menunjuk ke 'http://tempuri.org/'

Setelah memasukkan XML, kita perlu mengklik 'Pilih dari saat ini' sehingga nilai dari respon saat ini akan diambil untuk perbandingan selanjutnya.

Pernyataan Kecocokan XPath

Langkah 4: Sejauh ini,

  1. Setelah mendeklarasikan namespace, kita telah memasukkan XPath dari node XML yang perlu kita Validasi.
  2. Kita perlu mengklik 'Pilih dari Saat Ini' untuk menjadikan nilai saat ini sebagai nilai yang diharapkan.
  3. Nilai saat ini ditampilkan kepada pengguna yang dapat kami ubah jika diperlukan.
  4. Klik 'Simpan'.

Pernyataan Kecocokan XPath

Langkah 5: Pernyataan yang ditambahkan di SoapUI akan ditampilkan seperti gambar di bawah ini.

Pernyataan Kecocokan XPath

Pernyataan Skrip

Teknik Penegasan ini adalah yang paling banyak digunakan karena sangat sulit untuk mengelola dan mempertahankan ratusan pernyataan.

SOAP UI menggunakan keduanya Groovy Pembuatan skrip atau JavaNaskah untuk pernyataan skrip. Teknik skrip diadopsi untuk mengembangkan kerangka kerja untuk menguji SOAP. Pernyataan skrip digunakan dalam keadaan berikut.

Scripting memungkinkan pengguna untuk melakukan beberapa operasi sebelum dan sesudah menjalankan TestCase masing-masing menggunakan metode pengaturan dan pembongkaran. Set up adalah prosedur yang dijalankan sebelum mengeksekusi metode tertentu (contoh – Pembuatan dan Inisialisasi Objek) sedangkan pembongkaran adalah prosedur yang dijalankan setelah metode dijalankan (misalnya: Menghancurkan objek dan membersihkan). Fitur ini tidak tersedia pada tipe Assertion lainnya dan hanya dapat dilakukan melalui coding.

Hal ini memungkinkan pengguna untuk melakukan pembukaan/penutupan Proyek, untuk menginisialisasi atau membersihkan pengaturan terkait Proyek dan juga untuk bekerja dengan variabel lingkungan yang sangat membantu selama pembuatan skrip.

Ini membantu kami dalam menegaskan konten Respons yang dinamis.

Pernyataan skrip digunakan untuk membuat pernyataan yang ditentukan pengguna yang TIDAK ditentukan sebelumnya oleh SOAP UI.

Untuk mendemonstrasikan pernyataan Script di SoapUI, kita akan menggunakan kalkulator WSDL, test case 'Add' yang telah kita buat sebelumnya.

Langkah 1: Langkah-langkah untuk menambahkan skrip asyik sama dengan pernyataan lainnya, kecuali pernyataan tersebut bukan pernyataan yang telah ditentukan sebelumnya. Sebaliknya, ini adalah pernyataan yang ditentukan pengguna yang menawarkan fleksibilitas lebih besar daripada pernyataan bawaan.

Pilih langkah Uji yang harus ditambahkan pernyataannya.

Pernyataan Skrip

Klik Tombol 'Tambahkan Pernyataan' seperti yang ditunjukkan di bawah ini.

Pernyataan Skrip

Langkah 2: Sekarang pilih kategori Pernyataan.

  1. Dalam hal ini adalah Script.
  2. Pilih Pernyataan Skrip SoapUI dan tidak ada subtipe yang terkait dengannya.
  3. Klik 'Tambahkan'.

Pernyataan Skrip

Langkah 3: Dialog Skrip terbuka di mana pengguna akan dapat menulis skrip yang ditentukan pengguna untuk memvalidasi XML respons.

Pernyataan Skrip

Langkah 4: Sekarang mari kita menulis skrip asyik untuk memvalidasi Tingkat Konversi. Script terlampir di bawah dengan komentar yang disematkan. Disarankan untuk memiliki pengetahuan tentang Java Skrip atau Groovy Skrip sebelum mencoba menulis skrip Anda sendiri.

//Define Groovy Utils and holder for validating the XML reponse content
def groovyUtils = new com.eviware.soapui.support.GroovyUtils(context)
def holder = groovyUtils.getXmlHolder(messageExchange.responseContent)

//Define the NameSpace
holder.namespaces["ns1"] = "http://tempuri.org/"

//Get the Value of the Node 'AddResult' and assign to a variable
def addResult = holder.getNodeValue("//ns1:AddResult")

//print the value of the result in the Output panel
log.info "The result value for integers is " + addResult

//Comparing the value to print 'Pass' or 'Fail'
if(addResult=="46")
{ log.info "Pass" }
else
{ log.info "fail"}
  1. Klik Tombol 'Jalankan' untuk memicu eksekusi.
  2. Output dari Script ditampilkan di panel Output. Sudah tercetak baik Nilai Konversi maupun hasil akhirnya (Lulus atau Gagal)
  3. Informasi yang ditampilkan adalah 'Pernyataan Skrip Lulus'. Klik Oke.

Catatan: Pop up Informasi terakhir akan selalu ditampilkan dengan pesan 'Script Assertion Passed' selama skrip tersebut benar secara sintaksis. Itu tidak ada hubungannya dengan pernyataan Anda dalam naskah.

Pernyataan Skrip

klik OK

Langkah 5: Sekarang Tab pernyataan menampilkan semua pernyataan yang telah kami tambahkan untuk rangkaian pengujian ini dengan Status terhadap masing-masing pernyataan tersebut.

Pernyataan Skrip

Langkah 6: Sekarang

  1. Pilih Test Suite dari pohon Navigator
  2. Klik Tombol 'Jalankan'
  3. Hasil akan ditampilkan untuk seluruh rangkaian pengujian.

Pernyataan Skrip

Pernyataan Kecocokan Xquery

Ini Menggunakan ekspresi Xquery untuk memilih konten dari properti target. Kami memerlukan XML respons yang jauh lebih besar untuk lebih memahami pernyataan XQuery di SoapUI. Mari kita impor satu WSDL lain seperti yang ditunjukkan di bawah ini: http://www.webservicex.net/medicareSupplier.asmx?WSDL

Langkah 1: Lakukan klik kanan pada proyek yang ada dan pilih 'Tambahkan WSDL'.

Pernyataan Kecocokan Xquery

Langkah 2: Lakukan klik kanan pada proyek yang ada dan pilih 'Tambahkan WSDL'. Biarkan opsi lain sebagai default dan Klik Tombol 'OK'.

Pernyataan Kecocokan Xquery

Langkah 3: Semua operasi tercantum seperti yang ditunjukkan di bawah ini.

Pernyataan Kecocokan Xquery

Langkah 4: Sekarang mari kita tambahkan a Uji Kasus dalam rangkaian pengujian yang sama dengan yang kami buat pengujian konverter mata uang.

Pernyataan Kecocokan Xquery

Langkah 5: Masukkan nama kasus uji dan Klik Tombol 'OK'

Pernyataan Kecocokan Xquery

Langkah 6: Kasus uji dibuat seperti yang ditunjukkan di bawah ini.

Pernyataan Kecocokan Xquery

Langkah 7: Add
langkah pengujian baru Ketik 'Permintaan Tes Sabun' seperti gambar di bawah ini.

Pernyataan Kecocokan Xquery

Langkah 8: Masukkan nama langkah pengujian. Katakanlah – Supplier_by_City mana yang lebih bermakna Klik 'OK'.

Pernyataan Kecocokan Xquery

Langkah 9: Pilih Operayang ingin kami validasi. Dalam kasus ini adalah 'MedicareSupplierSoap -> GetSupplierByCity'. Klik 'OK'.

Pernyataan Kecocokan Xquery

Langkah 10: Masukkan Nama kasus uji dan klik 'OK'.

Pernyataan Kecocokan Xquery

Langkah 11: Garis Besar XML Permintaan akan ditampilkan seperti yang ditunjukkan di bawah ini.

Pernyataan Kecocokan Xquery

Langkah 12: Sekarang mari kita temukan semua informasi pemasok untuk Kota 'New York'.

Untuk melakukannya, tambahkan baris berikut ke kode Anda.

<GetSupplierByCity xmlns="http://www.webservicex.net/">

<City>New York</City>

</GetSupplierByCity>

WSDL di URL di bawah ini – http://www.webservicex.net/medicareSupplier.asmx?op=GetSupplierByCity

Pernyataan Kecocokan Xquery

Langkah 13: Setelah menjalankan tes, kami menerima respons di bawah ini

Pernyataan Kecocokan Xquery

Langkah 14: Misalkan kita perlu memvalidasi semua Nomor Pemasok. Kami tidak dapat menggunakan Pernyataan XPath karena kami harus memiliki ratusan Pernyataan XPath. Oleh karena itu penggunaan XQuery tidak dapat dihindari dalam kasus ini.

XQuery Assertion membantu kita memvalidasi sekelompok respons XML yang bersifat berulang.

Pernyataan Kecocokan Xquery

Langkah 15: Sekarang klik 'Tambahkan pernyataan',

  1. Pilih 'Kategori Pernyataan' – Konten Properti dalam hal ini.
  2. Pilih Jenis Pernyataan sebagai 'Pernyataan XQuery'
  3. Klik 'Tambahkan'.

Pernyataan Kecocokan Xquery

Langkah 16: Mirip dengan Pernyataan XPath kita perlu mendeklarasikan namespace.

  1. Klik Tombol 'Deklarasikan' untuk secara otomatis mengizinkan SOAP UI mendeklarasikan namespace. Setelah mengklik tombol deklarasi, 'POP up' dengan pesan 'deklarasikan namespace dari skema sebagai gantinya' akan ditampilkan kepada pengguna. Klik 'Ya' untuk melanjutkan seperti yang ditunjukkan di bawah ini.

    Catatan: Setelah menekan 'Tombol Nyatakan' Anda mungkin mendapatkan URL yang berbeda sebagai deklarasi namespace, namun namespace lokasi layanan web sebenarnya adalah apa yang akan dipertimbangkan untuk pengkodean.

    Pernyataan Kecocokan Xquery

  2. Untuk mengambil semua Nomor Pemasok, Kita perlu menulis Kueri XPath dan kami akan menempatkannya di dalam <Nomor Pemasok> dan Tag.
  3. Klik 'Pilih dari Saat Ini' yang akan mengeksekusi respons saat ini.
  4. Setelah Mengklik 'Pilih dari Saat Ini', Semua Nomor Pemasok terdaftar.
  5. Klik 'Simpan'.
// Namespace declaration
declare namespace soap='http://schemas.xmlsoap.org/soap/envelope/';
declare namespace ns1='http://www.webservicex.net/';
declare namespace x = '';

// Placing the result in Myresult Tags

{
// Iterating through all the supplier number 
for $x in //ns1:GetSupplierByCityResponse/ns1:SupplierDataLists/ns1:SupplierDatas/ns1:SupplierData

//Return all the Supplier number within ‘SupplierNumber’ Tags.
return {data($x/ns1:SupplierNumber)}
}

Pernyataan Kecocokan Xquery

Langkah 17: XQuery Assertion dijalankan dan menampilkan hasil akhir di Panel 'Assertion' seperti gambar di bawah ini. Sekarang kami telah berhasil menambahkan pernyataan Xquery yang dengannya kami telah memvalidasi semua informasi Nomor pemasok. Hal yang sama akan dibandingkan dengan keadaan sebenarnya, setiap kali permintaan dikirim ke server web.

Catatan: Nilai sebenarnya tidak akan ditampilkan. Jika semua nilai sebenarnya sama dengan nilai yang diharapkan, maka akan ditampilkan VALID, jika tidak maka akan ditampilkan 'Gagal'.

Pernyataan Kecocokan Xquery

Kapan Menggunakan Pernyataan Bawaan?

  • Ketika Respons pendek sehingga dapat divalidasi menggunakan salah satu pernyataan bawaan tersebut.
  • Kita juga dapat menggunakan Inbuilt Assertion jika respon yang dikirim dari web server selalu bersifat statis. Jika bersifat dinamis, kami tidak akan dapat menegaskannya menggunakan pernyataan bawaan.
  • Ketika penggunaan pernyataan bawaan seperti pernyataan Time out dan pernyataan keamanan menjadi tidak dapat dihindari.
  • Pernyataan bawaan berlaku cukup baik untuk penggunaan satu kali di mana pengujian tidak perlu diulang.

Opsi Pernyataan

Pernyataan yang dibuat dapat dikontrol dengan baik menggunakan bantuan panel kontrol yang disorot di bawah.

Opsi Pernyataan

Pernyataan yang dibuat memungkinkan penguji untuk mengonfigurasi hal-hal berikut dari kotak peralatan pernyataan.

pilihan Uraian Teknis

Opsi Pernyataan

Pernyataan yang dipilih akan naik urutannya.

Opsi Pernyataan

Pernyataan yang dipilih berpindah urutan ke bawah.

Opsi Pernyataan

Menghapus Pernyataan yang Dipilih

Opsi Pernyataan

Konfigurasi ulang/Edit Pernyataan yang dipilih.
  • Di bawah ini adalah fitur-fitur yang tersedia secara eksklusif di SOAP UI Versi PRO. Versi PRO juga membantu kita mengelompokkan pernyataan sehingga kita dapat menambahkan satu lapisan validasi lagi ke pernyataan yang dibuat.
  • DAN: Semua pernyataan dievaluasi sebagai pernyataan VALID yang akan menghasilkan kondisi grup LULUS.ATAU: Setidaknya salah satu pernyataan dalam grup harus VALID untuk menegaskan kondisi grup LULUS.

  • Versi Pro juga memungkinkan Kloning Pernyataan: Opsi ini memungkinkan penguji mengizinkan penyalinan pernyataan ke langkah pengujian berbeda dalam proyek yang sama atau berbeda.
  • Nonaktifkan/Aktifkan Pernyataan: Opsi ini memungkinkan pernyataan yang dikelompokkan atau tidak dikelompokkan untuk dinonaktifkan atau diaktifkan. Jika pernyataan dinonaktifkan, pernyataan tersebut berwarna abu-abu dan ketika Kasus Uji dijalankan, pernyataan yang dinonaktifkan tidak akan dieksekusi.
  • Pisahkan Pernyataan: Setiap pernyataan yang dikelompokkan dapat dipisahkan dari kelompoknya jika penguji memutuskan untuk melakukannya.

Daftar Lengkap Metode yang tersedia dalam berbagai jenis pernyataan

Mekanisme Penegasan

Uraian Teknis

KONTEN PROPERTI
Mengandung Mencari keberadaan string yang ditentukan. Ini juga mendukung ekspresi reguler.
Tidak Berisi Mencari Ketidakberadaan string yang ditentukan. Ini juga mendukung ekspresi reguler.
Pertandingan XPath Menggunakan ekspresi XPath untuk memilih node target dan nilainya.
Pencocokan XQuery Menggunakan ekspresi Xquery untuk memilih konten dari properti target.
Kepatuhan, Status, Standar
HTTP Unduh semua sumber daya Memvalidasi Dokumen HTML setelah diunduh dan berlaku untuk semua properti yang berisi HTML.
Kode Status HTTP tidak valid Memverifikasi apakah respons HTML berisi kode status yang tidak ada dalam daftar kode yang ditentukan.
Bukan Kesalahan SABUN Memverifikasi apakah pesan yang terakhir diterima bukan Kesalahan SOAP. Sangat jelas bahwa ini hanya berlaku untuk Langkah Uji SOAP.
Kepatuhan Skema Memverifikasi apakah pesan yang terakhir diterima sesuai dengan definisi skema standar WSDL atau WADL. Berlaku baik untuk Langkah Uji SOAP dan REST.
Kesalahan SABUN Memverifikasi apakah pesan yang terakhir diterima adalah Kesalahan SOAP. Ini adalah kebalikan dari Pernyataan Kesalahan 'NOT SOAP'.
Respon SABUN Memverifikasi apakah respons yang terakhir diterima adalah Respon SOAP yang valid dan berlaku hanya untuk Langkah Permintaan Pengujian SOAP.
Kode Status HTTP yang Valid Memverifikasi apakah respons HTML berisi kode status yang ada dalam daftar kode yang ditentukan. Ini adalah kebalikan dari Pernyataan 'Kode Status HTTP Tidak Valid'.
Permintaan Pengalamatan WS Memverifikasi apakah permintaan yang terakhir diterima berisi Header Pengalamatan WS yang sesuai.
Respon Pengalamatan WS Memverifikasi apakah respons yang terakhir diterima berisi Header Pengalamatan WS yang sesuai.
Status Keamanan WS Memvalidasi jika pesan terakhir yang diterima berisi header WS-Security yang valid dan hanya berlaku untuk Permintaan SOAP.
Naskah
Penegasan Naskah Memungkinkan pengguna menjalankan skrip khusus untuk melakukan validasi yang ditentukan pengguna.
SLA
Respon SLA Memvalidasi jika waktu respons dari respons yang terakhir diterima berada dalam batas yang ditentukan.
J.M.S.
Status JMS Memverifikasi apakah permintaan JMS dari Langkah Pengujian telah berhasil dijalankan dan berlaku untuk Langkah Pengujian dengan titik akhir JMS.
Batas Waktu JMS Memverifikasi apakah respons JMS dari langkah pengujian tidak memakan waktu lebih lama dari durasi yang ditentukan.
Security
Paparan Informasi Sensitif Memverifikasi apakah pesan respons tidak memaparkan informasi sensitif tentang sistem target. Kita dapat menggunakan pernyataan ini untuk Langkah Pengujian REST, SOAP, dan HTTP.

UNDUH PROYEK SOAPUI YANG MENGANDUNG PERNYATAAN DI ATAS

Kesalahan Umum dan Pemecahan Masalah

Gunakan namespace yang benar. Ruang Nama harus berupa URL tempat layanan web berada.

Jika terjadi kesalahan saat mengembangkan pernyataan skrip, gunakan 'log.info' untuk mencetak konten variabel

Jika Anda belum memperoleh keluaran yang diinginkan, verifikasi apakah masukan yang valid telah diberikan dalam permintaan.

Misalnya, dalam konverter mata uang, jika Anda memasukkan 'intA' sebagai 'x' yang bukan bilangan bulat, output akan menampilkan kode kesalahan sebagai 'SOAP-Client' yang berarti masalahnya ada pada parameter yang diteruskan dari sisi klien.

Kesalahan Umum dan Pemecahan Masalah

Kesalahan Umum dan Pemecahan Masalah

Pastikan Anda menggunakan sintaks yang benar saat menggunakan pernyataan XPATH dan XQuery. Anda TIDAK boleh menggunakan titik(.) daripada titik dua(:) saat menggunakan pernyataan di atas. Sintaksnya adalah //namespace:Tagname dan BUKAN //namespace.tagname. Dengan melakukannya, Anda mungkin mendapatkan pesan 'TIDAK ada kecocokan dalam respons saat ini' meskipun nama tagnya benar.

Kesalahan Umum dan Pemecahan Masalah