
Selamat siang, para pembaca yang budiman. Nama saya Victor Burov. Saya bekerja sebagai pengembang di ISPsystem dan ingin berbagi pengalaman saya dalam otomatisasi pengujian.
Kebetulan pengujian manual berlaku di negara kami, dan penguji menghabiskan banyak waktu untuk melakukan tindakan yang sama. Setelah kami berpikir: mengapa tidak mengajarkan panel untuk mengulangi tindakan penguji, karena, pada kenyataannya, semuanya berubah menjadi panggilan API tertentu. Ini akan memungkinkan orang untuk menulis tes bahkan tanpa keterampilan pemrograman.
Kami memutuskan untuk menulis modul untuk membuat tes otomatis. Sehingga tester hanya dapat menekan tombol untuk membuat tes, memenuhi persyaratan kasus uji, pada akhirnya klik "selesai" - dan hanya itu, tes siap! Ide yang sederhana, tetapi untuk mewujudkannya itu tidak mudah. Karena kami ingin modul ini diadaptasi secara maksimal untuk produk kami dan memanfaatkan antarmuka terpadu: sehingga video yang direkam akan terlihat seperti test case yang sudah jadi. Ini akan sepenuhnya menghilangkan pekerjaan manual dari tes menulis. Sistem yang dihasilkan disebut "tape recorder".
Antarmuka untuk melihat kondisi kasus ujiPrinsip kerja
Semua parameter permintaan (HTTP header, variabel lingkungan, data POST, jika ada) dan seluruh respons ditulis ke file xml. Setiap catatan diberi nomor seri. Semua permintaan dibagi menjadi modifikasi dan non-modifikasi. Setelah merekam tes, banyak permintaan non-modifikasi dipotong, karena mereka tidak mempengaruhi pelaksanaan tes dan hanya menunda dan membingungkan proses eksekusi (karenanya nomor urut yang hilang dalam tangkapan layar).
Selama perekaman, tape recorder memungkinkan Anda untuk mengatur pemeriksaan nilai di bidang pada formulir dan di kolom daftar dalam satu klik. Ini juga memungkinkan Anda untuk merekam tes negatif, mengingat kesalahan apa yang dikembalikan panel saat merekam tes.
Selama pemutaran, permintaan dikirim langsung ke API aplikasi tanpa menggunakan browser.
Sebenarnya, tape recorder adalah modul yang terintegrasi ke dalam semua produk kami dan memungkinkan Anda untuk menginstal prosesor yang responsif terhadap peristiwa. Ditulis menggunakan COREmanager.
Contoh merekam satu panggilan yang dilakukan oleh tape recorder:
Rekam<params> <param name="CONTENT_LENGTH">210</param> <param name="CONTENT_TYPE">application%2Fx%2Dwww%2Dform%2Durlencoded%3B%20charset%3DUTF%2D8</param> <param name="HTTPS">on</param> <param name="HTTP_ACCEPT">text%2Fhtml%2C%20%2A%2F%2A%3B%20q%3D0%2E01</param> <param name="HTTP_ACCEPT_LANGUAGE">en%2DUS%2Cen%3Bq%3D0%2E5</param> <param name="HTTP_CACHE_CONTROL">no%2Dcache</param> <param name="HTTP_CONNECTION">keep%2Dalive</param> <param name="HTTP_COOKIE">corelang5%3Dorion%3Aru%3B%20ispmgrlang5%3Dorion%3Aru%3B%20ipmgrlang5%3Dorion%3Aru%3B%20ipmgrses5%3Dbdd69179d627%3B%20ispmgrses5%3D14157f7bbc5e%3B%20menupane%3D30%5Faccount%2D1%253A30%5Fdomains%2D1%253A30%5Fwebserver%2D1%253A30%5Fantispam%2D1%253A30%5Fmaintain%2D1%253A30%5Ftool%2D1%253A30%5Fstat%2D1%253A30%5Fsrvset%2D1%253A30%5Fsysstat%2D1%253A30%5Fintegration%2D1%253A30%5Fset%2D1%253A30%5Fmgrhelp%2D1</param> <param name="HTTP_HOST">172%2E31%2E240%2E175%3A1500</param> <param name="HTTP_ISP_CLIENT">Web%2Dinterface</param> <param name="HTTP_PRAGMA">no%2Dcache</param> <param name="HTTP_REFERER">https%3A%2F%2F172%2E31%2E240%2E175%3A1500%2Fispmgr</param> <param name="HTTP_USER_AGENT">Mozilla%2F5%2E0%20%28X11%3B%20Ubuntu%3B%20Linux%20x86%5F64%3B%20rv%3A24%2E0%29%20Gecko%2F20100101%20Firefox%2F24%2E0</param> <param name="HTTP_X_REQUESTED_WITH">XMLHttpRequest</param> <param name="QUERY_STRING"/> <param name="REMOTE_ADDR"></param> <param name="REMOTE_PORT">38640</param> <param name="REQUEST_METHOD">POST</param> <param name="REQUEST_URI">%2Fispmgr</param> <param name="SCRIPT_NAME">%2Fispmgr</param> <param name="SERVER_ADDR">172%2E31%2E240%2E175</param> <param name="SERVER_NAME">172%2E31%2E240%2E175</param> <param name="SERVER_PORT">1500</param> </params> <postdata>func%3Demaildomain%2Eedit%26elid%3D%26name%3Dtest%2Eemail%26owner%3Dusr%26ipsrc%3Dauto%26defaction%3Derror%26redirval%3D%26spamassassin%3Doff%26avcheck%3Doff%26clicked%5Fbutton%3Dok%26progressid%3Dfalse%5F1424243906672%26sok%3Dok%26sfrom%3Dajax%26operafake%3D1424243906673</postdata> <answer> <doc lang="ru" func="emaildomain.edit" binary="/ispmgr" host="https://172.31.240.175:1500" features="cba82687e7756e2c0195c88d4180f5d50" notify="0" theme="/manimg/orion/" css="main.css" logo="logo-ispmgr.png" logolink="" favicon="favicon-ispmgr.ico" localdir="default/"> <metadata name="emaildomain.edit" type="form" mgr="ispmgr" decorated="yes"> <form> <field name="name"> <input type="text" name="name" required="yes" check="domain" convert="punycode" maxlength="255"/> </field> // <buttons> <button name="ok" type="ok"/> <button name="cancel" type="cancel"/> </buttons> </form> </metadata> <messages name="emaildomain.edit" checked="cba82687e7756e2c0195c88d4180f5d5"> <msg name="currentmonth"> </msg> // </messages> <doc lang="ru" func="emaildomain.edit" binary="/ispmgr" host="https://172.31.240.175:1500" features="cba82687e7756e2c0195c88d4180f5d50" notify="0" theme="/manimg/orion/" css="main.css" logo="logo-ispmgr.png" logolink="" favicon="favicon-ispmgr.ico" localdir="default/"> <slist name="owner"> <val key="usr">usr</val> </slist> <slist name="defaction"> <val msg="yes" key="error"> </val> </slist> <slist name="ipsrc"> <val msg="yes" key="auto"> </val> </slist> <name/> <avcheck>off</avcheck> <owner>usr</owner> <ipsrc>auto</ipsrc> </doc> <id>test.email</id> <ok/> <tparams> <clicked_button>ok</clicked_button> </tparams> </doc> </answer> <localmacro> <macros name="mpre_HostIP" field="ipsrc">auto</macros> </localmacro>
Perbaikan (yang sebelumnya tidak kami pikirkan)
Menunggu
Seseorang bisa "tunggu", komputer - tidak. Salah satu masalah pertama yang seharusnya dipecahkan oleh tape recorder adalah penulisan para pemberi penghargaan. Apa yang tidak diciptakan oleh orang-orang untuk menunggu selesainya operasi. Harapan tugas-tugas latar belakang dan kemampuan untuk menambahkan berhenti pada langkah yang ditentukan untuk jumlah detik yang ditentukan diimplementasikan.
Merekam dan mengedit langkah uji
Mungkin, semua orang ingat saat mesin tik: satu kesalahan - dan Anda harus mencetak ulang seluruh halaman.

Agar tester tidak harus menulis ulang seluruh tes dengan tindakan yang salah, mekanisme ditambahkan untuk merekam ulang tes dari langkah apa pun setelah disimpan. Kemampuan untuk mengedit berguna ketika Anda perlu menyesuaikan tes dengan perubahan perilaku fungsi yang diuji.
Makro untuk Variabel
Selama pengujian, nilai-nilai dalam parameter yang dikirimkan dan diperiksa berubah tergantung pada server tempat mereka menjalankannya. Contoh dari data tersebut adalah alamat IP. Tidak mungkin mengenali mereka pada tahap rekaman pengujian, jadi saya menambahkan sistem makro. Ini memungkinkan kami untuk membuat tes yang tidak terikat dengan lingkungan. Kelemahan dari solusi ini adalah bahwa setelah merekam, makro harus ditentukan secara manual.
Masalah lain yang secara signifikan mempersulit pekerjaan dengan tape recorder adalah penggunaan kunci non-asli. Kami tidak langsung menyadarinya, karena kami menguji tape recorder pada ISPmanager, yang menggunakan pengidentifikasi asli. Tetapi di beberapa panel lain, catatan diidentifikasi oleh ID unik. Oleh karena itu, saya harus mengajarkan tape recorder tidak hanya untuk mendapatkan pengenal setelah membuat catatan atau objek (karena ID dapat berubah dari awal hingga awal), tetapi juga untuk menggantikannya dalam semua permintaan berikutnya.
Dukungan format JUnit
Tes yang dihasilkan tape dijalankan secara otomatis di lingkungan integrasi berkelanjutan Jenkins. Setelah tes selesai, file xml dibuat berisi data dalam format JUnit. Agar file dapat dibentuk dengan benar, pembatasan penamaan tes diperkenalkan. Sebagai contoh, test User.Create.xml jatuh ke dalam testuite dengan nama Pengguna dan, oleh karena itu, memiliki testcase yang disebut Buat. Dalam kasus kesalahan, simpul kegagalan dengan deskripsi lengkap kesalahan ditambahkan ke dalamnya.
Metrik
Jumlah fungsi yang disebut unik dihitung selama berlalunya tes dan rasio ditentukan sebagai persentase dari total fungsi, tidak termasuk yang tersedia hanya untuk penggunaan internal. Dengan demikian, cakupan tes paling sederhana diukur. Selain itu, metrik menunjukkan total waktu yang dibutuhkan untuk menyelesaikan tes dan jumlah tes yang berhasil dan gagal.
Repositori uji
Repositori pengujian pertama-tama menyelesaikan masalah pemindahan tes yang sudah jadi ke server lain. Ini juga sangat berguna ketika beberapa penguji menulis tes. Panel kecil untuk menyimpan tes Penyimpanan dikembangkan dan digunakan juga berdasarkan manajer CORE kami. Perekam kaset memiliki modul untuk menyinkronkan pengujian dengan penyimpanan. Saat menulis tes baru atau menurunkan tes dari repositori, mereka secara otomatis menjadi tidak tersedia untuk memuat ke repositori sehingga tidak ada kebingungan. Setelah mengubah tes, angka revisi ditingkatkan sehingga hanya tes setelah perubahan dimuat ke dalam repositori.
Kesulitan (yah, di mana tanpa mereka)
Menggunakan tape recorder menunjukkan bahwa tidak semua fungsi API mengikuti rekomendasi internal kami. Secara khusus, tidak semua fungsi mengembalikan pengidentifikasi catatan setelah pembuatannya. Saya harus kembali, termasuk ke kode yang berfungsi, dan membawanya sesuai dengan persyaratan.
Kebuntuan adalah masalah lain. Panel menyiratkan kinerja beberapa tindakan kritis dalam mode eksklusif. Dan tape recorder, menjadi bagian dari panel yang sama, menyebabkan fungsi-fungsi seperti itu, menyebabkan seluruh sistem membeku. Itu mungkin untuk menentukan ini hanya dengan bantuan GDB (tidak ada yang ingat fitur ini). Sayangnya, ada kruk, karena diputuskan ketika menjalankan tes dari tape recorder untuk melakukan fungsi-fungsi ini dalam mode multi-threaded. Secara teoritis, dimungkinkan untuk merancang alat perekam tidak dengan modul, tetapi dengan panel terpisah. Tetapi kami tidak mencoba.
Sayangnya, menulis dan melupakan juga gagal. Antarmuka produk kami berubah dan menjadi lebih rumit. Apalagi jumlah komponen antarmuka semakin aktif. Oleh karena itu, tape recorder harus dimodifikasi dari waktu ke waktu, sehingga ketika komponen-komponen baru muncul, ia dapat menganalisis struktur mereka dan memproses hasil dari permintaan.
Kesimpulan
Membuat tape recorder telah membantu meningkatkan kualitas produk yang diuji. Menghemat waktu dan sumber daya untuk penguji pelatihan. Sepanjang jalan, tape recorder memungkinkan kami untuk meninjau API kami untuk kepatuhan dengan rekomendasi internal, dan, oleh karena itu, membuat API sedikit lebih "logis."