Curated interview practice questions with answers. These are practice scenarios, not a verified list of past interview questions.
About CGI hiring for Automation Testing roles
CGI is a Canadian IT and business consulting services company providing systems integration, managed services, and software solutions. Its India global delivery centres support clients in government, banking, utilities and manufacturing. It hires in India for software engineers, test engineers, data analysts and support engineers.
For Automation Testing roles, this CGI practice set focuses most on Git, Maven and Jenkins (7), Appium Mobile Automation (5), REST Assured (5), Performance Testing with JMeter (4). It has 19 easy, 20 medium, 1 hard questions, so you can start easy and work up to the harder ones.
Company type
IT services
Headquarters
Montreal, Canada
Main India offices
Bengaluru, Hyderabad, Chennai, Mumbai
CGI Automation Testing interview process
Online assessment (aptitude + technical)
Technical interview
Managerial round
HR round
Typical pattern based on public candidate experiences. Rounds vary by role, team and year.
Solved for CGIStart practicing
3 QUESTIONS FREESign up to unlock the full question bank and track your progress.Unlock every question and answer, then continue practising company-wise and package-wise.
✓ 3 questions free • Unlock the rest in seconds
01
What is correlation in JMeter and why is it needed?
Correlation means capturing dynamic values from one response and passing them into later requests. Session ids, CSRF tokens, auth tokens and order ids change every run, so a recorded script with hard-coded values fails on replay. In JMeter you use post-processors such as JSON Extractor, Regular Expression Extractor or CSS Selector Extractor to save the value into a variable, then reference it as ${token} in later headers or bodies.
02
What are the UiAutomator2 and XCUITest drivers in Appium?
They are the platform drivers that actually control the device. UiAutomator2 drives Android by installing a small server app on the device that uses Google's UiAutomator framework. XCUITest drives iOS through Apple's XCTest framework via WebDriverAgent, which needs Xcode and signing for real devices. In Appium 2 they are installed separately with appium driver install, so each project picks only the drivers and versions it needs.
03
How do you send form parameters and headers in REST Assured?
Use formParam("username", "asha") and formParam("password", "pass") for application/x-www-form-urlencoded bodies; REST Assured sets the content type for you. Add headers with header("X-Client", "web") or headers(map) for many at once. Cookies use cookie(name, value). Keep common headers in a RequestSpecification so individual tests only add what is specific to them.
04
What locator strategy do you follow inside page objects?
Prefer stable attributes in this order: dedicated test attributes like data-testid, id, name, then short CSS selectors, and XPath only when text or complex relationships are needed. Avoid absolute XPaths and index-based locators. Keep locators as private final By fields at the top of the class with clear names, so updates are quick and readable.
05
How do you make WebDriver thread-safe for parallel runs?
Check CPU and memory usage of application servers, garbage collection pauses and heap usage for Java services, thread pool and connection pool saturation, database slow queries, locks and connection counts, disk I/O and network bandwidth. Also look at load balancer and cache hit rates and error logs. Correlate the timestamp of the slowdown with these graphs in an APM or monitoring tool to find which resource saturated first.
07
Write Java code to start an Android Appium session using UiAutomator2Options.
Comparable defines the natural order inside the class (compareTo); Comparator defines custom orders externally (compare), useful for sorting test data in several ways.
Common triggers are webhooks from GitHub, GitLab or Bitbucket on push or pull request, cron schedules with triggers { cron('H 2 * * *') } for nightly regression, polling SCM (less efficient), and upstream jobs completing, such as running tests after a deploy job. Multibranch pipelines automatically create jobs for each branch and pull request containing a Jenkinsfile.
10
What is API testing and why is it done before UI testing?
API testing checks the business logic layer directly by sending requests and validating responses, status codes, data and errors. It is faster, more stable and cheaper to maintain than UI tests, and it can start as soon as endpoints exist, before the UI is ready. Most functional rules should be covered at API level, leaving UI tests for key user journeys.
11
Tell me about a time a performance test found a serious issue before release.
Situation: a new search feature passed functional testing. Task: run a load test at expected peak traffic. Action: at 150 users the 95th percentile jumped from under one second to nine seconds. I correlated it with database metrics, found a full table scan caused by a missing index and shared the query and graphs with developers. Result: after the fix, response time stayed under 800 milliseconds at 400 users, and release went ahead on time.
12
What is the difference between static and non-static members?
priority only orders tests; a lower number runs first, and a failed test does not stop the others. dependsOnMethods creates a real dependency: if the parent test fails, dependent tests are skipped. Both make tests order-dependent, which hurts parallel runs and isolation, so use them sparingly. Prefer independent tests with their own setup.
17
What is a Jenkins agent and how do labels help run tests?
An agent is a machine or container that runs build steps on behalf of the Jenkins controller. Labels are tags given to agents, such as linux, docker or windows-chrome. In a pipeline, agent { label 'docker' } sends the job to a matching agent. Testers use labels to send UI tests to agents with browsers or Docker installed, and to keep heavy test runs off the controller, which should only coordinate.
18
What is Appium and how does its architecture work?
Appium is an open-source tool for automating native, hybrid and mobile web apps on Android and iOS using the W3C WebDriver protocol. Your Java test sends HTTP commands to the Appium server, which forwards them to a platform driver such as UiAutomator2 for Android or XCUITest for iOS. That driver talks to the device and returns results. Because it follows WebDriver, Selenium testers can reuse locators, waits and framework design.
19
How do you test deep links in a mobile app with Appium?
On Android use the mobile: deepLink command with the URL and package, for example driver.executeScript("mobile: deepLink", Map.of("url", "shop://product/42", "package", "com.example.shop")). On iOS simulators driver.get with the custom URL opens it, though Safari may show a confirm dialog to handle. Then assert that the correct screen and data are shown. Deep links are also a great shortcut to reach deep screens quickly in other tests.
20
What are timers in JMeter and why is think time important?
By default JMeter fires requests back to back, which is far more aggressive than real users who read pages and fill forms. Timers add delays: Constant Timer, Uniform Random Timer and Gaussian Random Timer add think time, while Constant Throughput Timer and Precise Throughput Timer control request rate. Realistic think time makes the user count meaningful; without it, 100 threads may generate the load of thousands of real users.
21
What is RequestSpecification in REST Assured and why use it?
RequestSpecification holds common request settings such as base URI, base path, headers, content type, authentication and filters. You build it once with RequestSpecBuilder and reuse it with given().spec(reqSpec). This removes repetition, keeps environment settings in one place and makes switching between QA and staging easy. ResponseSpecification does the same for common assertions like status code and content type.
22
You configured 50 parallel threads but only 8 tests run at a time on the Grid. Why?
The Grid only has 8 free slots, so the other requests wait in the New Session Queue. Total parallelism equals nodes multiplied by max sessions per node, not the TestNG thread count. Check the Grid UI for slot count. To run more, scale the node containers, raise max sessions if hardware allows, or use a larger grid. Otherwise reduce threads to match slots so waiting requests do not time out.
23
ArrayList vs HashMap — how do you use them in a framework?
A page object models one screen or component: its locators and the user actions possible there, such as LoginPage.loginAs. A utility class holds generic helpers not tied to any page, such as reading config, generating test data, date formatting or taking screenshots. Mixing them makes page objects bloated and utilities dependent on the UI. Keep page objects in a pages package and helpers in a utils package.
Git marks conflicting sections with <<<<<<<, ======= and >>>>>>>. Open each file, decide which change to keep or combine both, remove the markers, then git add the files and complete with git commit (or git rebase --continue). Run the affected tests before pushing. Pull often and keep branches short-lived to reduce conflicts.
26
What is the difference between git fetch and git pull?
git fetch downloads new commits and branches from the remote but does not change your working files; you can inspect them with git log origin/main. git pull is fetch followed by merge (or rebase if configured) into your current branch. Fetch is safer when you want to review changes before integrating them.
27
What is the Cucumber runner class and what does it configure?
The runner tells the test engine where features and glue code are and how to report. With JUnit 5 it uses @Suite, @IncludeEngines("cucumber"), @SelectClasspathResource("features") and @ConfigurationParameter for glue, plugins and tags. With TestNG you extend AbstractTestNGCucumberTests and use @CucumberOptions(features, glue, tags, plugin, monochrome). The runner lets Maven or Jenkins run features like normal tests.
A step definition is a Java method annotated with @Given, @When or @Then whose expression matches a Gherkin step. When Cucumber runs a feature, it finds the matching method and executes it, passing captured parameters as arguments. Keep step definitions thin: they should call page objects or API helpers rather than contain Selenium code directly, so the same steps stay reusable across many features.
29
What is the difference between noReset and fullReset in Appium?
By default Appium clears app data between sessions but keeps the app installed. noReset set to true keeps app data and login state, which speeds up tests but can leak state between them. fullReset set to true uninstalls and reinstalls the app, giving the cleanest state but adding time. A common approach is noReset for fast suites with explicit cleanup in the test, and fullReset only for first-launch or onboarding scenarios.
30
Write a declarative Jenkinsfile that runs Maven tests and publishes results.
Use volumes. A bind mount maps a host folder into the container, for example -v $(pwd)/target:/app/target, so reports written in the container appear on the CI agent for archiving. Named volumes are managed by Docker and suit data that should survive restarts. For browser downloads, mount the node's download folder or enable the Grid's managed downloads with the se:downloadsEnabled capability to fetch files through the Grid API.
32
Your price comparison test fails because 19.99 + 0.01 is not equal to 20.0. Why?
double uses binary floating point, which cannot represent many decimal values exactly, so small rounding errors appear. For money, use BigDecimal created from strings and compare with compareTo(), or compare doubles with a tolerance such as Assert.assertEquals(actual, expected, 0.001). Also strip currency symbols and commas before parsing UI text.
Send invalid or missing fields, wrong data types, values beyond limits, invalid IDs, expired or missing tokens, wrong HTTP methods and malformed JSON. Assert the correct status (400, 401, 403, 404, 405, 422) and a clear error body without stack traces. Negative tests often find more defects than happy paths because validation and security checks are frequently incomplete.
34
Write a docker-compose.yml that runs a Selenium hub with Chrome and Firefox nodes.
Do not assert on positions when the API does not guarantee order. Use order-independent Hamcrest matchers such as hasItem, hasItems or containsInAnyOrder on the extracted field, for example body("name", hasItems("Pen", "Book")). Or use GPath filtering like find { it.id == 42 } to pick the right item before checking its fields. If order matters for the feature, raise it as a requirement and request a sort parameter.
38
What is the post section in a Jenkins declarative pipeline?
post defines steps that run after stages based on the result: always, success, failure, unstable, changed, fixed and cleanup. In test pipelines, always publishes JUnit results and archives screenshots and reports, failure sends a Slack or email alert, and cleanup removes the workspace. Putting reporting in post ensures results are saved even when tests fail.
39
How do you publish Allure or Extent reports from Jenkins?
For Allure, install the Allure Jenkins plugin, configure the commandline tool, and add allure results: [[path: 'target/allure-results']] in the post always block. For Extent, archive the HTML file and use the HTML Publisher plugin to show it as a build link. Keep report history per build and share the link in failure notifications.
40
Write a BasePage helper that clicks an element after waiting for it to be clickable.
public abstract class BasePage {
protected final WebDriver driver;
protected final WebDriverWait wait;
protected BasePage(WebDriver driver) {
this.driver = driver;
this.wait = new WebDriverWait(driver, Duration.ofSeconds(10));
}
protected void click(By locator) {
wait.until(ExpectedConditions.elementToBeClickable(locator)).click();
}
}
Tips to crack the CGI Automation Testing interview
Revise core programming, SQL and testing basics, as CGI roles often involve maintaining and testing enterprise systems.
Learn about CGI's member-ownership model, where employees are called members and can buy shares.
Prepare clear examples of teamwork and client communication, which are important in CGI's consulting culture.
Keep a one-minute story ready for every project on your CV: problem, your part, tools, result.
Practise the hard questions on this page aloud; CGI interviewers usually ask follow-ups on your first answer.
Frequently asked questions
How many rounds are there in the CGI Automation Testing interview?
Candidates usually go through 4 stages: Online assessment (aptitude + technical); Technical interview; Managerial round; HR round. The exact rounds change with the role, team, location and your experience, so confirm the process with the recruiter.
Which topics should I prepare for the CGI Automation Testing interview?
This practice set leans on Git, Maven and Jenkins (7), Appium Mobile Automation (5), REST Assured (5), Performance Testing with JMeter (4). Revise those first, then practise explaining one or two of your own projects end to end, because most CGI interviewers ask you to walk through real work.
Are these the exact questions asked at CGI?
No. These are curated practice questions that match the skills and difficulty usually tested in it services interviews like CGI's. They are not a leaked or verified list of past questions.
Where does CGI hire Automation Testing professionals in India?
CGI has large teams in Bengaluru, Hyderabad, Chennai, Mumbai. Openings and locations change often, so check the CGI careers page and filter by city and experience.
Automation Testing questions for similar companies