[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"me":3,"catalog:en:qa-test-automation\u002Fmid":4,"config":126},null,{"field_key":5,"field_name":6,"seniority":7,"topic_key":8,"topic_name":8,"spec_key":8,"spec_name":8,"locale":9,"cell_total":10,"field_total":11,"seniorities":12,"topics":15,"specs":41,"samples":42},"qa-test-automation","QA \u002F Test Automation","mid","","en",502,600,[13,7,14],"junior","senior",[16,20,23,26,29,32,35,38],{"key":17,"name":18,"count":19},"qa-api-testing","Qa Api Testing",75,{"key":21,"name":22,"count":19},"qa-automation-fundamentals","Qa Automation Fundamentals",{"key":24,"name":25,"count":19},"qa-ci-cd-testing","Qa Ci Cd Testing",{"key":27,"name":28,"count":19},"qa-defect-management","Qa Defect Management",{"key":30,"name":31,"count":19},"qa-exploratory-manual-testing","Qa Exploratory Manual Testing",{"key":33,"name":34,"count":19},"qa-performance-testing","Qa Performance Testing",{"key":36,"name":37,"count":19},"qa-test-case-design","Qa Test Case Design",{"key":39,"name":40,"count":19},"qa-test-strategy","Qa Test Strategy",[],[43,61,74,87,100,113],{"id":44,"topic":18,"difficulty":45,"body":46,"options":47,"correct_key":52,"explanation":60},"019f68ba-237c-7989-8026-e1345d2ce7ec",2,"A team notices their UI test suite takes 40 minutes and often fails for reasons unrelated to the feature being tested. They move the same checks down to API tests. What is the main practical benefit?",[48,51,54,57],{"key":49,"text":50},"a","API tests automatically also verify that the screen looks correct, so nothing is lost by removing the UI checks",{"key":52,"text":53},"b","API tests skip rendering and UI timing, so they run faster and are less exposed to flakiness from the UI layer",{"key":55,"text":56},"c","API tests do not need any test data setup, because they talk to the database directly instead of going through the API",{"key":58,"text":59},"d","API tests replace the need for manual exploratory testing, since they cover every possible user path automatically","Because an API test skips rendering, animations and UI timing, it runs in a fraction of the time and is not exposed to the instability that comes from waiting on screens — that's the layer advantage. It does not check how anything looks (a), it still needs realistic input data (c), and it doesn't replace exploratory testing (d), which targets different kinds of problems.",{"id":62,"topic":18,"difficulty":45,"body":63,"options":64,"correct_key":58,"explanation":73},"019f68ba-2380-7125-a9ce-741691e1af21","A mobile team's app expects the `total` field in an order response to be a number. A backend team quietly changes `total` to a string (`\"49.90\"`) and deploys. Nobody notices until the mobile app crashes in production. What would have caught this earlier?",[65,67,69,71],{"key":49,"text":66},"A larger manual QA regression pass covering more screens of the mobile app before each release",{"key":52,"text":68},"Increasing the load test traffic so the backend team notices unusual response patterns sooner",{"key":55,"text":70},"Asking the backend team to write more unit tests for their own internal calculation logic",{"key":58,"text":72},"A contract test encoding the expected type of `total`, run on every backend change","This is exactly the break a contract test is designed to catch: the mobile team's expectation (`total` is a number) is encoded as a check that runs whenever the provider changes, failing the build before the field type ever reaches a real device. More manual regression (a) still depends on someone happening to check that field, load testing (b) measures capacity, not shape, and the backend's own unit tests (c) verify its internal logic, not what the consumer actually requires from the response.",{"id":75,"topic":18,"difficulty":45,"body":76,"options":77,"correct_key":52,"explanation":86},"019f68ba-2383-7763-938b-b3694a83e233","A test for `POST \u002Forders` needs to call a third-party payment provider that charges a real fee per test run and is sometimes unavailable in the test environment. What is the most practical way to test the order logic itself?",[78,80,82,84],{"key":49,"text":79},"Skip testing this endpoint entirely until the payment provider guarantees 100% uptime in every environment",{"key":52,"text":81},"Replace the payment provider with a test double returning a controlled response, then test the order logic",{"key":55,"text":83},"Run the test against the real payment provider once a month, since fees are only charged during that single run",{"key":58,"text":85},"Ask the payment provider's team to slow down their own service so the test has more time to complete reliably","Using a test double for the payment call keeps the order test focused on its own logic (does the order get created, priced and stored correctly for a given payment outcome) without paying real fees or depending on the provider's availability — real-service behavior for the payment provider itself belongs to its own tests, ideally including a smaller number of true end-to-end checks. Skipping the endpoint (a) leaves it untested, monthly real runs (c) still leave most of the time uncovered, and asking a provider to change their service for your test (d) doesn't address the underlying dependency problem.",{"id":88,"topic":18,"difficulty":45,"body":89,"options":90,"correct_key":58,"explanation":99},"019f68ba-2385-7dbd-aa30-e990d7e67260","A test suite runs `POST \u002Fsubscriptions` to create a subscription, then re-runs the exact same test a second time without any cleanup in between. The second run fails with a duplicate-subscription error. What does this reveal about the test?",[91,93,95,97],{"key":49,"text":92},"The test is correct as-is; a duplicate error on the second run is the expected and desired outcome",{"key":52,"text":94},"The `POST` endpoint itself has a bug and must be changed to allow unlimited duplicate subscriptions",{"key":55,"text":96},"The test environment's database needs a faster disk, since duplicate detection is a performance concern",{"key":58,"text":98},"The test depends on a clean starting state — it isn't safely re-runnable without setup or teardown","A test that only passes the first time and fails on repeats is not state-independent: it silently assumes a particular starting state (no such subscription yet) instead of establishing that state itself. The fix is on the test side — set up fresh, unique data (or tear down after) each run — not on the endpoint, which is correctly rejecting a real duplicate (b), and this has nothing to do with disk speed (c). Being able to re-run a test freely, in any order, is a basic requirement for a reliable suite (a) is wrong because failing on rerun is exactly the symptom to fix, not the goal.",{"id":101,"topic":18,"difficulty":45,"body":102,"options":103,"correct_key":49,"explanation":112},"019f68ba-2386-7710-a537-870ff81ac053","A test creates a user with a hardcoded email:\n```\nPOST \u002Fusers\n{\"email\": \"test@example.com\", \"name\": \"Test User\"}\n```\nand runs fine alone, but fails whenever it runs after another test that also uses `test@example.com`. What is the most direct fix?",[104,106,108,110],{"key":49,"text":105},"Generate a unique email per run (e.g. a random suffix or timestamp) so the test stays independent",{"key":52,"text":107},"Run the two conflicting tests in two separate programming languages so they cannot interfere with each other",{"key":55,"text":109},"Add a longer wait before the request, giving the database time to forget the previous test's user record",{"key":58,"text":111},"Change the endpoint so `POST \u002Fusers` always returns success regardless of whether the email already exists","The test's hardcoded email makes it dependent on whatever ran before it — a hidden state coupling. Generating a unique value per run removes that dependency entirely, letting the test pass regardless of execution order or what else has run. The language used to write a test (b) has no bearing on shared database state, waiting longer (c) doesn't guarantee the earlier record is gone, and weakening the endpoint's own validation (d) hides a real business rule just to make a badly-written test pass.",{"id":114,"topic":18,"difficulty":45,"body":115,"options":116,"correct_key":52,"explanation":125},"019f68ba-2387-7176-b096-e6f20a9dad96","What does schema validation check about an API response?",[117,119,121,123],{"key":49,"text":118},"That the response arrives within an acceptable amount of time after the request was sent",{"key":52,"text":120},"That the response's structure matches a defined shape: required fields, correct types",{"key":55,"text":122},"That the response's wording is grammatically correct and free of spelling mistakes in every language",{"key":58,"text":124},"That the response's HTTP headers contain a valid caching directive for shared proxies and CDNs","Schema validation compares a response against a defined structure — which fields must exist, what type each one is, and whether the overall shape is as expected — independent of the specific values returned. Response time (a) is a performance concern, wording quality (c) is a content\u002Flocalization concern, and caching headers (d) are a separate transport-layer detail; none of these is what a schema checks.",{"fields":127,"seniorities":312,"interview_shapes":313,"locales":318,"oauth":320,"question_count":323,"coach_enabled":324,"jd_match_enabled":324},[128,154,174,191,215,228,247,266,288,293,299,306],{"key":129,"name_tr":130,"name_en":130,"sort":131,"specializations":132},"backend","Backend",1,[133,136,139,142,145,148,151],{"key":134,"name":135,"field":129},"general","Genel",{"key":137,"name":138,"field":129},"go","Go",{"key":140,"name":141,"field":129},"python","Python",{"key":143,"name":144,"field":129},"java","Java",{"key":146,"name":147,"field":129},"csharp","C#\u002F.NET",{"key":149,"name":150,"field":129},"nodejs","Node.js",{"key":152,"name":153,"field":129},"php","PHP",{"key":155,"name_tr":156,"name_en":156,"sort":45,"specializations":157},"frontend","Frontend",[158,159,162,165,168,171],{"key":134,"name":135,"field":155},{"key":160,"name":161,"field":155},"javascript","JavaScript",{"key":163,"name":164,"field":155},"typescript","TypeScript",{"key":166,"name":167,"field":155},"react","React",{"key":169,"name":170,"field":155},"vue","Vue",{"key":172,"name":173,"field":155},"angular","Angular",{"key":175,"name_tr":176,"name_en":176,"sort":177,"specializations":178},"fullstack","Fullstack",3,[179,180,181,182,183,184,185,186,187,188,189,190],{"key":134,"name":135,"field":175},{"key":137,"name":138,"field":129},{"key":140,"name":141,"field":129},{"key":143,"name":144,"field":129},{"key":146,"name":147,"field":129},{"key":149,"name":150,"field":129},{"key":152,"name":153,"field":129},{"key":160,"name":161,"field":155},{"key":163,"name":164,"field":155},{"key":166,"name":167,"field":155},{"key":169,"name":170,"field":155},{"key":172,"name":173,"field":155},{"key":192,"name_tr":193,"name_en":193,"sort":194,"specializations":195},"devops-cloud","DevOps \u002F Cloud",4,[196,197,200,203,206,209,212],{"key":134,"name":135,"field":192},{"key":198,"name":199,"field":192},"aws","AWS",{"key":201,"name":202,"field":192},"gcp","GCP",{"key":204,"name":205,"field":192},"azure","Azure",{"key":207,"name":208,"field":192},"kubernetes","Kubernetes",{"key":210,"name":211,"field":192},"terraform","Terraform",{"key":213,"name":214,"field":192},"linux","Linux",{"key":216,"name_tr":217,"name_en":217,"sort":218,"specializations":219},"ai-engineer","AI Engineer",5,[220,221,222,225],{"key":134,"name":135,"field":216},{"key":140,"name":141,"field":216},{"key":223,"name":224,"field":216},"llm-rag","LLM\u002FRAG",{"key":226,"name":227,"field":216},"mlops","MLOps",{"key":229,"name_tr":230,"name_en":231,"sort":232,"specializations":233},"database","Veritabanı","Database",6,[234,235,238,241,244],{"key":134,"name":135,"field":229},{"key":236,"name":237,"field":229},"postgresql","PostgreSQL",{"key":239,"name":240,"field":229},"mysql","MySQL",{"key":242,"name":243,"field":229},"mongodb","MongoDB",{"key":245,"name":246,"field":229},"redis","Redis",{"key":248,"name_tr":249,"name_en":250,"sort":251,"specializations":252},"mobile","Mobil","Mobile",7,[253,254,257,260,263],{"key":134,"name":135,"field":248},{"key":255,"name":256,"field":248},"ios-swift","iOS (Swift)",{"key":258,"name":259,"field":248},"android-kotlin","Android (Kotlin)",{"key":261,"name":262,"field":248},"flutter","Flutter",{"key":264,"name":265,"field":248},"react-native","React Native",{"key":267,"name_tr":268,"name_en":269,"sort":270,"specializations":271},"security","Güvenlik","Security",8,[272,273,276,279,282,285],{"key":134,"name":135,"field":267},{"key":274,"name":275,"field":267},"appsec","AppSec",{"key":277,"name":278,"field":267},"offensive-pentest","Offensive \u002F Pentest",{"key":280,"name":281,"field":267},"cloud-security","Cloud Security",{"key":283,"name":284,"field":267},"devsecops","DevSecOps",{"key":286,"name":287,"field":267},"blue-team-incident","Blue Team \u002F Incident",{"key":5,"name_tr":289,"name_en":6,"sort":290,"specializations":291},"QA \u002F Test Otomasyonu",9,[292],{"key":134,"name":135,"field":5},{"key":294,"name_tr":295,"name_en":295,"sort":296,"specializations":297},"data-engineer","Data Engineer",10,[298],{"key":134,"name":135,"field":294},{"key":300,"name_tr":301,"name_en":302,"sort":303,"specializations":304},"game-dev","Oyun Geliştirme","Game Development",11,[305],{"key":134,"name":135,"field":300},{"key":307,"name_tr":308,"name_en":308,"sort":309,"specializations":310},"ml-engineer","ML Engineer",12,[311],{"key":134,"name":135,"field":307},[13,7,14],{"junior":314,"mid":316,"senior":317},{"questions":315,"median_sec":3},20,{"questions":315,"median_sec":3},{"questions":315,"median_sec":3},[319,9],"tr",[321,322],"google","github",21750,true]