Hány látogatót tud kiszolgálni a webáruházad? Teszteld!

Mi is az a teljesítmény tesztelés?

Az ISTBQ (International Software Testing and Qualification Board) szerint a teljesítmény tesztelés nem más, mint a “Tesztelési folyamat, mellyel a szoftvertermék teljesítményét lehet meghatározni.”

A Wikipédia szerint: Tesztelési folyamat, amely meghatározza, hogy milyen gyors a rendszer egy bizonyos szempontból, adott terhelés alatt. Ezenkívül validálhat és verifikálhat más minőségi tényezőket is, mint skálázhatóságot, megbízhatóságot vagy forrás kihasználtságot.

Tehát egy olyan nem funkcionális tesztelési folyamat, amely az alkalmazás (szoftver, azaz Magento webáruház) teljesítményével foglalkozik és a fejlesztés teljes szakaszában használható a problémák felfedésére és megelőzésére.

Szerintem a Wikipédia megállapítása áll legközelebb a meghatározáshoz, azonban pontos definíciót adni, mint sok más esetben, úgy itt sem lehet.

 

Miért van szükséged teljesítmény tesztelésre?

Az internet térhódításával egyre többen élnek az online vásárlás lehetőségével, így egyre többen érik el a webáruházakat is. Manapság már az emberek többsége – ahelyett, hogy a boltba menne és kipróbálná a terméket az eladótól segítséget kérve – már szinte igazi szakértőként összehasonlít, vizsgál, keresgél a világ minden webáruházának termékeiből, hogy számára a legmegfelelőbbet találja meg. Egy ünnep vagy nagy akció (mint például a Karácsony vagy a Fekete Péntek) közeledtével pedig a boltok helyett a web világában rohanják meg a vásárlók áruházunkat.

Ezeket a megnövekedett terheléseket vagy a folyamatos, erős forgalmat áruházunknak ki kell szolgálnia, ezért is szükséges a teljesítmény tesztelése.

A webáruházat több komponens alkotja, van szoftveres, hardveres és hálózati keresztmetszet része is, melyek további szegmensekre bonthatók egészen a használt keretrendszer, a szerver processzorának teljesítménye vagy a letöltött oldal kódjának adat mennyiségéig. Ha ezekre nem figyelünk oda, akkor egy-egy kiugró terhelés esetén a webáruházunk lelassulhat, elérhetetlenné válhat vagy a legrosszabb esetben teljesen össze is omolhat.

 

A teljesítmény tesztelés fajtái

Az alábbi felsorolásban ismerjük meg a releváns teljesítmény tesztelés fajtáit, a teljesség igénye nélkül, kiemelve a webáruházakon alkalmazott legfontosabb teszteléseket. Részletesebb információért a Wikipédia szoftver tesztelés leírását tudom ajánlani.

1. Terheléses tesztelés (Load testing): A legegyszerűbb teszt, mivel itt azt verifikáljuk, hogy az alkalmazás hogyan viselkedik normális vagy magasabb terhelés alatt, változik-e a viselkedése mindeközben.

   a) Tűrőképesség teszt (Endurance testing): Hosszabb ideig tartó, folyamatos terhelés mellett vizsgálja a rendszer működését, így az egy-két órás tesztek alatt rejtve maradó problémákat az akár több napos teszt segíthet a felszínre hozni.

2. Stressz tesztelés (Stress testing): Ideális esetben arra használjuk, hogy megismerjük a rendszer felső határait, a töréspontokat. Ez a teszt típus kész meghatározni a rendszer robusztusságát extrém terhelés közben, és segíti az adminisztrátorokat, hogy meghatározzák a rendszer ideális működési tartományát és maximumát.

   a) Kapacitás teszt (Capacity testing): A Stressz tesztelés folyamán megállapítjuk, hogy mennyi felhasználót / lekérdezést / műveletet tud egyszerre végrehajtani hibamentesen a rendszer.

3. Kitartás tesztelés (Soak testing): A normális működést szimulálva a kitartás teszt egy olyan működés, ami képes meghatározni, hogy a folyamatos használati terhelését mennyire bírja a rendszer. A teszt alatt folyamatosan figyelni kell a memóriát és ezzel felderíthetők a memória szivárgási problémák.

4. Tüske tesztelés (Spike testing): Hirtelen megugrott terhelést adunk a rendszernek, majd ezt ugyanilyen hirtelen lecsökkentjük. Ez a gyors változtatás „tüskeként” jelenik meg a rendszer terhelésének grafikonjában, innen kapta a teszt a nevét.

5. Konfigurációs tesztelés (Configuration testing): Felmerülhet a kérdés, hogy ez a teszt mit keres a teljesítmény tesztek között. Mivel ez a teszt azt vizsgálja, hogy a konfigurációs beállítások megváltoztatásával milyen hatással van a rendszer részeire vagy egészére, elsősorban a teljesítményére, ezért az itteni említése jogos.

6. Izolációs tesztelés (Isolation testing): A teljesítmény tesztelésnek nem egy egyedi típusáról van szó, inkább egy ismétlődő tesztelésről, ami fényt derít egy rendszerproblémára. A tesztek gyakran külön környezetekbe izoláltak és a teszt eredményeként csak a hibás környezetet kapjuk eredményül.

teljesitmény teszt PET ábra

A teljesítmény tesztelési típusok fajtái

A tesztelés lépései

      1. Tesztkörnyezet meghatározása (létrehozása, kialakítása)
      2. Elfogadási kritérium(ok) meghatározása
      3. Teszt(ek) megtervezése (tesztelési forgatókönyv megírása)
      4. Tesztkörnyezet konfigurálása (adatfeltöltés, paraméterek beállítása)
      5. Tesztek implementálása
      6. Tesztek futtatás
      7. Eredmények kiértékelése, riportok készítése, újrafuttatás

Tsung teljesítmény teszt logó

 

Tsung (IDX-Tsunami 1.6.0)

A Tsung egy megosztott terheléses teszt eszköz. Protokoll függő és jelenleg a következő protokollal kommunikáló szervereken futtatható:

A Tsung fő erőssége, hogy képes szimulálni egyetlen gépről nagy mennyiségű felhasználót. Ha több gépen (klaszter) használjuk, akkor pedig igazán lenyűgöző teljesítményt tud produkálni, mindezt könnyen konfigurálhatjuk és fenntarthatjuk.

Tsung működése ábra, teljesítmény teszt

A Tsung működésének elvi vázlata

 

Jellemzők

  • Magas teljesítmény
  • Elosztott működés
  • Több protokoll támogatás
  • SSL támogatás
  • Különböző IP címek kiosztása azonos gépről
  • Operációs rendszer monitorozása a tesztelés alatt
  • XML konfigurációs rendszer
  • Dinamikus forgatókönyvek (tranzakciók)
  • Kevert viselkedés a felhasználóknak (munkamenetek)
  • Sztohasztikus feldolgozás (thinktime)

 

Mi az az Erlang és miért fontos?

A Tsung-ot Erlang nyelven fejlesztették és ez az, ami olyan erőssé teszi, mivel az Erlang egy párhuzamosság-orinetált programozási nyelv (concurrent programming). Az Erlang OTP (Open Transaction Platform) képezi a Tsung alapját, ami így a következő főbb jellemzőkkel ruházza fel:

      • Teljesítmény
      • Skálázhatóság
      • Hibatűrő képesség

 

Protokollok és teljesítmény

A Tsung nagy teljesítményre képes, ha a megfelelő hátteret biztosítjuk a számára. Számokban ez az alábbiakat jelenti:

      • Jabber/XMPP protokoll:
        • 90,000 szimulált JABBER felhasználó egy 4-es Tsung klaszteren.
        • 10,000 szimulált felhasználó: Tsung 3 számítógépből (800MHz-es CPU) álló klaszteren.

 

      • HTTP és HTTPS protokoll:
        • 12,000 szimulált felhasználó: Tsung 4 számítógépből álló klaszteren (2003) 3000 lekérés/másodperc
        • 10,000,000 szimulált felhasználó: Tsung 75 számítógépből álló klaszteren több, mint 1,000,000 lekérés/másodperc

 

A Tsung használata

 

A Tsung teljesítmény tesztelés végrehajtásához először is fel kell telepítenünk azt a szerverünkre, melyhez az Amazon EC2 – Virtual Server Hosting szolgáltatása az egyik legkézenfekvőbb és kényelmes szolgáltatás.

A Tsung telepítése

A Tsung telepítését kísérjük most végig lépésről lépésre, hogy mindenki számára könnyen érthető legyen. A VPS szerver konfiguráció, amire telepítésre kerül, a következő:

      • CentOS 6.7 opercáiós rendszer
      • CPU: 8 magos (Intel(R) Xeon(R) CPU E5-2630 v2 @ 2.60GHz)
      • Memória: 3 GB
      • Tárhely: 10 GB HDD

 

      1. Első lépésként az Erlang-ot kell telepíteni, valamint a Firefox-ot is, mivel azon keresztül történik a jelentések generálása (és megnyitása, ha GUI-t használunk).

 


[root@aion-tsung ~]# yum -y install erlang perl perl-RRD-Simple.noarch perl-Log-Log4perl-RRDs.noarch gnuplot perl-Template-Toolkit firefox

 

      1. Ezt követően töltsük le a Tsung-ot és installáljuk:

 


[root@aion-tsung ~]# wget http://tsung.erlang-projects.org/dist/tsung-1.6.0.tar.gz
[root@aion-tsung ~]# tar zxfv tsung-1.6.0.tar.gz
[root@aion-tsung ~]# cd tsung-1.6.0
[root@aion-tsung ~]# ./configure && make && make install

 

      1. A Tsung jelentés elkészítésének parancsára hozzunk létre egy pre-set parancsot (alias command) a könnyebb használat érdekében (vim használatával):

 


[root@aion-tsung ~]# vim ~/.bashrc
vim > alias treport="/usr/lib/tsung/bin/tsung_stats.pl; firefox report.html"
vim > :w
vim > :q
[root@aion-tsung ~]# source ~/.bashrc

 

      1. Készítsük elő az első felhasználáshoz a Tsungot (opcionális):

 


[root@aion-tsung ~]# cd /root/
[root@aion-tsung ~]# mkdir .tsung
[root@aion-tsung ~]# cd ..
[root@aion-tsung ~]# cp /usr/share/doc/tsung/examples/http_simple.xml /root/.tsung/tsung.xml

 

A Tsung konfigurálása (/root/.tsung/tsung.xml)

A Tsung XML konfigurációs állományának első szintje meglehetősen kötött, azonban a munkamenetek és a tranzakciók használatával jól irányíthatóak a folyamatok és a monitorozás. Nézzük meg példának az examples/http_simple.xml állományt:

<?xml version="1.0"?>
<!DOCTYPE tsung SYSTEM "/usr/share/tsung/tsung-1.0.dtd">
<tsung loglevel="notice" version="1.0">

    <!-- Client side setup -->
    <clients>
        <client host="localhost" use_controller_vm="true"/>
    </clients>

    <!-- Server side setup -->
    <servers>
        <server host="195.56.150.103" port="80" type="tcp"></server>
    </servers>

    <!-- to start os monitoring (cpu, network, memory) -->
    <monitoring>
        <monitor host="195.56.150.103" type="snmp"></monitor>
    </monitoring>

    <load>
        <!-- several arrival phases can be set: for each phase, you can set
        the mean inter-arrival time between new clients and the phase
        duration -->
        <arrivalphase phase="1" duration="10" unit="minute">
            <users interarrival="2" unit="second"></users>
        </arrivalphase>
    </load>

    <options>
        <option type="ts_http" name="user_agent">
            <user_agent probability="80">Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.7.8) Gecko/20050513 Galeon/1.3.21</user_agent>
            <user_agent probability="20">Mozilla/5.0 (Windows; U; Windows NT 5.2; fr-FR; rv:1.7.8) Gecko/20050511 Firefox/1.0.4</user_agent>
        </option>
    </options>

    <!-- start a session for a http user. the probability is the
    frequency of this type os session. The sum of all session's
    probabilities must be 100 -->

    <sessions>
        <session name="http-example" probability="100" type="ts_http">

            <!-- full url with server name, this overrides the "server" config value -->
            <request>
                <http url="/" method="GET" version="1.1"></http>
            </request>
            <request>
                <http url="/images/accueil1.gif" method="GET" version="1.1" if_modified_since="Fri, 14 Nov 2003 02:43:31 GMT"></http>
            </request>
            <request>
                <http url="/images/accueil2.gif" method="GET" version="1.1" if_modified_since="Fri, 14 Nov 2003 02:43:31 GMT"></http>
            </request>
            <request>
                <http url="/images/accueil3.gif" method="GET" version="1.1" if_modified_since="Fri, 14 Nov 2003 02:43:31 GMT"></http>
            </request>

            <thinktime value="20" random="true"></thinktime>

            <request>
                <http url="/index.en.html" method="GET" version="1.1"></http>
            </request>

        </session>
    </sessions>
</tsung>

A fenti példában a szerverre telepített tsung a localhost-ról indítja a klienseket, melyek célja a 195.56.150.103 ip címen lévő szerver 80-as portja. A szerver monitorozására az SNMP protokollt használjuk és egy tsung klienst. A <load> szakaszban látható, hogy egy szakaszból áll a teszt, ami 10 percig fut és 2 másodpercenként hoz létre egy felhasználót. Az <options> szakaszban megadott böngészővel azonosítják magukat a létrehozott felhasználók 20-80%-os arányban.   A <sessions> munkameneteket leíró szakasz határozza meg a felhasználók interakcióját, mely a következő lépésekből áll:

      1. A 195.56.150.103 kezdő oldal elérése (HTTP GET request)
      2. A 195.56.150.103/images/accueil1.gif kép elérésnek ellenőrzése, ha azt a megadott időpont óta módosították.
      3. A 195.56.150.103/images/accueil2.gif kép elérésnek ellenőrzése, ha azt a megadott időpont óta módosították.
      4. A 195.56.150.103/images/accueil3.gif kép elérésnek ellenőrzése, ha azt a megadott időpont óta módosították.
      5. A felhasználó ezután 0-20 másodperc közötti véletlen időtartamig várakozik.
      6. A 195.56.150.103/index.en.html oldal betöltése.

 

Tsung konfigurációs lehetőségek

Az előző példában bemutatott XML mellett további lehetőségeink vannak még, melyekkel még jobban személyre szabhatjuk teljesítmény tesztjeinket. Az alábbi lista a teljesség igénye nélkül készült, részletekért keresd fel a Tsung konfigurációs XML dokumentációját:

      • Felhasználók felső határának korlátja (maxusers)
      • Dinamikusan és statikusan létrehozható felhasználók
      • Szakaszok maximális futási idejének meghatározása
      • Felhasználók „gondolkozási idejének” beállítása, véletlenszerűség, hibernálás
      • Kapcsolat időtúllépésének megadása
      • Ismételt próbálkozások száma, ha a kapcsolat nem épült fel
      • HTTP, LDAP authentikáció lehetősége
      • MySQL lekérdezések futtatása
      • Variálható munkamenet típusok
      • Külső (CSV) állományok betöltése és feldolgozása
      • Dinamikus változók használata (JSONPath, Regexp, XPath, PostgreSQL, dinmaikus változók)
      • Iterációk megvalósítása (for, repeat, if, foreach)

 

A Tsung paraméterezése és futtatása

A Tsung futtatása meglehetősen egyszerű, azonban mindenképpen a Screen alkalmazás használatával javasolt, hogy ha a VPS-sel elveszne a kapcsolat, akkor is tovább fusson a teszt. Nézzük meg a beépített helpert, ami megfelelően dokumentált, így külön magyarázatot nem is fűznék hozzá:


[root@aion-tsung ~]# $ tsung -h
Usage: tsung <options> start|stop|debug|status
 Options:
   -f <file>     set configuration file (default is ~/.tsung/tsung.xml) (use - for standard input)
   -l <logdir>   set log directory (default is ~/.tsung/log/YYYYMMDD-HHMM/)
   -i <id>       set controller id (default is empty)
   -r <command>  set remote connector (default is ssh)
   -s                  enable erlang smp on client nodes
   -p <max>      set maximum erlang processes per vm (default is 250000)
   -m <file>     write monitoring output on this file (default is tsung.log) (use - for standard output)
   -F                  use long names (FQDN) for erlang nodes
   -w                  warmup delay (default is 10 sec)
   -v                  print version information and exit
   -6                  use IPv6 for Tsung internal communications
   -h                  display this help and exit

Tsung futtatása a /root/.tsung/ könyvtárból, ha a konfigurációs állomány a simple_website_check.xml:


[root@aion-tsung ~]# screen tsung -f simple_website_check.xml start

A parancs hatására egy külön taszkban fog futni a tsung, amennyiben az xml konfigurációs állomány megfelelő szintaktikájú. A validálást a futtatás előtt megteszi a Tsung, ha hibát talál akkor hibakeresési információkkal megszakítja a futtatást. A teszt alatt keletkező napló állományok alapértelmezetten a ~/.tsung/log/YYYYMMDD-HHMM könyvtárba kerülnek, de ez könyvtár a -l paraméterrel módosítható.

 

Futtatás közben

Az 1.6-os verziótól kezdve közvetlen webes monitorozási lehetőséget (dashboard) kapunk a teszt futása alatt, ami nagy segítség abban, hogy lássuk hogyan alakul a teszt folyamata. Így lehetőségünk van még időben beavatkozni, hogyha esetleg a teszt szélsőséges eredményeket hozna vagy a rendszer összeomolna.

A dashboard a Tsung szerveren érhető el a 8091-es porton keresztül az alábbi paraméterezéssel:

{tsung szerver domain/ip}:8091/es/ts_web:status

 

Tsung konzol

A konzolban nem sok információt kapunk vissza a tesztről

Tsung dashboard státusz

Tsung Dashboard működés közben: {domain}:8091/es/ts_web:status

 

Futtatás után: jelentés készítése

Ha a tesztünk lefutott, akkor a naplózáshoz megadott vagy az alapértelmezett (vagy a paraméterként megadott) mappában megtaláljuk a napló (.log) állományokat, az XML konfigurációs állományunk és a csatolt csv-k másolatát is. A mappába belépve kiadva a treport parancsot – amit korábban létrehoztunk – és ezzel legeneráljuk a teszt eredményeihez tartozó HTML jelentést, melyet böngészőben a report.html file megnyitásával tekinthetünk meg.   A jelentés állomány készítése előtt csak a napló állományok és a dashboard HTML oldala található a naplózáshoz kijelölt mappában:

Tsung naplózási mappa

A naplózási mappa tartalma a teszt lefutása után

Tsung treport futtatása

A treport futtatása konzolból

Tsung naplózási mappa teljesítmény teszt

A jelentés készítés után a naplózási mappa tartalma

 

Jelentés felépítése

Az elkészített jelentést egyszerűen böngészővel nyissuk meg és megkapjuk számszerűsítve a teljesítmény teszt eredményét. A jelentés megfelelően részletes ahhoz, hogy meghatározzuk a rendszer töréspontjait, az esetlegesen nem megfelelő folyamatokat vagy azok gyenge pontjait és ezek alapján kód refaktorálással, szerver skálázással vagy fejlesztéssel megerősítsük/felgyorsítsuk az alkalmazásunkat.

Tsung jelentés statisztika

A jelentés statisztikája

 

A bal oldali menü két nagyobb szakaszra bomlik a felső részben vannak a számszerűsített statisztikák:

 

Main Statistics

      • Transactions: A tranzakciók összefoglalása
      • Network Throughput: A hálózat áteresztő képessége (sebesség/adatmennyiség)
      • Counters: Ferlhasználók, sikeres csatlakozás, lefutott fázisok, stb.
      • Server monitoring: A monitorozás eredménye
      • HTTP status: A HTTP állapot kódok
      • Errors: A futás folyamán fellépő hibák

A második szakaszban az egyes grafikonokat nézhetjük meg, azonban ezt én még meglehetősen kezdetlegesnek érzem.

Graphs

      • Response times: Válaszidők változása a teszt alatt.
      • Throughput graphs: A hálózat terhelésének változása a teszt alatt.
      • Simultaneous Users: A teszt alatt szimulált felhasználók viselkedése.
      • Server monitoring: Az opercáiós rendszer CPU, memória terhelése
      • HTTP status: A válasz HTTP kódok a tesztelés alatt.
      • Errors: A kapott hibák a tesztelés alatt.

 

Tsung jelentés grafikonok

A Tsung jelentés grafikonjai

 

ÖSSZEFOGLALÁS

A teljesítmény tesztelés kiemelten fontos az e-kereskedelmi megoldásoknál, főleg a Magento webáruházaknál, hiszen a felhasználók gyorsan, akadály- és hibamentesen akarnak eljutni a vásárlás végéig és megkapni termékeiket. Főleg ünnepnapok, akciók és jól célzott marketingaktivitás közben és után számítanunk kell komoly terhelésre, így azoknak, akik szeretnék a vásárlóikat megtartani és nem arról híressé/hírhedtté válni, hogy a webáruházuk elérhetetlen, erősen javasolt a teljesítmény tesztelés.

A Tsung tökéletesen alkalmas eszköz arra, hogy teljesítmény teszteket végezzünk, akár az egész áruházra, akár az egyes folyamatokra nézve (adatbázis terhelés, fizetés, stb.), mindezt a legismertebb és leginkább használt protokollok támogatása mellett. Könnyű konfigurálása miatt ideális, hogy rövid tanulással is komoly, minden tekintetben profi teszteket futtassunk. Az automatikus jelentés készítésével pedig mindezt – grafikonokkal színesítve – „laikus” emberek számára is érthető formába önthetjük.

 

112 válaszok
  1. https://royalcbd.com/product/cbd-gummies-25mg/ says:

    Can I just say what a relief to find somebody who genuinely knows what they’re talking about on the
    internet. You certainly understand how to bring a problem to light and
    make it important. More and more people should look at this and understand this side of the
    story. I can’t believe you aren’t more popular given that you surely possess the gift.

  2. Turning Point Drug Rehab says:

    Outpatient Substance Abuse Treatment http://aaa-rehab.com Drug Rehab Centers http://aaa-rehab.com Free Rehabilitation Centres
    http://aaa-rehab.com

  3. best CBD oil for anxiety says:

    My spouse and I absolutely love your blog and find
    a lot of your post’s to be just what I’m looking
    for. Do you offer guest writers to write content for you?
    I wouldn’t mind producing a post or elaborating on many of the subjects
    you write related to here. Again, awesome weblog!

  4. CBD pills says:

    Nice post. I used to be checking continuously this
    weblog and I’m inspired! Extremely useful info particularly the closing
    phase :) I deal with such information much. I used to be looking for this particular info for a very lengthy time.
    Thank you and best of luck.

  5. best cbd cream for pain says:

    Hello there! I know this is kinda off topic however I’d figured I’d ask.

    Would you be interested in trading links or maybe guest authoring a blog article or vice-versa?

    My blog covers a lot of the same subjects as yours and I
    believe we could greatly benefit from each other.

    If you might be interested feel free to shoot me an email.
    I look forward to hearing from you! Terrific
    blog by the way!

  6. CBD gummies says:

    If you are going for finest contents like myself, simply pay a visit
    this site every day for the reason that it gives feature contents,
    thanks

  7. best CBD gummies says:

    Do you have a spam issue on this site; I also am a blogger,
    and I was wondering your situation; we have developed some nice
    methods and we are looking to trade techniques with other folks,
    be sure to shoot me an e-mail if interested.

  8. best CBD gummies says:

    You could definitely see your enthusiasm within the article you write.
    The world hopes for even more passionate writers like you who
    aren’t afraid to say how they believe. Always follow your heart.

  9. best CBD gummies says:

    I truly love your site.. Pleasant colors & theme. Did you build this amazing site yourself?

    Please reply back as I’m wanting to create my own personal website and want to
    learn where you got this from or just what the theme is named.
    Cheers!

  10. best CBD oil says:

    This is a good tip particularly to those fresh to the blogosphere.
    Brief but very precise info… Appreciate your sharing this one.
    A must read article!

  11. best CBD gummies says:

    Hey just wanted to give you a quick heads up. The
    text in your post seem to be running off the screen in Chrome.

    I’m not sure if this is a formatting issue or something to do with browser compatibility but I thought I’d
    post to let you know. The layout look great though! Hope you get the issue solved soon. Thanks

  12. best CBD oil says:

    Hi there! This is my first comment here so I just wanted to give a quick shout out and tell you I truly enjoy reading through your posts.
    Can you suggest any other blogs/websites/forums that deal with the same subjects?
    Thanks for your time!

  13. best CBD oil says:

    Heya i’m for the first time here. I found this board and I
    in finding It truly useful & it helped me out much.
    I’m hoping to provide something again and help others such as
    you aided me.

  14. best CBD oil for sleep says:

    Wow that was unusual. I just wrote an really long comment but
    after I clicked submit my comment didn’t appear. Grrrr… well
    I’m not writing all that over again. Anyway, just wanted to say superb blog!

  15. sailor moon and luna says:

    I don’t even know how I finished up right here, however I
    thought this submit was once great. I don’t understand who you’re however
    definitely you are going to a famous blogger
    for those who are not already. Cheers!

  16. buy CBD oil says:

    Great post. I was checking constantly this weblog and I’m inspired!
    Extremely helpful information specifically the closing phase :
    ) I take care of such info much. I used to be seeking this certain info for a long time.
    Thanks and best of luck.

    Feel free to visit my web-site; buy CBD oil

  17. Blessed CBD says:

    Wow, incredible blog layout! How long have you been blogging for?
    you made blogging look easy. The overall look of your website is
    magnificent, let alone the content!

    Also visit my website – Blessed CBD

  18. CBD oil says:

    You ought to take part in a contest for one of the most useful blogs on the net.

    I’m going to recommend this website!

    Also visit my web blog … CBD oil

  19. CBD oil for arthritis says:

    Right here is the right webpage for anybody who wishes to
    understand this topic. You know a whole lot its almost hard
    to argue with you (not that I actually will need to…HaHa).

    You definitely put a fresh spin on a subject that’s been discussed for ages.
    Wonderful stuff, just excellent!

    My webpage … CBD oil for arthritis

  20. CBD products says:

    Hello! I’ve been following your website for a while now and finally got the
    bravery to go ahead and give you a shout out from Humble Texas!
    Just wanted to say keep up the fantastic job!

    Feel free to surf to my site CBD products

Trackbacks & Pingbacks

  1. cheapest 100mg viagra delivered overnight

    Hány látogatót tud kiszolgálni a webáruházad? Teszteld! – aionhill.com

  2. how long does cialis last

    Hány látogatót tud kiszolgálni a webáruházad? Teszteld! – aionhill.com

  3. price of lumigan at walmart

    Hány látogatót tud kiszolgálni a webáruházad? Teszteld! – aionhill.com

  4. buy viagra australia

    Hány látogatót tud kiszolgálni a webáruházad? Teszteld! – aionhill.com

  5. viagra without doctor prescription

    Hány látogatót tud kiszolgálni a webáruházad? Teszteld! – aionhill.com

  6. tylenol stock price

    Hány látogatót tud kiszolgálni a webáruházad? Teszteld! – aionhill.com

  7. naltrexone weight loss

    Hány látogatót tud kiszolgálni a webáruházad? Teszteld! – aionhill.com

  8. keflex antibiotic cipro

    Hány látogatót tud kiszolgálni a webáruházad? Teszteld! – aionhill.com

  9. cialis usa szerint:

    cialis usa

    Hány látogatót tud kiszolgálni a webáruházad? Teszteld! – aionhill.com

  10. ventolin inhaler szerint:

    ventolin inhaler

    Hány látogatót tud kiszolgálni a webáruházad? Teszteld! – aionhill.com

  11. doctor7online.com

    Hány látogatót tud kiszolgálni a webáruházad? Teszteld! – aionhill.com

Hagyjon egy választ

Want to join the discussion?
Feel free to contribute!

Vélemény, hozzászólás?

Az email címet nem tesszük közzé.