Xử lý multi-languages cho automation test

Nếu app của bạn là 1 ứng dụng mà support nhiều ngôn ngữ thì automation test của bạn chắc cũng phải viết làm sao để có thể test được nhiều ngôn ngữ.

  • Làm thế nào để mà không phải if-else cho từng đoạn xử lý trong code?
  • Làm thế nào để set default language mà mình sẽ test?
  • Làm thế nào để có thể chuyển đổi run test ngôn ngữ một cách đơn giản?

I. Setup Intellij encoding cho file.

Setting file encoding

II. Setup default language trong file pom.xml

Khi làm test automation bằng java thì bạn thường sử dụng maven và mọi config maven bạn sẽ đặt vào file pom.xml. Và trong file pom này bạn sẽ dùng 1 trong 2 plugins: surefire / failsafe để run test. Và đây cũng là chỗ mình setting cái biến language.

Khai báo default language thành “biến” trong pom.xml
Sử dụng biến trong phần configuration của surefire plugin

Các bạn có thể xem sample pom.xml ở đây.

III. Tạo ra các file language properties

Sử dụng Resource bundle
Add locale cần thiết
4 files: 1 file default và 3 files cho 3 ngôn ngữ

Thêm các giá trị vào file

Chức năng view nhiều file properties của Intellij

IV. Viết function để đọc các file properties

import java.util.Locale;
import java.util.ResourceBundle;

public class ConfigResourceBundle {
    public static final ConfigResourceBundle CONFIG_RESOURCE = getInstance(System.getProperty("language"));
    private final ResourceBundle resourceConfig;

    private ConfigResourceBundle(String language) {
        Locale locale;
        if ("vi".equals(language)) {
            locale = new Locale("vi", "VI");
        } else if ("ja".equals(language)) {
            locale = Locale.JAPANESE;
        } else {
            locale = Locale.ENGLISH;
        }
        resourceConfig = ResourceBundle.getBundle("language", locale);
    }

    public static ConfigResourceBundle getInstance(String language) {
        return new ConfigResourceBundle(language);
    }

    public String getValue(String key) {
        return resourceConfig.getString(key);
    }
}

Ở đây mình có sử dụng Singleton pattern để tối ưu việc đọc file properties, chỉ tạo 1 Object để đọc 1 lần duy nhất. CONFIG_RESOURCE

System.getProperty("language") --> lấy language trong file pom.xml
CONFIG_RESOURCE.getValue(key) --> đây là cách đọc value theo key

V. Cách sử dụng

Cách 1: Run test bằng Intellij và sửa language trên pom.xml

Sửa default language từ en –> vi
Run test và nhận kết quả từ file language_vi.properties

Cách 2: Run test bằng maven và truyền giá trị language bằng command line.

mvn clean test -Dgroups=demo -Dlanguage=ja
Run test và nhận kết quả từ file language_ja.properties

Lưu ý:

  • Test được viết bằng Junit5, maven 3.6 và surefire 3.0.0-M5
  • Đừng ngạc nhiên nếu bạn thấy các ký tự trong file properties của bạn ở dạng unicode.

VI. Kết luận

Cách sử dụng Resource Bundle này là cách Java support trực tiếp cho việc viết các project sử dụng multi-languages, các bạn có thể áp dụng nó cho Selenium UI test hoặc Rest-Assured API test. Hi vọng bài viết có ích cho bạn và đừng ngại ngần chia sẻ cho người đồng đội đang làm/học automation với bạn.

Leave a Reply

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