Advertisement
argui

cypress

Nov 18th, 2022 (edited)
732
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Latex 10.60 KB | None | 0 0
  1. # **Einführung**
  2.  
  3. Ich werde euch heute was über Cypress erzählen, also um genauer zu sein: werde ich erstmal erklären was cypress selbst ist,dann was es für verschiedene Tests gibt, die Vor und Nachteile von Cypress im Gegensatz zu anderen sprachen dann werde ich den syntax zeigen, die wichtigsten befehle und dann ein Beispiel, keine sorge es wird sehr leicht. und dann zuguter letzt die quellen und so weil ja, braucht man wohl.
  4.  
  5. # **Was ist Cypress**
  6.  
  7. also erstmal WAS ist cypress? ich denke die meisten haben noch nichts davon gehört und das ging mir bis vor kurzem auch noch so. also cypress ist ein end to end testing framework das auf javascript basiert. es ist open source und wird mit mocha für UI Testing benutzt. da es direkt im browser läuft ist es perfekt da es die selben sachen machen kann wie der enduser und noch mehr.
  8.  
  9. # **Was gibt es für Tests**
  10.  
  11. hab vorhin den begiff end to end testing und UI testing benutzt aber was genau ist das eigentlich und was gibt es sonst für tests? es gibt hier so eine schöne testpyramide,
  12.  
  13. ganz unten sehen wir das unittesting, das testet die funktionen direkt IM code. also rein um zu sehen ob die einzelnen funktionen so funktionieren wie sie es sollten.
  14.  
  15. dann gibt es das integration testing, das testet die logik untereinander, ob zum beispiel funktion a mit funktion b richtig funktioniert. die beiden tests testen direkt im code selbst und sind deswegen ziemlich nützlich wenn man schauen will ob die logik hinter allem so funktioniert wie sie es sollte.
  16.  
  17. dann gibt es ganz oben noch das E2E testing - auch end to end testing. Das testet eben nicht den code oder die logik sondern direkt  das fertige produkt - wie eine website. das testet dann das fertige produkt wie der enduser es tun würde und ist deswegen auch sehr nützlich, die beste logik bringt nichts wenn man in der oberfläche dann ein ganz anderes problem damit hat.
  18.  
  19. # **Vor- und nachteile von Cypress**
  20.  
  21. zurück zu cypress selbst. also was gibt es denn für vorteile von cypress im gegensatz zu all den anderen sprachen da draußen? also erstmal, ich hab die vorteile in 4 gruppen aufgeteilt, einmal alles was timing angeht, dann die handhabung, funktionen und die logik dahinter fangen wir direkt mal mit einem der hauptgründe an, dass viele cypress angenehm finden.
  22.  
  23. ## **Positive Sachen**
  24.  
  25. ### Timing
  26.  
  27. man hat keine Async Hölle da Cypress automatisch auf  veränderungen, ladezeiten etc wartet. selbes gilt auch wenn links oder buttons deaktiviert sind,
  28.  
  29. es wartet auch wenn ladeanimationen vorkommen.
  30.  
  31. ### Handhabung
  32.  
  33. dann ist cypress viel konsistenter als andere sprachen, bei anderen sprachen kommt es öfter mal vor dass es aus irgendwelchen gründen random fehlschlagen. das hatte ich persönlich in cypress eigentlich erst 2 mal in mehreren tausenden tests.
  34.  
  35. cypress hat auch eine klar übersichtliche oberfläche wenn man headed testet. das läuft alles im browser (zeig ich später dann noch).
  36.  
  37. cypress speichert von jedem test einen snapshot, man kann also jederzeit zeitreisen und sogar sehen was vor und nach einer aktion passiert ist.
  38.  
  39. in der oberfläche ist es auch sehr sehr leicht css selektoren zu lokieren und finden. näheres dazu auch später
  40.  
  41. ausserdem supported es auch einige browser wie chrome, election, brave, Edge, firefox und deren varienten wie zb chrome canary
  42.  
  43. ### Funktionen
  44.  
  45. eine super nützliche funktion ist forceclick, cypress kann keine links oder buttons klicken die von einem dropdown zb überdeckt sind oder unsichtbar sind. mit forceclick kann man diese dann aber doch klicken.
  46.  
  47. es kann netzwerkanfragen faken wenn man zb einen 404 code testen will oder custom elements haben will.
  48.  
  49. es kann genauso auch apis anpingen und antworten abfragen
  50.  
  51. da es direkt im browser funktionert kann es den DOM und cookies so manipulieren wie es will.
  52.  
  53. cypress ist ein wenig limitiert was bestimmte sachen angeht aber da es das jquery framework direkt eingebaut hat gibt es quasi keine limitationen. man kann von node package manager sehr viele pakete runterladen welche sehr nützlich sein können.
  54.  
  55. ### Logik
  56.  
  57. wie vorhin genannt achtet es automatisch auf unsichtbaren und deaktivierte sachen.
  58.  
  59. es kümmert sich ausserdem auch automatisch um popups und klickt diese weg.
  60.  
  61. man kann auch hooks wie beforeEach benutzen.
  62.  
  63. ein großer vorteil ist auch dass man mit cypress component testing durchführen kann. das ist quasi ein mix aus unit und integration testing.
  64.  
  65. und aus diesen gründen ist cypress, wie man hier sieht auch topofthetop compared zu den anderen großen e2e testing apps.
  66.  
  67. ## **Negative Sachen**
  68.  
  69. natürlich ist cypress nicht perfekt, ich habe allerdings nicht allzuviele nachteile gefunden,
  70.  
  71. ### Timing
  72.  
  73. zu timing gibt es nicht allzuviel zu sagen, im gegensatz zu anderen sprachen ist es mit ein paar sekunden unterschied meistens die langsamste sprache.
  74.  
  75. bei allen e2e tests gibt es das problem dass es schwer ist die tests aufrechtzuerhalten, allein jetzt vor ein paar tagen als das neue dev portal kam musste ich einige tests umschreiben wegen neuem layout.
  76.  
  77. ### Handhabung
  78.  
  79. Mobiles testen wird leider nicht supportet, man kann zwar die resolution von der testwebsite umstellen aber nicht wirklich mobiles testen.
  80.  
  81. cypress kann von dem testen videos erstellen die man im nachhinein ansehen kann, diese sind allerdings nicht empfohlen, hatte keine gute erfahrung mit ihnen und sie kosten nach einer weile was.
  82.  
  83. Es gibt keinen browser support für safari oder internet explorer.
  84.  
  85. ausserdem ist dateien hochladen ziemlich schwer und von dem was ich hörte nicht wirklich konsistent.
  86.  
  87. ### Funktionen
  88.  
  89. man kann ausserdem nur einen browser gleichzeitig testen, wenn man mehrere browser testen will müsste man das danach machen.
  90.  
  91. der support für iframes ist auch limitiert, mit installierbaren pakete von npm ist es zwar besser aber trotzde, nicht nativ.
  92.  
  93. ### Logik
  94.  
  95. es ist auch nicht möglich mehrere tabs oder childwindows zu testen, man kann das mit tabs und so zwar umgehen mit DOM manipulation aber ist umständlich.
  96.  
  97. Backend testung ist nicht unmöglich aber da wäre man mit einer eigenen sprache besser.
  98.  
  99. da es direkt im browser läuft kann es nur javascript selbst testen und keine externen sachen.
  100.  
  101. # **Wie sieht Cypress aus**
  102.  
  103. das war jetzt viel rumgerede, gehen wir jetzt zum syntax der sprache. er ist sehr sehr leicht verständlich, fangen wir mal an mit dem ersten code den man braucht.
  104.  
  105. ## **Code**
  106.  
  107. das cy. am anfang steht immer da, damit sieht man dass es sich um cypress handelt, dann ein einfaches visit und in klammern die url wohin man will.
  108.  
  109. kommen wir zu dem wichtigsten aller commands, dem .get() command, wenn cypress sachen klicken oder überprüfen will weiß cypress natürlich nicht was es denn testen soll. deswegen fängt sogut wie jeder code mit cy.get an, in der klammer steht dann der css selektor wie zum beispiel textarea.
  110.  
  111. dann sagen wir wir haben mit cy.get einen button den wir klicken wollen, das machen wir einfach mit einem .click nach dem selektor. selbsterklärend was das macht.
  112.  
  113. dann sagen wir wir wollen nach etwas suchen in einem suchfeld, dann wieder cy.get und dann einfach .type und in der klammer das was wir schreiben wollen. da gehen natürlich auch variablen und so
  114.  
  115. sagen wir wir haben mehrere sachen gegeben und wollen schauen ob ein bestimmtes wort vorkommt, dann sagen wir cy.get und dann .should und in der klammer was es denn sollte da können sachen rein wie .should('be.visible') oder should('exist'). hier mit .should contain schauen wir ob der string "january" da irgendwo vorkommt.
  116.  
  117. das nächste wird am anfang bisschen verwirrend sein, es gibt nämlich auch einen einen .contains command, dieser checkt allerdings nicht ob es vorkommt sondern cycled durch die gegebenen sachen durch bis dieser string erreicht wird und klickt dann. (ja man kann die auch aufeinander reihen)
  118.  
  119. dann der letzte wirklich wichtige ist .eq, sagen wir wir haben 10 radio button und wollen den vierten klicken dann macht man .eq und dann eine drei in der klammer. die zahl in der klammer ist wie bei einem array, das erste ist null.
  120.  
  121. mit den paar kleinen codesnippets kann man schon extrem viel machen und man braucht eigentlich nur bei speziellen dingen kompliziertere sachen, als beispiel ist hier der code den ich geschrieben habe der automatisch den generierten permission code scannt und den generierten qr code scannt, in text umwandelt und schaut ob der permission code zu finden ist.
  122.  
  123. ## **Wie führt man Cypress aus**
  124.  
  125. wie führt man denn jetzt eigentlich cypress code aus?
  126.  
  127. als erstes schreibt man npx cypress open in die konsole und dann öffnet sich die cypress software, wenn man e2e testing durchführen will klickt man einfach auf e2e testing,
  128.  
  129. dann wählt man einfach den browser aus denn man haben will. ich persönlich würde canary empfehlen und irgendwie hat firefox nie geklappt bei mir
  130.  
  131. ab jetzt ist alles im browser dann öffnet sich die wunderschöne übersicht mit allen verfügbaren tests die man im angegebenen verzeichnis hat. dann klickt man einfach eines von denen und es beginnt direkt
  132.  
  133. und hier sieht man wie so ein test aufgebaut ist, auf der rechten seite in dem fenster ist live die website die getestet wird und auf der linken seite die tests. die oben sind die die schon fertig sind, das in der mitte der aktuell laufende und darunter die kommenden. man sieht hier auch was passiert. als erstes .get, dann checkt es ob das diese zahl erhält und klickt dann darauf. der rest sind netzwerkcalls und kann man ignorieren
  134.  
  135. wie vorhin schon gesagt ist es sehr leicht die css Selektoren zu bekommen, man klickt einfach oben da auf die zielscheibe und hovert über ein objekt es wird markiert wie im Inspektor wenn man F12 klickt im Browser. dann wird der einzigartige css selektor schon mit dem cy.get oben angezeigt und das kann man easy copypasten
  136.  
  137. wir wollen das ganze in gitlab am besten als pipeline haben, die tests würde dann immer durchgeführt werden bevor man mergen kann, das sollte das manuelle testen das Lea durchführt möglichst ersetzen. wie das ganze dann noch funktioniert müssten wir mal schauen aber so in etwa würde das ganze dann aussehen
  138.  
  139. wenn etwas schiefläuft oder man die reports sehen will würde ich auch die screenshots und reports als artifacts automatisch uploaden lassen die man sich hier runterladen und ansehen kann.
  140.  
  141. # **Quellen**
  142.  
  143. genauuuu, dann noch die quellen, das sind die quellen die ich für die infos benutzt hab, das hab ich für das zoomen in der powerpoint angeschaut und das sind die leute die die powerpoint ansehen mussten und mir feedback gabten.
  144.  
  145. # **Dankeschön**
  146.  
  147. das war es dann mit der präsentation, danke fürs zuhören und gibt es noch fragen?
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement