Každá služba končí odovzdaním funkčnej pipeline a dokumentácie. Transparentná cena, žiadny retainer lock-in. Pokračujeme len, keď chcete.
Postavíme kompletní framework s Page Object pattern, paralelním spouštěním a HTML reporty. Vybereme ti optimální tool — Cypress pro rychlé iterace a developer experience, Playwright pro cross-browser (Chromium / Firefox / WebKit) a složité async flow.
// cypress/support/pages/loginPage.ts export class LoginPage { emailInput = () => cy.get('[data-qa="email"]'); passwordInput = () => cy.get('[data-qa="password"]'); submitBtn = () => cy.get('[data-qa="submit"]'); login(email: string, password: string) { this.emailInput().type(email); this.passwordInput().type(password); this.submitBtn().click(); } }
// webdriverio + Appium Android describe('Push notification flow', () => { it('opens deep link from push', async () => { await driver.executeScript( 'mobile: shell', [{ command: 'am start -a android.intent.action.VIEW -d myapp://orders/42' }] ); await $('~orderDetailTitle').waitForDisplayed(); await expect($('~orderId')).toHaveText('#42'); }); });
Real device cloud (BrowserStack, Sauce Labs) alebo lokálne emulátory. Pokrývame biometrické prihlásenie, push notifikácie, deep linking, in-app purchase flow, background/foreground transitions.
Pipeline, která se nezlomí. Paralelizace přes shardy, retry logika při flaky testech, HTML + JUnit reporty, Slack notifikace s přímým linkem na failure video. Celé to zazvoní v channeli do 30 sekund od commitu.
// Jenkinsfile — declarative pipeline { agent { label 'cypress-pool' } parameters { string(name: 'SPEC', defaultValue: '**/*.spec.ts') } stages { stage('Run E2E') { parallel { stage('Shard 1/4') { steps { sh 'cypress --record --parallel' } } stage('Shard 2/4') { steps { sh 'cypress --record --parallel' } } } } } post { always { slackSend(channel: '#qa-alerts') } } }
# Python — Azure DevOps → Jira sync def sync_azure_bugs_to_jira(project='QAHUB'): bugs = fetch_azure_bugs( wiql=""" SELECT [System.Id], [System.Title] FROM WorkItems WHERE [System.WorkItemType] = 'Bug' AND [System.State] IN ('New', 'Active') AND [System.Tags] CONTAINS 'RO' """ ) for bug in bugs: if already_in_jira(bug.id): continue # dedup gate assignee = pick_assignee(bug.title) # FE.WEB / BE.CMS rule create_jira_issue( project=project, parent='QAHUB-990', assignee=assignee, **transform(bug), ) notify_slack('#azure-vs-jira', bug, emoji=':flag-ro:')
Váš QA tým loguje bugy v Azure DevOps, ale vývojáři žijí v Jire? Postavíme automatizaci, která je synchronizuje — s dedup gates, scopingem přes WIQL, priority-based assignee pravidly a multi-project mappingem. V produkci běží přes Jenkins Freestyle job.
Claude Code, Cursor, custom subagenti. Umíme ti ukázat, jak při psaní testů šetříme 30–50 % času — bez kompromisů na kvalitě. Seznámíme váš tým s patterny, které fungují v produkci.
Z user story → syntakticky korektní Cypress test s Page Object referenciami. Claude Code workflow s našimi subagenty.
AI klasifikátor rozliší skutečný bug od flaky testu. Přímá integrace do CI pipeline, šetří hodiny triage.
Subagenti zkontrolují PR na shared patterns, anti-flaky best practices, pokrytí negative scenarios před merge.
Discovery call, přesný scope, fixní cena do 48 hodin. Bez tlaku.