20/8/14

Automation Testing

Trong thế giới ngôn ngữ lập trình, hẳn các bạn đã biết và làm quen với những ngôn ngữ như C, C++, C#, VB, Java, Php, ASP.NET…! Và cũng có thể các bạn đã từng làm hoặc mới nghe nói đến các tools như: QuickTestProfessional, TestComplete, RanoRex, LoadRunner, hoặc CodedUITesting (Visual Studio 2010 Ultimate version). Các tools đó là gì, chúng làm gì hay liên quan gì đến thế giới lập trình phần mềm?

        Bạn biết rằng, trong suốt giai đoạn phát triển phần mềm bạn thường xuyên phải thay đổi functions, hoặc modules nào đó, để cho phù hợp với yêu cầu thực tế. Hoặc sau khi deliver sản phẩm cho khách hàng, khách hàng yêu cầu chúng ta thay đổi 1 module, hoặc một function…, thì sau khi các bạn change requirements, các bạn phải thực hiện lại việc Regression Testing, và dĩ nhiên nếu làm bằng tay, các bạn sẽ mất rất nhiều công sức và thời gian và có thể còn không chính xác.
Automation Testing và tại sao?

Đặt vấn đề: Các bạn đang làm trong một dự án lớn cho một cty lớn. Dự án của các bạn có khoảng 5 testers. Và vấn đề ở đây là khách hàng yêu cầu các bạn (testers) thực hiện việc testing cho sản phẩm với các data của việc test sẽ do chính khách hàng cung cấp. Khách hàng gửi cho các bạn một file excel với tổng số row data cho việc test là 20.000 rows. (Đây là một ví dụ, nhưng trong thực tế có thể lên tới gấp đôi con số trên – nên các bạn có thể hơi ngạc nhiên vì sao lại nhiều data như vậy).

Yêu cầu của bài toán testing: Với mỗi một row data nhập vào hệ thống (sản phẩm các Developer của chúng ta đang code), hệ thống sẽ tính toán và phải đưa ra một giá trị chính xác với giá trị khách hàng cung cấp. Ở đây, khách hàng cung cấp cho các bạn cả Input Data, Expected Result, việc còn lại bạn sẽ phải lấy Output data trên sản phẩm các bạn đang làm để compare với Expected của khách hàng.

Test case: Chỉ gồm các bước như nhập dữ liệu vào textboxes, comboboxes, clicking on some buttons, rồi lấy kết quả trên màn hình, so sánh với Expected Result của khách hàng, rồi mark vào report là Pass or Fail.
Picture
Manual Testing: 5 Testers của chúng ta sẽ phải hì hục ngồi nhập từng row data mà khách hàng provided vào hệ thống (trên UI), Lúc đầu rất hào hứng vì việc test đó không có gì khó khăn, nhưng việc đó cứ lặp đi lặp lại đến chán ngắt, buồn ngủ => có người nhập đúng các Input data, nhưng lại lấy sai Actual Output. Có người nhập sai cả Input Data…!

Mình estimate như sau: Cứ 5 phút thì một tester làm xong một case (một row) và đưa ra được report là pass hay fail. Một ngày 5 testers sẽ làm được: 5 người *((8h * 60 phút)/5 phút một row) = 480 cases. Vậy phải mất 41,6 ngày làm việc thì 5 testers của chúng ta mới kết thúc được 20.000 rows data.

Các bạn nghĩ sao, liệu các testers có chăm chỉ làm 1 ngày 8h hay không? Liệu cứ sau 5p họ có xong một test case (row) hay không? Và liệu họ có bị buồn ngủ và làm nhầm hay không? Con số mình estimate ở bên trên chỉ là estimate. Chứ còn thực tế, nhỡ tester ốm thì sao, nhỡ về lấy chồng thì sao? Hoặc nhỡ xin nghỉ việc đi du lịch thì sao???

Các bạn nghĩ sao, liệu các testers có chăm chỉ làm 1 ngày 8h hay không? Liệu cứ sau 5p họ có xong một test case (row) hay không? Và liệu họ có bị buồn ngủ và làm nhầm hay không? Con số mình estimate ở bên trên chỉ là estimate. Chứ còn thực tế, nhỡ tester ốm thì sao, nhỡ về lấy chồng thì sao? Hoặc nhỡ xin nghỉ việc đi du lịch thì sao???

Automation Testing: Trên đầu topic, mình đã nêu ra vài Automation test tools! Nhưng trước hết Automation Testing là gì? Là một software program dùng để chạy một cách tự động thay thế các thao tác testing bằng tay.
Ưu điểm của Automation Testing: Nó chạy thay thế testers và không biết mệt, không có chuyện ốm đau, không có chuyện phải dừng để chát, ăn quà vặt, hay để đi WC. Chúng có thể chạy liên tục ngày đêm, một khi chạy đúng được 1 case, thì chúng ta yên tâm rằng Script sẽ chạy đúng những gì chúng ta yêu cầu.

Những gì chúng ta cần viết scripts cho bài toán trên: Viết các script code để giả lập việc nhập dữ liệu vào Textboxes, chọn một item trong combobox, click vào một checkbox, hoặc click vào Button. Và chúng ta cũng phải viết scripts để lấy dữ liệu Output từ một textbox, label, hoặc datagrid… để so sánh với Expected của khách hàng. Chúng ta cũng phải viết các scripts để compare dữ liệu, và đưa ra kết quả là Pass hay Fail.
Picture
Và cuối cùng chúng ta sẽ để cho Script của chúng ta chạy đêm ngày – còn chúng ta sẽ ngồi đọc báo, học thêm sách technical, hoặc học tiếng anh, đi uống trà đá. ^^ Còn các em testers xinh đẹp sẽ đỡ vất vả hơn rất nhiều, dĩ nhiên các em ý sẽ yêu quý chúng ta hơn!
                                                                                                                                                                                    
Sưu tầm
Automation Testing Tools
1-    Quick Test Professional 10
2-    Ranorex 2.4.1
3-    TestComplete 9
4-    Visual Studio 2010 Ultimate

Tất cả các tools này đòi hỏi phải có license, còn các bạn muốn sử dụng thì cũng có thể tìm key hoặc crack để sử dụng. Mình thì hay dùng Trial version, sau 30 ngày thì lại phải cài lại máy, hơi buồn chút! Như các bạn đã biết, để tạo được Automation Test Scripts, thì ngôn ngữ chúng ta dùng ở đây chính là dưới dạng Script, tuy nhiên, mỗi loại tool cho phép chúng ta viết các automation scripts dưới dạng một hay nhiều ngôn ngữ khác nhau:
  • QTP: Cho phép chúng ta lựa chọn 1 trong 2 ngôn ngữ để viết Script là VBScript hoặc Delphi script.

  • TestComplete: JavaScript, VBScript, C/C++/C# script, Delphi
  • Ranorex: C#, VB.NET và Python


    Như các bạn thấy, mỗi một tool đều những ưu nhược điểm riêng biệt,

Đối với QTP, script được viết bằng VBScript nên nó tương đối nhẹ, nhưng là ngôn ngữ thuần script nên việc xây dựng các Objects không được flexible cho lắm, còn đối với Visual Studio 2010, tuy code script chạy nặng hơn VBScript, nhưng chúng ta hoàn toàn thoải mái customize, xây dựng các objects, data, tiers như một ứng dụng C#. Còn ví dụ như TestComplete 9, bạn có thể lựa chọn một trong các languages để viết theo khả năng của bạn, hơn nữa TestComplete8 còn support khá mạnh cho việc test các ứng dụng được viết bằng Delphi.


Đặc điểm chung của các tools:

-       Các tools đều có một tính năng rất hay, Recording. Tính năng này cho phép người sử dụng có thể ghi lại các steps như: click, focus, press, hoặc nhập dữ liệu vào textboxes, click vào button, check vào checkboxes, select các items trong combobox, thao tác với DataGrid…vv.

-       Các tools đều có một Object Repository. Các bạn hiểu nôm na rằng đây là một nơi để lưu trữ (stores) các object, controls mà các tools ghi lại sau khi thực hiện quá trình Recording. Thông tin này thông thường được store dưới dạng XML, và dĩ nhiên các bạn không phải mò mẫm trong đống XML để xem từng object cụ thể, mà nó có tool cho phép bạn tìm kiếm, lựa chọn như trên một DataGrid.

-       Các tools đều hỗ trợ làm việc với Data Driven (đây là một khái niệm gần như thuộc về Architecture, mình sẽ đề cập đến khái niệm này sau, còn bây giờ các bạn cứ hình dung như thế này, các bạn không bao giờ viết cả Script và Data lẫn nhau, mà Data nên đặt tại SQL DB hoặc Excel hoặc XML. Một khi các bạn hoàn thành Scripts, các bạn chỉ cần thay đổi Data và cho chúng chạy, nên=> 1 script sẽ test được cho n data).

Đặc điểm riêng:

-       Chính ngôn ngữ được support trong các tools đã nói nên các đặc điểm (đúng hơn là về tính ứng dụng của mỗi tool)

-       Thông thường mình hay dùng QTP để test cho các ứng dụng Web based apps. Dùng Ranorex để test cho Window based apps. Dùng TestComplete để test cho Web, Win, đặc biệt là Delphi apps. Còn VS2010 dùng để test cho các ứng dụng như WPF trên .NET 3.5,

Để học việc sử dụng các tools này không khó, nhưng để sử dụng được vào thực tế (vì sử dụng tools ở đây không chỉ làm tăng năng suất cho đội dự án, mà chúng ta đang đi hẳn về một ngề, Testing Service) thì các bạn cần phải sử dụng chúng một cách chuẩn, theo một template nào đó.

Không có nhận xét nào: