12/08/2018, 13:16

Test tự động - khi nào và vì sao sử dụng?

Bài viết được dịch từ thoughtworks.com Trong bất cứ vòng đời của dự án nào, mục đính của chúng ta nên là tự động hóa mọi hoạt động lặp lại khi tạo và bảo trì hệ thống. Việc thực hành tự động hóa Ruthless automation là cách để tự động hóa các nhiệm vụ như vậy. Trong vòng đời dự án, lí do hạn ...

Bài viết được dịch từ thoughtworks.com

Trong bất cứ vòng đời của dự án nào, mục đính của chúng ta nên là tự động hóa mọi hoạt động lặp lại khi tạo và bảo trì hệ thống. Việc thực hành tự động hóa Ruthless automation là cách để tự động hóa các nhiệm vụ như vậy.

Trong vòng đời dự án, lí do hạn chế về mặt thời gian hoặc thiếu nhận thức về việc cần thiết phải tự động hóa, chúng ta có xu hướng bỏ qua hoặc không xác định được tự động hóa các công việc bằng tay và lặp đi lặp lại các công việc đó.

Tôi sẽ chia sẻ với các bạn về cách mà tôi xác định và tự động hóa một số công việc giúp tôi giảm bớt các công việc bằng tay và tăng năng suất.

Dự án mà tôi tham gia là một trang web tiếp thị có nội dung phong phú, đòi hỏi dữ liệu tương tác phức tạp với tính sẵn sàng cao. Dưới đây là một vài tình huống tôi đã gặp và đã cố gắng tự động hóa những công việc mệt nặng nề trong đó.

Liên tục lặp lại việc thiết lập dữ liệu kiểm thử

Khó khăn:

Chúng ta có rất nhiều loại môi trường ví dụ như SIT, Integration, UAT, vv... Với mỗi chức năng mới ta lại phải kiểm thử xem chức năng này có hoạt động ổn định trong các môi trường nói trên hay không.

Mỗi khi có chức năng mới ra đời, tôi lại phải tạo dữ liệu mẫu trên nhiều môi trường kiểm thử. Mặc dù tôi có thể REST plugins cho trình duyệt (ví dụ như POSTMAN), tôi vẫn gặp khó khăn với việc theo dõi tất cả dữ liệu dành cho chức năng mới. Ngoài ra tôi cũng có sự chuẩn bị cho mỗi môi trường khi xóa dữ liệu. Khi xóa dữ liệu, tôi cần phải tạo lại dữ liệu một lần nữa. Thêm vào đó, việc upload nhiều biến thể của cùng một dữ liệu càng trở nên khó khăn. Đây là điều tôi không bao giờ mong muốn.

Giải pháp:

Tôi đã viết một đoạn script nhỏ để giải quyết vấn đề của mình. Với đoạn script này, tôi có thể upload biến thể của dữ liệu lên bất kì môi trường nào hỗ trợ và nhờ đó tôi có thể dễ dàng theo dõi phiên bản dữ liệu nào đang được sử dụng trên môi trường kiểm thử nào.

01_00ed8fd60c6ec9c2b86bc33aa8dbe3bd.png

Các định dạng dữ liệu khác nhau

Với một trang web tiếp thị sản phẩm, tạo nội dung là công việc chủ yếu và thường xuyên cần làm.

Việc tạo nội dung được giao cho các nhóm khác nhau. Để hỗ trợ được các định dạng nội dung khác nhau, chúng tôi đã có một bộ chuyển đổi dữ liệu.

Khó khăn:

Thông thường những người tạo nội dung có thể dùng nhiều công cụ khác nhau và tạo ra nội dung dưới nhiều định dạng khác nhau. Họ luôn luôn ưa thích dữ liệu ở dạng bảng tính (excel chẳng hạn). Lấy dữ liệu để đưa vào định dạng phù hợp cho người tạo nội dung, tự tay lấy dữ liệu JSON từ hệ thống và định dạng dữ liệu cho Excel là công việc vô cùng tẻ nhạt.

Giải pháp:

Một đoạn script nhỏ để chuyển đổi giữa các kiểu dữ liệu là tất cả những gì tôi cần. Với script này,tôi có thể chuyển dữ liệu JSON thành CSV, tiết kiệm cho tôi rất nhiều thời gian và giúp tôi nhanh chóng đáp ứng yêu cầu của tác giả nội dung.

021_fbec769cc503b7b5f295e13980c84954.png

022_75c193a64b37c34d9c62037aa3c30ff9.png

Gỡ lỗi với Preview và Live stacks

Như đã nói phía trên, tạo nội dung là công việc thường xuyên cần làm và người tạo nội dung cần xem trước nội dung trước khi thực sự đăng bài lên. Chúng ta có môi trường Preview (xem trước) và Live (đã đăng nội dung chính thức). Với mỗi nội dung, kiểm tra tính đầy đủ sẽ quyết định trang nội dung đó có được đăng hay không.

Khó khăn:

Môi trường Preview và Live đóng vai trò quan trọng trong việc tạo ra nội dung. Chỉ có một vài thôngsố trong một đối tượng JSON rất lớn cùng với các mới có thể thúc đẩy quá trình từ Preview sang Live. Với hệ thống lớn, việc tạo ra lượng dữ liệu khổng lồ đã từng xảy ra và có vẻ người tạo nội dung phải đối mặt với nhiều vấn đề với dữ liệu được hiển trị ở môi trường preview chứ không phải ở môi trường Live.

Khi gỡ lỗi, để đạt được một kết luận nào đó tôi cần kiểm tra dữ liệu JSON. Quá trình kiểm tra từng thông số trong mỗi lần phản hồi tốn rất nhiều thời gian. Tôi đã từng bỏ lỡ một số thông số định hướng xuất bản quan trọng (xem sơ đồ dưới). Ngoài ra còn có vấn đề định dạng ngày cũng không thể đọc được.

Giải pháp:

Tôi tạo một chú thích về các bước lặp đi lặp lại và viết một script cho những thứ đó. Bạn có thể xem đoạn script này trên gist, trong đó đã đưa ra một tập tin JSON chứa thông tin thông số xuất bản và trạng thái của chúng theo một định dạng dễ nhìn, dễ xử lý.

Trên đây chỉ là một số kinh nghiệm của cá nhân tôi nhưng hẳn là bạn cũng có thể tìm được một vài ý tưởng từ đó.

03_597da5c4bc8027db5132bb5616ee0fe7.png

Tổng kết

Không ít người trong chúng ta thường hơi do dự để thử những điều như thế này bởi vì chúng tamuốn nhanh chóng hoàn thành các nhiệm vụ chính. Nhưng theo kinh nghiệm của tôi, thêm một chút thời gian dành cho việc tự động hóa những thứ chúng ta thường xuyên làm đi làm lại, có thể tiết kiệm rất nhiều thời gian và nỗ lực trong tương lai.

04_XKCD_49224e6faaff4668748fd5dfb2767993.jpg

Chắc chắn sẽ có chi phí phát sinh liên quan đến việc tạo ra và duy trì các nhiệm vụ như vậy. Nhưng tôi thích việc tự động hóa công việc hơn là gặp lỗi của con người.

Có rất nhiều công việc trong dự án mà chúng tôi cố gắng để tự động hóa. Chúng ta tốn thời gian để xây dựng và nỗ lực duy trì những công việc đó, nhưng tất nhiên nó mang lại lợi ích. Một bản phân tích và đối chiếu Chi phí - Giá trị của tất cả những công việc bạn sẽ muốn tự động hóa là rất quan trọng - điều này có tác dụng trong việc ưu tiên tất cả các công việc có thể tự động hóa cho các sản phẩm được kiểm thử.

Có những điều mà hẳn là bạn nên làm sau khi viết được các script tự động, đó là đẩy nó lên chương trình quản lý mã nguồn và chia sẻ nó với các thành viên khác trong team, những người cũng đang vất vả với các công việc giống bạn. Những thành viên trong team cũng có thể đóng góp các bản sửa lỗi và cải tiến cho script tốt hơn.

Để tóm tắt lại, dưới đây là một số kết luận:

Hãy suy nghĩ trước khi bạn lặp lại công việc!

Nếu bạn đang làm điều gì đó liên tục lặp lại, hãy ngừng lại và suy nghĩ "Mình có thật sự cần phải lặp lại các bước này hay không?". Đó có thể là một công việc có khả năng tự động hóa.

Đừng cố gắng tự động hóa mọi thứ cùng lúc

Khi bạn viết một vài đoạn mã, hãy thực hiện từng bước. Hãy suy nghĩ xem "đâu là thứ tối thiểu mà bạn muốn ngay lúc này!". Tiếp tục xây dựng dựa trên ý tưởng đó bất cứ khi nào bạn thấy công việc trở nên phức tạp.

Hãy kiên nhẫn

Bạn sẽ phải vật lộn với đống công việc để tìm ra được thứ mình cần, do đó hãy bình tĩnh và tiếp tục công việc cho tới khi bạn đạt được điều mong muốn. Đừng vội từ bỏ, sẽ có ánh sáng nơi cuối đường dài.

Tự động hóa mọi thứ

Điều đó sẽ rất thú vị! Bạn giảm được thời gian dành cho những việc phải lặp lại, tăng tốc công việc và học được nhiều điều khi làm việc đó!

0