Berbagi teknologi

Apa itu pengujian antarmuka dan bagaimana kita mengimplementasikan pengujian antarmuka?

2024-07-12

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

1. Apa itu pengujian antarmuka?
Seperti namanya, pengujian antarmuka adalah menguji antarmuka antar sistem atau komponen, terutama untuk memverifikasi pertukaran data, proses manajemen transfer dan kontrol, dan ketergantungan logis timbal balik. Protokol antarmuka dibagi menjadi HTTP, WebService, Dubbo, Thrift, Socket dan jenis lainnya. Jenis pengujian terutama dibagi menjadi pengujian fungsional, pengujian kinerja, pengujian stabilitas, pengujian keamanan, dll.

Dalam model pengujian berlapis "piramida", pengujian antarmuka termasuk dalam pengujian integrasi layanan lapisan kedua. Dibandingkan dengan pengujian otomatis lapisan UI (terutama WEB atau APP), pengujian otomatis antarmuka memiliki manfaat yang lebih besar, mudah diterapkan, memiliki biaya pemeliharaan yang rendah, dan memiliki rasio input-output yang lebih tinggi pengujian otomatis.

Di bawah ini kami mengambil antarmuka HTTP sebagai contoh untuk sepenuhnya memperkenalkan proses pengujian otomatisasi antarmuka: mulai dari analisis persyaratan hingga desain kasus penggunaan, dari penulisan skrip, eksekusi pengujian hingga analisis hasil, dan menyediakan desain kasus penggunaan dan skrip pengujian yang lengkap.

2. Proses dasar
Proses pengujian otomatis fungsi antarmuka dasar adalah sebagai berikut:

Analisis persyaratan->Desain kasus penggunaan->Pengembangan skrip->Eksekusi pengujian->Analisis hasil

2.1 Contoh antarmuka
Nama antarmuka: Pencarian film Douban

Alamat dokumen antarmuka: https://developers.douban.com/wiki/?title=movie_v2#search

Contoh panggilan antarmuka:

1) Cari berdasarkan pemain dan kru: https://api.douban.com/v2/movie/search?q=Zhang Yimou

2) Cari berdasarkan judul film: https://api.douban.com/v2/movie/search?q=西游之西游

3) Cari berdasarkan genre: https://api.douban.com/v2/movie/search?tag=comedy


3. Perlu analisa
Analisis persyaratan mengacu pada dokumen seperti persyaratan dan desain. Atas dasar pemahaman persyaratan, perlu juga memahami logika implementasi internal, dan pada tahap ini, aspek persyaratan dan desain yang tidak masuk akal atau dihilangkan dapat ditunjukkan.

Misalnya: Antarmuka pencarian film Douban, persyaratan yang saya pahami adalah mendukung pencarian judul film, pemeran dan tag, dan mengembalikan hasil pencarian di halaman.

4. Gunakan desain kasus
Desain kasus penggunaan didasarkan pada pemahaman persyaratan pengujian antarmuka dan menggunakan perangkat lunak pemetaan pikiran seperti MindManager atau XMind untuk menulis desain kasus uji. Konten utamanya mencakup verifikasi parameter, verifikasi fungsi, verifikasi skenario bisnis, verifikasi keamanan dan kinerja, dll metode desain use case meliputi pembagian kelas ekivalensi, analisis nilai batas, analisis skenario, diagram sebab-akibat, tabel ortogonal, dll.

Untuk bagian pengujian fungsi antarmuka pencarian film Douban, kami terutama berfokus pada tiga aspek: verifikasi parameter, verifikasi fungsi, dan verifikasi skenario bisnis.

5. Pengembangan naskah

Berdasarkan desain kasus uji yang ditulis di atas, kami menggunakan kerangka kerja python+nosetests untuk menulis skrip pengujian otomatis yang relevan. Ini dapat sepenuhnya mewujudkan fungsi pengujian otomatis antarmuka, eksekusi otomatis, dan pengiriman laporan pengujian melalui email.

5.1 Instalasi lib terkait

Pustaka lib yang diperlukan adalah sebagai berikut. Anda dapat menginstalnya menggunakan perintah pip:

  1. pip install nose
  2. pip install nose-html-reporting
  3. pip install requests

5.2 Panggilan antarmuka

Dengan menggunakan perpustakaan permintaan, kita dapat dengan mudah menulis metode pemanggilan antarmuka di atas (seperti mencari q=Andy Lau, kode contohnya adalah sebagai berikut):

  1. #coding=utf-8
  2. import requests
  3. import json
  4. url = 'https://api.douban.com/v2/movie/search'
  5. params=dict(q=u'刘德华')
  6. r = requests.get(url, params=params)
  7. print 'Search Params:n', json.dumps(params, ensure_ascii=False)
  8. print 'Search Response:n', json.dumps(r.json(), ensure_ascii=False, indent=4)

Saat sebenarnya menulis skrip pengujian otomatis, kita perlu melakukan beberapa enkapsulasi. Dalam kode berikut, kami merangkum antarmuka pencarian film Douban. Metode test_q hanya perlu menggunakan metode hasil yang disediakan oleh nosetests untuk dengan mudah mengulang setiap set pengujian dalam daftar qs:

  1. class test_doubanSearch(object):
  2. @staticmethod
  3. def search(params, expectNum=None):
  4. url = 'https://api.douban.com/v2/movie/search'
  5. r = requests.get(url, params=params)
  6. print 'Search Params:n', json.dumps(params, ensure_ascii=False)
  7. print 'Search Response:n', json.dumps(r.json(), ensure_ascii=False, indent=4)
  8. def test_q(self):
  9. # 校验搜索条件 q
  10. qs = [u'白夜追凶', u'大话西游', u'周星驰', u'张艺谋', u'周星驰,吴孟达', u'张艺谋,巩俐', u'周星驰,大话西游', u'白夜追凶,潘粤明']
  11. for q in qs:
  12. params = dict(q=q)
  13. f = partial(test_doubanSearch.search, params)
  14. f.description = json.dumps(params, ensure_ascii=False).encode('utf-8')
  15. yield (f,)

Kita dapat menulis skrip pengujian otomatis untuk setiap fungsi secara berurutan sesuai dengan desain kasus pengujian.

5.3 Verifikasi hasil
Saat menguji antarmuka secara manual, kita perlu menilai apakah pengujian tersebut lolos berdasarkan hasil yang dikembalikan oleh antarmuka.

Untuk antarmuka ini, kita mencari "q=Andy Lau" dan kita perlu menentukan apakah hasil yang dikembalikan berisi "aktor Andy Lau atau judul film Andy Lau". Saat mencari "tag=comedy", kita perlu menentukan jenisnya film di hasil yang dikembalikan. Apakah itu "komedi", perlu untuk memverifikasi apakah jumlah hasil yang dikembalikan benar saat menampilkan hasil, dll. Kode verifikasi hasil selengkapnya adalah sebagai berikut:

  1. class check_response():
  2. @staticmethod
  3. def check_result(response, params, expectNum=None):
  4. # 由于搜索结果存在模糊匹配的情况,这里简单处理只校验第一个返回结果的正确性
  5. if expectNum is not None:
  6. # 期望结果数目不为None时,只判断返回结果数目
  7. eq_(expectNum, len(response['subjects']), '{0}!={1}'.format(expectNum, len(response['subjects'])))
  8. else:
  9. if not response['subjects']:
  10. # 结果为空,直接返回失败
  11. assert False
  12. else:
  13. # 结果不为空,校验第一个结果
  14. subject = response['subjects'][0]
  15. # 先校验搜索条件tag
  16. if params.get('tag'):
  17. for word in params['tag'].split(','):
  18. genres = subject['genres']
  19. ok_(word in genres, 'Check {0} failed!'.format(word.encode('utf-8')))
  20. # 再校验搜索条件q
  21. elif params.get('q'):
  22. # 依次判断片名,导演或演员中是否含有搜索词,任意一个含有则返回成功
  23. for word in params['q'].split(','):
  24. title = [subject['title']]
  25. casts = [i['name'] for i in subject['casts']]
  26. directors = [i['name'] for i in subject['directors']]
  27. total = title + casts + directors
  28. ok_(any(word.lower() in i.lower() for i in total),
  29. 'Check {0} failed!'.format(word.encode('utf-8')))
  30. @staticmethod
  31. def check_pageSize(response):
  32. # 判断分页结果数目是否正确
  33. count = response.get('count')
  34. start = response.get('start')
  35. total = response.get('total')
  36. diff = total - start
  37. if diff >= count:
  38. expectPageSize = count
  39. elif count > diff > 0:
  40. expectPageSize = diff
  41. else:
  42. expectPageSize = 0
  43. eq_(expectPageSize, len(response['subjects']), '{0}!={1}'.format(expectPageSize, len(response['subjects'])))

5.4 Melaksanakan pengujian

Untuk skrip pengujian di atas, kita dapat menggunakan perintah nosetests untuk menjalankan pengujian otomatis dengan mudah, dan menggunakan plug-in nose-html-reporting untuk menghasilkan laporan pengujian berformat html.

Jalankan perintah sebagai berikut:

nosetests -v test_doubanSearch.py:test_doubanSearch --with-html --html-report=TestReport.html

5.5 Kirim laporan email

Setelah pengujian selesai, kita dapat menggunakan metode yang disediakan oleh modul smtplib untuk mengirimkan laporan pengujian format html. Proses dasarnya adalah membaca laporan pengujian -> menambahkan konten email dan lampiran -> menyambung ke server email -> mengirim email -> keluar.

  1. import smtplib
  2. from email.mime.text import MIMEText
  3. from email.mime.multipart import MIMEMultipart
  4. def send_mail():
  5. # 读取测试报告内容
  6. with open(report_file, 'r') as f:
  7. content = f.read().decode('utf-8')
  8. msg = MIMEMultipart('mixed')
  9. # 添加邮件内容
  10. msg_html = MIMEText(content, 'html', 'utf-8')
  11. msg.attach(msg_html)
  12. # 添加附件
  13. msg_attachment = MIMEText(content, 'html', 'utf-8')
  14. msg_attachment["Content-Disposition"] = 'attachment; filename="{0}"'.format(report_file)
  15. msg.attach(msg_attachment)
  16. msg['Subject'] = mail_subjet
  17. msg['From'] = mail_user
  18. msg['To'] = ';'.join(mail_to)
  19. try:
  20. # 连接邮件服务器
  21. s = smtplib.SMTP(mail_host, 25)
  22. # 登陆
  23. s.login(mail_user, mail_pwd)
  24. # 发送邮件
  25. s.sendmail(mail_user, mail_to, msg.as_string())
  26. # 退出
  27. s.quit()
  28. except Exception as e:
  29. print "Exceptioin ", e

6. Analisis hasil

Buka laporan pengujian yang dihasilkan setelah pengujian hidung dijalankan. Terlihat total 51 kasus pengujian yang dijalankan dalam pengujian ini, 50 diantaranya berhasil dan satu diantaranya gagal.

Dalam kasus penggunaan yang gagal, Anda dapat melihat bahwa parameter yang diteruskan adalah: {"count": -10, "tag": "Comedy"}, dan jumlah hasil yang dikembalikan saat ini tidak sesuai dengan hasil yang kami harapkan (bila hitungannya adalah angka negatif, hasil yang diharapkan adalah Antarmuka melaporkan kesalahan atau menggunakan nilai default 20, tetapi jumlah sebenarnya dari hasil yang dikembalikan adalah 189. Cepat laporkan bug ke Douban - -)

7. Naskah lengkap
Saya telah mengunggah skrip pengujian otomatis lengkap antarmuka pencarian film Douban ke GitHub. Alamat unduhan: test_demo/test_douban di master · lovesoo/test_demo · GitHub

Setelah pengunduhan selesai, gunakan perintah berikut untuk melakukan pengujian otomatisasi antarmuka lengkap dan mengirimkan laporan pengujian akhir melalui email:

tes python_doubanSearch.py
Terakhir kirim email laporan pengujian, screenshotnya seperti berikut

Akhir kata saya ucapkan terima kasih kepada semua yang membaca artikel saya dengan seksama. Timbal balik selalu diperlukan.

Informasi ini seharusnya menjadi gudang persiapan terlengkap dan terlengkap untuk teman-teman [pengujian perangkat lunak] Gudang ini juga telah menemani puluhan ribu teknisi penguji melalui perjalanan tersulit.