Kategorie
Uncategorized

Git w pigułce

Git jest podstawowym narzędziem potrzebnym do nauki automatyzacji -> bez względu na używany język programowania!. Jest czymś w rodzaju “fundamentu” do budowy domu (w tym przypadku Twojej aplikacji :). Bardziej oficjalnie jest to software typu open-source: rozproszony system kontroli wersji przechowujący pełną historię wersji projektu w jednym miejscu.

Opis:Komenda Gita:
Konfiguruje nazwę ->git config --global user.name "name"
Tworzy nowe lokalne repozytorium ->git init
Tworzy kopię roboczą lokalnego repozytorium ->git clone /path/to/repo
Klonuje repozytorium ->git clone username@host:/path/to/repo
Polecenie dodania jednego pliku ->git add <particular file>
Dodanie wszystkich plików ->git add *
Wyślij zmiany z treścią ->git commit -m " message"
Wyślij pliki ->git commit -a
Wypchnij zmiany do głównej gałęzi zdalnego repozytorium ->git push origin master
Aktualny status plików do zmiany/dodania/zatwierdzenia -> git status
Połącz się ze zdalnym repozytorium – dodaj serwer, aby móc do niego wypchnąć ->git remote add origin <server>
Lista wszystkich aktualnie skonfigurowanych repozytoriów zdalnych ->git remote -v
Utwórz nową gałęź i przejdź do niej ->git checkout -b <branchname>
Przełącz się z jednej gałęzi do drugiej ->git checkout <branchname>
Wypisz wszystkie gałęzie w swoim repozytorium ->git branch
Usuń gałąź funkcji ->git branch -d <branchname>
Wypchnij gałąź do zdalnego repozytorium, aby inni mogli z niego korzystać ->git push origin <branchname>
Wypchnij wszystkie gałęzie do zdalnego repozytorium ->git push --all origin
Usuń gałąź w swoim zdalnym repozytorium ->git push origin :<branchname>
Pobierz i scal zmiany na serwerze zdalnym do katalogu roboczego ->git pull
Scal gałąź z aktywną/bieżącą gałęzią ->git merge <branchname>
Wyświetl wszystkie konflikty scalania ->git diff
Zobacz konflikty z plikiem podstawowym ->git diff --base <filename>
Wyświetl podgląd zmian przed scaleniem ->git diff <sourcebranch> <targetbranch>
Możesz użyć tagowania, aby oznaczyć znaczący zestaw zmian, taki jak wydanie –
CommitId to identyfikator zestawu zmian, max 10; musi być unikalne ->
git tag 1.0.0 <commitID>
Wyświetla zatwierdzenia dokonane w tym repozytorium w odwrotnej kolejności chronologicznej; to znaczy, najnowsze zatwierdzenia pojawiają się jako pierwszą ->git log
Wypcha wszystkie tagi do zdalnego repozytorium ->git push --tags origin
Jeśli się pomylisz, możesz zastąpić zmiany w drzewie roboczym ostatnią zawartością w nagłówku ->git checkout -- <filename>
Zmiany już dodane do indeksu oraz nowe pliki zostaną zachowane. Zamiast tego, aby porzucić wszystkie lokalne zmiany i zatwierdzenia, pobrać najnowszą historię z serwera i wskazać na nią lokalną gałąź master, wykonaj następujące czynności ->git fetch origin

git reset --hard origin/master
Przeszukaj katalog roboczy foo() ->git grep "foo()"

Źródło: https://git-scm.com/book/en/v2

Polecane, z angielskim opisem -> Featured Git Commands

Kategorie
Uncategorized

Umiejętności testowania API: musisz je osiągnąć!

Cześć!

Ten post jest wprowadzeniem do interfejsów API, testowania API i ich znaczenia w świecie testów. Postaram się wyjaśnić Ci najprościej jak się da, dlaczego testy API są tak istotną inwestycją czasową w Twoim projekcie!

Systemy informatyczne stają się coraz bardziej rozproszone, a aplikacje i urządzenia są coraz bardziej ze sobą połączone, wykorzystanie interfejsów API odnotowuje wzrost popularności w ciągu ostatnich kilku lat. 

Tradycyjne (lub inaczej staromodne) systemy komputerowe miały charakter monolityczny, zostały zastąpione i obecnie często składają się one z komponentów wielokrotnego użytku, które komunikują się i wymieniają informacje między sobą za pośrednictwem różnych interfejsów API.

Interfejsy API stają się również coraz bardziej powszechne, co powoduje że właściwe testowanie tych interfejsów stało się sporym problemem zarówno dla dostawców API, jak i użytkowników. Jako dostawca nie chcesz być powiązany z interfejsem API o niskiej jakości. Jako użytkownik nie chciałbyś, aby Twój system oprogramowania lub Twoja firma polegały na wadliwym interfejsie API. Żeby właściwie ocenić, czy dane wyjściowe podane przez API są poprawne, tester musiałby wiedzieć przynajmniej coś o wewnętrznym działaniu API (tj. Przeprowadzić testy białoskrzynkowe zamiast tradycyjnych testów czarnoskrzynkowych). Może to sprawić, że testowanie API będzie się wydawać „trudne”.

Testowanie API jest ostatnio jeszcze ważniejsze, ponieważ w obecnej fali warstwowych systemów informacyjnych reguły biznesowe i logika biznesowa są często kodowane i egzekwowane w warstwie API (a nie na przykład w interfejsie użytkownika lub warstwie bazy danych).

Kategorie
Uncategorized

Ściąga MYSQL

OpisKomenda MySQL
Utwórz bazęCREATE DATABASE mabase

CREATE DATABASE mabase CHARACTER SET utf8

Usuń bazęDROP DATABASE mabase

ALTER DATABASE mabase CHARACTER SET utf8
Przeglądanie bazySHOW DATABASES
SHOW TABLES
SHOW FIELDS FROM table / DESCRIBE table
SHOW CREATE TABLE table
SHOW PROCESSLIST
KILL process_number
Wybór elementów z bazySELECT * FROM table
SELECT * FROM table1, table2, …

SELECT field1, field2, … FROM table1, table2, …
SELECT … FROM … WHERE condition
SELECT … FROM … WHERE condition GROUPBY field
SELECT … FROM … WHERE condition GROUPBY field HAVING condition2
SELECT … FROM … WHERE condition ORDER BY field1, field2
SELECT … FROM … WHERE condition ORDER BY field1, field2 DESC
SELECT … FROM … WHERE condition LIMIT 10
SELECT DISTINCT field1 FROM …
SELECT DISTINCT field1, field2 FROM …
Wybór/Łącznie rekordów w bazieSELECT … FROM t1 JOIN t2 ON t1.id1 = t2.id2 WHERE condition
SELECT … FROM t1 LEFT JOIN t2 ON t1.id1 = t2.id2 WHERE condition
SELECT … FROM t1 JOIN (t2 JOIN t3 ON …) ON …
Wstawianie do bazyINSERT INTO table1 (field1, field2, …) VALUES (value1, value2, …)
Usuwanie w bazieDELETE FROM table1 / TRUNCATE table1
DELETE FROM table1 WHERE condition
DELETE FROM table1, table2 FROM table1, table2 WHERE table1.id1 =
table2.id2 AND condition
Aktualizowanie w bazieUPDATE table1 SET field1=new_value1 WHERE condition
UPDATE table1, table2 SET field1=new_value1, field2=new_value2, … WHERE
table1.id1 = table2.id2 AND condition
KluczeCREATE TABLE table (…, PRIMARY KEY (field1, field2))
CREATE TABLE table (…, FOREIGN KEY (field1, field2) REFERENCES table2
(t2_field1, t2_field2))
Tworzenie/Usuwanie/Modyfikacja TabeliCREATE TABLE table (field1 type1, field2 type2, …)
CREATE TABLE table (field1 type1, field2 type2, …, INDEX (field))
CREATE TABLE table (field1 type1, field2 type2, …, PRIMARY KEY (field1))
CREATE TABLE table (field1 type1, field2 type2, …, PRIMARY KEY (field1,field2))
CREATE TABLE table1 (fk_field1 type1, field2 type2, …,
FOREIGN KEY (fk_field1) REFERENCES table2 (t2_fieldA))
[ON UPDATE|ON DELETE] [CASCADE|SET NULL]

CREATE TABLE table1 (fk_field1 type1, fk_field2 type2, …,
FOREIGN KEY (fk_field1, fk_field2) REFERENCES table2 (t2_fieldA,
t2_fieldB))

CREATE TABLE table IF NOT EXISTS (…)
CREATE TEMPORARY TABLE table (…)
DROP TABLE table
DROP TABLE IF EXISTS table
DROP TABLE table1, table2, …
ALTER TABLE table MODIFY field1 type1
ALTER TABLE table MODIFY field1 type1 NOT NULL …
ALTER TABLE table CHANGE old_name_field1 new_name_field1 type1
ALTER TABLE table CHANGE old_name_field1 new_name_field1 type1 NOT NULL …
ALTER TABLE table ALTER field1 SET DEFAULT …
ALTER TABLE table ALTER field1 DROP DEFAULT
ALTER TABLE table ADD new_name_field1 type1
ALTER TABLE table ADD new_name_field1 type1 FIRST
ALTER TABLE table ADD new_name_field1 type1 AFTER another_field
ALTER TABLE table DROP field1
ALTER TABLE table ADD INDEX (field);

Zmień kolejność pól ->

ALTER TABLE table MODIFY field1 type1 FIRST

ALTER TABLE table MODIFY field1 type1 AFTER another_field
ALTER TABLE table CHANGE old_name_field1 new_name_field1 type1 FIRST
ALTER TABLE table CHANGE old_name_field1 new_name_field1 type1 AFTER
another_field
Warunkifield1 = value1 field1 <> value1
field1 LIKE 'value _ %' field1 IS NULL field1 IS NOT NULL
field1 IS IN (value1, value2)
field1 IS NOT IN (value1, value2) condition1 AND condition2 condition1 OR condition2
Użytkownicy i uprawnieniaGRANT ALL PRIVILEGES ON base.* TO 'user'@'localhost' IDENTIFIED BY 'password';
GRANT SELECT, INSERT, DELETE ON base.* TO 'user'@'localhost' IDENTIFIED BY 'password';
REVOKE ALL PRIVILEGES ON base.* FROM 'user'@'host'; -- one permission only
REVOKE ALL PRIVILEGES, GRANT OPTION FROM 'user'@'host'; -- all permissions
SET PASSWORD = PASSWORD('new_pass')
SET PASSWORD FOR 'user'@'host' = PASSWORD('new_pass')

SET PASSWORD = OLD_PASSWORD('new_pass')
DROP USER 'user'@'host'
host ‘%’ indicates any host.
Główne typy danychTINYINT (1o: -217+128) SMALLINT (2o: +-65 000)
MEDIUMINT (3o: +-16 000 000) INT (4o: +- 2 000 000 000)
BIGINT (8o: +-9.10^18)
Precise interval: -(2^(8N-1)) -> (2^8N)-1
/!\ INT(2) = "2 digits displayed" -- NOT "number with 2 digits max"

FLOAT(M,D) DOUBLE(M,D) FLOAT(D=0->53)
/!\ 8,3 -> 12345,678 -- NOT 12345678,123!

TIME (HH:MM) YEAR (AAAA) DATE (AAAA-MM-JJ) DATETIME (AAAA-MM-JJ HH:MM; années 1000->9999)
TIMESTAMP (like DATETIME, but 1970->2038, compatible with Unix)

VARCHAR (single-line; explicit size)
TEXT (multi-lines; max size=65535) BLOB (binary; max
size=65535)
Variants for TEXT&BLOB: TINY (max=255) MEDIUM (max=~16000) LONG (max=4Go)
Ex: VARCHAR(32), TINYTEXT, LONGBLOB, MEDIUMTEXT

ENUM ('value1', 'value2', …) -- (default NULL, or '' if NOT NULL)
Tworzy kopię zapasową bazy danych do pliku SQLmysqldump -u Username -p DatabaseName > databasename_backup.sql
Przywróć z kopii zapasowej pliku SQLmysql - u Username -p DatabaseName < databasename_backup.sql
Resetuje hasło roota
$ /etc/init.d/mysql stop
$ mysqld_safe --skip-grant-tables
$ mysql # on another terminal
mysql> UPDATE mysql.user SET password=PASSWORD('new_pass') WHERE user='root';

Switch back to the mysqld_safe terminal and kill the process using Control + \
$ /etc/init.d/mysql start
Naprawia tabele po resecie
mysqlcheck --all-databases
mysqlcheck --all-databases --fast

Kategorie
Uncategorized

Jak Google testuje oprogramowanie w pigułce?

Zapraszam do analizy ciekawego artykułu na temat procesu testowania oprogramowania stosowanego w Google ->

https://dilushakumarage.medium.com/how-google-tests-software-b5b7b999ccfa#81ed

Kategorie
Uncategorized

10 powodów do wykorzystania Gatlinga w testach wydajnościowych (niezależnie od używanego języka programowania w projekcie)

Cześć!

Zaczynamy. Dzisiaj odpowiem Ci, dlaczego poznanie Gatlinga jest najlepszym sposobem na rozpoczęcie przygody z testowaniem obciążeniowym/wydajnościowym w Twoim projekcie. 

Z krótkiego oficjalnego wprowadzenia na stronie Galinga -> https://gatling.io/, możemy dowiedzieć się czym tak w ogóle jest Gatling: „Gatling is a powerful open-source load testing solution. Gatling is designed for continuous load testing and integrates with your development pipeline. Gatling includes a web recorder and colorful reports.

Poniżej zestawiam 10 powodów, dla których wykorzystanie Gatlinga w Twoim projekcie jest świetnym pomysłem:

0 Gatling jest frameworkiem typu open-source!

1 Gatling ma x5 więcej postów na StackOverflow niż inne bardzo popularne frameworki wydajnościowe … a to wiele ułatwia 🙂

2 Gatlinga można uruchomić na dowolnym systemie operacyjnym!

3 Możesz pisać testy wydajnościowe jako kod źródłowy!

4 Gatling posiada szczegółowe metryki / raporty “Out of the Box” – w przejrzysty sposób zaprezentujesz rezultaty testów.

5 Gatling posiada mocny Engine napisany w języku Scala
Warto również znać podstawy języka Scala, w tym celu polecam zapoznać się z poniższym video:


6 Gatling ma zintegrowane asercje API, więc daje Ci pełny zestaw narzędzi do wykonywania funkcjonalnych asercji.


7 Gatling może być w pełni zintegrowany przy użyciu wiersza poleceń, dzięki czemu jest kompatybilny z każdą platformą CI (na przykład z Twoim Jenkinsem).

8 Gatling ma obszerne i przemyślanie napisane zasoby wiedzy na swojej stronie pod linkiem: https://gatling.io/docs/current/advanced_tutorial.


9 Gatling ma możliwość przeprowadzania testów z poziomu interfejsu użytkownika poprzez intuicyjny Recorder!

Dodatkowo warto dodać, że Gatling bardzo szybko zyskuje na popularności -> kilka miesięcy temu, kiedy to przypadkowo zwróciłem uwagę na liczbę pobrań to było około 2 milionów … a po 3-4 miesiącach jest to już prawie 5 milionów!

W tym wideo pokrótce przedstawiam wnioski wynikające z powyższych podpunktów:

https://www.youtube.com/watch?v=-FhPhbTnW7Y

Kategorie
Uncategorized

CyberPunk 2077 aka “Cyberbug” czyli jak unikać jakościowych wpadek w cyfrowych produktach


Cześć!

Dziś będzie krótko w temacie jakości czyli jak CD Projekt mógł uniknąć kompromitujących wpadek podczas wypuszczenia “Cyberpunka 2077” i co Ty możesz wyciągnąć z tej lekcji 🙂

W czasie kiedy to piszę (połowa grudnia 2020) Cyberpunk zwrócił się już w całości twórcom, dodatkowo myślę, że jest tylko kwestią czasu kiedy gra stanie się kasowym hitem… mimo wszystko ostatni produkt CD Projektu zachwyca grafiką i fabułą. Tak! miałem już okazję zagrać i mimo wszystko polecam. Natomiast również w przypadku tej produkcji nie obyło się bez kompromitujących wpadek, np. tego typu jak poniżej:

Po obejrzeniu powyższych filmików nasuwa mi się pytanie – jak CD Projekt mógł wyeliminować lub chociażby złagodzić ryzyko związane
z wystąpieniem kompromitujących bugów?

Moje (główne) propozycje rozwiązania problemu z jakością dla CyberPunka to:

0. Należało przeprowadzić testy beta dla większej liczby graczy biorąc pod uwagę sprzęt jakimi dysponują oraz różne konfiguracje hardware’u.

1. Można było przeprowadzić firmowe “bug hunting” party i zaangażować całą firmę do poszukiwania bugów, a następnie według priorytetu je fixować.

2. Na trailerze zauważyłem wiele błędów związanych z brakiem Colliderów do modeli.. można by było zastosować checklistę podczas testowania rozgrywki stricte dla modeli i obiektów.

3. Błędy w mechanice i duplikowanie postaci – tutaj nie ma złotego środka po prostu trzeba solidnie testować grę z każdą możliwą ścieżką przejścia. Następnie sprawdzać postacie lub obiekty, które mają “podpięte” dane skrypty w silniku i sprawiają największe problemy. Należy też więcej analizować i szukać przyczyny powstania problemu (root cause).

4. Nieprawidłowe ustawienia grawitacji dla modeli. To również sprowadza się do weryfikacji obiektów i modeli.

5. Warto by było przeszkolić zespoły (wewnętrzny i zewnętrzy pod kątem jakości oprogramowania) wprowadzić odpowiednie wysokiej jakości szkolenia dla pracowników. W temacie testowania oprogramowania, każda osoba pracująca w IT powinna mieć podstawową wiedzę oraz świadomość, że za jakość odpowiadają WSZYSCY, a nie tylko zespół testerski.

6. Lepiej rozplanować testy gry w czasie przeznaczonym na development.

7. Zatrudnić dodatkowy – zewnętrzny zespół testerski, który ma doświadczenie w branży gier ale również posiada “świeży” pogląd w temacie jakości produktu i wprowadzi dodatkową wartość dodaną w postaci Raportu(Raportów), które następnie zostaną poprawione przez programistów.

Podsumowując jak widzisz sposobów ulepszenia jakości w projekcie jest sporo. Natomiast wracając do setna – Cyberpunk jest ogólnie bardzo dobrą grą pomimo wad, które na pewno zostaną docelowo poprawione w przyszłości… no ale trochę niesmak pozostaje. Twórcy często próbują wcisnąć graczom “niedogotowanego” kurczaka. Tak też się stało w tym przypadku, a wystarczyło tylko go lepiej dopiec i doprawić.. 😉

Miłej zabawy podczas rozgrywki.

Kategorie
Uncategorized

5 powodów, dla których warto sprawdzić platformę JetBrains do nauki programowania (niezależnie od specjalizacji i umiejętności!)


Cześć!

To mój pierwszy post na moim blogu, który – choć krótki, będzie nieco przypominał reklamę to nie mam zamiaru niczego reklamować ani sprzedawać.
Celem tego wpisu jest zaprezentowanie narzędzia, które ułatwi w prosty i przejrzysty sposób zdobyć i uporządkować wiedzę na temat języków programowania takich jak Java czy Python!


Oto 5 powodów, dla których powinniście zainteresować się platformą JetBrains Academy:


0 Platforma ma zorganizowaną mapę nauki wybranego języka programowania (materiał jest wybrany i ułożony przez ekspertów w tej dziedzinie)

1 Uczy poprzez praktykę (w ten sposób można czerpać większe korzyści z nauki niż poprzez wykonywanie samouczków samodzielnie przykładowo bezpośrednio z YouTube’a)

2 Ma długi – relatywnie okres próbny. Obecnie jest dłuższy niż 2 miesiące – Przy odrobinie wcześniejszych doświadczeń, w tym czasie powinieneś wykonać większą część ścieżki nauki języka.

3 Silna personalizacja do poziomu kursanta – wypełnij ankietę, a system automatycznie wybierze zadania do wykonania.

4 Integracja z dowolnym IDE firmy JetBrains – Jeśli jesteś już profesjonalnym programistą, z pewnością znasz IDE dostarczane przez JetBrains, a jeżeli nie to jest to świetna okazja do zapoznania się z nim.


Poniżej przesyłam Ci mój szybki przegląd JetBrains Academy:

https://www.youtube.com/watch?v=sOrwXB0yvWU


Link do platformy -> https://www.jetbrains.com/academy/

Kategorie
Uncategorized

5 najpopularniejszych narzędzi do automatyzacji oprogramowania w 2020 roku


Cześć!

Ostatnia wiosenna pandemia koronawirusa w 2020 roku (marzec-kwiecień) pokazała, że trend i zainteresowanie “testowaniem oprogramowania” znacznie wzrosły w tym roku. Zobacz koniecznie poniższy wykres:

W związku z tym trendem chciałbym przedstawić Ci 5 narzędzi popartych przykładami, dlaczego warto je znać, niezależnie od codziennych zawodowych obowiązków – oprogramowanie jest już praktycznie w każdej dziedzinie naszego życia. Nie chcesz być pozostawiony w tyle, prawda?

OK. Zaczynamy:

0. Selenium – https://www.selenium.dev/

Selenium jest narzędziem w cyfrowym świecie jak młotek dla kowala (może i możesz się bez niego obejść, ale gięcie stali głową nie jest przyjemnym pomysłem :]). To jest moje celowe porównanie, ponieważ Selenium jest bardzo dojrzałym narzędziem, pojawia się w większości ofert pracy dla inżynierów testów oprogramowania. Jest ono dostępne dla prawie każdego głównego języka programowania, a nauka go w jednym języku będzie oznaczać dosłownie “za chwilę” będziesz mógł w nim pisać skrypty, oczywiście, jeśli wiesz jak działa ten framework.

Selenium jest absolutnym “must-have” na naszej liście.

1. Katalon Studio – https://www.katalon.com

Katalon Studio to kompleksowe narzędzie do automatyzacji testów, które obejmuje zarówno API, Web, Desktop jak i testy mobilne. Posiada zestaw funkcji od A do Z: nagrywanie działań, tworzenie przypadków testowych, generowanie skryptów testowych, wykonywanie testów, raportowanie wyników i integracja z wieloma innymi narzędziami w całym cyklu życia oprogramowania. Katalon działa na każdej maszynie (Windows, Linux i MacOS).

Trudno znaleźć wady w tym narzędziu, na co również wskazuje powyższy trend i rosnąca popularność. Zdecydowaną wadą jest to, że narzędzie do użytku komercyjnego jest płatne, ale cóż, twórcy również muszą z czegoś żyć.

2. Appium – http://appium.io/

Rama automatyzacji testów aplikacyjnych jest przeznaczona do zastosowań mobilnych. Wspiera on automatyzację natywnych, hybrydowych i mobilnych aplikacji internetowych zbudowanych dla systemów iOS i Android. Appium korzysta z dostarczonych przez producenta ram automatyzacji i jest oparty na architekturze klient/serwer. Appium jest bardzo łatwe w instalacji i użytkowaniu. zyskało ogromną popularność i stabilność w ciągu ostatnich kilku lat – proszę spojrzeć na wykres trendów google. Bardzo ważny szczegół – jest to narzędzie w pełni open-source.

3. Postman – https://www.postman.com/

Postman to bardzo szybkie i intuicyjne narzędzie przeznaczone do testowania API. Użytkownicy mogą zainstalować to narzędzie jako rozszerzenie przeglądarki lub aplikację desktopową na każdym możliwym systemie operacyjnym. Jest ono popularne nie tylko wśród testerów automatyzacji testów API, ale także wśród deweloperów, którzy używają tego narzędzia do tworzenia testów API. Jest to środowisko programistyczne do tworzenia i automatyzacji testów API.

4. LambdaTest – https://www.lambdatest.com/

LambdaTest to dobre narzędzie do testowania aplikacji desktopowych i internetowych. Dzięki LambdaTest można przeprowadzać zarówno ręczne jak i automatyczne testy przeglądarek poprzecznych w oparciu o silnik Selenium.

Dzięki zautomatyzowanym testom na przeglądarkach internetowych można za każdym razem szybciej opracowywać, testować i dostarczać dane.

5. Cypress – https://www.cypress.io/

Cypress skupia się na przeprowadzaniu testów end-to-end – zapewnia solidny, całkowicie nowy silnik do przeprowadzania testów automatycznych, ale zabiera trochę swobody z Selenium (Cypress nie używa Selenium!), ograniczając użytkownika do konkretnych rozwiązań – frameworków i języka.

Cypress sprawia, że konfiguracja, pisanie, uruchamianie i debugowanie testów jest łatwe.

Testy Cypress pisane są tylko w języku JavaScript – jest to spore ograniczenie… Cypress dostarcza wolną wersję oprogramowania, jak również rozszerzenie płatnej licencji.