Övningar till API-kurs 2021-12-08

Testa med webbläsare

Gå till URL:en nedan. Vad är det du ser? Går det att härleda ur URL:en?
https://damberg.one/digitaltestardy/api/leaderBoard.php

Förstå en URL

Ur nedanstående URL:er kan du se vilket som är query parameters, vilket är protokoll-information, vad är port, vilken är host, vad är resource-path, vad är inloggningskonto och vad är lösenord?

Övning A

                https://animalbase.com/landbased/fourlegged?name=ferret
            
Protokoll:________________________________
Base URL/Host:____________________________
Port:_____________________________________
Resource path:____________________________
Query parameter:_________________________

Övning B

                http://acctest.animalbase.com/seabased/fenanimals?name=ferret&color=purple
            
Protokoll:________________________________
Base URL/Host:____________________________
Resource path:____________________________
Query parameters:_________________________

Övning C

                http://animalbase.com:8088/flyers/page?wincount=2&color=black
            
Protokoll:________________________________
Base URL/Host:____________________________
Port:_____________________________________
Resource path:____________________________
Query parameters:_________________________

Övning D

                http://admin:dogowner@ver.animalbase.com/earthdiggers/page?name=worm
            
Protokoll:________________________________
Base URL/Host:____________________________
Resource path:____________________________
Inloggning:_______________________________
Query parameter:_________________________

Övning E

                ftp://animalbase.com:1414/resources/animallist.json
            
Protokoll:________________________________
Base URL/Host:____________________________
Port:_____________________________________
Resource path:____________________________

Övning F

                facetime://contact.animalbase.com/connect
            
Protokoll:________________________________
Base URL/Host:____________________________
Resource path:____________________________

Övning G

                file://c/temp/output.log
            
Protokoll:________________________________
Base URL/Host:____________________________
Resource path:____________________________

Övning H

                imap://joda:topsecret@animalbase.com:443/find?subject=hello_world
            
Protokoll:________________________________
Base URL/Host:____________________________
Port:_____________________________________
Resource path:____________________________
Inloggning:_______________________________
Query parameter:__________________________  

GET och POST mot REST service

Gå till följande API-övning och utför instruktionerna där.

MIME-koder

HTTP headers är meta-information för hur man vill att medsänd information ska tolkas och användas. Det är inte tvingande, men de flesta tjänster hörsammar dem.

MIME-koder skickar information om hur data man sänder in till en REST-tjänst är formatterat, och vilket data-format man önskar sig tillbaka i response.

På motsvarande sätt kan man ange teckentabeller och liknande, men här handlar det t.ex. om formulärdata, XML eller JSON.

  1. Ladda hem en simpel REST server här: https://damberg.one/lab/RestServer.zip.
  2. Zippa upp filen och starta denna jar-fil. Du bör få upp en Java-dialog där du kan leka med en databas med anställda. Den har ett REST-API.
    screenshot
    I övre fältet visas eventuella inkommande requests exakt som de uppfattas av servern.
    I undre fältet ses vilka anställda som ligger i databasen vid varje tillfälle.
  3. Läs API-beskrivningen genom att trycka på knappen. Förstår du vad det går att göra med API:et?
  4. Starta HTTP-klienten genom att klicka på knappen.
    screenshot
  5. Prova att göra en GET-request.
    Vilka HTTP headers får du tillbaka? Vad säger den informationen dig?
    Vilket format får du tillbaka data på?
    Var det det data du förväntade dig?
  6. Prova om du kan få tillbaka data i XML-format
  7. Vad händer om du hämtar data i formatet "Text/Plain"?
  8. Prova att lägga till dig själv som anställd genom ett POST-anrop. Du har API-beskrivningen till hjälp.
    Kan du se hur servern uppfattade din förfrågan?
    Blev du tillagd i databasen?
  9. Prova att ta bort Berit Svenblad. Gick det bra?
  10. Vad händer om du öppnar en webbläsare mot http://127.0.0.1:8080/api?
    Varför ser du data i det formatet?
  11. Har du något annat verktyg som kan interagera med REST-tjänsten installerat på din dator? Prova med det om du har något sådant.

XML-filens delar - och validering av XML

Kika på följande XML-fil. Det handlar om en skeppningsorder för vissa böcker.

Om man tar en rad som <orderperson>John Smith</orderperson> så är 'orderperson' ett elementnamn eller typ. Texten i är dess data.

Första raden berättar att det är ett XML-dokument. Sedan följer element. Förutom elementnamnet finns extrainformation inom hak-klamrarna. Den kallas för attribut. Hittar du något attribut?

Validera XML-filens innehåll så att det verkar stämma. Det kan göras programatiskt eller t.ex. här: https://www.w3schools.com/xml/xml_validator.asp.
Denna typ av validering kontrollerar bara filen mot XML-standarden. Du kommer förmodligen att finna ett fel i filen. Rätta detta fel och spara filen lokalt.

Det finns även information om hur XML ska valideras, men det kommer vi till i nästa övning.

Läsa XSD-fil

Kika på följande XML-fil. Det handlar om en skeppningsorder för vissa böcker. Sätt dig in i vad det är för typ av information.

Hur vet vi att denna information är korrekt ifylld? Jämför med denna relaterade XSD-fil.
Går det att förstå vad XSD-filen stipulerar?

Surfa fram någon tjänst för "Validate XML against XSD" och prova om XML-filen uppfyller kraven i XSD-filen.

Installera Postman och bekanta dig med det

Kolla in Postmans hemsida och ladda ner och installera programmet om du inte redan har det installerat.

  1. Starta programmet och bekanta dig med det. Om du är helt ny till Postman, kolla gärna på https://learning.postman.com/docs/getting-started/introduction/ för ledning.
  2. Vad är en Collection för något i Postman-världen?
  3. Vilka typer av filformat finns det för API-beskrivningar? Vilket skulle du välja?
  4. När kan man tänkas vilja skapa en mock-server?

Hantera husdjur

Pet store är en REST-tjänst för att adoptera herrelösa husdjur.

Din uppgift är att registrera ett husdjur, kolla så att det ligger registrerat i databasen och därefter ta bort detta husdjur.
Genomförs med valfritt verktyg (t.ex. Postman).

Serien bör bli POST, GET, DELETE. Information om API:et finns på länken nedan.
http://petstore.swagger.io/

Tänk på HTTP headers, verb och body.

Eventuell extrauppgift

Fånga det skapade id:t på djuret och korrelera detta i efterföljande teststeg så att det går att automatisera hela flödet på ett kontinuerligt repetetivt sätt.

Kontrollera response i HTTP

I övningen ovanför: Lägg in kontroller av att HTTP statuskod är 200 i samtliga HTTP responses.

Kontrollera även att namnet på husdjuret är rätt, och att status blir det förväntade.

Ser du någonstans utskrivet att 200 betyder OK?

Läsa Swagger-fil

Kika på Swagger-filen för Pet store.
Vilka fält är obligatoriska?
Ser du några likheter med en XSD-fil?

Djurräkning

Din uppgift nu är att räkna hur många djur det finns.

Api REST Service: https://petstore.swagger.io/"

Endpoint för test: v2/pet/findByStatus

Metod att använda: getPetsByStatus

Inloggning med OAuth2

Denna övning kan(tm) vara jobbigare

Logga in på Pet store-tjänsten.
User: test
Password: abc123

JMeter

Du ska nu göra en smärre prestandatest av en REST-tjänst byggd i PHP.

Med JMeter: Skapa ett script som i tre iterationer hämtar data från följande API med två parallella trådar: https://damberg.one/digitaltestardy/api/leaderBoard.php

Generera klasser från XSD

För C#: Kolla in verktygen på https://docs.microsoft.com/en-us/dotnet/standard/serialization/xml-schema-definition-tool-xsd-exe

För Java: Kolla in https://cxf.apache.org/cxf-xjc-plugin.html

Dessa är verktyg för att, från en XSD-fil, generera upp klass-strukturer för testobjekten. På PRV använde vi t.ex. CDX XSD2JAVA, och på FORA används XSD.exe (med lite handpåläggning) för att generera upp nuget-paket för testdata åt testautomatisering mot Lumera Inca.

  1. Kontrollera om du har xsd.exe på din dator. Om du inte har den kan du ladda hem den filen.
  2. Ladda hem filen https://damberg.one/lab/microsoftimport.xsd
  3. Generera upp klassfil utifrån denna specifikation med hjälp av xsd.exe
    Tips: Sätt dig in i kommandoradssyntaxen, och glöm inte att stå i rätt katalog.
  4. Kan du förstå vad som är genererat?

Skapa enhetstester för att testa API

Använd JUnit, NUnit, MS Test, Karma eller liknande för att göra om testerna mot Pet Store.

Riktigt stora XML-filer

Ibland är XML-filerna enorma - flera GB. Googla på olika text-editorer som kan hantera riktigt stora filer. Notera namnen.

Skapa en egen REST-tjänst

Använd ditt favorit-språk och skriv en egen REST-tjänst för att prova på vilka parametar som går att styra.