Tès chaj kòm yon sèvis CI pou devlopè yo

Tès chaj kòm yon sèvis CI pou devlopè yo

Youn nan pwoblèm ke founisè lojisyèl milti-pwodwi souvan fè fas a se repetisyon konpetans enjenyè yo - devlopè, tèsteur, ak administratè enfrastrikti - nan prèske chak ekip. Sa a tou aplike nan enjenyè chè - espesyalis nan jaden an nan tès chaj.

Olye pou yo fè devwa dirèk yo epi sèvi ak eksperyans inik yo pou konstwi yon pwosesis tès chaj, chwazi yon metodoloji, mezi optimal epi ekri ototès an akò ak pwofil chaj yo, enjenyè yo souvan oblije deplwaye enfrastrikti tès yo nan grafouyen, konfigirasyon zouti chaj, epi entegre yo. tèt yo nan sistèm CI, mete kanpe siveyans ak piblikasyon rapò.

Ou ka jwenn solisyon pou kèk pwoblèm òganizasyonèl nan tès ke nou itilize nan teknoloji pozitif nan yon lòt atik. Ak nan yon sèl sa a, mwen pral pale sou posibilite pou entegre tès chaj nan yon tiyo CI komen lè l sèvi avèk konsèp nan "tès chaj kòm yon sèvis" (tès chaj kòm yon sèvis). Ou pral aprann ki jan ak ki imaj docker nan sous chaj yo ka itilize nan tiyo CI a; ki jan yo konekte sous chaj nan pwojè CI ou a lè l sèvi avèk yon modèl bati; ki sa tiyo Demo a sanble pou fè tès chaj ak pibliye rezilta yo. Atik la ka itil pou enjenyè tès lojisyèl ak enjenyè automatisation nan CI ki ap panse sou achitekti sistèm chaj yo.

Sans nan konsèp la

Konsèp tès chaj kòm yon sèvis implique kapasite nan entegre zouti chaj Apache JMeter, Yandex.Tank ak pwòp kad ou a nan yon sistèm entegrasyon abitrè kontinyèl. Demo a pral pou GitLab CI, men prensip yo komen nan tout sistèm CI.

Tès chaj kòm yon sèvis se yon sèvis santralize pou tès chaj. Tès chaj yo fèt nan pisin ajan devwe, rezilta yo pibliye otomatikman nan GitLab Pages, Influx DB ak Grafana oswa nan sistèm rapò tès (TestRail, ReportPortal, elatriye). Otomatik ak dekale yo aplike kòm tou senpleman posib - lè yo ajoute ak paramètrize modèl abityèl gitlab-ci.yml nan pwojè GitLab CI.

Avantaj nan apwòch sa a se ke tout enfrastrikti CI a, ajan chaj yo, imaj docker sous chaj yo, tiyo tès yo, ak rapò piblikasyon yo konsève pa yon depatman automatisation santralize (enjenyè DevOps), pandan y ap enjenyè tès chaj yo ka konsantre efò yo sou devlopman tès yo. ak analiz de rezilta yo, san yo pa fè fas ak pwoblèm enfrastrikti.

Pou senplisite nan deskripsyon, nou pral asime ke aplikasyon an sib oswa sèvè anba tès la te deja deplwaye ak konfigirasyon davans (yo ka itilize scripts otomatik nan Python, SaltStack, Ansible, elatriye). Lè sa a, tout konsèp nan tès chaj kòm yon sèvis adapte nan twa etap: preparasyon, tès, piblikasyon rapò. Plis detay sou dyagram nan (tout foto yo ka klike sou):

Tès chaj kòm yon sèvis CI pou devlopè yo

Konsèp debaz ak definisyon nan tès chaj

Lè w ap pote tès chaj, nou eseye respekte ISTQB estanda ak metodoloji, sèvi ak tèminoloji apwopriye ak mezi rekòmande. Mwen pral bay yon lis kout nan konsèp prensipal yo ak definisyon nan tès chaj.

Chaj ajan - yon machin vityèl sou ki aplikasyon an pral lanse - sous chaj la (Apache JMeter, Yandex.Tank oswa yon modil chaj oto-ekri).

Objektif tès (sib) - sèvè oswa aplikasyon enstale sou sèvè a ki pral sijè a chaj.

Senaryo tès (ka tès) - yon seri etap paramètrize: aksyon itilizatè yo ak reyaksyon espere nan aksyon sa yo, ak demann rezo fiks ak repons, tou depann de paramèt yo espesifye.

Pwofil oswa plan chaj (pwofil) - nan Metodoloji ISTQB (Seksyon 4.2.4, p. 43) pwofil chaj defini mezi ki enpòtan pou yon tès patikilye ak opsyon pou chanje paramèt chaj pandan tès la. Ou ka wè egzanp Des nan figi a.

Tès chaj kòm yon sèvis CI pou devlopè yo

Tès — yon script ki gen yon seri paramèt predetèmine.

Plan tès (plan tès) - yon seri tès ak yon pwofil chaj.

Testran (testrun) - yon sèl iterasyon nan kouri yon tès ak yon senaryo chaj konplètman egzekite ak rapò a resevwa.

Rezo demann (demann) — Yon demann HTTP voye soti nan yon ajan nan yon sib.

Repons rezo (repons) — Yon repons HTTP voye soti nan sib la bay ajan an.
Kòd repons HTTP (estati repons HTTP) - kòd repons estanda ki soti nan sèvè aplikasyon an.
Yon tranzaksyon se yon sik konplè demann-repons. Yon tranzaksyon konte depi nan kòmansman an voye yon demann (demann) rive nan fini nan resevwa yon repons (repons).

Estati tranzaksyon an - si li te posib pou konplete avèk siksè sik demann-repons. Si te gen nenpòt erè nan sik sa a, Lè sa a, tout tranzaksyon an konsidere kòm san siksè.

Tan repons (latans) - tan ki soti nan fen voye yon demann (demann) rive nan kòmansman an nan resevwa yon repons (repons).

Chaje mezi — Karakteristik yo nan sèvis la chaje ak ajan an chaj detèmine nan pwosesis la nan tès chaj.

Paramèt debaz pou mezire paramèt chaj yo

Gen kèk nan pi souvan itilize ak rekòmande nan metodoloji a ISTQB (p. 36, 52) yo montre paramèt yo nan tablo ki anba a. Paramèt menm jan an pou ajan ak sib yo ki nan lis sou menm liy lan.

Metris pou ajan chaj la
Paramèt nan sistèm sib la oswa aplikasyon ke yo te teste anba chaj

Nimewo  vCPU ak memwa RAM,
Ki gen kapasite - "fè" karakteristik ajan chaj la
CPU, Memwa, Itilizasyon Disk - dinamik de CPU, memwa ak disk loading
nan pwosesis tès la. Anjeneral mezire kòm yon pousantaj de
valè maksimòm ki disponib

debi rezo a (sou ajan chaj) - debi
koòdone rezo sou sèvè a,
kote ajan chaj la enstale.
Anjeneral mezire an byte pou chak segonn (bps)
debi rezo a(sou sib) - rezo koòdone Pleasant
sou sèvè sib la. Anjeneral mezire an byte pou chak segonn (bps)

Itilizatè vityèl yo- kantite itilizatè vityèl,
mete ann aplikasyon senaryo chaj ak
imite aksyon reyèl itilizatè yo
Estati itilizatè vityèl yo, Pase/Echwe/Total — kantite siksè ak
estati san siksè nan itilizatè vityèl
pou senaryo chaj, osi byen ke kantite total yo.

Li jeneralman espere ke tout itilizatè yo te kapab ranpli
tout travay ou espesifye nan pwofil la chaj.
Nenpòt erè pral vle di ke yon itilizatè reyèl pa pral kapab
rezoud pwoblèm ou lè w ap travay ak sistèm lan

Demann pou chak segonn (minit)- kantite demann rezo pou chak segonn (oswa minit).

Yon karakteristik enpòtan nan yon ajan chaj se konbyen demann li ka jenere.
An reyalite, sa a se yon imitasyon aksè nan aplikasyon an pa itilizatè vityèl
Repons pou chak segonn (minit)
- kantite repons rezo pa segonn (oswa minit).

Yon karakteristik enpòtan nan sèvis la sib: konbyen lajan
jenere epi voye repons a demann ak
ajan chaje

Estati repons HTTP- kantite kòd repons diferan
soti nan sèvè aplikasyon an resevwa pa ajan chaj la.
Pa egzanp, 200 OK vle di yon apèl siksè,
ak 404 - ke resous la pa te jwenn

Latans (tan repons) - tan depi nan fen an
voye yon demann (demann) anvan yo kòmanse resevwa yon repons (repons).
Anjeneral mezire an milisgond (ms)

Tan repons tranzaksyon an- tan nan yon sèl tranzaksyon konplè,
fini sik demann-repons.
Sa a se tan ki soti nan kòmansman an nan voye demann lan (demann)
jiskaske yo fin resevwa yon repons (repons).

Tan tranzaksyon an ka mezire an segonn (oswa minit)
nan plizyè fason: konsidere minimòm la,
maksimòm, mwayèn ak, pou egzanp, 90yèm percentile la.
Lekti minimòm ak maksimòm yo ekstrèm
estati pèfòmans sistèm lan.
Katrevendisyèm percentile se pi souvan itilize a,
jan li montre pifò itilizatè yo,
alèz opere nan papòt la nan pèfòmans sistèm

Tranzaksyon pou chak segonn (minit) - kantite konplè
tranzaksyon pou chak segonn (minit),
sa vle di, konbyen aplikasyon an te kapab aksepte ak
pwosesis demann ak bay repons.
An reyalite, sa a se debi sistèm lan

Estati tranzaksyon an , Pase / Echwe / Total - nimewo
siksè, san siksè ak kantite total tranzaksyon yo.

Pou itilizatè reyèl san siksè
tranzaksyon an pral aktyèlman vle di
enkapasite pou travay ak sistèm nan anba chaj

Chaj Tès Schematic Dyagram

Konsèp tès chaj la trè senp epi li konsiste de twa etap prensipal, ke mwen te deja mansyone: Prepare-Tès-Rapò, se sa ki, prepare objektif tès ak fikse paramèt pou sous chaj, Lè sa a, egzekite tès chaj epi, nan fen a, jenere ak pibliye yon rapò tès.

Tès chaj kòm yon sèvis CI pou devlopè yo

Nòt chematik:

  • QA.Tester se yon ekspè nan tès chaj,
  • Sib se aplikasyon an sib pou ki ou vle konnen konpòtman li anba chaj.

Klasifikasyon antite, etap ak etap nan dyagram nan

Etap ak etap
Kisa k ap pase
Ki sa ki nan antre
Ki sa ki se pwodiksyon an

Prepare: etap preparasyon pou tès la

LoadParameters
Anviwònman ak inisyalizasyon
itilizatè
paramèt chaj,
chwa nan metrik ak
preparasyon plan tès la
(chaje pwofil)
Opsyon koutim pou
chaj ajan inisyalizasyon
Plan tès la
Objektif tès la

VM
Deplwaman nwaj
machin vityèl ak
karakteristik ki nesesè yo
Anviwònman VM pou ajan chaj
Scripts automatisation pou
Kreyasyon VM
VM configuré nan
nwaj

Voye
OS konfigirasyon ak preparasyon
anviwònman pou
chaj ajan travay
Anviwònman anviwònman pou
ajan chaj
Scripts automatisation pou
anviwònman anviwònman
Anviwònman prepare:
OS, sèvis ak aplikasyon,
nesesè pou travay
ajan chaj

LoadAgents
Enstalasyon, konfigirasyon ak paramètrizasyon
ajan chaje.
Oswa telechaje yon imaj docker soti nan
sous chaj prekonfigire
Chaje sous docker imaj
(YAT, JM oswa kad pwòp tèt ou ekri)
Anviwònman
ajan chaj
Mete kanpe epi pare
pou travay chaj ajan

Tès: etap nan ekzekisyon tès chaj yo. Sous yo se ajan chaj ki deplwaye nan pisin ajan devwe pou GitLab CI

Chaj
Kòmanse ajan chaj la
ak plan tès chwazi
ak paramèt chaj
Opsyon itilizatè
pou inisyalizasyon
ajan chaj
Plan tès la
Objektif tès la
Egzekisyon mòso bwa
tès chaj
Sistèm mòso bwa
Dinamik chanjman nan mezi objektif ak ajan chaj

Kouri ajan yo
Egzekisyon ajan
anpil scripts tès yo
an akò avèk
pwofil chaj
Entèaksyon ajan chaj
nan bi pou fè tès la
Plan tès la
Objektif tès la

Mòso bwa
Koleksyon "kri" mòso bwa
pandan tès chaj:
chaj dosye aktivite ajan yo,
eta sib tès la
ak VM a kouri ajan an

Egzekisyon mòso bwa
tès chaj
Sistèm mòso bwa

Mesures
Kolekte "kri" mezi pandan tès la

Dinamik chanjman nan metrik objektif yo
ak ajan chaj

Rapò: etap preparasyon rapò tès la

Dèlko
Pwosesis kolekte
sistèm chaje ak
sistèm siveyans "kri"
metrik ak mòso bwa
Fòmasyon yon rapò nan
fòm moun lizib
posib ak eleman
analis yo
Egzekisyon mòso bwa
tès chaj
Sistèm mòso bwa
Dinamik chanjman nan metrik
sib ak chaj ajan
Pwosesis "kri" mòso bwa
nan yon fòma apwopriye pou
telechaje nan depo ekstèn
Rapò chaj estatik,
moun-lizib

Pibliye
Piblikasyon rapò a
sou chaj
tès nan ekstèn
sèvis
Trete "kri"
mòso bwa nan yon fòma apwopriye
pou dechaje nan ekstèn
depo
Sove nan ekstèn
rapò depo sou
chaj, apwopriye
pou analiz imen

Konekte sous chaj nan yon modèl CI

Ann ale nan pati pratik la. Mwen vle montre kouman sou kèk pwojè nan konpayi an Teknoloji pozitif nou te aplike konsèp nan tès chaj kòm yon sèvis.

Premyèman, avèk èd enjenyè DevOps nou yo, nou te kreye yon rezèvwa ajan devwe nan GitLab CI pou fè tès chaj yo. Pou nou pa konfonn yo nan modèl ak lòt moun, tankou pisin asanble, nou te ajoute tags nan ajan sa yo, tags: chaj. Ou ka itilize nenpòt lòt tags ki konprann. Yo mande pandan enskripsyon an GitLab CI kourè.

Ki jan yo chèche konnen pouvwa ki nesesè pa pyès ki nan konpitè? Karakteristik yo nan ajan chaj - yon kantite ase nan vCPU, RAM ak Disk - ka kalkile ki baze sou lefèt ke Docker, Python (pou Yandex.Tank), GitLab CI ajan, Java (pou Apache JMeter) ta dwe kouri sou ajan an. . Pou Java anba JMeter, li rekòmande tou pou itilize yon minimòm de 512 MB RAM epi, kòm yon limit siperyè, 80% memwa disponib.

Kidonk, dapre eksperyans nou, nou rekòmande pou itilize omwen 4 vCPU, 4 GB RAM, 60 GB SSD pou ajan chaj. Debi kat rezo a detèmine ki baze sou kondisyon pwofil chaj la.

Nou sitou itilize de sous chaj - Apache JMeter ak Yandex.Tank imaj docker.

Yandex.Tank se yon zouti sous louvri soti nan Yandex pou tès chaj. Achitekti modilè li yo baze sou dèlko demann HTTP asynchrone wo-pèfòmans ki baze sou frape. Tank la gen yon siveyans entegre nan resous yo nan sèvè a anba tès atravè pwotokòl la SSH, ka otomatikman sispann tès la nan kondisyon espesifye, ka montre rezilta yo tou de nan konsole a ak nan fòm lan nan graf, ou ka konekte modil ou yo. li pou elaji fonctionnalités. By wout la, nou te itilize tank la lè li pa t 'ankò endikap. Nan atik la "Yandex.Tank ak automatisation tès chaj» ou ka li istwa sou fason nou te fè tès chaj avèk li an 2013 PT Aplikasyon Firewall se youn nan pwodwi konpayi nou an.

Apache JMeter se yon zouti tès chaj sous louvri soti nan Apache. Li ka itilize egalman byen pou teste aplikasyon entènèt estatik ak dinamik. JMeter sipòte yon gwo kantite pwotokòl ak fason yo kominike avèk aplikasyon yo: HTTP, HTTPS (Java, NodeJS, PHP, ASP.NET, elatriye), SOAP / REST Webservices, FTP, TCP, LDAP, SMTP(S), POP3( S)) ak IMAP(S), baz done atravè JDBC, ka egzekite kòmandman koki ak travay ak objè Java. JMeter gen yon IDE pou kreye, debogaj ak egzekite plan tès yo. Genyen tou yon CLI pou operasyon liy lòd sou nenpòt sistèm opere Java konpatib (Linux, Windows, Mac OS X). Zouti a ka dinamik jenere yon rapò tès HTML.

Pou fasil pou itilize nan konpayi nou an, pou kapasite tèsteur yo tèt yo chanje epi ajoute anviwònman an, nou te fè bati imaj docker nan sous chaj sou GitLab CI ak piblikasyon nan entèn yo. docker rejis nan Artifactory. Sa fè li pi vit ak pi fasil pou konekte yo nan tiyo pou tès chaj. Ki jan fè Docker pouse nan rejis atravè GitLab CI - gade enstriksyon.

Nou te pran fichye docker debaz sa a pou Yandex.Tank:

Dockerfile 
1 | FROM direvius/yandex-tank
2 | ENTRYPOINT [""]

Epi pou Apache JMeter sa a:

Dockerfile 
1 | FROM vmarrazzo/jmeter
2 | ENTRYPOINT [""]

Ou ka li kijan sistèm entegrasyon kontinyèl nou an ap travay nan atik la "Otomatik nan pwosesis devlopman: ki jan nou aplike lide DevOps nan Positive Technologies'.

Modèl ak tiyo

Yon egzanp yon modèl pou fè tès chaj ki disponib nan pwojè a chaj Demo. Nan fichye readme Ou ka li enstriksyon yo pou itilize modèl la. Nan modèl la li menm (fichye .gitlab-ci.yml) gen nòt sou sa chak etap responsab pou.

Modèl la trè senp epi li montre twa etap tès chaj yo dekri nan dyagram ki anwo a: prepare, tès, ak pibliye rapò. Responsab pou sa etap: Prepare, teste ak rapò.

  1. Etap Prepare ta dwe itilize pou preconfigure sib tès yo oswa tcheke disponiblite yo. Anviwònman an pou sous chaj pa bezwen konfigirasyon, yo pre-bati kòm imaj docker ak afiche nan rejis la docker: jis presize vèsyon an vle nan etap la Tès. Men, ou ka rebati yo epi fè pwòp imaj modifye ou.
  2. Etap Tès itilize pou presize sous chaj la, fè tès yo, epi estoke zafè tès yo. Ou ka chwazi nenpòt sous chaj: Yandex.Tank, Apache JMeter, pwòp ou a, oswa tout ansanm. Pou enfim sous ki pa nesesè yo, jis kòmante oswa efase travay la. Pwen antre pou sous chaj:

    Remak: Modèl konfigirasyon asanble a itilize pou mete kanpe entèraksyon ak sistèm CI a epi li pa vle di plasman lojik tès ladan l. Pou tès yo, yo espesifye pwen antre a, kote script bash kontwòl la sitiye. Metòd pou fè tès yo, jenere rapò, ak scripts tès yo tèt yo dwe aplike pa enjenyè QA. Nan Demo a, pou tou de sous chaj yo, yo itilize demann Yandex paj prensipal la kòm tès ki pi senp. Scripts ak paramèt tès yo nan anyè a ./tès.

  3. Nan etap la Rapò ou bezwen dekri kijan pou pibliye rezilta tès yo jwenn nan etap Tès la nan depo ekstèn, pou egzanp, nan Paj GitLab oswa nan sistèm rapò espesyal. GitLab Pages mande pou anyè ./public la pa vid epi li genyen omwen yon fichye index.html apre tès yo fini. Ou ka li sou nuans sèvis GitLab Pages la. по ссылке.

    Egzanp ki jan yo ekspòte done:

    Afiche enstriksyon konfigirasyon:

Nan egzanp Demo a, tiyo a ak tès chaj ak de sous chaj (ou ka enfim yon sèl ki pa nesesè) sanble sa a:

Tès chaj kòm yon sèvis CI pou devlopè yo

Apache JMeter ka jenere yon rapò HTML tèt li, kidonk li se pi pwofitab pou konsève pou li nan Paj GitLab lè l sèvi avèk zouti estanda. Men ki jan rapò Apache JMeter la sanble:

Tès chaj kòm yon sèvis CI pou devlopè yo

Nan egzanp lan Demo pou Yandex.Tank, ou pral sèlman wè fo rapò tèks nan seksyon pou Paj GitLab yo. Pandan tès la, tank la ka sove rezilta yo nan baz done InfluxDB, epi soti nan la yo ka parèt, pou egzanp, nan Grafana (konfigirasyon yo fè nan dosye a. ./tests/example-yandextank-test.yml). Men ki jan rapò Tank la sanble nan Grafana:

Tès chaj kòm yon sèvis CI pou devlopè yo

Rezime

Nan atik la, mwen te pale sou konsèp "chaj tès kòm yon sèvis" (chaj tès kòm yon sèvis). Lide prensipal la se sèvi ak enfrastrikti pisin ajan chaj pre-konfigirasyon, imaj docker sous chaj, sistèm rapò ak yon tiyo ki konbine yo nan GitLab CI ki baze sou yon modèl senp .gitlab-ci.yml (egzanp). по ссылке). Tout sa a se sipòte pa yon ti ekip nan enjenyè automatisation ak repwodui nan demann lan nan ekip pwodwi yo. Mwen espere ke sa a pral ede w nan prepare ak aplike yon konplo menm jan an nan konpayi ou. Mèsi pou atansyon!

PS Mwen vle di yon gwo mèsi ak kòlèg mwen yo, Sergey Kurbanov ak Nikolai Yusev, pou asistans teknik ak aplikasyon an nan konsèp nan tès chaj kòm yon sèvis nan konpayi nou an.

Author: Timur Gilmullin - Depite Chèf Teknoloji ak Pwosesis Devlopman (DevOps) nan Positive Technologies

Sous: www.habr.com

Add nouvo kòmantè