Việc làm

13 giờ trước · Hồ Chí Minh · Tại văn phòng

Senior/ Lead Test Automation (Python/Playwright)

Bosch Global Software Technologies · Automation Tester

Xem mô tả & ứng tuyển trên ITviecMô tả công việc, lương và ứng tuyển nằm ở ITviec.

10 câu hỏi có thể gặp khi phỏng vấn

Chọn theo kỹ năng và cấp của tin (Tester / QA, Python, JavaScript & TypeScript). Gợi ý trả lời do Drama Công Ty biên soạn để bạn ôn nhanh, không phải đề của công ty.

  1. 01Bạn test một REST API như thế nào? Thường kiểm tra những gì?Tester / QA

    Gợi ý trả lời

    Test API là kiểm tra hợp đồng giữa client và server, không cần UI.

    • Status code đúng từng trường hợp: 200/201, 400 khi dữ liệu sai, 401/403 khi thiếu quyền, 404, 409, 500.
    • Response body: đúng schema, kiểu dữ liệu, trường bắt buộc, giá trị khớp DB.
    • Validation: thiếu trường, sai kiểu, giá trị biên, chuỗi rất dài, ký tự đặc biệt.
    • Phân quyền: user A có đọc/sửa được dữ liệu của user B không.
    • Idempotency & trạng thái: gọi lại POST/PUT nhiều lần, thứ tự gọi API sai.
    • Hiệu năng cơ bản: thời gian phản hồi, phân trang.

    Công cụ hay dùng: Postman (collection, environment, script kiểm tra), sau đó đưa vào CI bằng Newman hoặc framework code như REST Assured, Playwright API.

    Người phỏng vấn muốn nghe: bạn có test case phân quyền và lỗi, không chỉ gọi thử thấy 200 là xong.

    Ôn thêm câu hỏi Tester / QA →
  2. 02Khi nào nên automation, khi nào nên giữ manual?Tester / QA

    Gợi ý trả lời

    Automation đáng tiền khi chạy lặp lại nhiều và ổn định; manual hợp với thứ thay đổi liên tục hoặc cần cảm nhận người dùng.

    Nên automation:

    • Bộ regression và smoke chạy mỗi build/release.
    • Test API, tính toán nghiệp vụ nhiều bộ dữ liệu (data-driven).
    • Luồng chính ít thay đổi giao diện.

    Nên giữ manual:

    • Tính năng mới, UI còn thay đổi theo sprint.
    • Exploratory, usability, kiểm tra trực quan.
    • Case chỉ chạy một hai lần, hoặc chi phí dựng môi trường quá lớn.

    Nên nhắc chi phí bảo trì: script hỏng vì locator thay đổi cũng tốn thời gian. Ưu tiên tầng API/unit trước UI theo mô hình test pyramid.

    Hay sai: nói "automation hết cho nhanh". Người phỏng vấn muốn thấy bạn biết tính ROI.

    Ôn thêm câu hỏi Tester / QA →
  3. 03Dự án sắp release nhưng không đủ thời gian chạy hết regression. Bạn làm gì?Tester / QA · Senior

    Gợi ý trả lời

    Chuyển sang test theo rủi ro (risk-based testing) và minh bạch với team về phần chưa test.

    • Xác định thay đổi trong bản release và vùng code bị ảnh hưởng (hỏi dev, xem danh sách commit/ticket).
    • Ưu tiên: luồng tạo ra tiền hoặc dữ liệu quan trọng (thanh toán, đăng nhập, đặt hàng), chỗ hay có bug trong quá khứ, tính năng mới.
    • Chạy bộ automation sẵn có, người tập trung vào phần automation chưa phủ.
    • Báo cáo rõ: đã test gì, chưa test gì, rủi ro còn lại, đề xuất (release có điều kiện, feature flag, theo dõi sau release).
    • Quyết định release là của PO/PM dựa trên thông tin bạn đưa.

    Người phỏng vấn muốn nghe: bạn không âm thầm bỏ qua test, cũng không cố chặn release; bạn cung cấp thông tin để team quyết định. Về lâu dài, đề xuất tăng automation cho regression.

    Ôn thêm câu hỏi Tester / QA →
  4. 04Context manager (with) là gì? Làm sao tự viết một context manager?Python

    Gợi ý trả lời

    Context manager đảm bảo việc "mở" và "dọn dẹp" luôn đi cùng nhau, kể cả khi có exception: đóng file, trả connection, nhả lock, rollback transaction.

    Cách nhanh nhất là dùng contextlib.contextmanager:

    from contextlib import contextmanager
    
    @contextmanager
    def db_transaction(conn):
        try:
            yield conn
            conn.commit()
        except Exception:
            conn.rollback()
            raise
    
    • Cách đầy đủ: viết class có __enter__ và __exit__(self, exc_type, exc, tb). Nếu __exit__ trả về True thì exception bị nuốt.
    • Bản async: async with, __aenter__/__aexit__ hoặc asynccontextmanager.

    Hay sai: quên raise lại exception trong khối except, khiến lỗi bị che mất và code phía sau tưởng mọi thứ đã thành công.

    Ôn thêm câu hỏi Python →
  5. 05Giải thích event loop của asyncio. Trong FastAPI, khi nào viết async def và khi nào viết def?Python · Senior

    Gợi ý trả lời

    asyncio chạy nhiều coroutine trên một thread. Khi coroutine gặp await một thao tác I/O, nó nhường quyền cho event loop chạy coroutine khác. Đây là đa nhiệm hợp tác: coroutine nào không await thì chiếm luôn cả loop.

    Trong FastAPI:

    • async def khi mọi thứ bên trong đều async (httpx.AsyncClient, driver DB async).
    • def khi dùng thư viện blocking (requests, ORM đồng bộ). FastAPI sẽ chạy hàm này trong threadpool, nên không chặn loop.
    • Gọi song song: await asyncio.gather(fetch_a(), fetch_b()).

    Hay sai: viết async def rồi gọi requests.get() hoặc time.sleep() bên trong. Cả server đứng hình trong lúc chờ. Nếu buộc phải gọi code blocking, dùng await asyncio.to_thread(func).

    Người phỏng vấn muốn nghe: async tăng khả năng xử lý đồng thời cho I/O, không làm code CPU nhanh hơn.

    Ôn thêm câu hỏi Python →
  6. 06Dùng generics và type narrowing trong TypeScript thế nào? Cho ví dụ discriminated union.JavaScript & TypeScript · Senior

    Gợi ý trả lời

    Generics giúp viết hàm và kiểu dùng lại được mà vẫn giữ thông tin kiểu, thay vì rơi về any.

    type Result<T> =
      | { ok: true; data: T }
      | { ok: false; error: string };
    
    function show(r: Result<User>) {
      if (r.ok) return r.data.name; // TS biết có data
      return r.error;
    }
    
    • Field chung (ok, type, status) giúp TypeScript thu hẹp kiểu trong if/switch. Đây là cách mô hình hoá trạng thái không thể sai: không có chuyện vừa có data vừa có error.
    • Ràng buộc generic: <T extends { id: string }>.
    • Utility types hay dùng: Partial, Pick, Omit, Record, ReturnType, Awaited.
    • Type guard tự viết: function isUser(x: unknown): x is User.

    Người phỏng vấn muốn nghe: bạn dùng kiểu để làm trạng thái sai không biểu diễn được, chứ không chỉ để chú thích.

    Ôn thêm câu hỏi JavaScript & TypeScript →
  7. 07Bạn chọn framework automation (Selenium, Playwright, Cypress…) dựa trên tiêu chí nào?Tester / QA · Senior

    Gợi ý trả lời

    Không có framework tốt nhất, chỉ có cái hợp với sản phẩm và team.

    • Loại ứng dụng: web, mobile (Appium hoặc framework native), desktop, API.
    • Ngôn ngữ của team: nên trùng với dev để họ cùng review và viết test.
    • Trình duyệt cần hỗ trợ, có cần nhiều tab/domain, iframe, file upload.
    • Tốc độ và độ ổn định: auto-wait, chạy song song, retry, trace khi lỗi.
    • Tích hợp CI/CD, báo cáo, chạy trên container.
    • Cộng đồng, tài liệu, khả năng tuyển người.

    Ví dụ: "Dự án web mới, team dùng TypeScript, em chọn Playwright vì auto-wait giảm test chập chờn, chạy song song sẵn, có trace viewer để debug. Selenium vẫn hợp với dự án Java có sẵn nhiều script."

    Hay sai: chọn vì "đang hot" mà không có lý do gắn với dự án.

    Ôn thêm câu hỏi Tester / QA →
  8. 08Test automation của bạn hay bị flaky (lúc pass lúc fail). Bạn xử lý thế nào?Tester / QA · Senior

    Gợi ý trả lời

    Flaky test làm team mất niềm tin vào automation, nên cần xử lý có hệ thống chứ không chỉ bấm chạy lại.

    Nguyên nhân thường gặp:

    • Chờ bằng sleep cứng thay vì chờ điều kiện (element hiển thị, API trả về).
    • Locator dễ vỡ (XPath dài, phụ thuộc thứ tự); nên dùng data-testid hoặc role.
    • Dữ liệu test dùng chung, test phụ thuộc thứ tự chạy.
    • Môi trường test không ổn định, dịch vụ bên thứ ba.

    Cách làm:

    • Theo dõi tỷ lệ fail từng test, cách ly test flaky khỏi pipeline chặn release cho tới khi sửa.
    • Mỗi test tự tạo và dọn dữ liệu của mình; mock dịch vụ ngoài khi phù hợp.
    • Lưu screenshot, video, trace khi fail để tìm nguyên nhân.

    Hay sai: cấu hình retry thật nhiều để che lỗi.

    Ôn thêm câu hỏi Tester / QA →
  9. 09Why are you interested in this role?Phỏng vấn tiếng Anh

    Gợi ý trả lời

    "I've been working on payment systems for three years, and I'm really interested in building products at a larger scale. From the job description, your team is redesigning the transaction platform, which matches my experience and what I want to learn next. I also like that you have a strong engineering culture with code reviews and technical sharing. I believe I can contribute quickly and keep growing here."

    Mẹo: nối ba ý: kinh nghiệm của bạn, điều công ty đang làm, điều bạn muốn học. Dùng chi tiết từ JD để cho thấy bạn đã tìm hiểu. Tránh mở đầu bằng lương hay "because your company is big".

    Ôn thêm câu hỏi Phỏng vấn tiếng Anh →
  10. 10Kể về một thất bại hoặc sai lầm của bạn và bài học rút ra.Câu hỏi hành vi & văn hoá

    Gợi ý trả lời

    Chọn sai lầm thật, có hậu quả vừa phải, nhận trách nhiệm rõ ràng, và nhấn mạnh việc bạn đã thay đổi sau đó.

    Cấu trúc: chuyện gì xảy ra, phần lỗi của bạn, bạn khắc phục ngay thế nào, bài học và thay đổi lâu dài.

    Câu mẫu: "Có lần em deploy một thay đổi cấu hình lên production vào chiều thứ Sáu mà không kiểm tra kỹ trên staging, làm một tính năng lỗi khoảng một giờ. Em báo ngay cho lead, rollback và viết báo cáo sự cố. Sau đó em đề xuất checklist trước deploy và quy ước hạn chế deploy cuối tuần; team áp dụng tới giờ."

    Hay sai: kể một "thất bại" thực ra là khoe, đổ lỗi cho người khác, hoặc nói mình chưa từng thất bại.

    Ôn thêm câu hỏi Câu hỏi hành vi & văn hoá →

Bạn đã phỏng vấn ở Bosch Global Software Technologies?

Kể lại các vòng và câu hỏi đã gặp (ẩn danh) để người sau ôn đúng trọng tâm.

Chia sẻ kinh nghiệm phỏng vấn