[Bài 13] Tạo dummy data và sử dụng Unit Test

Bài này dành ra để xử lý 1 vấn đề của bài 11.

  • Chẳng nhẽ lúc nào test với cái Title và Body như vậy? Có cách nào tạo data test tự động không?

Trước khi bắt đầu mình cần phải làm rõ 2 vấn đề:

  1. Dummy data là dữ liệu “ngu ngốc” thường được tạo để làm data test, không có ý nghĩa gì cả.
    [NOTED] Cách khác để tạo dummy data https://giangtester.com/tao-dummy-fake-data-bang-faker/
  2. Unit Test là cái mà các bạn tester thường được nói là test do developer viết, một vài người còn hiểu sai bảo Unit test là test từng Element ở 1 trang web hoặc mobile app. Không phải như vậy!!!

    Unit Test là test những method và function code
    . Việc viết script automation cũng chính là việc xây dựng 1 cái application để test cái application của dự án. Những cái method test của chúng ta viết ra chắc gì đã đúng, chúng ta cũng cần phải test lại chứ.

Áp dụng vào bài toán thực tế, chúng ta cần tạo ra 1 bộ dummy data cho Title và Body cho 1 bài viết.

Trước tiên, ta hình dung trong đầu cách chúng ta sẽ làm. Ta sẽ có 1 list các từ vựng, sau đó random lấy các từ đấy ra rồi ghép chúng lại với nhau. Ta sẽ thực hiện qua 3 bước:

  • Tạo list các từ vựng
  • Random lấy các từ trong list đó
  • Ghép chúng lại với nhau

1. Cách tạo list các từ vựng, ta có rất nhiều cách ví dụ như lưu list từ vựng vào 1 file, sau đó đọc file đó, hoặc là thành lập luôn 1 list từ vựng rồi lưu thành 1 biến như thế này:

String[] words = { "man", "mountain", "state", "ocean", "country", 
		"building", "cat", "airline", "Act", "Agree", "Arrive",
		"Ask", "Bake", "Bring", "Build", "Buy" };

Để lấy 1 phần tử trong list trên, ta chỉ cần sử dụng cú pháp: array[index]. Ví dụ:
words[0] –>  “man”

2. Ta cần phải làm cho số index ở trên là 1 số random. Ta sử dụng class Function mà Java đã cung cấp sẵn trong package java.until

public int createRandomNumber() {
	Random ran = new Random();
	int x = ran.nextInt(words.length);
	return x;
}

3. Ghép các từ vựng được lấy random ra.

public String randomString() {
	String randomString = words[createRandomNumber()] + " " 
			+ words[createRandomNumber()] + " "
			+ words[createRandomNumber()] + " " 
			+ words[createRandomNumber()];
	return randomString;
}

Cái mà chúng ta vừa làm xong là tạo ra được 1 bộ random String, bây giờ để phân biệt cho Title và Body ta có thể thêm suffix [“, title”] và [“, body”] vào cuối randomString.
Ta có 2 function mới như sau:

public String title() {
	return randomString() + ", title";
}

public String body() {
	return randomString() + ", body";
}

Nếu bạn sợ rằng cái randomString mà bạn viết có thể bị trùng nhau, sẽ gây khó khăn khi check data sau này, bạn chỉ cần add thêm thời gian hiện tại vào phía sau là xong. Ở đây mình dùng miliseconds để tránh việc bị trùng

public int getTime() {
	return (int) ZonedDateTime.now().toInstant().toEpochMilli();
}

Chốt lại, class Generator chuyên dùng để tạo dummy data có hình dạng như sau:

import java.time.ZonedDateTime;
import java.util.Random;

public class Generator {

	String[] words = { "man", "mountain", "state", "ocean", "country", 
			"building", "cat", "airline", "Act", "Agree", "Arrive",
			"Ask", "Bake", "Bring", "Build", "Buy" };

	public String title() {
		return randomString() + ", title";
	}

	public String body() {
		return randomString() + ", body";
	}

	public int createRandomNumber() {
		Random ran = new Random();
		int x = ran.nextInt(words.length);
		return x;
	}

	public int getTime() {
		return (int) ZonedDateTime.now().toInstant().toEpochMilli();
	}

	public String randomString() {
		String randomString = words[createRandomNumber()] + " " 
					+ words[createRandomNumber()] + " "
					+ words[createRandomNumber()] + " " 
					+ words[createRandomNumber()] + " "
					+ getTime();
		return randomString;
	}

    public String getTimeInFormat() {
		String timeStamp = new SimpleDateFormat
("dd-MM-yyyy_HH.mm.ss").format(new Date());
		return timeStamp;
	}
}

Tạo Dummy data đã xong, ta đến phần viết Unit Test để check xem cái chúng viết đã đúng hay chưa. Unit Test là 1 phần của Test-Driven Development, sẽ có nhiều vấn đề về nó. Ở đây, mình tạm viết 1 version đơn giản có sử dụng cái @Test của TestNG:

public class MyUnitTest {
	@Test
	public void testGenerator(){
		Generator gen = new Generator();
		
		String result = gen.title();
		String result1 = gen.body();
		
		System.out.println(result);
		System.out.println(result1);
	}
}

Sau đó bạn run và nhìn trên console Log để xem kết quả đã đúng chưa. Thực ra thì nên dùng Assert để check kết quả nhưng mà thôi, mình lười rồi, kiểm tra bằng mắt nhé.

OK Done, đã fix xong 1 vấn đề nữa. @@

5 1 vote
Article Rating
Subscribe
Notify of
guest
11 Comments
Oldest
Newest Most Voted
Inline Feedbacks
View all comments
vân anh
vân anh
5 years ago

anh có thể viết bài hướng dẫn đọc data case by case từ excel lên không ạ, kiểu như em có 1 list case cho function login, em viết testcase đó ra 1 file excel có data đầu vào và expected, sau đó mình đọc lên lấy data input từ file excel => check kq thực tế và so sánh với expectd trong file excel và export kq pass, fail ra file excel luôn ấy ạ

vân anh
vân anh
5 years ago
Reply to  Giang Nguyen

Dạ vâng ạ, hóng quá ạ ^^

Tu Nguyen
5 years ago

Bạn có thể gửi cho mình full code được không?

Thảo Nguyễn Thị
Thảo Nguyễn Thị
3 years ago

Anh Giang cho em hỏi với ạ: Làm thế nào để tải folder lên Github ạ. Em mới học selenium, thấy anh tải lên Git em cũng học theo mà e chỉ thấy mỗi lựa chọn upload 1 file lên, không có folder.

Thảo Nguyễn Thị
Thảo Nguyễn Thị
3 years ago
Reply to  Giang Nguyen

Vâng, em cảm ơn anh ạ. Em cũng mới tìm cách add qua Eclipse. Em xin phép để link cho bạn nào cần ạ: https://www.youtube.com/watch?v=LPT7v69guVY