[Bài 23] Đọc dữ liệu từ file Excel

I. Mở đầu

Mình ít khi sử dụng đến cách làm này, nên cóp nhặt trên mạng đoạn code này, bạn nào dùng có thể copy thẳng vào trong project.

NOTE: Cái cách này mình ko khuyến khích nhé. Hãy dùng chức năng đọc csv của Junit5 thay thế.

Yêu cầu:

Giải nén và add các tất cả các file jar vào project ngoại trừ log4j. 

Lưu ý là phải add cả những file jar ở trong folder /lib/ và  /ooxml-lib/

 

Bạn nào nếu sử dụng Maven project thì add 2 cái này vào file pom.xml

 

II. Class đọc file Excel

Mình đặt cái class này ở trong package utilities.

Trong class có 3 method chính:

  1. setExcelFile: Đọc file và xác định data ở sheet nào trong file excel
  2. findCells: Tìm vị trí các cell có chứa data trong sheet
  3. getTestData: Lấy data và lưu vào các array

III. Cách inject data vào trong các test method

1. Cấu trúc file Excel

File Excel phù hợp với Class trên có dạng như sau:

Nó sẽ được đánh dấu ở 2 góc bằng 1 từ hoặc 1 dãy ký tự nào đó (chính là method findCells ở trên). Trong ví dụ này mình sử dụng từ invalid

2. Cách lấy đường dẫn đến file linh hoạt

File data nên được đặt trong project luôn, đừng để ở vị trí nào đó ở trên máy ngoài project vì nếu có ai đó làm chung với bạn thì đường dẫn đến file sẽ bị sai. Tất nhiên là đường dẫn đến project ở mỗi máy lại khác nhau nên chúng ta phải có cách để dynamic cái đường dẫn đó để lúc nào cũng đúng dù ở bất kỳ máy nào.

Như ở trong hình: file sẽ nằm ở trong folder “data” và file có tên là “data.xlsx”. Do cái đường dẫn là cố định, không đổi nên mình sẽ đặt nó ở trong class Links (Xem lại bài 16)

Cái File.separator chính là cái ký tự “\” hoặc “/”, sẽ tùy vào hệ điều hành để hiển thị.

3. Thực hiện việc đọc file excel vào lúc nào?

Tùy vào mục đích sử dụng để xác định thời điểm đọc file Excel:

  • Đọc file 1 lần và sẽ run trước tất cả các test
  • Test nào cần data thì chỉ đọc file ở test đó.

Trong hướng dẫn lần này, mình dùng cách thứ 2 vì dễ làm :)))) Ai muốn làm cách 1 thì tự nhét cái read file vào BeforeSuite hoặc BeforeTest, tùy bạn.

Class test Login sẽ như sau:

Trong đó: sử dụng annotation DataProdiver của TestNG để làm việc inject data vào trong method test.

Một số điểm lưu ý:

  • Nếu cái dataProdiver method mà bạn đặt ở Class khác thì trên chỗ method Test bạn cần phải khai báo cái class chứa method DataProvider.
  • Bắt buộc cái method Test phải có parameter trùng với số cột được định nghĩa trong file excel (ko tính 2 cái từ ở góc dùng để đánh dấu). Giả sử cái file data có thêm 1 cột nữa là email thì ở trong Method Test cũng phải có thêm parameter Email
  • Không nên định nghĩa pass/fail ở trong file data vì 2 TH pass và fail sẽ có cách check kết quả khác nhau
  • Càng không nên lưu pass/fail ra file excel vì bạn đã có 1 cái report của TestNG rồi, giờ còn phải mò mẫm vào file excel để xem kết quả pass fail thì quá khổ.

Và đây là kết quả sau khi run test, mình chỉ làm demo nên giá trị đầu vào nó ko đúng với tiêu chí test lắm.

IV. Tổng kết

Nhiều bạn yêu cầu bài này quá, nay mình mới cố gắng sắp xếp thời gian viết được, mong rằng đáp ứng được nhu cầu của mọi người. Nếu có thắc mắc gì thì hãy đặt lại comment nhé.

0

25 thoughts on “[Bài 23] Đọc dữ liệu từ file Excel

  1. Pingback: [Bài 22] Webdriver script không đơn giản thứ nhất | GiangTester Blog

  2. Rất mong anh có thể thât nhanh ra sớm các bài viết nữa ạ. Em đang học và làm đến nó nên bài viết của anh thật sự rất hữu ích và cần thiết. :D. Xin chân thành cảm ơn ạ 😀

    0
    • Thanks em!
      Anh đang khá bận nên có thời gian anh sẽ viết thêm. Em có thể gợi ý thêm các chủ đề mà em muốn anh viết.

      0
      • Em có viết testscript theo từng testcase trong file excel, và sau khi run test thì sẽ ghi PASS/FAIL vào dòng tương ứng của testcase đó trong file excel. anh viết bài hướng dẫn về cái này được không ạ . :D. Xênh kiu anh ạ
        p/s: hiện tại em đang nhập tay :D.

        Em còn một số trường hợp sẽ tổng hợp lại rùi nhờ anh tư vấn or có thể viết bài hướng dẫn càng tốt ạ . hi.

        0
        • Hi em,
          Write vào excel cũng được nhưng đó không phải là việc của automation test em ạ. Automation có report của riêng nó, nó không update vào bất cứ cái document nào.
          Việc đánh giá pass/fail trong testcase em phải tự làm bằng tay thôi.

          0
  3. Pingback: [Bài 25] Chụp screenshot sau khi run test | GiangTester Blog

  4. Anh cho e hỏi đoạn này với ạ e chưa rõ
    “public static final String PATH_TO_EXCEL = System.getProperty(“user.dir”) + File.separator + “data” + File.separator + “data.xlsx”;”
    user.dir là cố định ạ hay là file nào ạ ?
    File.separator khi chạy thì e thay bằng “\” đúng k ạ

    0
    • Hi em.
      user.dir là cố định, ko cần thay đổi. File.sperator cũng là cố định, không cần thay đổi.

      Ví dụ: File exel ở C:\Users\ngoc\eclipse-workspace\selenium-webdriver\data\data.xlsx
      – System.getProperty(“user.dir”) là trỏ đến cái folder project, chính là “C:\Users\ngoc\eclipse-workspace\selenium-webdriver”
      – File.sperator chính là “\” hoặc “/” tùy vào hệ điều hành, Window là “\”, linux và Mac là “/”. Giả sử khi cái project này được clone về máy Mac, nó được lưu ở vị trí: /Users/user/eclipse-workspace/selenium-webdriver. Nếu ta fixed cái đường dẫn theo window thì test không run được nữa.

      Em có thể đọc thêm ở đây: https://docs.oracle.com/javase/tutorial/essential/environment/sysprop.html

      0
  5. a oi cho e hỏi khi đọc dữ liệu exel mình có thể test 2 trường hợp đăng nhập thành công và không thành công thì trường hợp đăng nhập thành công mà mình điền các dữ liệu hợp lệ thì nó sẽ thông báo thành công thì làm thế nào để test NG nó thông báo là trường hợp pass ạ

    0
    • Hi em, anh chưa hiểu câu hỏi của em lắm, nhưng nếu có 2 case login “thành công” và “không thành công” trong đọc file excel thì anh sẽ làm như sau:
      1. Tách riêng 2 phần data ấy cho 2 test cases riêng biệt.
      2. Run test case login “thành công” –> check điều kiện: URL + title page (trang home, sau khi login)
      3. Run test case login “không thành công” –> check điều kiện: Error message + URL page (vẫn là trang login)

      0
  6. a Giang ơi khi em run loginFail thì báo “Test ignored” 🙁 a giải thích phần này cho e được k ạ. em cảm ơn

    0
  7. Anh cho em hỏi với ạ:
    Em có 1 file excel với 20 account khác nhau
    Khi e chạy script để login vào google, thì mỗi lần login xong 1 account
    thì browser sẽ đóng và mở lên một browser mới cho mỗi account
    Giờ làm thế nào để có thể login 20 account mà k cần phải mở browser mới vậy ạ?

    0
    • Hi em, không biết em có đọc bài khác anh viết không. Anh không khuyến khích việc login 20 lần như vậy trong mỗi session, vì:
      – Google hoặc App của em có thể chặn em sai 5 lần đăng nhập sai –> 15 lần còn lại sẽ bị error
      – Mỗi test là độc lập và chỉ dùng 1 session duy nhất, đừng dùng chung, để đảm bảo tính independent.
      – Em có thể rút ngắn thời gian run test bằng việc run parallel nhiều session độc lập, cùng lúc.

      0
  8. Pingback: Đọc file csv bằng JUnit5 | GiangTester Blog

  9. Anh Giang ơi, có cách nào dùng Auto Test để check Mapping tỉnh/ thành phố, quận/ huyện, phường/ xã khi Dev insert vào CSDL không ạ?

    0
    • Hi em, theo anh hiểu là em cần check xem: phường A có thuộc quận B và nằm trong tỉnh C? –> dùng Auto UI cũng test được nhưng mất công.
      Anh nghĩ, em dùng SQl sẽ verify nhanh hơn là dùng auto, vì cái đó là setting, chỉ insert 1 lần, ko phải thứ thay đổi liên tục để mà em phải dùng auto để check mỗi lần release.

      0
  10. A Giang ơi, a có mở lớp ở Hà Nội k ạ, nếu có thì mở khu vực nào…chi phí của 1 khóa auto là khoảng bn ạ, e biết java cơ bản thôi, cũng có khái niệm về lập trình… đang có nhu cầu muốn học, a tư vấn thêm cho e vs

    0

Leave a Reply

Your email address will not be published. Required fields are marked *