16 krok w aplikacji TAX FREE – REST API

17 maja 2017

Dziś w skrócie sposób na konsumpcję danych z serwisu za pomocą REST API z Swift 3 (bo jest lekki). Korzystam z framewok Foundation i zapisuję odczytane dane w sesji:

 let session = URLSession(configuration: URLSessionConfiguration.default)

let task = session.dataTask(with: URL(string: „adres webserwisu json”)!, completionHandler: { (data, response, error) in if error != nil { print(error!.localizedDescription) } else { do { if let json = try JSONSerialization.jsonObject(with: data!, options: .allowFragments) as? [String: Any] {  print(json) } } catch { print(„błąd w JSONSerialization”) } } }) task.resume() 

Bardzo proste. Teraz czas na webserwis na serwerze udostępniający dane w php. Nie będzie korzystał z żadnych bibliotek i frameworków. Ma udostępniać dane teleadresowe sklepów obsługujących TAX FREE, tylko tyle. Potrzebne mi dane geolokacyjne, aby pokazać to na mapie, czyli tworzę klasę z takimi danymi oraz dwie metody, które mają zwracać wszystkie sklepy oraz parametryzowaną liczbę sklepów w pobliżu urządzenia:

<?php Class Shop { private $name,$NIP,$adress,$longitude,$latitude;

public function getAllShops(){}

public function getShops($count,$longitude,$latitude){} } ?>

Ciało metod do wypełnienia jak utworzę bazę danych w MySQL, bo hosting przewiduję na linuksie.  Teraz zastanawiałam się czy zostawić to tak, że dostęp do url-a oraz parametry przekazywać za pomocą GET czy zmienić na ładniejsze adresy. Wybieram oczywiście to drugie. Dlatego w /.htaccess zmieniam przekierowanie:

# Turn rewrite engine on Options +FollowSymlinks

RewriteEngine on    # map neat URL to internal URL

RewriteRule ^shops/ ShopController.php [nc,qsa]

RewriteRule ^shops/([^/]+)/([^/]+)$ ShopController.php?lon=$1&lat=$2&count=$3 [L]

Teraz ShopController.php, w którym również przechwytuję wyjątki (klasa ShopRestHandler):

<?php

require_once(„ShopRestHandler.php”);

$lon = „”;

$lat = „”;

$count = „”;

if(isset($_GET[„lon”])) $lon = $_GET[„lon”];

if(isset($_GET[„lat”])) $lon = $_GET[„lat”];

if(isset($_GET[„count”])) $count = $_GET[„count”];

$shopRestHandler = new ShopRestHandler();

if (strlen($lon)>0 && strlen($lon)>0 && strlen($id)>0) {$shopRestHandler->getAllShops();}

else $shopRestHandler->getShops($count,$lon,$lat);

 ?>

Reszta jutro.

Tagi: , ,

O unit testach i testach funkcjonalnych – Symphony

20 kwietnia 2017

zdjęcie O unit testach i testach funkcjonalnych

O unit testach i testach funkcjonalnych

Dziś w prostych słowach o unit testach i testach funkcjonalnych w kontekście frameworka Symphony.
Jest taka biblioteka PHPUnit, która jest standardem do zapoznania się jeżeli chodzi o testowanie Symphony2 i powinna być wykorzystywana we wszystkich tworzonych projektach z Symphony2.

UNIT TESTY

Unit testy koncentrują się na zbadaniu poprawnego wywołania pojedynczej funkcji bez wywoływania innej funkcji (z tego samego testowanego projektu) – chodzi o to żeby nie wywoływać innej funkcji, bo nie wiadomo będzie która źle się wykona. W obiektowym kodzie, takim jak Symphony2, testowanie obejmuje klasę i jej metody. Przy pisaniu unit testów dane przypadki testowe powinny być zapisywane niezależnie od innych przypadków testowych, tzn. wynik testu B nie powinien zależeć od wyniku testu A. Taki sposób jest użyteczny przy tworzeniu tzw. mock obiektów, które w łatwy sposób sterują funkcjami testowymi. Mocking pozwala na symulowanie wywołania funkcji, zamiast jego wykonania. Przykładem byłoby testowanie klasy, która pokrywa zewnętrzny interfejs API. Taka klasa API może używać warstwy transportowej do komunikacji z zewnętrznym interfejsem API. Można zasymulować metodę żądania warstwy transportowej, aby zwrócić podane wyniki, a nie faktycznie wywoływać zewnętrzny interfejs API. Unit testy nie sprawdzają, czy składniki aplikacji działają prawidłowo, bo to sprawdzają testy funkcjonalne.

TESTY FUNKCJONALNE

Testy funkcjonalne sprawdzają integrację różnych elementów aplikacji, takich jak routing, kontrolery i widoki. Testy funkcjonalne są podobne do testów ręcznych, które można uruchomić w przeglądarce, np. kliknięcie na jakieś łącze i sprawdzenie czy pojawił się właściwy widok. Testy funkcjonalne umożliwiają zautomatyzowanie tego procesu.

Symfony2 zawiera wiele użytecznych klas wspomagających testy funkcjonalne obejmujące klasę Client, która jest w stanie zażądać stron i przesyłać formularze oraz DOM Crawler, które możemy wykorzystać do śledzenia odpowiedzi klienta.

Kolejnym ważnym tematem do zapoznania się przy testowaniu są procesy używające powyższych testów, takie jak Test Driven Development (TDD) i Behavioral Driven Development (BDD).

Napisanie unit testów i testów funkcjonalnych, moim zdaniem pozwala na oszczędzeniu jednego etatu w firmie – dla testera :) Dodatkowo przy każdej zmianie w kodzie wcześniej napisane testy są ponownie wywoływane i najczęściej wykazują błędy niezauważone przez programistę.

Więcej o PHPUnit : https://phpunit.de/

Tagi: , ,

 
RSS GitHub PinterestFacebook
email: contact@melastudio.pl
2019 © by MelaStudio