Testování REST API s databází backend




Chci vědět, nejlepší / různé způsoby, jak testovat REST API, která používá databázový backend. Já jsem vyvinul svůj API s Baňka v Pythonu a chcete použít unittest nebo nos.


Ale můj problém je, že některé zdroje vyžadují jiný zdroj je vytvořit v první řadě. Existuje způsob, jak říci, že k testování vytvoření blogu vyžaduje, aby se další zkouška, která zahrnuje vytvoření autorem byl úspěšný?
K dispozici jsou 2 standardní způsoby, jak se blíží k testu, která závisí na něčem jiném (namítat, volání funkce, atd).


* Můžete použít vysmívá namísto objekty kód testujete závisí na.
* Můžete načíst přípravek nebo dělat tvorbu / hovor zkušební sestavy.


Někteří lidé mají rádi „klasických“ unit testů, kde je testován jen „jednotka“ kódu. V těchto případech se obvykle používají se vysmívá a pahýly nahradit závislostí.


Jiné podobné více integračních testů, kde je testována většinu nebo všechny zásobníku volání. V těchto případech můžete použít přípravek, nebo možná dokonce dělat hovory / výtvory ve funkci nastavení.


Obecně byste **to** udělat jeden test závisí na druhého. Všechny testy by měly:


* uklidit po sobě
* je spustitelný v izolaci
* být spustitelný jako součást sady
* být konzistentní a opakovatelné


Pokud uděláte jeden test závislý na jiném nemohou být spuštěny v izolaci, a ty jsou také nutí rozkaz testy spustit. Prosazování pořadí v testech není dobré, ve skutečnosti mnoho lidí pocit, že by se náhodně pořadí, ve kterém jsou spouštěny vaše testy.
Tak ono zalezi o jakou dokumentaci ti jde. Muzes mit dokumentaci ve forme JavaDoc pro Javovske aplikace. K tomu ti staci vyvojovy nastroj, ktery vyvojari uz pouzivaji. Lze z toho generovat html stranky. Toto je dokumentace pro vyvojare. (IMHO javadoc ale obecne komentare a poznamky v kodu jsou musthave, at uz nejakou dokumentaci vubec planujete delat nebo ne ;) )Testy jsou z urciteho pohledu taky dokumentace. Dokumentuji, jak urcite casti maji fungovat, jake jsou okrajove podminky, a co to delat nema.Pokud mas na mysli napr user guide, nebo architecture, security, maintenance/support a podobne, tak nato muzes pouzit treba LibreOffice s podporou nastroju pro tvorbu napr. UML diagramu, jako treba class diagram. Tady mas moznosti jako EnterpriseArchitect (placeny, ale existuje i spousta free variant). Je toho spousta. Nebo muzes pouzit nejaka online reseni (i v ramci intranetu), jako napr. wiki, Confluence, E-share, GitHub (muzes mit interni/privatni instalaci, GitHub ma svoji vlastni wiki) <p>můžete použít rss kanál z twitteru, ukládat záznamy do databáze (překročit limit 24/72 hodin) a použít #hashtag nebo podobný, u kterého můžete zkontrolovat, zda má být zveřejněn.</p><p>jak často kontrolujete zdroj, jak vyčistíte položky databáze a kolik # hashagů používáte, záleží na vás a kolik času máte.</p> Máte-li stejnou platformu i verzi aplikace, s největší pravděpodobností jste každý v jiné skupině uživatelů pro A/B testování. Tak vývojáři ověřují účinnost aplikace a nakonec zvolí tu účinnější verzi a zavedou všem. Chce-li lingoty, může zkusit web na PC nebo třeba i v mobilu v nějakém internetovém prohlížeči. Pravděpodobně to zabere. <h2>v ideálním případě žádné</h2><p>ale to není vždy možné. nemohu vám dát tvrdá čísla jako 20% nebo 10 řádků, což je subjektivní do té míry, že na ni nelze odpovědět. dokážu popsat, jak používám návrhové vzory a okolnosti, které je vyžadují mírně ohýbat.</p><p>podle mého názoru je to zcela na účelu aplikace. vytváření jednoduchých rest api, které chcete zveřejnit? zapomněli jste na čisté oddělení nebo dokonce na vzor. můžete vypálit funkční verzi za hodinu. budování něčeho většího? pravděpodobně nejlepší na tom pracovat.</p><p>cílem je budování individuálně obsažených systémů. pokud začnete psát obchodní logiku, která je specifická pro to, jak dva systémy interagují, je to problém. aniž bych se na to dál díval, nemohu vyjádřit názor.</p><p>designové vzory jsou formy, některé je rádi striktně dodržují na základě principu a dobře napsaného kódu. přísné dodržování vzoru vám pravděpodobně nedá <em> špatný </em> kód, ale může to zabrat více času a způsobit, že budete psát <em> mnohem více </em> kód.</p><p>designové vzory jsou flexibilní, upravte je tak, aby vyhovovaly <em> vašim </em> potřebám. ohněte je příliš mnoho a oni se ale zlomí. <strong>víte, co potřebujete</strong> a vyberte vzorec vzoru, který je k tomu nejblíže.</p> V současné době jsou v kurzu SQL dartabáze. Takže pokud se chceš uplatnit, tak MS-SQL, Interbase, ORACLE, popř. nějaké ty internetové jako např. MySQL, PostgreeSQL apod. Každá databáze má vlastní programovací jazyk pro uložené procedury, vlastní datové typy apod.Program, ve kterém budeš vyvíjet soft je opět něco jiného. Ten většinou je univerzální a umí přistupovat k jakékoliv databázi.V současné době, pokud bych začínal, tak bych se orientoval směrem .NET a C#. <p>psaní plynulého rozhraní (s ním jsem <a href="http://www.google.ca/url?sa=t&amp;source=web&amp;cd=1&amp;ved=0cbuqfjaa&amp;url=http%3a%2f%2fsoapboxautomation.com%2fproducts%2ffluentdwelling%2f&amp;ei=ao6ttcuck8sdgqesvpsqda&amp;usg=afqjcngcf99lzbzlrfvnrtst7qsww3kxwg">dabbled</a> ) vyžaduje více úsilí, ale má to výplaty, protože pokud to uděláte správně, je výsledný uživatelský kód jasnější. je to v zásadě forma specifického jazykového jazyka.</p><p>jinými slovy, pokud je váš kód načten mnohem více, než je napsán (a jaký kód není?), měli byste zvážit vytvoření plynulého rozhraní.</p><p>plynulá rozhraní jsou více o kontextu a jsou mnohem víc než jen způsoby konfigurace objektů. jak vidíte ve výše uvedeném odkazu, k dosažení:</p><ol> <li>kontext (takže když obvykle provádíte mnoho akcí ve stejném pořadí, můžete je zřetězit, aniž byste museli znovu a znovu prohlašovat svůj kontext).</li> <li>viditelnost (když jdete na <code>objecta.</code> pak vám inteligence dává spoustu rad. v mém případě výše, <code>plm.led.</code> vám poskytuje všechny možnosti pro ovládání vestavěné led a <code>plm.network.</code> vám poskytuje věci, které můžete dělat se síťovým rozhraním. <code>plm.network.x10.</code> vám dává podmnožinu síťových akcí pro zařízení x10. u inicializátorů konstruktoru to nedostanete (pokud si nepřejete, aby byl objekt konstruován pro každý jiný typ akce, který není idiomatický).</li> <li>reflexe (nepoužívá se ve výše uvedeném příkladu) - schopnost převzít výraz linq a manipulovat s ním je velmi výkonný nástroj, zejména v některých pomocných api, které jsem vytvořil pro testy jednotek. dokážu předat výraz getter get, sestavit spoustu užitečných výrazů, zkompilovat a spustit je, nebo dokonce použít getter k nastavení mého kontextu.</li> </ol><p>jedna věc, kterou obvykle dělám, je:</p><pre><code>test.property(t =&gt; t.someproperty) .initializedto(string.empty) .cantbenull() // tries to set to null and asserts argumentnullexception .yaddayadda(); </code></pre><p>nechápu, jak můžete něco takového udělat i bez plynulého rozhraní.</p><p><strong> edit 2 </strong>: můžete také udělat opravdu zajímavá vylepšení čitelnosti, jako například:</p><pre><code>test.listproperty(t =&gt; t.mylist) .shouldhave(18).items() .andthenafter(t =&gt; testaddingitemtolist(t)) .shouldhave(19).items(); </code></pre> <p>ubuntu wiki má <a href="https://help.ubuntu.com/community/reportingbugs">velmi důkladný průvodce</a> , který je dobře ilustrován a pokrývá mnoho možných scénářů.</p><p>podstatou této stránky je to, že nejprve potřebujete <a href="https://launchpad.net/+login">launchpad account</a> , pak stiskněte <kbd>alt</kbd>+<kbd>f2</kbd> a zadejte <code>ubuntu-bug packagename</code>. v 11.04 a novějších můžete zadat <code>ubuntu-bug -w</code> a klikněte na postižené okno.</p><p>na této wiki stránce jsou také popsány metody, které vám řeknou, jak:</p><ul> <li>chyby souborů proti spuštěným programům</li> <li>proti žádnému konkrétnímu balíčku ( <a href="https://wiki.ubuntu.com/bugs/findrightpackage">a jak se rozhodnout, který balíček</a> )</li> <li>az počítačů bez připojení k internetu.</li> </ul><p>existuje <a href="https://www.youtube.com/watch?v=18nsscrdia0">rychlé výukové video</a> , které vysvětluje lépe.</p><p>a další informace na tomto webu o tom, jak shromažďovat informace pro hlášení o chybě:</p><ul> <li> <a href="https://askubuntu.com/questions/109779/ive-got-internal-error-whilst-running-a-ubuntu-beta-how-to-gather-information">při spuštění ubuntu beta mám interní chybu. jak shromažďovat informace a zjistit, co to je?</a> </li> </ul> <p>rozhraní api <a href="http://codex.wordpress.org/widgets\_api#developing\_widgets\_on\_2.8.2b">widgetů</a> je nejrychlejší způsob, jak vytvořit widget, který lze znovu použít. příklad použití:</p><pre><code>class my\_widget extends wp\_widget { /** * php4 constructor */ function my\_widget() { my\_widget::\_\_construct(); } /** * php5 constructor */ function \_\_construct() { // actual widget processes } /** * echo the settings update form * * @param array $instance current settings */ function form($instance) { // outputs the options form on admin } /** * update a particular instance * * @param array $new\_instance new settings for this instance as input by the user via form() * @param array $old\_instance old settings for this instance * @return array settings to save or bool (false) to cancel saving */ function update($new\_instance, $old\_instance) { // processes widget options to be saved } /** * echo the widget content * * @param array $args display arguments including before\_title, after\_title, before\_widget, and after\_widget * @param array $instance the settings for the particular instance of this widget */ function widget($args, $instance) { // outputs the content of the widget } } register\_widget('my\_widget'); </code></pre> <p>sun poskytuje rozhraní api nazvané codemodel pro generování zdrojových souborů jazyka java pomocí rozhraní api. není to nejjednodušší získat informace, ale je to tam a funguje to velmi dobře.</p><p>nejjednodušší způsob, jak toho dosáhnout, je součástí jaxb 2 ri - generátor schématu xjc-to-java používá codemodel pro generování svého zdroje java a je to součást sklenic xjc. můžete jej použít pouze pro codemodel.</p><p>chyť to z <a href="http://codemodel.java.net/">http://codemodel.java.net/</a> </p> <p>doufám, že chápu vaši situaci správně. pokud ne, zanechte komentář a trochu to vyčistím.</p><p>ve vaší situaci si nejsem jistý, jak dobře bude testování a/b fungovat - mám obavy z toho, že mohu získat použitelné výsledky. existují dva problémy, které je třeba překonat - získání statisticky platných výsledků a jejich porozumění.</p><p>první problém, který musíte vidět, je, že ~ 1 000 lidí, kteří používají vaši službu, není celá vaše uživatelská základna a nemůžete si být jisti, že jsou zástupci vašich uživatelů. to, že těchto 1000 uživatelů vykazuje určité tendence v testování a/b, neznamená, že tyto tendence budou mít i jiné skupiny uživatelů. a myslím si, že také zakaluje statistickou platnost výsledků, protože máte nesprávné vzorky.</p><p>máte také dvě kategorie lidí, kteří používají vaši konkrétní službu a kdo ví, kolik lidí používá systémy dalšího prodeje. ve vašem systému máte časté a občasné uživatele. ale co v dalších nasazeních? pokud by vás vaše změny ovlivnily také, mohli byste mít vliv na jejich schopnost dosáhnout svých cílů bez absolutních údajů o uživatelských zkušenostech v a nebo b.</p><p>a pochopení všech výsledků, které získáte, bude obtížné, zejména pokud nasadíte testování a/b na více nasazení vaší služby. pokud shromažďujete data z několika různých populací, možná zjistíte, že dosáhnete požadovaných výsledků pomocí a v některých a b v jiných - pak se musíte rozhodnout, zda je to skutečně přesné, a pak se rozhodnout, co s tím dělat.</p><p>upřímně, v tomto případě bych doporučil průzkumy. zjistěte více o pozadí vašich uživatelů - věkové rozmezí, pohlaví, zkušenosti s počítačem, profese - a o tom, jak software používají. poté zjistěte, jaké funkce se jim líbí nebo nelíbí, jaké funkce se snadno používají nebo ne, atd. tento průzkum by měl oslovit co nejvíce lidí - jak lidí, kteří používají vaše nasazení, tak lidí, kteří používají jiné nasazení.</p>