Κοινή χρήση τεχνολογίας

Τι είναι η δοκιμή διεπαφής και πώς υλοποιούμε τη δοκιμή διεπαφής;

2024-07-12

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

1. Τι είναι η δοκιμή διεπαφής;
Όπως υποδηλώνει το όνομα, η δοκιμή διασύνδεσης είναι η δοκιμή της διεπαφής μεταξύ συστημάτων ή στοιχείων, κυρίως για την επαλήθευση της ανταλλαγής δεδομένων, των διαδικασιών διαχείρισης μεταφοράς και ελέγχου και αμοιβαίων λογικών εξαρτήσεων. Τα πρωτόκολλα διασύνδεσης χωρίζονται σε HTTP, WebService, Dubbo, Thrift, Socket και άλλους τύπους.

Στο μοντέλο «πυραμίδας» της πολυεπίπεδης δοκιμής, η δοκιμή διεπαφής ανήκει στο δεύτερο επίπεδο δοκιμής ενοποίησης υπηρεσιών. Σε σύγκριση με τις αυτοματοποιημένες δοκιμές επιπέδου UI (κυρίως WEB ή APP), οι αυτοματοποιημένες δοκιμές διεπαφής έχουν μεγαλύτερα οφέλη, είναι εύκολο να εφαρμοστούν, έχουν χαμηλό κόστος συντήρησης και έχουν υψηλότερη αναλογία εισόδου-εξόδου αυτοματοποιημένη δοκιμή.

Παρακάτω λαμβάνουμε μια διεπαφή HTTP ως παράδειγμα για να εισαγάγουμε πλήρως τη διαδικασία δοκιμής αυτοματισμού διεπαφής: από την ανάλυση απαιτήσεων έως τη σχεδίαση περιπτώσεων χρήσης, από τη σύνταξη σεναρίου, την εκτέλεση δοκιμής έως την ανάλυση αποτελεσμάτων και να παρέχουμε πλήρη σχεδιασμό περιπτώσεων χρήσης και σενάρια δοκιμής.

2. Βασική διαδικασία
Η βασική διαδικασία αυτοματοποιημένης δοκιμής της λειτουργίας διεπαφής είναι η εξής:

Ανάλυση απαιτήσεων->Σχεδίαση περίπτωσης χρήσης->Ανάπτυξη σεναρίου->Εκτέλεση δοκιμής->Ανάλυση αποτελεσμάτων

2.1 Δείγμα διεπαφής
Όνομα διεπαφής: Αναζήτηση ταινίας Douban

Διεύθυνση εγγράφου διεπαφής: https://developers.douban.com/wiki/?title=movie_v2#search

Παράδειγμα κλήσης διεπαφής:

1) Αναζήτηση ανά καστ και συνεργείο: https://api.douban.com/v2/movie/search?q=Zhang Yimou

2) Αναζήτηση ανά τίτλο ταινίας: https://api.douban.com/v2/movie/search?q=西游之西游

3) Αναζήτηση ανά είδος: https://api.douban.com/v2/movie/search?tag=comedy


3. Ανάλυση ανάγκης
Η ανάλυση απαιτήσεων αναφέρεται σε έγγραφα όπως οι απαιτήσεις και ο σχεδιασμός Με βάση την κατανόηση των απαιτήσεων, είναι επίσης απαραίτητο να κατανοηθεί η εσωτερική λογική υλοποίησης και σε αυτό το στάδιο μπορούν να επισημανθούν παράλογες ή παραλειπόμενες πτυχές των απαιτήσεων και του σχεδιασμού.

Για παράδειγμα: Διεπαφή αναζήτησης ταινιών Douban, η απαίτηση που καταλαβαίνω είναι η υποστήριξη της αναζήτησης τίτλων ταινιών, μελών καστ και ετικετών και η επιστροφή των αποτελεσμάτων αναζήτησης σε σελίδες.

4. Σχέδιο θήκης χρήσης
Ο σχεδιασμός περιπτώσεων χρήσης βασίζεται στην κατανόηση των απαιτήσεων δοκιμών διεπαφής και στη χρήση λογισμικού χαρτογράφησης μυαλού, όπως το MindManager ή το XMind για τη σύνταξη σχεδίασης δοκιμαστικής περίπτωσης. Οι μέθοδοι σχεδιασμού περιπτώσεων χρήσης περιλαμβάνουν διαίρεση κλάσεων ισοδυναμίας, ανάλυση οριακών τιμών, ανάλυση σεναρίων, διαγράμματα αιτίας και αποτελέσματος, ορθογώνιους πίνακες κ.λπ.

Για το τμήμα δοκιμής λειτουργίας διεπαφής αναζήτησης ταινιών Douban, εστιάζουμε κυρίως σε τρεις πτυχές: επαλήθευση παραμέτρων, επαλήθευση λειτουργίας και επαλήθευση επιχειρηματικού σεναρίου Τα παραδείγματα δοκιμής σχεδιασμού είναι τα εξής:

5. Ανάπτυξη σεναρίου

Με βάση το σχέδιο περίπτωσης δοκιμής που γράφτηκε παραπάνω, χρησιμοποιήσαμε το πλαίσιο python+nosetests για να γράψουμε σχετικά αυτοματοποιημένα σενάρια δοκιμών. Μπορεί να πραγματοποιήσει πλήρως τις λειτουργίες της αυτοματοποιημένης δοκιμής διεπαφής, της αυτόματης εκτέλεσης και της αποστολής μέσω email των αναφορών δοκιμών.

5.1 Σχετική εγκατάσταση lib

Οι απαραίτητες βιβλιοθήκες lib είναι οι εξής. Μπορείτε να τις εγκαταστήσετε χρησιμοποιώντας την εντολή pip:

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

5.2 Κλήση διεπαφής

Χρησιμοποιώντας τη βιβλιοθήκη αιτημάτων, μπορούμε εύκολα να γράψουμε την παραπάνω μέθοδο κλήσης διεπαφής (όπως η αναζήτηση για q=Andy Lau, το δείγμα κώδικα έχει ως εξής):

  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)

Όταν γράφουμε πραγματικά αυτοματοποιημένα δοκιμαστικά σενάρια, πρέπει να κάνουμε κάποια ενθυλάκωση. Στον παρακάτω κώδικα, ενσωματώνουμε τη διεπαφή αναζήτησης ταινιών Douban Η μέθοδος test_q χρειάζεται μόνο να χρησιμοποιήσει τη μέθοδο απόδοσης που παρέχεται από τα nosetests για να πραγματοποιήσει βολικό βρόχο σε κάθε δοκιμαστικό σύνολο στη λίστα 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,)

Μπορούμε να γράψουμε αυτοματοποιημένα σενάρια δοκιμών για κάθε συνάρτηση με τη σειρά σύμφωνα με το σχέδιο της δοκιμαστικής περίπτωσης.

5.3 Επαλήθευση αποτελεσμάτων
Όταν δοκιμάζουμε τη διεπαφή χειροκίνητα, πρέπει να κρίνουμε αν η δοκιμή περνάει με βάση τα αποτελέσματα που επιστρέφονται από τη διεπαφή.

Για αυτήν τη διεπαφή, αναζητούμε "q=Andy Lau" και πρέπει να προσδιορίσουμε εάν τα αποτελέσματα που επιστρέφονται περιέχουν "actor Andy Lau ή τίτλο ταινίας Andy Lau" Κατά την αναζήτηση για "tag=comedy", πρέπει να προσδιορίσουμε τον τύπο του ταινία στα επιστρεφόμενα αποτελέσματα Είτε είναι "κωμωδία", είναι απαραίτητο να επαληθεύσετε εάν ο αριθμός των επιστρεφόμενων αποτελεσμάτων είναι σωστός κατά την σελιδοποίηση των αποτελεσμάτων κ.λπ. Ο πλήρης κωδικός επαλήθευσης αποτελεσμάτων είναι ο εξής:

  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 Εκτέλεση δοκιμών

Για το παραπάνω σενάριο δοκιμής, μπορούμε να χρησιμοποιήσουμε την εντολή nosetests για να εκτελέσουμε εύκολα αυτοματοποιημένες δοκιμές και να χρησιμοποιήσουμε την προσθήκη αναφοράς nose-html για να δημιουργήσουμε αναφορές δοκιμών σε μορφή html.

Εκτελέστε την εντολή ως εξής:

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

5.5 Αποστολή αναφοράς μέσω email

Αφού ολοκληρωθεί η δοκιμή, μπορούμε να χρησιμοποιήσουμε τη μέθοδο που παρέχεται από τη μονάδα smtplib για να στείλουμε την αναφορά δοκιμής σε μορφή html. Η βασική διαδικασία είναι να διαβάσετε την αναφορά δοκιμής -> προσθήκη περιεχομένου και συνημμένων email -> σύνδεση στον διακομιστή αλληλογραφίας -> αποστολή email -> έξοδος.

  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. Ανάλυση αποτελεσμάτων

Ανοίξτε την αναφορά δοκιμής που δημιουργήθηκε μετά την εκτέλεση των δοκιμών μύτης Μπορεί να φανεί ότι εκτελέστηκαν συνολικά 51 περιπτώσεις δοκιμής σε αυτήν τη δοκιμή, 50 από τις οποίες ήταν επιτυχείς και μία από τις οποίες απέτυχε.

Στην περίπτωση αποτυχημένης χρήσης, μπορείτε να δείτε ότι οι παράμετροι που μεταβιβάστηκαν είναι: {"count": -10, "tag": "Comedy"} και ο αριθμός των αποτελεσμάτων που επιστράφηκαν αυτήν τη στιγμή δεν συνάδει με τα αναμενόμενα αποτελέσματα (όταν Η μέτρηση είναι αρνητικός αριθμός, το αναμενόμενο αποτέλεσμα είναι Η διεπαφή αναφέρει σφάλμα ή χρησιμοποιεί την προεπιλεγμένη τιμή 20, αλλά ο πραγματικός αριθμός των αποτελεσμάτων που επιστρέφονται είναι 189. Βιαστείτε και αναφέρετε το σφάλμα στο Douban - -)

7. Ολοκληρωμένο σενάριο
Έχω ανεβάσει το πλήρες αυτοματοποιημένο δοκιμαστικό σενάριο της διεπαφής αναζήτησης ταινιών Douban στο GitHub. Διεύθυνση λήψης: test_demo/test_douban στο master · lovesoo/test_demo · GitHub

Αφού ολοκληρωθεί η λήψη, χρησιμοποιήστε την ακόλουθη εντολή για να εκτελέσετε πλήρη δοκιμή αυτοματισμού διεπαφής και να στείλετε την τελική αναφορά δοκιμής μέσω email:

python test_doubanSearch.py
Τέλος στείλτε το email της αναφοράς δοκιμής, το στιγμιότυπο οθόνης είναι το εξής

Τέλος, θα ήθελα να ευχαριστήσω όλους όσους διαβάζουν προσεκτικά το άρθρο μου.

Αυτές οι πληροφορίες θα πρέπει να είναι η πιο ολοκληρωμένη και πλήρης αποθήκη για τους φίλους [δοκιμές λογισμικού] Αυτή η αποθήκη έχει επίσης συνοδεύσει δεκάδες χιλιάδες μηχανικούς δοκιμών στο πιο δύσκολο ταξίδι.