Close Menu
    Wat is hot

    Kwantumdreiging? Blackrock vlakt toekomstig risico op bitcoin ETF -indiening

    May 14, 2025

    Bitcoin om USD te vervangen in ’10 jaar ‘: legendarische belegger

    May 14, 2025

    Solaxy -voorverkoop explodeert met bijna $ 1 miljoen in twee dagen, wordt de beste voorverkoop om voor Altcoin Rally te kopen

    May 14, 2025
    Facebook X (Twitter) Instagram
    • Over Ons
    • Privacybeleid
    Facebook X (Twitter) Instagram
    Crypto Dagelijks
    • Thuis
    • Nieuws
    • Cryptogeld
    • Altcoin
    • Bitcoin
    • Definitie
    • Dogecoin
    • Ethereum
    Crypto Dagelijks
    Home»Nieuws»Richtlijn om QA Web3 te zijn: Voltooi E2E Defi -project met Syntpress (Playwright) en Hardhat/ANVIL | door Ploy Thanasornsawan | Coinmonks | Mar, 2025
    Nieuws

    Richtlijn om QA Web3 te zijn: Voltooi E2E Defi -project met Syntpress (Playwright) en Hardhat/ANVIL | door Ploy Thanasornsawan | Coinmonks | Mar, 2025

    cryptodagelijksBy cryptodagelijksMarch 6, 2025No Comments8 Mins Read
    Share
    Facebook Twitter LinkedIn Pinterest Email

    End-to-end testen simuleert echt gebruikersgedrag door de volledige stroom van een applicatie van begin tot eind te testen. In de context van Defi -toepassingen betekent E2E -testen:

    1. Beginnend met een portemonnee -verbinding – Net zoals een echte gebruiker zou doen
    2. Volledige financiële transacties uitvoeren – Deposito’s, lenen, trekt zich terug, etc.
    3. Resultaten verifiëren in alle lagen – UI -wijzigingen, blockchain -status, database -records
    4. Hele gebruikersreizen testen – Niet alleen individuele functies

    Het onderstaande diagram illustreert de complexe interacties in een defi -kredietprotocol tijdens de afzetting en lenen stromen. Het begrijpen van deze interacties is cruciaal voor het ontwerpen van uitgebreide testgevallen:

    Kredietnemerstroom:

    Liquidatorstroom:

    Core Lending Protocol Functions

    • Borg: Levering van onderpand aan het protocol
    • Lenen: Neem een ​​lening af tegen uw onderpand
    • Terugbetalen: Betaal geleende activa plus rente terug
    • Terugtrekken: Verwijder uw onderpand uit het protocol
    • Liquideren: Betaal een deel van een ongezonde lening in ruil voor een korting op het onderpand

    Zoals u ziet, activeert een eenvoudige gebruikersactie zoals het afzetten van ETH meerdere interacties:

    • Prijscontroles met een Oracle -service
    • Tokenconversies (eth to weth)
    • Slimme contractstatus updates
    • Gebruikerspositie volgen
    • Activiteitsregistratie in de database

    Onze E2E -tests moeten verifiëren dat elk van deze stappen met succes is voltooid, net zoals in een productieomgeving.

    U kunt de Samenvoegen Framework, een end-to-end (E2E) testkader dat is ontworpen voor gedecentraliseerde toepassingen (DApps). SYNTRESS STUKT BEIDE Toneelschrijver En Cipres als plug-ins en biedt ingebouwde functies voor het hanteren Metamask -authenticatie, transacties en portemonnee interacties.

    Installeer het opdracht Syntpress Framework:

    npm install --save-dev @synthetixio/synpress @synthetixio/synpress-tsconfig

    Installeer Playwright Framework Command:

    npm install --save-dev @playwright/test

    Setup Metamask -portemonnee:

    Voor handmatige UI -testen kunt u tijdens het gebruik de privésleutel van het Hardhat Local Network kopiëren npx hardhat node en importeer het account in het Metamask zoals deze:

    Tijdens de portemonnee opstelling met SYNPRESS zal het een nieuwe portemonnee voor u creëren. Als u een Hardhat lokaal netwerk gebruikt, kunt u eenvoudig de standaardzaadzin van Metamask en elk wachtwoord voor de portemonnee -installatie gebruiken.

    Hier is hoe u een Metamask -portemonnee kunt instellen met SYNPRESS:

    Het SYNPRESS -framework zal op zoek zijn naar een specifieke bestandsnaam en map voor de portemonnee -instelling. U moet het bestand een naam geven metamask.setup.tsPlaats het in de wallet-setup map en voer deze opdracht uit:

    npx synpress wallet-setup

    In de onderstaande video zul je zien dat het een browser opent om een ​​metamask -portemonnee te maken en de portemonnee in de installatie in de .cache-synpress map.

    Nadat u de map Wallet Cache hebt, kunt u eenvoudig de opdracht Playwright voor uw testcase uitvoeren.

    npx playwright test

    In de onderstaande video kunt u zien dat Syntpress helpt bij het beheren van de portemonnee -plug -in op de Chrome -extensie, waardoor echte gebruikersactiviteiten op de gebruikersinterface worden gesimuleerd. U kunt een script maken om te automatiseren van het bevestigen van transacties op de Pop -up van Metamask zoals gewenst.

    Playwright Report Resultaat:

    Tips: screenshot resultaatrapport in Playwright

    Je weet misschien al dat om testresultaten in Playwright te maken, je moet gebruiken await page.screenshot(). Of u echter een screenshot of een videoPlaywright Records per context.

    Tijdens de uitvoering van de test opent Playwright bijvoorbeeld de Chrome Extension (Metamask) in het eerste tabblad En Uw dapp op het tweede tabblad. In onze testrapporten willen we echter de daadwerkelijk vastleggen de Metamask -pop -up De transactiegegevens en gaskosten weergeven.

    Hoe kan ik zowel hoofdpagina als pop -up in toneelschrijver vastleggen?

    Ik heb een Aangepaste functie om screenshots van beide te maken hoofdpagina en de pop -uppagina.

    • Toneelschrijver kan Detecteer een pop -up sessie gebruik context.waitForEvent('page')
    • Na het vastleggen van beide afbeeldingen, ik Voeg ze samen in een enkele foto gebruik van de Scherp bibliotheek.

    U kunt de implementatie zien in de onderstaande code.

    Laatste stap:

    Roep gewoon de screenshot -functie aan en gebruik testInfo.attach() Om het toe te voegen aan het HTML -rapport.

    Begrijp Metamask -functies in Syntpress:

    metamask.connectToDapp()

    Als we gebruiken metamask.connectToDapp()Het Selecteert automatisch het standaardaccount In onze Metamask -portemonnee en verbindt deze met de DAPP wanneer we op de Verbinden knop in de gebruikersinterface.

    metamask.switchAccount('Account 2')

    Deze functie schakelt het actieve account in Metamask door de accountnaam op te geven. Het simpelweg schakelen van accounts in Metamask is echter niet automatisch bijgewerkt het verbonden account in de DAPP. De DAPP moet luisteren naar de Account Wijzigingsgebeurtenissen van Metamask om de schakelaar op de juiste manier te detecteren en af ​​te handelen.

    Bij het klikken op de knop “Wallet aansluiten”, controleer ik of een account al is aangesloten. Als dat zo is, verbind ik het eerst en verbind ik opnieuw.

    Tijdens de automatisering, na het schakelen van accounts, wordt Metamask automatisch geselecteerd Account 2Zoals hieronder getoond.

    Evenzo moet de frontend bij het wisselen van netwerken een gebeurtenisluisteraar instellen voor Metamask -evenementen, net als bij het schakelen van accounts.

    Deze code maakt deel uit van frontend/utils/web3.ts in repo
    metamask.switchNetwork(Local Optimism, true);
    metamask.confirmTransaction()

    Deze functie wordt gebruikt bij het omgaan met een DAPP en het uitvoeren van een transactie die Wijzigt de blockchain -status (Bijv. Tokens overbrengen, saldi bijwerken of gegevens schrijven naar opslag). Wanneer dit gebeurt, Metamask vereist de gebruiker om de transactie te bevestigen voordat het wordt uitgevoerd.

    ANVIL gebruiken voor netwerksimulatie

    Anvil is een lokale Ethereum -ontwikkelingsomgeving die deel uitmaakt van de gieterijpakket van blockchain -ontwikkelingstools. Het is vergelijkbaar met het netwerk van Hardhat, maar met enkele belangrijke verschillen die het bijzonder waardevol maken voor ons testscenario.

    Aambeeld biedt:

    • Een aanpasbaar lokaal Ethereum -knooppunt
    • Nauwkeurige controle over keten -ID, gasparameters en bloktijd
    • De mogelijkheid om meerdere onafhankelijke netwerken tegelijkertijd uit te voeren
    • Geavanceerde vorkmogelijkheden

    Meerdere netwerken instellen:

    // Start L1 Anvil node with realistic gas prices
    const l1Node = spawn('anvil', [
    '--chain-id', '31337',
    '--base-fee', gasPrices.l1.baseFee.toString(),
    '--host', '0.0.0.0',
    '--port', '8545',
    '--block-time', '12', // 12-second block times for Ethereum
    '--fork-url', `https://eth-mainnet.g.alchemy.com/v2/${process.env.ALCHEMY_API_KEY}`,
    mainnetBlockNumber ? `--fork-block-number=${mainnetBlockNumber}` : ''
    ]);

    // Start L2 Anvil node with lower gas prices
    const l2Node = spawn('anvil', [
    '--chain-id', '420',
    '--base-fee', forcedL2BaseFee.toString(),
    '--host', '0.0.0.0',
    '--port', '8546',
    '--block-time', '2', // 2-second block times for Optimism
    '--fork-url', `https://opt-mainnet.g.alchemy.com/v2/${process.env.ALCHEMY_API_KEY}`,
    optimismBlockNumber ? `--fork-block-number=${optimismBlockNumber}` : ''
    ]);

    Real-time gasupdates:

    Dit stelt ons in staat om te hebben:

    1. Twee afzonderlijke netwerken die gelijktijdig worden uitgevoerd op localhost
    2. Verschillende ketting -ID’s voor L1 (31337) en L2 (420)
    3. Verschillende gasprijzen om L1/L2 -kostenverschillen te simuleren
    4. Onafhankelijke staat voor elk netwerk

    Tijdmanipulatie

    Onze tests zijn sterk afhankelijk van tijdmanipulatie om de opbouw van de rente en liquidaties te testen.

    Bekijk deze functie die de interessewaarde per vooruitgang op blockchain controleert:

    Opmerking over de lokale testomgeving:

    Het Smart Contract Lending berekent rente op 5% per jaar, wat tijdsontwikkeling vereist om correct te testen. In tegenstelling tot echte netwerken, is de lokale blockchain van Hardhat niet automatisch om tijdstempels te blokkeren. Om het verstrijken van de tijd voor de accumulatie van rente te simuleren, moeten we de blockchain handmatig vooruitgaan.

    Evenzo, Gezondheidsfactorberekeningen zijn afhankelijk van collaterale prijsschommelingen. In een lokale omgeving moeten we een nepprijs orakel implementeren dat ofwel:

    1. Haal reële prijzen op van externe API’s zoals CoinmarketCap (nuttig voor realistische scenario’s)
    2. Handmatige prijsaanpassingen toestaan ​​(essentieel voor het testen van randgevallen zoals liquidatie -gebeurtenissen)

    Deze twee simulatietechnieken maken een uitgebreide testen van alle protocolstatussen mogelijk, inclusief het kritieke liquidatieproces wanneer de gezondheidsfactor van een gebruiker onder de drempel valt.

    Ons framework test hetzelfde protocol dat op verschillende netwerktypen wordt geïmplementeerd:

    Netwerkverschillen:

    • L1 (Ethereum): Hogere gaskosten, langzamere bloktijden
    • L2 (optimisme): Lagere gaskosten, snellere bloktijden, verschillende transactieformaat

    Cross-netwerk testscenario’s

    We hebben tests geïmplementeerd die verifiëren:

    1. Netwerkisolatie: Posities op het ene netwerk hebben geen invloed op het andere
    2. Gaskostenvergelijking: Vergelijk transactiekosten tussen L1 en L2
    3. UI -consistentie: Controleer de UI -handgrepen beide netwerken correct

    Hier is een teststap die netwerkisolatie en gaskosten verifieert:

    Tijdens transacties op de DAPP registreren we het gebeurtenistype samen met alle relevante blockchain -gegevens, zoals de keten -ID, account en gaskosten, in de onderstaande gegevenskolom:

    Netwerklaag 2 Gegevens:

    {
    "user": "0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266",
    "token": "0x1343248Cbd4e291C6979e70a138f4c774e902561",
    "amount": "1",
    "chainId": 420,
    "gasMetrics": {
    "baseFee": "9826117",
    "gasUsed": "79381",
    "gasPrice": "1019652234",
    "blockTime": "2025-03-04T19:57:11.000Z",
    "totalGasCost": "80941013987154"
    }
    }

    Netwerklaag 1 Gegevens:

    {
    "user": "0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266",
    "token": "0xF01f4567586c3A707EBEC87651320b2dd9F4A287",
    "amount": "1",
    "chainId": 31337,
    "gasMetrics": {
    "baseFee": "982611638",
    "gasUsed": "79381",
    "gasPrice": "2965223276",
    "blockTime": "2025-03-04T20:03:34.000Z",
    "totalGasCost": "235382388872156"
    }
    }

    Zoals te zien in de gegevens, heeft netwerklaag 2 lagere gaskosten in vergelijking met netwerklaag 1. De totale gaskosten op laag 2 zijn 80.941.013.987,154terwijl op laag 1 dat is 235,382,388,872,156.

    Dit betekent dat laag 2 ongeveer bespaart 154,441,374.885,002 in gaskosten, waardoor het aanzienlijk kostenefficiënter wordt.

    Waarom testen tussen netwerken?

    Hoewel veel gebruikers mogelijk interageren met DEFI -protocollen op een enkel netwerk, zijn er boeiende redenen waarom testen op meerdere netwerken essentieel is:

    Echte cross-netwerkgebruik:

    Veel defi -applicaties werken tegenwoordig daadwerkelijk in meerdere netwerken:

    1. Brugprotocollen: Toepassingen zoals Stargate, HOP -protocol en over connect -activa tussen netwerken.
    2. Multi-chain implementaties: Major Defi -protocollen (AAVE, UNISWAP, enz.) Geplimply op meerdere netwerken, en gebruikers bewegen vaak tussen hen op basis van gaskosten.
    3. L2 migratiestrategieën: Gebruikers storten vaak op L1 en migreren vervolgens naar L2 voor goedkopere transacties naarmate protocollen uitbreiden.
    4. Cross-chain collateralisatie: Sommige geavanceerde Defi -applicaties stellen gebruikers in staat om onderpand op het ene netwerk te gebruiken om op het andere te lenen.

    Naast het volgen van gas in databasetests vanuit een ander netwerk, zoals in het bovenstaande voorbeeld, kunnen we ook transactiesucces volgen en falen om gebruikersgedrag te analyseren. Dit helpt bij Financiële correctheidstests uitvoeren en de foutafhandeling verbeteren.

    Als een gebruiker bijvoorbeeld probeert te lenen 0.8 ETH (die de 75% onderpandfactor):

    • Controleer of een fout is vastgelegd in de database.
    • Controleer of de positie van de gebruiker ongewijzigd blijft.

    Klaar om het zelf te proberen?

    Nu je de stroom hebt gezien, het project hebt opgezet en onderzocht hoe je met Metamask kunt communiceren, is het tijd om hands-on te krijgen! Deze repo omvat een E2E liquidatiestroom Als voorbeeld, maar voel je vrij Breid het uit, experimenteer en ontwerp uw eigen testcases.

    🔗 Bekijk de repo en begin met testen: [Repo Link]

    Of u nu automatiseringsvaardigheden verfijnt of Defi -testen verkent, dit is uw sandbox – veel plezier en breek dingen (veilig)! 🚀

    Bedankt voor het lezen, en ik hoop dat je dit artikel nuttig vond.
    Als je dit artikel nuttig vond, geef het dan een 👏 (of een paar!) Om anderen te helpen het te ontdekken!

    Source link

    Share. Facebook Twitter Pinterest LinkedIn Tumblr Email
    cryptodagelijks
    • Website

    Related Posts

    Kwantumdreiging? Blackrock vlakt toekomstig risico op bitcoin ETF -indiening

    May 14, 2025

    Bitcoin om USD te vervangen in ’10 jaar ‘: legendarische belegger

    May 14, 2025

    Solaxy -voorverkoop explodeert met bijna $ 1 miljoen in twee dagen, wordt de beste voorverkoop om voor Altcoin Rally te kopen

    May 14, 2025

    Hoe investeringsmaatschappij Jeffries een nieuwe crypto -kans heeft aangegrepen

    May 14, 2025
    Add A Comment
    Leave A Reply Cancel Reply

    Topberichten
    Topinzichten

    Kwantumdreiging? Blackrock vlakt toekomstig risico op bitcoin ETF -indiening

    May 14, 2025

    Bitcoin om USD te vervangen in ’10 jaar ‘: legendarische belegger

    May 14, 2025

    Solaxy -voorverkoop explodeert met bijna $ 1 miljoen in twee dagen, wordt de beste voorverkoop om voor Altcoin Rally te kopen

    May 14, 2025
    Juridische pagina’s
    • Disclaimer
    • DMCA
    • Over Ons
    • Privacybeleid

    Type above and press Enter to search. Press Esc to cancel.