2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
1. Mitä on käyttöliittymätestaus?
Kuten nimestä voi päätellä, rajapintatestauksella testataan järjestelmien tai komponenttien välistä rajapintaa, lähinnä tiedonvaihdon, siirron ja ohjauksen hallintaprosessien sekä keskinäisten loogisten riippuvuuksien tarkistamiseksi. Käyttöliittymäprotokollat on jaettu HTTP-, WebService-, Dubbo-, Thrift-, Socket- ja muihin testityyppeihin.
Kerrostestauksen "pyramidi"-mallissa rajapintatestaus kuuluu palveluintegraatiotestauksen toiseen kerrokseen. Verrattuna käyttöliittymäkerroksen (pääasiassa WEB tai APP) automatisoituun testaukseen, käyttöliittymän automatisoidulla testauksella on enemmän etuja, se on helppo toteuttaa, sillä on alhaiset ylläpitokustannukset ja korkeampi panos-tuotossuhde. Se on jokaisen yrityksen ensimmäinen valinta automaattinen testaus.
Alla otamme HTTP-rajapinnan esimerkkinä esitelläksemme täysin käyttöliittymän automaation testausprosessin: vaatimusanalyysistä käyttötapausten suunnitteluun, komentosarjan kirjoittamisesta, testin suorittamisesta tulosanalyysiin ja tarjoamme täydellisen käyttötapaussuunnittelun ja testiskriptit.
2. Perusprosessi
Peruskäyttöliittymätoimintojen automaattinen testausprosessi on seuraava:
Vaatimusanalyysi->Käyttötapaussuunnittelu->Komentosarjojen kehitys->Testin suoritus-> Tulosanalyysi
2.1 Esimerkki käyttöliittymästä
Käyttöliittymän nimi: Douban-elokuvahaku
Käyttöliittymän asiakirjan osoite: https://developers.douban.com/wiki/?title=movie_v2#search
Esimerkki käyttöliittymän kutsumisesta:
1) Hae näyttelijöiden ja miehistön mukaan: https://api.douban.com/v2/movie/search?q=Zhang Yimou
2) Hae elokuvan nimen mukaan: https://api.douban.com/v2/movie/search?q=西游之西游
3) Hae genren mukaan: https://api.douban.com/v2/movie/search?tag=comedy
3. Tarve analyysi
Vaatimusanalyysillä tarkoitetaan asiakirjoja, kuten vaatimuksia ja suunnittelua. Vaatimusten ymmärtämisen pohjalta on myös ymmärrettävä sisäinen toteutuslogiikka, ja tässä vaiheessa voidaan tuoda esiin vaatimuksista ja suunnittelusta epätarkoituksenmukaisia tai pois jätettyjä puolia.
Esimerkiksi: Douban-elokuvahaun käyttöliittymä, vaatimus, jonka ymmärrän, on tukea elokuvien nimien, näyttelijöiden ja tunnisteiden hakua ja palauttaa hakutulokset sivuilla.
4. Käyttötapaussuunnittelu
Käyttötapausten suunnittelu perustuu rajapintojen testausvaatimusten ymmärtämiseen ja MindManagerin tai XMindin kaltaisten mielenkartoitusohjelmistojen käyttämiseen testitapauksen suunnittelun kirjoittamiseen. Pääsisältö sisältää parametrien todentamisen, toimintojen varmistuksen, liiketoimintaskenaarion varmistuksen, turvallisuuden ja suorituskyvyn todentamisen jne. Yleisesti käytetty. käyttötapausten suunnittelumenetelmiä ovat ekvivalenssiluokkajako, raja-arvoanalyysi, skenaarioanalyysi, syy-seurauskaaviot, ortogonaaliset taulukot jne.
Douban-elokuvahaun käyttöliittymän toimintotestiosassa keskitymme pääasiassa kolmeen näkökohtaan: parametrien varmentamiseen, toimintojen varmentamiseen ja liiketoimintaskenaarioiden varmentamiseen. Suunnittelutestiesimerkit ovat seuraavat:
Yllä kirjoitetun testitapauksen suunnittelun perusteella käytimme python+nosetests -kehystä asianmukaisten automaattisten testiskriptien kirjoittamiseen. Se voi täysin toteuttaa käyttöliittymän automatisoidun testauksen, automaattisen suorituksen ja testiraporttien lähettämisen sähköpostitse.
Tarvittavat lib-kirjastot ovat seuraavat. Voit asentaa ne pip-komennolla:
-
- pip install nose
-
- pip install nose-html-reporting
-
- pip install requests
Pyyntökirjaston avulla voimme helposti kirjoittaa yllä olevan käyttöliittymän kutsumenetelmän (kuten etsimällä q=Andy Lau, esimerkkikoodi on seuraava):
-
- #coding=utf-8
-
- import requests
-
- import json
-
-
- url = 'https://api.douban.com/v2/movie/search'
-
- params=dict(q=u'刘德华')
-
- r = requests.get(url, params=params)
-
- print 'Search Params:n', json.dumps(params, ensure_ascii=False)
-
- print 'Search Response:n', json.dumps(r.json(), ensure_ascii=False, indent=4)
Kun itse kirjoitamme automaattisia testiskriptejä, meidän on suoritettava kapselointi. Seuraavassa koodissa kapseloimme Douban-elokuvahaun käyttöliittymän. Test_q-menetelmän tarvitsee vain käyttää nosetestien tuottomenetelmää käydäkseen kätevästi läpi jokaisen luettelon qs-testijoukon.
-
- class test_doubanSearch(object):
-
-
- @staticmethod
-
- def search(params, expectNum=None):
-
- url = 'https://api.douban.com/v2/movie/search'
-
- r = requests.get(url, params=params)
-
- print 'Search Params:n', json.dumps(params, ensure_ascii=False)
-
- print 'Search Response:n', json.dumps(r.json(), ensure_ascii=False, indent=4)
-
-
- def test_q(self):
-
- # 校验搜索条件 q
-
- qs = [u'白夜追凶', u'大话西游', u'周星驰', u'张艺谋', u'周星驰,吴孟达', u'张艺谋,巩俐', u'周星驰,大话西游', u'白夜追凶,潘粤明']
-
- for q in qs:
-
- params = dict(q=q)
-
- f = partial(test_doubanSearch.search, params)
-
- f.description = json.dumps(params, ensure_ascii=False).encode('utf-8')
-
- yield (f,)
Voimme kirjoittaa automaattisia testiskriptejä jokaiselle funktiolle peräkkäin testitapauksen suunnittelun mukaan.
5.3 Tuloksen varmistus
Kun testataan käyttöliittymää manuaalisesti, meidän on arvioitava, läpäiseekö testi käyttöliittymän palauttamien tulosten perusteella. Sama pätee automaattiseen testaukseen.
Tätä käyttöliittymää varten etsimme sanaa "q=Andy Lau" ja meidän on määritettävä, sisältävätkö palautetut tulokset "näyttelijä Andy Lau vai elokuvan nimi Andy Lau". elokuva palautetuissa tuloksissa, onko se "komedia", on tarkistettava, onko palautettujen tulosten lukumäärä oikea, kun tuloksia sivutaan jne. Täydellinen tuloksen vahvistuskoodi on seuraava:
-
- class check_response():
-
- @staticmethod
-
- def check_result(response, params, expectNum=None):
-
- # 由于搜索结果存在模糊匹配的情况,这里简单处理只校验第一个返回结果的正确性
-
- if expectNum is not None:
-
- # 期望结果数目不为None时,只判断返回结果数目
-
- eq_(expectNum, len(response['subjects']), '{0}!={1}'.format(expectNum, len(response['subjects'])))
-
- else:
-
- if not response['subjects']:
-
- # 结果为空,直接返回失败
-
- assert False
-
- else:
-
- # 结果不为空,校验第一个结果
-
- subject = response['subjects'][0]
-
- # 先校验搜索条件tag
-
- if params.get('tag'):
-
- for word in params['tag'].split(','):
-
- genres = subject['genres']
-
- ok_(word in genres, 'Check {0} failed!'.format(word.encode('utf-8')))
-
-
- # 再校验搜索条件q
-
- elif params.get('q'):
-
- # 依次判断片名,导演或演员中是否含有搜索词,任意一个含有则返回成功
-
- for word in params['q'].split(','):
-
- title = [subject['title']]
-
- casts = [i['name'] for i in subject['casts']]
-
- directors = [i['name'] for i in subject['directors']]
-
- total = title + casts + directors
-
- ok_(any(word.lower() in i.lower() for i in total),
-
- 'Check {0} failed!'.format(word.encode('utf-8')))
-
-
- @staticmethod
-
- def check_pageSize(response):
-
- # 判断分页结果数目是否正确
-
- count = response.get('count')
-
- start = response.get('start')
-
- total = response.get('total')
-
- diff = total - start
-
-
- if diff >= count:
-
- expectPageSize = count
-
- elif count > diff > 0:
-
- expectPageSize = diff
-
- else:
-
- expectPageSize = 0
-
-
- eq_(expectPageSize, len(response['subjects']), '{0}!={1}'.format(expectPageSize, len(response['subjects'])))
Yllä olevalle testiskriptille voimme käyttää nosetests-komentoa automatisoitujen testien suorittamiseen helposti ja nose-html-raportointilaajennuksella html-muotoisten testiraporttien luomiseen.
Suorita komento seuraavasti:
nosetests -v test_doubanSearch.py:test_doubanSearch --with-html --html-report=TestReport.html
Kun testi on suoritettu, voimme lähettää html-muotoisen testiraportin smtplib-moduulin tarjoamalla menetelmällä. Perusprosessi on lukea testiraportti -> lisätä sähköpostin sisältöä ja liitteitä -> muodostaa yhteys sähköpostipalvelimeen -> lähettää sähköposti -> poistua.
-
- import smtplib
-
- from email.mime.text import MIMEText
-
- from email.mime.multipart import MIMEMultipart
-
-
- def send_mail():
-
- # 读取测试报告内容
-
- with open(report_file, 'r') as f:
-
- content = f.read().decode('utf-8')
-
-
- msg = MIMEMultipart('mixed')
-
- # 添加邮件内容
-
- msg_html = MIMEText(content, 'html', 'utf-8')
-
- msg.attach(msg_html)
-
-
- # 添加附件
-
- msg_attachment = MIMEText(content, 'html', 'utf-8')
-
- msg_attachment["Content-Disposition"] = 'attachment; filename="{0}"'.format(report_file)
-
- msg.attach(msg_attachment)
-
-
- msg['Subject'] = mail_subjet
-
- msg['From'] = mail_user
-
- msg['To'] = ';'.join(mail_to)
-
- try:
-
- # 连接邮件服务器
-
- s = smtplib.SMTP(mail_host, 25)
-
- # 登陆
-
- s.login(mail_user, mail_pwd)
-
- # 发送邮件
-
- s.sendmail(mail_user, mail_to, msg.as_string())
-
- # 退出
-
- s.quit()
-
- except Exception as e:
-
- print "Exceptioin ", e
Avaa nenätestien ajon jälkeen luotu testiraportti. Nähdään, että tässä testissä suoritettiin yhteensä 51 testitapausta, joista 50 onnistui ja yksi epäonnistui.
Epäonnistuneessa käyttötapauksessa voit nähdä, että välitetyt parametrit ovat: {"count": -10, "tag": "Comedy"}, ja tällä hetkellä palautettujen tulosten määrä on ristiriidassa odotettujen tulostemme kanssa (kun count on negatiivinen luku, odotettu tulos on Käyttöliittymä ilmoittaa virheestä tai käyttää oletusarvoa 20, mutta todellinen palautettujen tulosten lukumäärä on 189. Toimi nopeasti ja ilmoita virhe Doubanille - -)
7. Täydellinen käsikirjoitus
Olen ladannut Douban-elokuvahakuliittymän täydellisen automaattisen testiskriptin GitHubiin. Latausosoite: test_demo/test_douban at master · lovesoo/test_demo · GitHub
Kun lataus on valmis, suorita täydellinen käyttöliittymän automaatiotestaus ja lähetä lopullinen testiraportti sähköpostitse seuraavalla komennolla:
python test_doubanSearch.py
Lähetä lopuksi testiraportti sähköpostitse, kuvakaappaus on seuraava
Lopuksi haluan kiittää kaikkia, jotka lukevat artikkelini huolellisesti, vaikka se ei olekaan kovin arvokas asia, voit ottaa sen suoraan:
Tämän tiedon pitäisi olla kattavin ja täydellisin valmistautumisvarasto [ohjelmistotestauksen] ystäville. Tämä varasto on myös seurannut kymmeniä tuhansia testiinsinöörejä vaikeimman matkan läpi.