Fake data là gì

Khi đi sâu vào thiết kế Automation UI test case cho các công ty mà tôi làm việc, điều khiến tôi cảm thấy không hài lòng nhất về test case của mình là nó chậm và bị duplicate. Chậm là khó tránh khỏi cho 1 UI test case. Về vấn đề duplicate, đó là bởi vì tôi thấy rằng mình đã test những API liên quan đến UI test này rồi. Nếu bây giờ tôi viết lại 1 test case UI, thì vô hình chung tôi đã làm lại công việc test cho những API mà tôi đã viết test, vì API phải work thì cái UI test của tôi mới work.

Trước khi rời Atlassian, tôi được giới thiệu về khái niệm mock test, nhưng tôi chưa có được cơ hội để tìm hiểu sâu và áp dụng nó, ngay cả khi tôi làm việc ở SSS. Chỉ đến khi tôi đến làm việc ở Ascend Tech VN tôi mới có cơ hội được training, tìm hiểu và thực hành về nó. Theo tôi, mock test là một trong những cách để tách biệt UI test ra khỏi sự phụ thuộc vào tình trạng của Back End server từ đó giúp test case chạy nhanh hơn và kiểm chứng độ đúng đắn của UI một cách độc lập hơn.

1/ Mock test là gì?

Có rất nhiều thứ tương tự Mock test, cả tôi cũng không tìm hiểu hết về chúng. Nó bao gồm: Server Virtualization, Stubbing, Mocking,... Nó nằm trong một khái nhiệm chung gọi là Test Double. Bạn có thể tìm hiểu thêm về chúng trong bài viết này. Nếu như tôi giải thích theo ý kiến riêng của mình thì:

Mock test là khái niệm dùng để chỉ rằng, thay vì lấy data từ 1 real service, bạn sử dụng một bộ test data mà input và output của bạn được định nghĩa rõ ràng từ một server giả khác [mock] và bạn dùng nó như là input cho cái system mà bạn muốn test.

2/ Cách tiếp cận cổ điển của UI Automation test

Lại ví dụ về cái form login:

Khi bạn điền thông tin Email password và click Sign in, bản chất là System này gửi 1 HTTP request: //realapiserver/login với data {"email":"","password":"123"}. Hãy cứ giả sử test case của bạn là hy vọng màn hình trả về HomePage

Cách tiếp cận cổ điển này có nhiều bất cập:

1/ Bạn mang tiếng là test Front End, nhưng thực ra là bạn phải đợi cho Back End trả về. Đôi khi nó khá mất thời gian trong tổng số step của bạn

2/ Nếu Back End sai, tức là thay vì mình nhập data đúng nó phải trả về Success thì nó lại trả về fail --> test case UI cũng fail. Thực ra thì, nếu đây xem như là e2e test case thì OK. Nhưng mà, ý tôi là người làm Front End không có cơ hội để kiểm tra cái code mình làm ra có đúng hay không, vì Back End đã bị sai rồi. Nếu team bạn có apply CI/CD thì nó sẽ là thiệt thòi lớn cho bạn.

3/ Nếu cái API này chưa có, là coi như bạn khỏi kiểm tra Front End luôn. Như vậy, Back End API cứ phải chạy trước Front End. Front End có muốn làm trước cũng không được.

Nói tóm lại, nếu bạn chỉ muốn test UI, vì cái mà team bạn làm ra, hoặc là cái mà công ty bạn làm cho khách hàng chỉ là UI. Hoặc team của bạn muốn làm UI trước Back End mà vẫn muốn tìm ra những lỗi chỉ do code của bạn gây ra, thì mock test là một trong những lựa chọn hợp lý.

Mock test cũng gần như là bắt buộc khi bạn phải giả lập một server của 1 3rd party [ ví dụ app payment của bạn liên kết với server ngân hàng]. Trong trường hợp này, bạn buộc phải tạo ra 1 mock server, và cấu hình input và output của nó theo như document được thỏa thuận giữa bạn và 3rd party.

3/ Cách để viết một mock test case

Điểm khác biệt lớn nhất giữa việc viết 1 mock test và 1 test case bình thường đó là bạn không cần phải tạo test data, và bạn cũng biết rõ được kết quả kỳ vọng là gì.

Khi viết test case, bạn cần chắc chắn rằng, cái bạn input trên Front End sẽ trùng với cái bạn định nghĩa ra ở mock server. Nếu không, bạn sẽ không thể có kết quả như mong muốn

4/ Cách thiết lập 1 mock server

Để có một test server và tích hợp vào code của Dev, đây là những step cơ bản:

  • Setup 1 mock server. Mountebank là 1 option, nhưng cũng có nhiều mock server khác. Setup mountebank
  • Start con mock server lên.
  • Bước kế tiếp là quan trọng, bạn định nghĩa ra với request có những điều kiện gì, thì response sẽ là như thế nào. 1 ví dụ của Mountebank. Để tạo ra 1 mock của Mountebank bạn có thể dùng API:

Ở đây tức là mình vừa tạo ra 1 mock có logic là:

nếu tôi call vào API localhost:2525/mock/test, Method: POST, Header có dạng "application/json". và có body request là {"tmnid": "1001"} thì response trả về sẽ là phần định nghĩa trong "response":

Bạn có thể tham khảo thêm về cách dựng mock bằng mountebank ở đây

  • Developer của bạn khi deploy UI để test, thì thay vì để UI trỏ vào Back End server, họ sẽ trỏ vào con mock của bạn. Nghe thì có vẻ khó nhưng thực ra thì tôi thấy phần lớn trường hợp Developer đã để sẵn 1 config parameter cho vấn đế này, vì chính bản thân họ cũng phải deploy code của họ lên nhiều môi trường [Staging, Alpha, Production,...], cho nên họ chỉ cần sửa đúng cái config này là ổn.
  • Cuối cùng run test case của bạn.

Lời kết

Mock test là một trong những cách để chúng ta có thể test được những trường hợp liên quan đến 3rd party server. Nếu sử dụng đúng đắn, nó có thể giúp bạn tiết kiệm được rất nhiều thời gian khi viết test và chạy test mà vẫn đảm bảo được chất lượng của feature. Chúc các bạn thành công trong việc áp dụng mock test vào hệ thống test case của bạn.

X

This site uses cookies. By continuing, you agree to their use. Learn more, including how to control cookies.

Cuộc đời một thằng developer có rất nhiều việc rất chán nhưng phải làm: fix bug, viết report, nhập timesheet, viết code test … Một trong những việc đáng chán đó là: Tạo data giả để hiển thị và test. Để làm việc này, chúng ta thường tạo object giả [bằng code], hoặc đánh data giả vào SQL. Hầu như 90% developer và tester đều ghét cái việc vừa nhảm nhí vừa đáng chán này, do dó ta thấy dữ liệu trong data giả thường là: test1,test2, ….

Cũng phải nói thêm, ngoài nhàm chán, công việc này còn khá mất thời gian. Hãy tưởng tượng ta có 5 bảng, mỗi bảng 10 cột, mỗi cột cần điền 10-20 dòng data giả, mấy thời gian quá phải không nào? Giờ đây, với Faker và Mockaroo, ta có thể tạo data giả theo phong cách developer, nhanh gọn, thú vị và không tốn thời gian.

1. Tạo data giả trong javascript

Khi sử dụng một số java script framework, ta cần 1 số data giả dưới dạng java script object để hiển thị. Ta có thể sử dụng faker.js cho mục đích trên.

Các bạn tải faker.js tại đây [Bấm DownloadZIP đấy nhé]

//github.com/marak/Faker.js/

Giải nén ra, trong thư mục build lấy file faker.js. Thêm reference tới file đó như sau:

Test Random

Việc sử dụng code khá đơn giản, các bạn chỉ cần sử dụng các function trong class faker. Tham khảo thêm API ở đây:  //marak.com/faker.js/

Dưới đây là code mẫu mình tạo 100 object của class Student

function GetRandomStudent[] { return { Id : faker.random.number[100], Name : faker.name.findName[], Username : faker.internet.userName[], Password: faker.internet.password[], Email : faker.internet.email[], Age : faker.random.number[100], Address: faker.address.streetAddress[], Birthdate: faker.date.past[] }; } var students = []; for [var i = 0; i < 100; i++] { students.push[GetRandomStudent[]]; }

Và đây là kết quả. Data “giả” nhưng trông khá giống thật phải không

2. Tạo data giả trong C#

Một vài trường hợp khasc, ta cần tạo data giả ở server side. Ở đây mình sẽ lấy C# làm ví dụ, với thư viện Faker.NET [Các ngôn nhữ khác như Java, Ruby, … có thể tìm thư viện tương ứng].

Các bạn sử dụng Nuget để cài đặt Faker.NET. Mở Nuget Package Manager Console và gõ vào “Install-Package Faker.Net” là xong.

Cách sử dụng cũng tương tự như phiên bản javascript. Có điều thư viện này chưa hỗ trợ password và datetime.

public class Student { public int Id { get; set; } public string Name { get; set; } public string Address { get; set; } public string Username { get; set; } public int Age { get; set; } public string Email { get; set; } public static Student GetRandomStudent[] { var name = Faker.Name.FullName[NameFormats.Standard]; return new Student { Id = Faker.RandomNumber.Next[100], Name = name, Username = Faker.Internet.UserName[name], Email = Faker.Internet.Email[name], Age = Faker.RandomNumber.Next[50], Address = Faker.Address.StreetAddress[], }; } } //Tạo 100 random student var students = new List[]; for [int i = 0; i < 100; i++] students.Add[Student.GetRandomStudent[]];

Và đây là kết quả

3. Tạo data giả dưới database

Đây là trường hợp hay gặp nhất, chúng ta cần nhập data giả vào database. Mình để nó dưới cùng để các bạn chịu khó đọc 2 cái trên, xin thứ lỗi. Ở đây, chúng ta sẽ sử dụng trang web Mockaroo để tạo data giả: //www.mockaroo.com/

Trang web hỗ trợ rất nhiều kiểu data giả như sau

Giao diện cũng không khó sử dụng. Mình sẽ dùng nó để tạo 50 students cho bảng Student như sau:

Khá dễ phải không? Sau khi bấm Generate Data, bạn sẽ được tải về 1 file sql như sau, bạn chỉ cần copy file này vào SQL Server, chạy là xong. Trang web còn có thể export ra dữ liệu dưới dạng JSON và 1 số dạng khác.

Bài viết kết thúc ở đây, mong rằng nó sẽ giúp cho quãng đường developer của các bạn đỡ vất vả hơn. Nếu bài viết có ích cho bạn, nhớ share để cảm ơn mình nhé.

Video liên quan

Chủ Đề