6. Wersja 1.0
● start projektu - testy API
● gatling jako framework testowy (testy funkcjonalne + wydajnościowe)
● model danych
○ tekst/mapy
○ json wrapper
9. Wersja 1.0
● zalety
○ szybkość tworzenia
○ możliwość użycia w innych narzędziach
○ zrozumiałe dla nietechnicznej osoby
● problemy
○ ciężkie do utrzymania przy zmieniającym się modelu, powiązaniu danych i dużej ilości testów
○ ciężkie do użycia poza frameworkiem testowym
10. Nowe wymagania
● powstają aplikacje webowe
○ test są dość wolne - problem przy CI/CD
○ nie wszystkie dane da się stworzyć z użyciem strony internetowej
○ użycie API do przygotowania danych
● narzędzia
○ potrzeba narzędzi do analizy danych
● problemy z frameworkiem testowym
○ dość wolne wdrożenie
○ brak wsparcia IDE
13. Wersja 2.0
● zmiana frameworka testowego
● tests-model
○ proste klasy opisujące model danych request/response nie związane z żadnym frameworkiem
testowym
○ zależności pomiędzy obiektami
○ samplery: przykładowe obiekty w danym stanie
14. case class ChatMessage(
`type`: String,
content: MessageContent,
sender: Option[AccountReference] = None,
tags: Option[Array[String]] = None,
sentAt: Option[String] = None
)
case class AccountReference(id: Int, `type`: String, name: String)
case class MessageContent(text: String)
19. var history = ChatService.chatWithHistory(staffSession, universeId, customerAccount.`type`.get,
chatId)
assert(history.id == chatId, "ChatHistory id should be equal customerId")
assert(history.messages.size == 5, "Five messages should be created")
assert(history.participants.size == 2, "Two participants should be included in chat")
inside (history.messages.head) { case ChatMessage(_type, content, sender, tags, sentAt) =>
_type should be ("something")
sentAt.get should startWith("prefix")
tags should contain("one", "two")
}
20. Wersja 2.0
● tests-web
○ możliwość użycia warstwy serwisów do przygotowania danych
○ możliwość sprawdzenia stanu danych (eventy)
○ asercje z użyciem obiektów modelu
21. class DisplayEventTest extends BaseSuite {
behavior of "Events page"
it should "display event with proper data" taggedAs Smoke in {
val (operatorEvent, operatorMarket) = EventProvider.createStartFootballMatchWinnerEvent()
Backoffice.open().login()
val tradingPage = Backoffice.openTradingPage()
val eventPage = tradingPage.openEventPage(operatorEvent.id.get)
operatorEvent.name shouldBe eventPage.eventName.getText
operatorEvent.id.get shouldBe eventPage.eventId.getText
operatorEvent.display.get shouldBe eventPage.isEventShow()
operatorEvent.active.get shouldBe eventPage.isEventActive()
operatorEvent.timeSettings.get.startTime.substring(0,10) shouldBe eventPage.startTime.getText.
substring(0,10)
}
}
22. Wersja 2.0
● zalety
○ łatwość wprowadzania zmian/utrzymania kodu
○ czytelność kodu
○ szybkie testy przeglądarkowe
○ tworzenie zewnętrznych narzędzi z użyciem serwisów
○ sterowanie mechanizmem serializacji
○ wsparcie IDE
● wady
○ użycie danych niezgodnych z modelem
○ problemy z serializacją