Technologieaustausch

Was ist Schnittstellentest und wie implementieren wir Schnittstellentests?

2024-07-12

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

1. Was ist Schnittstellentest?
Wie der Name schon sagt, dient der Schnittstellentest dazu, die Schnittstelle zwischen Systemen oder Komponenten zu testen, hauptsächlich um den Datenaustausch, Übertragungs- und Kontrollmanagementprozesse sowie gegenseitige logische Abhängigkeiten zu überprüfen. Die Schnittstellenprotokolle sind in HTTP, WebService, Dubbo, Thrift, Socket und andere Typen unterteilt. Die Testtypen sind hauptsächlich in Funktionstests, Leistungstests, Stabilitätstests, Sicherheitstests usw. unterteilt.

Im „Pyramiden“-Modell des mehrschichtigen Testens gehört das Schnittstellentesten zur zweiten Schicht des Service-Integrationstests. Im Vergleich zu automatisierten Tests auf der UI-Ebene (hauptsächlich WEB oder APP) bieten automatisierte Schnittstellentests größere Vorteile, sind einfach zu implementieren, weisen geringe Wartungskosten auf und weisen ein höheres Input-Output-Verhältnis auf. Sie sind die erste Wahl für die Durchführung automatisiertes Testen.

Im Folgenden nehmen wir eine HTTP-Schnittstelle als Beispiel, um den Testprozess der Schnittstellenautomatisierung vollständig vorzustellen: von der Anforderungsanalyse bis zum Anwendungsfalldesign, vom Skriptschreiben, der Testausführung bis zur Ergebnisanalyse und stellen vollständige Anwendungsfalldesign- und Testskripte bereit.

2. Grundlegender Prozess
Der grundlegende automatisierte Testprozess für Schnittstellenfunktionen ist wie folgt:

Anforderungsanalyse->Use-Case-Design->Skriptentwicklung->Testausführung->Ergebnisanalyse

2.1 Beispielschnittstelle
Schnittstellenname: Douban-Filmsuche

Adresse des Schnittstellendokuments: https://developers.douban.com/wiki/?title=movie_v2#search

Beispiel für einen Schnittstellenaufruf:

1) Suche nach Besetzung und Crew: https://api.douban.com/v2/movie/search?q=Zhang Yimou

2) Suche nach Filmtitel: https://api.douban.com/v2/movie/search?q=西游之西游

3) Suche nach Genre: https://api.douban.com/v2/movie/search?tag=comedy


3. Bedarfsanalyse
Die Anforderungsanalyse bezieht sich auf Dokumente wie Anforderungen und Design. Auf der Grundlage des Verständnisses der Anforderungen ist es auch erforderlich, die interne Implementierungslogik zu verstehen, und in dieser Phase können unangemessene oder ausgelassene Aspekte der Anforderungen und des Designs aufgezeigt werden.

Zum Beispiel: Die Douban-Filmsuchoberfläche besteht meines Wissens nach darin, die Suche nach Filmtiteln, Darstellern und Tags zu unterstützen und die Suchergebnisse auf Seiten zurückzugeben.

4. Anwendungsfalldesign
Das Anwendungsfalldesign basiert auf dem Verständnis der Schnittstellentestanforderungen und der Verwendung von Mindmapping-Software wie MindManager oder XMind zum Schreiben des Testfalldesigns. Der Hauptinhalt umfasst Parameterüberprüfung, Funktionsüberprüfung, Geschäftsszenarioüberprüfung, Sicherheits- und Leistungsüberprüfung usw. Wird häufig verwendet Zu den Anwendungsfallentwurfsmethoden gehören Äquivalenzklasseneinteilung, Grenzwertanalyse, Szenarioanalyse, Ursache-Wirkungs-Diagramme, orthogonale Tabellen usw.

Für den Funktionstest der Douban-Filmsuchschnittstelle konzentrieren wir uns hauptsächlich auf drei Aspekte: Parameterüberprüfung, Funktionsüberprüfung und Geschäftsszenarioüberprüfung. Die Beispiele für Designtests sind wie folgt:

5. Skriptentwicklung

Basierend auf dem oben beschriebenen Testfalldesign haben wir das Python+Nosetests-Framework verwendet, um relevante automatisierte Testskripte zu schreiben. Es kann die Funktionen des automatisierten Schnittstellentests, der automatischen Ausführung und des E-Mail-Versands von Testberichten vollständig realisieren.

5.1 Verwandte lib-Installation

Die erforderlichen Bibliotheken sind wie folgt: Sie können sie mit dem Befehl pip installieren:

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

5.2 Schnittstellenaufruf

Mit der Anforderungsbibliothek können wir problemlos die obige Methode zum Aufrufen der Schnittstelle schreiben (z. B. für die Suche nach q = Andy Lau, der Beispielcode lautet wie folgt):

  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)

Wenn wir tatsächlich automatisierte Testskripte schreiben, müssen wir eine gewisse Kapselung durchführen. Im folgenden Code kapseln wir die Douban-Filmsuchschnittstelle. Die Methode test_q muss nur die von Nosetests bereitgestellte Yield-Methode verwenden, um jeden Testsatz in der Liste qs bequem zu durchlaufen:

  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,)

Wir können automatisierte Testskripte für jede Funktion nacheinander entsprechend dem Testfalldesign schreiben.

5.3 Ergebnisüberprüfung
Beim manuellen Testen der Schnittstelle müssen wir anhand der von der Schnittstelle zurückgegebenen Ergebnisse beurteilen, ob der Test erfolgreich ist. Dasselbe gilt für automatisierte Tests.

Für diese Schnittstelle suchen wir nach „q=Andy Lau“ und müssen feststellen, ob die zurückgegebenen Ergebnisse „Schauspieler Andy Lau oder Filmtitel Andy Lau“ enthalten. Bei der Suche nach „tag=comedy“ müssen wir den Typ von bestimmen Wenn es sich um einen Film in den zurückgegebenen Ergebnissen handelt, muss beim Paginieren der Ergebnisse usw. überprüft werden, ob die Anzahl der zurückgegebenen Ergebnisse korrekt ist. Der vollständige Ergebnisbestätigungscode lautet wie folgt:

  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 Tests durchführen

Für das obige Testskript können wir den Befehl „nosetests“ verwenden, um auf einfache Weise automatisierte Tests auszuführen, und das Plug-in „nose-html-reporting“ verwenden, um Testberichte im HTML-Format zu generieren.

Führen Sie den Befehl wie folgt aus:

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

5.5 E-Mail-Bericht senden

Nachdem der Test abgeschlossen ist, können wir die vom Modul smtplib bereitgestellte Methode verwenden, um den Testbericht im HTML-Format zu senden. Der grundlegende Vorgang besteht darin, den Testbericht zu lesen -> E-Mail-Inhalt und Anhänge hinzuzufügen -> Verbindung zum Mailserver herzustellen -> E-Mail zu senden -> Beenden. Der Beispielcode lautet wie folgt:

  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. Ergebnisanalyse

Öffnen Sie den Testbericht, der nach der Ausführung von Nosetests erstellt wurde. Daraus ist ersichtlich, dass in diesem Test insgesamt 51 Testfälle ausgeführt wurden, von denen 50 erfolgreich waren und einer fehlschlug.

Im fehlgeschlagenen Anwendungsfall können Sie sehen, dass die übergebenen Parameter {"count": -10, "tag": "Comedy"} sind und die Anzahl der zu diesem Zeitpunkt zurückgegebenen Ergebnisse nicht mit unseren erwarteten Ergebnissen übereinstimmt (wann count ist eine negative Zahl, das erwartete Ergebnis ist Die Schnittstelle meldet einen Fehler oder verwendet den Standardwert 20, aber die tatsächliche Anzahl der zurückgegebenen Ergebnisse beträgt 189. Beeilen Sie sich und melden Sie den Fehler an Douban - -)

7. Vervollständigen Sie das Skript
Ich habe das vollständige automatisierte Testskript der Douban-Filmsuchoberfläche auf GitHub hochgeladen. Download-Adresse: test_demo/test_douban unter master · lovesoo/test_demo · GitHub

Nachdem der Download abgeschlossen ist, verwenden Sie den folgenden Befehl, um einen vollständigen Schnittstellenautomatisierungstest durchzuführen und den endgültigen Testbericht per E-Mail zu senden:

python test_doubanSearch.py
Senden Sie abschließend den Testbericht per E-Mail. Der Screenshot sieht wie folgt aus

Abschließend möchte ich mich bei allen bedanken, die meinen Artikel sorgfältig lesen. Gegenseitigkeit ist zwar keine sehr wertvolle Sache, aber wenn Sie sie nutzen können, können Sie sie direkt nutzen.

Diese Informationen sollten das umfassendste und vollständigste Vorbereitungslager für Freunde von [Softwaretests] sein. Dieses Lager hat auch Zehntausende von Testingenieuren auf der schwierigsten Reise begleitet.