Funkční testování – chybějící vrchol pyramidy (WebExpo 2016)Ondřej Machulda
Záznam přednášky: https://www.webexpo.cz/praha2016/prednaska/funkcni-testovani-chybejici-vrchol-pyramidy/
Automatické testování nejsou zdaleka jenom unit-testy - ty sice tvoří základ takzvané testovací pyramidy, ta by ale neměla zůstat nedostavěná. Přednáška o tom, kdy a jak se během vývoje věnovat také vyšší vrstvě testů - funkčnímu testování alias testům uživatelského rozhraní (end-to-end testům). A naopak v jakých situacích by to byla asi zbytečná práce.
Také popíši, jak vypadá náš rutinní proces psaní funkčních Selenium testů v Jobs.cz a ukáži několik nástrojů převážně (ale nejenom) pro PHP, které můžete při vytváření a spouštění funkčních testů v praxi využít a které vám celou práci mohou usnadnit.
Selenium a WebDriver - přítomnost a budoucnost Ondřej Machulda
Konference Test Stack, 6. června 2019, Praha
Kam se testování přes Selenium posunulo?
* Co je to standard W3C WebDriver, proč na něj Selenium přechází a co se díky němu mění
* Jakou výhodu přináší to, že se o integraci protokolu do prohlížečů starají sami jejich výrobci (Mozilla, Google, Apple)
* Jaké nové možnosti přineslo end-to-end testování přes Selenium v poslední době – například headless režim Firefoxu a Chrome
* Lokální zprovoznění Selenia i vybraného prohlížeče jedním příkazem – spuštěním Selenia v Dockeru si můžeme ušetřit spoustu obtíží a nekompatibilit, na které jsme dříve mohli narazit
Budoucnost Selenia:
* Co přinese Selenium 4.0? Jak se na něj připravit, abychom pak nemuseli věnovat upgradu veliké úsilí?
* Kam směřuje budoucí role Selenia? Možná ho totiž nebudeme potřebovat na to, na co ho používáme dnes.
* Kdy má smysl použít alternativy k Seleniu jako Pupeteer nebo Cypress? A proč Selenium rozhodně není překonané a naopak je jeho potenciál vyšší, než kdy dříve?
Funkční testování – chybějící vrchol pyramidy (WebExpo 2016)Ondřej Machulda
Záznam přednášky: https://www.webexpo.cz/praha2016/prednaska/funkcni-testovani-chybejici-vrchol-pyramidy/
Automatické testování nejsou zdaleka jenom unit-testy - ty sice tvoří základ takzvané testovací pyramidy, ta by ale neměla zůstat nedostavěná. Přednáška o tom, kdy a jak se během vývoje věnovat také vyšší vrstvě testů - funkčnímu testování alias testům uživatelského rozhraní (end-to-end testům). A naopak v jakých situacích by to byla asi zbytečná práce.
Také popíši, jak vypadá náš rutinní proces psaní funkčních Selenium testů v Jobs.cz a ukáži několik nástrojů převážně (ale nejenom) pro PHP, které můžete při vytváření a spouštění funkčních testů v praxi využít a které vám celou práci mohou usnadnit.
Selenium a WebDriver - přítomnost a budoucnost Ondřej Machulda
Konference Test Stack, 6. června 2019, Praha
Kam se testování přes Selenium posunulo?
* Co je to standard W3C WebDriver, proč na něj Selenium přechází a co se díky němu mění
* Jakou výhodu přináší to, že se o integraci protokolu do prohlížečů starají sami jejich výrobci (Mozilla, Google, Apple)
* Jaké nové možnosti přineslo end-to-end testování přes Selenium v poslední době – například headless režim Firefoxu a Chrome
* Lokální zprovoznění Selenia i vybraného prohlížeče jedním příkazem – spuštěním Selenia v Dockeru si můžeme ušetřit spoustu obtíží a nekompatibilit, na které jsme dříve mohli narazit
Budoucnost Selenia:
* Co přinese Selenium 4.0? Jak se na něj připravit, abychom pak nemuseli věnovat upgradu veliké úsilí?
* Kam směřuje budoucí role Selenia? Možná ho totiž nebudeme potřebovat na to, na co ho používáme dnes.
* Kdy má smysl použít alternativy k Seleniu jako Pupeteer nebo Cypress? A proč Selenium rozhodně není překonané a naopak je jeho potenciál vyšší, než kdy dříve?
Modified maximum tangential stress criterion for fracture behavior of zirconi...dentalid
The veneering porcelain sintered on zirconia is widely used in dental prostheses, but
repeated mechanical loadings may cause a fracture such as edge chipping or delamination.
In order to predict the crack initiation angle and fracture toughness of zirconia/veneer bilayered
components subjected to mixed mode loadings, the accuracy of a new and
traditional fracture criteria are investigated. A modified maximum tangential stress
criterion considering the effect of T-stress and critical distance theory is introduced, and
compared to three traditional fracture criteria. Comparisons to the recently published
fracture test data show that the traditional fracture criteria are not able to properly predict
the fracture initiation conditions in zirconia/veneer bi-material joints. The modified
maximum tangential stress criterion provides more accurate predictions of the experimental
results than the traditional fracture criteria
International Branding is a very nice and important subject to pay attention to.
The subject is here for your consideration in the Persian Language (Farsi).
Hope you enjoy reading it.
Forsker Erling Holmøy ved Statistisk sentralbyrå holdt innlegg under Forskningsrådets konferanse "Hvordan møter vi eldrebølgen" 28. januar 2014. Holmøys foredrag handlet om hvordan gruppen av eldre i samfunnet påvirker samfunnsøkonomien.
node.js: zápisky z fronty (Battle guide to node.js)almadcz
[czech] V Apiary používáme node.js v produkci už přes rok.
Proč se zamyslet nad tím, zda ho chcete? A na co se připravit a na co si dát pozor, pokud se do toho pustíte?
Modified maximum tangential stress criterion for fracture behavior of zirconi...dentalid
The veneering porcelain sintered on zirconia is widely used in dental prostheses, but
repeated mechanical loadings may cause a fracture such as edge chipping or delamination.
In order to predict the crack initiation angle and fracture toughness of zirconia/veneer bilayered
components subjected to mixed mode loadings, the accuracy of a new and
traditional fracture criteria are investigated. A modified maximum tangential stress
criterion considering the effect of T-stress and critical distance theory is introduced, and
compared to three traditional fracture criteria. Comparisons to the recently published
fracture test data show that the traditional fracture criteria are not able to properly predict
the fracture initiation conditions in zirconia/veneer bi-material joints. The modified
maximum tangential stress criterion provides more accurate predictions of the experimental
results than the traditional fracture criteria
International Branding is a very nice and important subject to pay attention to.
The subject is here for your consideration in the Persian Language (Farsi).
Hope you enjoy reading it.
Forsker Erling Holmøy ved Statistisk sentralbyrå holdt innlegg under Forskningsrådets konferanse "Hvordan møter vi eldrebølgen" 28. januar 2014. Holmøys foredrag handlet om hvordan gruppen av eldre i samfunnet påvirker samfunnsøkonomien.
node.js: zápisky z fronty (Battle guide to node.js)almadcz
[czech] V Apiary používáme node.js v produkci už přes rok.
Proč se zamyslet nad tím, zda ho chcete? A na co se připravit a na co si dát pozor, pokud se do toho pustíte?
Projdeme si postupnými kroky, jak jsme vytvářeli a jak používáme jednu z nejdůležitějších služeb v Mallgroup. Jaký jsme zvolili přístup při návrhu, co nám to přineslo za výhody a co naopak způsobilo za problémy. Podíváme se na nástroje a přístupy, které nám pomáhají k tomu, abychom nasazovali změny několikrát denně a nebáli se toho.
Využití chemie v procesu testování webových aplikací vytvořených pomocí techn...Michal Špaček
V přednášce si ukážeme to, co nás v hodinách chemie na škole neučili. V našich tajných i částečně veřejných laboratořích jsme se pokusili sloučit některé chemické prvky s exotickou faunou pomocí moderních procesů a výsledek tohoto počínání bychom chtěli demonstrovat odborné i široké veřejnosti. To, co za správného kurzu filipínské měny (PHP) vzniklo spojením selenu (Selenium) a špetky kofeinu (Selenium RC, Java) s hady (Python) totiž úspešně používáme k automatickému regresnímu testování uživatelských rozhraní webových aplikací made in Skype.
Vývoj na poli automatizace testování webů otevírá spousta možností, které by ještě před pár lety byly nereálné. Podíváme se na některé aktuální trendy a ukáži pár moderních technologií a služeb, které vám mohou pomoci automatizovat (a tedy urychlit, zlevnit nebo zlepšit) různé části QA procesu: visual testing, docker, web performance testing.
Jak testovat vaše aplikace, poznatky z praxe a tipy a triky pro každého kdo chce testovat.
Předkrm před přednáškou o Codeception a jeho snadném nasazení v Atoto.cz
atoto.cz - jak na snadnou integraci Codeceptionatotocz
Jak jsme zintegrovali nástroj pro unit testy, integrační testy a akceptační testy - vše v jednom.
Praktická ukázka snadné integrace codeception do vaší aplikace.
Přednáška z 2.6.2011 z akce Internet Session Brno. Martin Pešout a Marek Hulán představili výhody vývoje webových aplikací ve frameworku Ruby on Rails.
Webinář: Co nového přináší verze 9 jedničky v zálohování Veeam Backup & Repli...Jaroslav Prodelal
Nedávno vyšel Update 1 produktu Veeam Backup & Replication v9 a pro mnoho zdrženlivých uživatelů tak nastává čas úvah o upgrade na poslední verzi jedinečného nástroje pro zálohování virtuální infrastruktury.
Během webináře vás seznámíme s těmi nejzajímavějšími novinkami, které v9 přinesla, vysvětlíme jejich přínosy a srovnáme použití v jednotlivých edicích produktu.
Webinář je vhodný zejména pro existující uživatele produktu Veeam Backup & Replication (i pro ty, kteří nemají v9 ještě nasazenou), ale obohatí i toho, kdo o produktu přemýšlí nebo jej testuje.
Veeam Backup & Replication poskytuje rychlé, flexibilní a spolehlivé obnovení virtualizovaných aplikací a dat pro platformy VMware vSphere a Microsoft Hyper-V.
Program webináře
-Shrnutí základních vlastností Veeam B&R.
-Představení novinek.
Vylepšení na úrovni jádra produktu.
-Zrychlení zálohování.
-Možnost vynechávat ze zálohy data zevnitř virtuálních strojů.
-Aplikační zálohování a obnova.
-Disaster recovery do cloudu.
-Pro koho je vhodné upgradovat na edici ENT/ENT+.
#golang @SkrzCzDev (Skrz DEV Cirkus 21.10.2015)Jakub Kulhan
Go se @SkrzCz používá pro výkonově nejnáročnější části aplikaci. Jedna z nich je servírování bannerů a výběr těch správných reklam do nich. 1000 req/s v peaku a "adbandit" má minimální nároky na server. Podívejte se, jak použít Go ve spolupráci s ReactPHP a RabbitMQ.
Similar to Vašek Purchart - Optimalizace Symfony na devu (2. sraz přátel Symfony v Praze) (20)
Profil:
Štěpán pracuje jako jako PHP vývojář ve společnosti ZOOT.
Téma:
Programovali jste někdy aplikaci úplně od píky? Pamatujete si na rychlost, se kterou jste na začátku dokázali přidávat první featury. A znáte ten pocit, jak se po pár měsících s rozšiřující funkcionalitou a rozrůstajícím týmem z některých částí kódu stane bludiště a implementace zdánlivě jednoduché funkcí je najednou řádově obtížnější než na počátku?
Představím vám strýčka Boba – super hrdinu objektově orientovaného návrhu a jeho patero přikázání, které vám pomůže původní ladnost a efektivitu zažívat i v pokročilejších fázích projektu.
Václav Makeš - Infrastructure as code - Jak nahazovat stroje a nic moc nevědě...Péhápkaři
"Zkoušel jsem si super-hyper-cool technologii a tak trošku nemohu na počı́tači nic dělat. Reinstalace?“
Jak řešit tyto situace ve velkém týmu elegantně?
Tomáš Strejček - Velikost týmu vs. monolith a mikroservicy (11. sraz přátel ...Péhápkaři
Mám radši, když se mě někdo zeptá na něco konkrétního a ja to můžu zkusit nějak zodpovědet . S delší diskuzí, protože to je takový multipravdový téma.
Jindřich Kubát - Microservice – Post Monolith Architecture (11. sraz přátel P...Péhápkaři
MS děláme v MALLu asi 2 roky a máme za tu dobu cca 20 MS a poměrně výrazně rozebranej původní monolit. Budu mluvit hlavně o nástrojích, které je pro MS nutné mít.
Doctrine - Co dělat když entity nestačí [Filip Procházka] (7. sraz, Praha)Péhápkaři
Ukážeme si, že Doctrine není jenom ORMko a kdy jít o vrstvu níž. Jak DQL naučit věci, které v základu neumí, ale vaše databáze ano. A pár dalších tipů, jak nemít z databáze úplně hloupé úložiště.
Blackfire.io - Fire up your php app performance [Jan Kopp] (7. sraz, Praha)Péhápkaři
Máte problémy s výkonem vašich aplikací? Pomalé načítání stránek obtěžuje vás i uživatele? Testujte výkonnost PHP aplikací pomocí Blackfire.io nástroje od SensioLabs.
Karel Škopek - WordPress + Laravel = <3 (4. sraz přátel Symfony v Praze)Péhápkaři
Může Laravel obstát v konkurenci Zendu a Symfony? Je konvence nad konfigurací skutečně výhoda? A co teprve ve spojení s WordPress v roli headless CMS? Toto všechno z pohledu posedlého front-end developera.
2. Možnosti optimalizace
• hardware
• OS
• další technologie
• nastavení prostředí
• nastavení aplikace
Optimalizovat je možné na různých úrovních, na seznamu jsou vypsané od největšího zásahu do
stávajícího prostředí po nejmenší. V této prezentaci se chci zabývat především posledními dvěma
body, právě díky jejich minimálnímu zásahu a tudíž větší dostupnosti a omezenému riziku dalších
komplikací.
3. Nejnovější verze PHP
( source: http://talks.php.net/velocity15#/drupalbench )
Základní optimalizací je používání nejnovějších verzí PHP. Nové PHP postupně přinášejí zrychlení
aplikací, které je prakticky „zadarmo“, největší zrychlení, co se týče real-world aplikací napsaných
v Symfony nás čeká v podobě PHP 7. Zde je srovnání na základě Drupalu 8, který na Symfony běží
a je tak blíže realitě než prosté syntetické benchmarky. ( source: http://talks.php.net/velocity15#/drupalbench )
4. (https://3v4l.org/GWVhT)
Je samozřejmě možné používat lokálně jinou verzi, než na které poběží projekt v produkci. Nebo
používat jinou verzi (PHP 7 nebo HHVM) například jen pro spouštění testů. Já osobně toto
nedělám, protože jsem již několikrát narazil na poměrně zákeřné bugy, které se pak projevily jen
na produkci, nebo naopak. Snažím se mít tedy identickou verzi jako je na serveru.
5. Xdebug
Jedny z nejdramatičtějších zpomalení může způsobit zapnutá Xdebug extension. V posledních
verzích například sám composer přidal varování, které se zobrazuje při každém jeho spuštění.
6. php -dzend_extension=xdebug.so bin/phpunit
Zkontrolujte si tedy, že je Xdebug vypnutý jak při webovém přístupu (mod_apache, PHP-FPM
apod.), ale zároveň i v CLI. Doporučuji rozšíření loadovat jen pro nástoje, kde je bezprostředně
potřeba (tj. např. viz výše spuštění PHPUnitu). Alternativou je připravit samostatné php.ini a to
pak spouštět pomocí –c.
8. ( http://php.net/manual/en/ini.core.php#ini.sect.performance )
Další optimalizace
vycházejí především z toho,
že Symfony (ale i jakákoliv
jiná aplikace používající
hodně knihoven) musí při
běhu načíst velké množství
souborů, což obsahuje i
velké množství dotazů na
disk, které může být velmi
pomalé. Tyto dotazy se
cachují, velikost a
trvanlivost realpath cache
ovlivňují tyto nastavení.
Výchozí nastavení velikosti
většinou nestačí pro
standardní Symfony
aplikaci, doporučuji zvýšit
cca na 4096K.
9. S nastavením trvanlivosti realpath cache je to zrádnější, už výchozí 2 minuty můžou vytvořit
velké WTF momenty (aplikace si může myslet, že je na disku něco komplet jiného než opravdu
je). Nastavte tedy dle vlastního uvážení, ale doporučuji do build procesu (např. scriptu, který by
měl zajistit, že je aplikace připravená ke spuštění – např. po přepnutí z větve do větve) přidat
zavolání clearstatcache se zapnutým druhým parametrem, který tuto cache pročistí.
Pozor, clearstatcache je potřebné volat v procesu spuštěném v tom PHP SAPI, které cache chcete
ovlivnit (tj. pravděpodobně v tom, na které koukáte přes browser).
( http://php.net/manual/en/function.clearstatcache.php )
10. Voláním této funkce můžete zjistit, jak je právě využívána realpath cache a může vám tedy
pomoci s nalezením správné velikosti, pozor opět je potřeba volat v tom SAPI, pro které chcete
velikost zjišťovat.
( http://php.net/manual/en/function.realpath-cache-size.php )
11. Byte Code Cache
• APC
• OPcache (od 5.5)
Používání byte code cache znamená, že se všechny soubory nemusí pokaždé znovu parsovat a
překládat do spustitelné podoby. Tato technologie je od PHP 5.5 v podobě OPcache dostupná ve
většině distribucí přímo s PHP, není to tedy nic, co byste museli samostatně instalovat.
12. Optimalizace OPcache
• Fine-Tune Your Opcache Configuration to
Avoid Caching Suprises
opcache.validate_timestamps=0
Výchozí nastavení Opcache je ale
velmi opatrné a zdaleka nenabízí
největší optimalizaci. Doporučuji si
přečíst odkazovaný článek, který se
sice zabývá optimalizací pro produkci,
ale optimalizace pro dev je ve většine
případů jednodušší.
Jedním z největších zrychlení je
vypnutí kontrolování, jestli se soubory
nezměnily od posledního zpracování.
Jinak se opět pokládá velké množství
dotazů na filesystém. Toto nastavení
pak ale znamená, že musíte OPcache
explicitně říci, kdy má zapamatované
zdrojáky zapomenout (přidání do
build procesu).
( http://php.net/manual/en/function.realpath-cache-size.php )
13. Composer autoload
• Classmap
autoritativní
composer dump-autoload --optimize
composer install --optimize-autoloader
composer dump-autoload --classmap-authoritative
composer install --classmap-authoritative
Dalším místem, kde je potřeba velké množství čtení z disku je samostný autoloading souborů,
pokud máte hodně knihoven, které používají autoloading pomocí PSR 0 nebo 4, tak se soubory
musí po jednom hledat na disku (i v několika možných lokacích).
Nemusíte spoléhat na autory balíčků a můžete si vygenerovat do classmapy všechny třídy, takže
jejich poloha pak bude předem známá. Na devu není moc praktický autoritativní režim, protože
to znamená po přidání každé třídy přegenerovat classmap.
14. Vyházet zbytečnosti
Většina Symfony projektů, které jsem viděl začíná se Standard Edition, která obsahuje „komfortní
nastavení“ tak, aby nováčci nemuseli nic moc řešit a start projektu byl usnadněn. Reálně
obsahuje spoustu částí, které nikdy nepoužíváte a které při každém běhu můžou zpomalovat
aplikaci.
15. SensioFrameworkExtraBundle
Skoro všichni tak například používají SensioFrameworkExtraBundle, která nabízí hlavně výše
vypsané anotace. Většina projektů, ale nepoužívá všechny tyto anotace.
16. SensioFrameworkExtraBundle
Přitom veěkerá funkcionalita s tímto spojená je defaultně zapnutá (aby to každý mohl bez
nastavování používat).
Toto je jen jeden příklad za všechny, měli byste znát konfiguraci bundlů, které používáte.
17. Zbytečné listenery
• seznam aktuálně zaregistrovaných listenerů
pro dané prostředí
app/console debug:event-dispatcher
Kvůli tomu, jak fungují bundly (každý si může registrovat svoje listenery, bez nutnosti vašeho
nastavování) bývají právě ony zdrojem velkého překvapení. Například Standard Edition má v
defaultním stavu (v době vytváření prezentace) zaregistrováno pro request 33 listenerů.
To, které listenery jsou pro dané prostředí registrované můžete zjistit pomocí konzole a postupně
dohledat, jak deaktivovat ty, které nepotřebujete.
18. Další adepti
• formuláře
• mailer
• ? profiler
• ? logování
• ...
• kontrolujte
app/console debug:config
Další oblasti defaultní konfigurace,
které je možné podle zaměření
projektu vypnout. Pokud nepoužíváte
profilování a logování na devu pořád
a přitom např. kvůli produkci logujete
hodně věcí, můžete tyto nastavení
zapínat jen pro samotný debugging,
když se něco pokazí.
19. • vs
Konfiguraci je ale
potřeba ověřovat,
protože některé její části
můžou být navzájem
provázané, takže i když
dokumentace tvrdí, že
formuláře jsou defaultně
vypnuté a aplikace je v
konfiguraci explicitně
nezapíná, tak reálně jsou
ve Standard Edition
zapnuté.
20. Jakákoli optimalizace na devu je vždycky o balancování mezi pohodlím a rychlostí. Na devu, tím,
že měníme kód, tak očekáváme, že jakmile aplikaci spustíme, tak se bude chovat přesně podle
posledních úprav. Jediné, jak se na to ale spolehnout je vykonat vše od začátku jen na základě
aktuálních zdrojáků. Nebo zkontrolovat, že se od minule nic nezměnilo a jde použít staré
„výsledky“ některých operací. Oba tyto úkony jsou ale velmi náročné a tak většina optimalizací
pracuje s tím, že musíme sytému pomoci v tom, aby věděl, kdy (ne)může staré výsledky použít.
21. Assetic
app/console assetic:dump
app/console assetic:watch
Assetic například ve výchozím nastavení generuje všechny soubory dynamicky pro každé
spuštění, což je velmi pomalé. Tuto funkcionalitu lze vypnout, je pak ale právě potřeba zajistit
volání generování po změně patřičných souborů. To dělat buď manuálně (a jako součást build
procesu). Je to ale celkem nepohodlné pro průběžný vývoj, kde na to nechceme myslet. Je
možné tedy kontrolovat soubory, o kterých víme, že ovlivňují výsledek automaticky a generování
spustit jen pokud se změní. (Watch v asseticu je prý zabugovaný, používám toto jen jako příklad
přístupu, viz dále).
22. Doctrine
• disablování lazy generování proxy tříd
• vygenerování
parameters:
doctrine.orm.auto_generate_proxy_classes: false
app/console cache:warmup
Podobný princip jako je ukázán na minulém slidu je možné aplikovat i u dalších částí – většinou
bez přímé podpory autorů. Tady je ukázka jak podobný proces – generování proxy tříd pro
Doctrine entity přesunout z lazy evaluace při každém requestu do watch procesu. Prvně je nutné
zakázat lazy generování, což zároveň odemkne možnost pomocí cache:warmup vygenerovat
všechy proxy najednou. Pak ale musíme zařídit tech watch...?
23. JS to the rescue!
Je zbytečné si něco takového programovat v PHP, většina projektů tak jako tak používá nějaký
frontend buildovací nástoj, například Grunt, Gulp, Webpack a další. Myslím že všechny tyto
nástroje mají prostředky jak watchovat změny, protože live reload je ve světě JS aktuálně celkem
standardem. Je pak jen otázkou konfigurace, jak toto propojit s tím, co potřebujeme.
Ve zdejší ukázce jsem zvolil Grunt jen proto, že jsem ho na podobnou funkcionalitu už použil.
24. Repozitář dema
Prohlédněte si příklad na Symfony Demo aplikaci, kde po následování základní instalace npm
modulů, můžete watch spustit a po úpravě jakékoliv entity dojde automaticky k vygenerování
všech proxy tříd.
S trochou dalšího programování by bylo možné přegenerovávat jen změněné entity, ale tímto
chci především ukázat, jak snadné je začít aplikovat tento přístup k optimalizaci na devu.