0

Một số ứng dụng web để bạn thực hành Selenium

Mình sẽ bắt đầu những bài ôn luyện từ cơ bản nhất trở đi, đầu tiên mình sẽ chọn một website nào đó để bắt đầu xây dựng project và thực hiện automation các test case sẽ thực hiện test hoặc một luồng nghiệp vụ nào đó trên ứng dụng đó.

Để lựa chọn được web site phù hợp với đúng ý mình, có mất thời gian thật, mình vừa nghĩ làm sao mà nó có thể cover được các mức độ từ đơn giản đến phức tạp, rồi có đủ cả các loại element để tiện thể làm ví dụ luôn cho dễ hình dung, dễ hiểu nữa.

Search google một hồi thì có rất nhiều gợi ý cho các bạn có thể lựa chọn cho mình một trang nào đó có thích nhất để practice với selenium. Ví dụ như:

Trang đặt tour này:

http://newtours.demoaut.com/mercuryunderconst.php .

tour

Trang này thì giao diện trông hơi xấu, nhìn tổng thể thì cũng có nhiều các element nhưng mà lại không đa dạng các loại khác nhau, trang register không quá nhiều trường, nói chung vừa đủ, nhưng mà lại không có nhiều loại control. Link text cũng nhiều. Nói chung trang này khá sơ khai, easy nhất.

Hay trang về cửa hàng online bán quần áo thời trang:

http://automationpractice.com/index.php

shop

Đúng đặc thù của các trang thương mại điện tử, có xem sản phẩm, mua bán các mặt hàng và rất nhiều tính năng khác. Có thể xây dựng project cho trang này để thực hiện một số luồng thao tác của người mua hàng như: tìm kiếm, lọc sản phẩm, xem sản phẩm, thêm vào giỏ hàng và thanh toán cho sản phẩm. Test case kết hợp nhiều công việc, hơi phức tạp chút, nhưng cũng không hẳn quá khó.

Nếu không thích trang tour kiểu siêu đơn giản kia hay là trang thương mại thì cũng có thể chọn trang booking kiểu này:

http://www.phptravels.net

booking

booking_1

Trang này thì giao diện y sì mấy trang booking quen thuộc, mình có thể xây dựng các test script để test cho các function như book phòng khách sạn, chuyến bay và các địa điểm vui chơi trong hành trình. Trang này có vẻ khá hay ho, tuy nhiên là nó sẽ không simple như hai cái trên, vì trên trang này nó có rất nhiều thông tin, với đặc thù hơn nên có thể khó hơn hai kiểu trên một chút.

Thực ra thì làm màu thế thôi, bạn có thể lựa chọn bất kỳ một trang web nào mà bạn thích để áp dụng cũng được hết. Miễn sao nó gây hứng thú cho bạn để bạn code là được. Vì nhiều khi stress, nhìn cái trang web mà muốn tắt máy luôn, chứ code được đâu. Nhưng mà theo mình ý, mình nên trừ mấy cái liên quan đến thanh toán thật hay là mấy trang kiểu khi mà làm gì đó nó ảnh hưởng đến thông tin với ví tiền của mình ra, không lại nhầm nhọt hay lộ thông tin thì không hay ho cho lắm. kaka.

Mấy trang bất kỳ nào đó như, nếu thích mương 14 thì bạn có thể chọn mương 14, nếu thích đọc báo tin tức bạn cũng có thể chọn vnexpess cũng được, nhưng mà các function, các test case và các control nó sẽ không đa dạng được, tuy nhiên nếu đào sâu thì cũng nhiều cái hay ho phết đấy, ko nên coi thường hê hê:

muong14

vnexpress

Tuy nhiên là để thuận tiện ôn tập phần Selenium này, mình sẽ không lựa chọn nào trong ba lựa chọn trên cả. Hihi. Tại vì mình mần được trang này nó hay ho hơn này, đủ tất cả các kiểu control thường gặp từ dễ đến khó luôn, xin chia sẻ cùng các bạn:

http://www.seleniumeasy.com/test/

seleasy

Từ các control basic:

seleasy_basic

Đến mức trên basic một tí:

seleasy_inter

Khi đã ngon lành hết các kiến thức cơ bản nhất thì có thể đào sâu đến mức khó hơn:

seleasy_advand

Rồi đó, chính là nó, mình khá là ưng ý với trang này, lướt qua mình có thể thấy từ các kiểu input form, đến data picker, rồi bảng biểu, progerss bar, các loại alert, list box các loại khác nữa như là drag, drop, chart, data loading … Rất rất nhiều, đều được cover hết nhé, bạn sẽ được biết đến để làm quen cũng như là thực hành với chúng, sau này có gặp cũng không bỡ ngỡ bối rối nữa. So cool 😀

Vậy đó, bài viết này với  thiện chí là gợi ý cho các bạn một vài lựa chọn về ứng dụng web để có thể practice với selenium. Và cũng là để tự lựa chọn cho bản thân mình một site để thực hành riêng. Hi vọng sẽ giúp ích cho tất cả các bạn!

 

 

0

Các thành phần cơ bản trong một automation project

Các bước cơ bản dưới đây sẽ giúp bạn có cái nhìn tổng quan về những việc cần làm khi bắt đầu một automation project.

Ta có một bài toán đặt ra ở đây như sau:

Bạn có các test case để test chức năng cho một website nào đó: web app đó có thể là một trang quản trị, một trang web bán hàng online, hay là bất kỳ các ứng dụng web nào khác mà bạn cần phải test…

Các test case chức năng này được chuẩn bị để bạn thực hiện manual test. Tất nhiên, bạn phải thực hiện test từng test case một cho đến khi xong bộ test case đó, từ việc setup precondition, input testdata, đến việc so sánh kết quả thực tế và kết quả mong đợi có tương ứng với nhau hay không để đánh pass – fail cho test case đó.

Yêu cầu dành cho bạn là sẽ automate được nhiều test case nhất có thể!

Vậy thì làm thế nào? Cùng xem lời giải dưới đây để biết được các thành phần chính trong project, từ đó định hướng được các công việc bạn cần phải làm nhé!

1. Tạo automation project

Đầu tiên bạn tạo một project – Có thể sử dụng IDE là Eclipse và sau đó add hai thư viện này vào project đó:

  • Selenium Webdriver library: Thư viện hỗ trợ tương tác với trình duyệt thông qua web brower.
  • Một thư viện dùng trong unit test như TestNG: Thư viện này giúp bạn có thể tạo được các script automation độc lập.

Trong project, có các tầng (layer), mỗi tầng chỉ giao tiếp với tầng trước và kế tiếp nó theo thứ tự như dưới đây:

main

Ba layer trên cùng thường thì sẽ được tổ chức thành các package khác nhau đó là:

  1. Test classes package
  2. Page object classes package
  3. Framework classes package

2. Tạo các class page object

Tương ứng với mỗi web page được chia trong bộ test case, bạn sẽ tạo một page object cho nó.

Page object class thực thi các tương tác người dùng trên một trang web cụ thể, nó bao gồm các thông tin về trường dữ liệu (field) và các method.

Các trường dữ liệu của page object bao gồm:

  • Title
  • Ulr
  • Locator của các web elements
  • Và các thông tin đặc trưng khác của page ví dụ như: source page, sub title,…

Các method được sử dụng để:

  • Cung cấp thông tin về webpage và các element:
    • Page title
    • Page url
    • Value của các label
    • Kiểm tra element đó có enable hay không, có thể selected hay không
  • Thực hiện các tương tác trên page như:
    • Click vào một element cụ thể nào đó
    • Input text vào textbox
    • Select options của checkboxes hay listboxes

Các test script của chúng ta sẽ sử dụng các thông tin trong page object này. Từ đó page object sẽ sử dụng các hàm trong classes framework của project để tiến hành thực thi các tương tác với trang web.

3. Tạo các class test

Ở đây mỗi test cript bạn tạo ra sẽ tương ứng với một test case.

Và trước mỗi test script bạn cần phải thêm 1 annotation @Test tương ứng với 1 unit test

Test script này gồm có hai phần:

  • Điều hướng đến trang được test
  • Thực thi việc test, và verify

Để điều hướng đến trang được test thì trong script sẽ gọi đến các thông tin trong page object của trang đó.

Và như vậy mỗi lần khi được điều hướng đến các trang test thì script sẽ thực hiện việc test và so sánh kết quả thực tế thực hiện được với kết quả mong đợi để đưa ra kết luận test.

Trong các class test thì các test ccript được gom nhóm với nhau, thuận tiện cho việc tìm kiếm và nâng cấp.

Mỗi nhóm test script được nhóm lại với nhau dựa vào mục đích test riêng của nhóm script.

Các class test không phải chỉ có các test script mà nó còn bao gồm cả test fixtures (test fixtures này không biết dịch sang tiếng việt sao nữa, thôi để nguyên)

Test fixtures là các method đặc biệt của unit test framework như:

  1. Việc chuẩn bị môi trường test, những cái mà các script test cần phải có trước khi có thể thực thu được (bước này thường để trong một hàm riêng, có annotation là @Before)
  2. Việc clean/reset môi trường test sau khi run test script: như việc reset về các thiết lập ban đầu, không cache…, (bước này cũng được xây dựng thành hàm riêng và có annotation là @After)

Các class test có thể được gom lại với nhau bằng cách sử dụng groups và suites.

4. Tạo một class base – class dùng chung

Các công việc như chuẩn bị môi trường test hay việc reset môi trường sau khi thực hiện test có thể được sử dụng nhiều lần ở nhiều nơi khác nhau trong project, vì thế để tránh việc lặp lại nhiều lần này thì ta sẽ đưa những test fixtures này vào trong một class base.

Các class test sẽ thừa kế class base này để có thể gọi đến và sử dụng các hàm trong đó.

5. Tạo các class framework

Các class framework được sử dụng trong project cho các chức năng chung như:

  • Tạo browser driver cho từng loại browser khác nhau
  • Tương tác với web sử dụng explicit wait
  • Lấy log file
  • Đọc các thông tin từ một file text nào đó
  • Chụp lại ảnh màn hình (capture screen) khi xảy ra exception
  • Tự động gửi email kết quả test
  • Tạo một report sau khi có kết quả test.

Các class page object sẽ gọi đến các function này từ các class framework mà ta đã có, để đưa ra thông tin cần lấy cho page ấy.

Như vậy mình có thể tóm tắt lại một cách tổng quan về thành phần cần có của một automation project đó là: đầu tiên bạn sẽ cần tạo project trong IDE (Eclipse), tiếp theo bạn cần xác định rằng trong project của bạn cần có các class Page object, class test, class base, và class liên quan đến framework.

Mỗi class đều có mục đích riêng, việc hiểu về các class đó giúp project của bạn khoa học hơn, dễ dàng hơn trong việc quản lý, bảo trì và nâng cấp.

Hi vọng bài viết giúp bạn có cái nhìn tổng thể trước khi bắt đầu với một project automation.

 

Bài viết được lược dịch từ nguồn:

https://www.quora.com/How-do-I-explain-Java-Selenium-automation-project-in-interview

0

Các cách lấy locator của web element

Một việc quan trọng trong Selenium project là xác định được locator của các phần tử trên trang web, hay là xác định vị trí của các phần tử ấy trên trang web. Tất nhiên bằng mắt thường thì ta thừa biết là button này, button kia ở chỗ nào trên trang rồi, hay là trường này là trường gì, nhập những cái gì, check box này check hay chưa …. Tuy nhiên để làm sao code auto của mình có cũng biết được những điều ấy thì ta phải dựa vào cấu trúc và thành phần của trang web đó.

Mỗi phần tử trên trang sẽ có một locator tương ứng. Và locator của các phần tử cung cấp cho chúng ta cách để có thể truy cập tới các phần tử HTML trong trang web. Với Selenium ta có thể sử dụng các locator này để gửi yêu cầu thực thi các tương tác tới các text box, các đường dẫn (link) được tích hợp trên trang, checkbox, button hay các phần tử web khác.

Trong thực tế, đôi khi để xác định được vị trí của các phần tử trên giao diện web thì không phải lúc nào cũng dễ dàng, có khi lại lấy ra không đúng thông tin phần tử cần lấy, hoặc có khi là không thể lấy được ra nữa.

Vì vậy, một số cách dưới đây sẽ giúp bạn lấy locator của các phần tử hiệu quả hơn nhé.

Các cách này được sắp xếp theo thứ tự ưu tiên sử dụng từ cao nhất xuống, vì vậy trong khi làm, nếu gặp nhiều cách đều có thể lấy được locator thì hãy ưu tiên theo list dưới này nha!

1. Id – Lấy ra phần tử có thuộc tính @Id

Mỗi phần tử trên trang thông thường sẽ được gắn 1 id duy nhất. Và đây là cách được đánh giá là tốt nhất khi sử dụng để lấy ra locator của phần tử. Tuy nhiên là có một lưu ý, một số framework hỗ trợ dev sinh id tự động – có nghĩa là mỗi lần run thì phần tử đó lại sinh ra một id khác nhau, lúc này thì bạn không thể sử dụng id đó được. Phải tìm một cách khác để xác định được locator cần lấy, và theo kinh nghiệm của mình thì lúc này thì bạn nên chuyển sang cách lấy theo CSS class :D.

VD:

id.png

2. Name – Lấy ra phần tử đầu tiên tìm được có thuộc tính @Name

Gần giống như thuộc tính id, mỗi trường dữ liệu sẽ được gắn một tên duy nhất và thường thì tên này không bị thay đổi sau các lần nâng cấp hay sửa đổi. Đây là một trong những lựa chọn tốt nhất khi lấy locator cho các phần tử trong form login hoặc form mà có nhiều trường input tương tự nhau như khai báo hàng hóa hay là form register nào đó.

VD:

name

3. Link text – Lấy ra phần tử hiển thị dòng text và có link tương ứng

Sử dụng link text là cách tuyệt vời để bạn tìm ra các liên kết trong trang web của bạn – nó thường được hiển thị dưới dạng chữ bình thường như thế này.

Rất thích hợp cho việc test điều hướng trang.

VD:

linktext

4. Partial Link Text – Lấy ra phần tử hiển thị dòng text và có partial link tương ứng

Cách này thì tương tự như lấy link text thôi, Chỉ khác mỗi cái ở chỗ cách sử dụng và dùng hàm để tìm ra element tương tứng với nó thôi.

Cùng xem ví dụ dưới đây để hiểu hơn nhé:

<a href=http://www.google.com.vn&#8221;>Click here to download?</a>

WebElement item = driver.findElement(By.PartialLinkText(Click here to download?”));

5. Tag name – Lấy ra phần từ có HTML tag

Để hiểu về tag name, thì các bạn xem ví dụ dưới này nhé!

List<WebElement> linkElements = driver.findElements(By.tagName(“input”));

String[] linkTexts = new String[linkElements.size()];

6. CSS Class name – Để truy cập vào phần tử web

CSS class locator sử dụng một thuộc tính class đặc biệt để lấy ra phần tử đầu tiên xuất hiện trong trang web đó, cách này hiệu quả trong việc lấy ra những item có một style duy nhất nào đó.

VD: Tìm ra các phần tử có class name là button: 
WebElement element =driver.findElement(By.className(button));

7. CSS selector – Để truy cập vào các phần tử web

CSS selector không khác so với XPath, nhưng cách này được đánh giá là linh hoạt và mạnh mẽ hơn nhiều so với sử dụng Xpath. Khác với XPath, CSS selector không phụ thuộc vào cấu trúc DOM. Giúp bạn có thể thực hiện được một số tương tác mà khi sử dụng XPath thì bạn khó có thể làm được.

Bạn sẽ dễ dàng để tìm ra được locator duy nhất của phần tử bằng cách kết hợp với nhiều thuộc tính CSS khác. Tuy nhiên nó cũng đòi hỏi người dùng phải có hiểu biết sâu hơn về CSS/Javascript.

8. XPath – Truy cập vào các phần tử sử dụng XPath Expression

XPath được đánh giá là một kĩ thuật ‘pefect’ dùng để duyệt qua toàn bộ cấu trúc DOM của trang web. XPath locator khá mạnh và đáng tin cậy. Ta có thể xác định được vị trí của bất kỳ phần tử nào trên page bằng cách sử dụng Xpath. Tuy nhiên chỉ cần có một sự thay đổi nhỏ trong cấu trúc trang thì bạn sẽ phải cập nhật lại hết những thông tin liên quan bạn đã lấy trước đó.

Ta có thể phân loại XPath theo hai nhóm sau:

XPath tuyệt đối (Absolute XPath)

– Nó bắt đầu từ phần tử gốc cho đến vị trí của locator đích cần lấy.

Ví dụ:

HTML/head/body/table/tr/td

Bạn có thể dễ dàng lấy ra được XPath cho phần tử đó, tuy nhiên như đã nói ở trên, nếu cấu trúc trang bị thay đổi thì XPath này cũng phải thay đổi.

XPath tương đối (Relative XPath)

Sử dụng Relative XPath bạn sẽ dễ dàng quản lý hơn vì nó ngắn hơn và súc tích hơn. Có thể bị ảnh hưởng ít hơn khi gặp vấn đề về cấu trúc trang bị thay đổi. Để lấy được XPath tương đối thì bạn sẽ mất nhiều thời gian hơn để xác định và kiểm tra được các node cần lấy.

Ví dụ:

//table/tr/td

Sử dụng XPath để lấy ra locator của phần tử bạn có thể đảm bảo được là các phần tử đều có thể được tìm ra, tuy nhiên xét về hiệu năng thì cách này sẽ chậm hơn so với sử dụng CSS, ngoài ra nó còn phụ thuộc vào trình duyệt sử dụng (như IE và FF thì việc thực thi XPath là không giống nhau).

Tạm kết:

Với những gợi ý phía trên về các cách thường được sử dụng để lấy ra locator của các phần tử web, chúng ta sẽ không phải mất nhiều thời gian, công sức trong việc này nữa. Vì mục tiêu của chúng ta khi automation đó là automate và code, đừng để mất nhiều thời gian cho việc mà thực ra nó chỉ là một yếu tố bổ trợ mà thôi.

Và trên thực tế, ta cũng có nhiều tool khá là mạnh mẽ trong việc xác định locator của phần tử web, giúp ta lấy được locator nhanh hơn, chính xác hơn, và đầy đủ hơn. Chỉ cần hiểu về HTLM một chút là có thể dùng thành thạo được.

Đơn giản nhất mà có thể ai cũng từng nghe qua đó là 1 add-on trên trình duyệt Firefox: Firebug, FirePath – giúp bạn nhanh chóng lấy được Xpath của phần tử, bạn chỉ cần copy về dùng thôi.

0

Kỹ năng quan trọng cần có của một automation tester

automation-framework

Từ hồi mới bắt đầu đi làm, vị trí của mình là manual tester, ngày đấy cũng chỉ biết chút chút khái niệm về manual test với automation test. Nhưng cũng chẳng hiểu rõ nó như thế nào, chỉ ngộ nhận là automation test thì nó dùng tool thế thôi.

Hai trong những automation tools mà mình biết lúc đó là HP Quick test pro, và Selenium. Mà với cả hai tool ấy thì cũng chỉ biết đến mỗi nhóm tính năng record – play back thôi xong rồi cứ nghĩ là nó có đến vậy.

Thế rồi, sau gần hai năm làm manual, trăn trở nhiều về công việc hiện tại, và nghĩ rằng nếu 10 năm sau mà cũng làm như thế này thì sẽ ra sao? Nếu không thì sẽ dẫn đến đâu, mình sẽ làm gì? Đúng lúc ấy thì tình cờ nhờ có một anh chàng đẹp trai (klq nhưng mà anh đẹp trai này nay đã trở thành gấu của mình kaka) –  anh ấy đã gửi cho mình một link có thông tin về một lớp học Selenium basic. Từ ngày đấy đến giờ ấy thế mà cũng đã hơn một năm rồi.

Từ một manual tester chính thống, mình nghĩ đến việc sẽ làm quen thử với automation test, và đã bắt đầu với lớp học basic ấy.

do-it-automate-it

Ban đầu sau khi học một vài buổi làm quen ban đầu, mình đã nghĩ rằng, các kỹ năng của một automation tester cần phải có bao gồm:

  • Phải cao siêu về các Web element như XPATH và CSS
  • Phải biết và làm đươc JUNIT cho các script giống code unit test mà đội dev thường làm đó
  • Về các hệ quản trị cơ sở dữ liệu các câu lệnh truy vấn
  • Biết lập trình, các kỹ năng về lập trình
  • Sử dụng được một vài ngôn ngữ lập trình nào đó
  • Nắm được một vài automation framework
  • Hiểu biết về Page – object – model

testautomation

Nhưng trong cả tá những thứ đó, thì kỹ năng nào là quan trọng nhất?!

Bây giờ cũng không hẳn là đã có nhiều kinh nghiêm làm về automation nhưng mình vẫn nghĩ là bản thân vẫn cần phải có các kiến thức, kỹ năng trên, không cần quá cao siêu nhưng ít nhất phải nắm được những thứ cơ bản của từng cái, hiểu được bản chất của nó. Và theo mình, cái quan trong hơn cả chính là kỹ năng lập trình. Còn những cái khác sẽ là những điều kiện đủ để bổ trợ cho mình trong quá trình làm việc mà thôi.

Tại sao kỹ năng lập trình lại là điều quan trọng nhất?

  • Automation test là viết các script để run các scenario tương tác với ứng dụng. Ngoài việc để cho nó có thể chạy được, bạn còn phải làm để có thể bảo trì nâng cấp một cách dễ dàng nhất, thích ứng với sự thay đổi của những lần release, sao cho code của bạn phải sửa ít nhất.
  • Có kỹ năng lập trình tốt bạn có thể giải quyết vấn đề liên quan đến technical một cách tối ưu hơn, hiệu năng code tối ưu hơn.
  • Project automation của bạn cũng cần phải có tổ chức một cách khoa học, áp dụng các kỹ thuật giống như việc đội dev đã xây dựng lên sản phẩm đó. Ngoại trừ mục đích của hai người khác nhau: một bên xây dựng sản phẩm, một bên là kiểm tra sản phẩm hoạt động đúng yêu cầu hay chưa mà thôi.
  • Có kỹ năng lập trình tốt giúp bạn tiếp cận và ứng dụng các automation framework tốt hơn, hiệu quả hơn.
  • Với kỹ năng lập trình tốt bạn có thể tiếp thu các công nghệ mới một cách nhanh chóng, có thể xác định và đưa vào áp dụng một cách dễ dàng cho project mà không phải gặp quá nhiều khó khăn.
  • Có kỹ năng lập trình và tư duy lập trình tốt bạn sẽ không bị ảnh hưởng và quá phụ thuộc vào một ngôn ngữ lập trình nào đó. Tuy nhiên, thì mình cũng nên lựa chọn một ngôn ngữ lập trình và đầu tư thời gian để phát triển sâu hơn, chứ đừng tham mà học nhiều nhưng lại chẳng chuyên sâu về cái gì cả. Ngôn ngữ lập trình có thể thay đổi, nhưng tư duy nền tảng của nó thì cũng gần như tương đương nhau, nên cũng không cần quá lo lắng.

Kỹ năng lập trình chính là yếu tố cốt lõi để bạn có thể xây dựng và giải quyết các bài toán trong atuomation project một cách hiệu quả.

Java và Selenium là cặp đôi được sử dụng rất phổ biến hiện nay, rất nhiều các tài liệu, diễn đàn hay các cuốn sách hướng dẫn đang sử dụng.

Để luyện tập và phát triển kỹ năng lập trình, hãy bắt đầu từ những script đơn giản trong và nâng cao dần độ khó, lặp lại nhiều nhiều và nhiều lần. Hoặc thực hành với một project nho nhỏ, bạn sẽ gặp được nhiều vấn đề hơn, đòi hỏi bạn phải giải quyết chúng, làm nhiều rồi đến khi bạn sẽ tích lũy được nhiều kinh nghiệm giải quyết các vấn đề.

automated-test-1

Sẽ có những lúc bạn sẽ gặp phải những vấn đề rất rối rem, bạn chẳng biết làm thế nào, lúc đó phải thật kiên trì và bình tĩnh, đào bới google và tìm đến sự giúp đỡ của một anh code nào đó, kiểu gì cũng phải xong. Đến lúc làm được rồi, mặc dù chỉ nhỏ thôi nhưng chắc chắn bạn sẽ biết được một cảm giác vô cùng phiêu!!!

Vì bản thân mình, cũng đã từng trải qua cảm giác như vậy cũng khá nhiều lần rồi. Cho đến lúc xong, nhiều lần mình còn tự trách dễ như thế mà làm ko ra được, hay tại sao lúc đấy mình lại làm như vậy được nhỉ?

Từ những lần ấy, bản thân bạn sẽ cảm thấy như được tiếp thêm động lực để cố gắng hơn nữa, làm nhiều hơn nữa. Không chỉ để test mà còn để tạo ra những thứ giúp bạn giảm các công việc tay chân của mình đi nữa cơ.

Hi vọng rằng đây cũng sẽ là động lực để bản thân mình khi gặp khó khăn có thể mạnh mẽ vượt quaaa. Hay có bạn nào mà muốn từ manual nhảy qua có thể xác định được tư tưởng để rồi phấn đấu.

automate

Bài viết dựa theo quan điểm cá nhân và ngẫu hứng, nếu có gì góp ý các bạn có thể để lại comment cho mình ở phía dưới nhé!

0

Làm quen: Tóm tắt cơ bản về Selenium

Bắt đầu với chuỗi bài học liên quan đến Selenium, mình muốn ôn lại một chút về lý thuyết, định nghĩa và một số các ưu nhược điểm của Selenium. Mấy kiến thức này có thể có trong bài test vòng sơ tuyển của một số công ty muốn tuyển vị trí automation test (ahihi cái này là mình đoán thế nhé). Mà dù có hay không thì cũng đâu quan trọng, vì dù gì thì trước khi sử dụng cái gì đó thì mình cũng nên biết một ít về lai lịch của nó, coi như là làm quen bước đầu để dễ làm việc với nhau ấy mà. Giống như quảng cáo bao giờ chả có câu “đọc kỹ hướng dẫn sử dụng trước khi dùng” đó.

Không lan man mất thì giờ nữa, trong lĩnh vực phần mềm nói chung và riêng mảng test nói riêng, thì khi nhắc đến Selenium người ta thường nghĩ ngay đến nó như là một tool đi liền với automation. Vậy thì Selenium là cái chi? Bây giờ mình cùng điểm lại một vài nội dung chính và nổi bật của Selenium nào!!!

selenium-java8.png

Selenium là gì?

Selenium là một bộ công cụ kiểm thử tự động open source, dành cho các ứng dụng web, hỗ trợ hoạt động trên nhiều trình duyệt và nền tảng khác nhau như Windows, Mac, Linus… Với Selenium, bạn có thể viết các testscript bằng các ngôn ngữ lập trình khác nhau như Java, PHP, C#, Ruby hay Python hay thậm chí là Perl…

Selenium được sử dụng để automate các thao tác với trình duyệt, hay dễ hiểu hơn là nó giúp giả lập lại các tương tác trên trình duyệt như một người dùng thực sự. Ví dụ bạn có thể lập trình để tự động bật trình duyệt, open một link, input dữ liệu, hay get infor page, upload, download dữ liệu từ trên web page. Với selenium bạn có thể làm đc rất nhiều thứ. Hơn thế nữa, bạn có thể sử dụng, tùy biến để tận dụng tối đa sức mạnh của nó. Ngoài mục đích sử dụng trong kiểm thử, bạn có thể tự xây dựng một project để automate những công việc nhàm chán, lặp đi lặp lại của bạn.

Selenium bao gồm những gì?

Selenium là một khái niệm chung về một bộ phần mềm được sử dụng trong automation, mỗi loại trong đó đáp ứng một yêu cầu testing khác nhau. Về cơ bản thì Selenium có 4 thành phần:

  1. Selenium IDE: Selenium Integreted Development Environment (IDE), là một plug-in trên trình duyệt Fire-Fox, ta có thể sử dụng để record và play back lại các thao tác đó theo một quy trình hay một test case nào đó.
  2. Selenium RC: Selenium Remote Control (RC), Selenium server khởi chạy và tương tác với trình duyệt web.
  3. WebDriver: Selenium WebDriver gửi lệnh khởi chạy và tương tác trực tiếp tới các trình duyệt mà không cần thông qua một server như Selenium RC.
  4. Selenium Grid: Selenium Hub dùng để khởi chay nhiều các test thông qua các máy và các trình duyệt khác nhau tại cùng một thời điểm.

Năm 2008, Selenium team đã quyết định gộp Selenium RC và WebDriver để tạo ra Selenium 2 với nhiều tính năng mạnh mẽ hơn, mà hiện nay phần lớn các project Selenium đều sử dụng.

Một số tính năng nổi bật chung

  • Có thể kết hợp với nhiều ngôn ngữ lập trình: Java, .Net, Ruby, Python, Perl
  • Selenium giả lập thao tác người dùng trên web page và các web element.
  • Có thể verify và so sánh thông tin trên web page
  • Script đc base theo HTML, học dễ và ứng dụng cũng rất nhanh
  • Có thể tạo một bộ test bao gồm nhiều test case
  • Có thể run các test suite thông qua Selenium IDE hoặc Selenium command line
  • Selenium API hỗ trợ nhiều loại trình duyệt, do đó sẽ rất dễ dàng khi test các ứng dụng web với các trình duyệt khác nhau.

Selenium IDE

ide

Selenium Integrated Development Environment (IDE), là framework đơn giản nhất và dễ học nhất trong bộ Selenium. Nó là một plug-in chỉ dành cho trình duyệt FireFox – bạn chỉ có thể sử dụng Selenium IDE với trình duyệt FireFox mà thôi. Bạn có thể kết hợp Selenium IDE với các plug-in khác để tận dụng được nhiều tính năng hơn với IDE.

Tuy nhiên, vì nó đơn giản nên bạn cũng chỉ thực hiện được những case đơn giản mà thôi. Với những case phức tạp hơn, thì bạn phải sử dụng WebDriver.

Ưu điểm:

  1. Dễ dàng cài đặt và sử dụng
  2. Không yêu cầu người dùng phải có kỹ năng lập trình, chỉ cần bạn có hiểu biết một chút về HTML và DOM là đã có thể sử dụng được tool rồi.
  3. Có thể export các test đã tạo để sử dụng trong Webdriver hoặc Selenium RC
  4. Có cung cấp chức năng để bạn có thể report kết quả hoặc các hỗ trợ khi sử dụng
  5. Bạn có thể sử dụng tích hợp với các extension khác nữa.

Nhược điểm:

  1. Là 1 extension mà bạn chỉ có thể cài đặt trên trình duyệt Fire Fox
  2. Nó được thiết kể để tạo các test đơn giản hoặc prototype test
  3. Với IDE thì bạn không thể thực hiện được các tính toán, câu lệnh phức tạp, hay có điều kiện.
  4. Hiệu năng hoạt động thì chậm hơn nhiều so với Webdriver và Selenium RC

Selenium Webdriver

wd

Selenium được đánh giá là tốt hơn Selenium IDE và Selenium RC trên rất nhiều các khía cạnh. Selenium thực hiện automate tương tác với trình duyệt với hướng tiếp cận hiện đại và ổn định hơn. Các tương tác với trình duyệt được gửi trực tiếp từ Selenium driver mà không thông qua Javascript như selenium RC.

Selenium Webdriver hỗ trợ nhiều các ngôn ngữ lập trình như: Java, C#, PHP, Python, Perl và Ruby.

Ưu điểm:

  1. Communicate trực tiếp với trình duyệt
  2. Tương tác với trình duyệt giống như thao tác của một người dùng thật
  3. Tốc độ nhanh hơn so với Selenium IDE
  4. Thao tác dễ dàng hơn với các phép tính toán logic hay các điều kiện phức tạp

Nhược điểm:

  1. Cài đặt phức tạp hơn so với Selenium IDE
  2. Đòi hỏi người dùng phải có kĩ năng lập trình

Selenium Grid

Về lý thuyết ta có thể hiểu đây là ta xây dựng một Selenium hub dùng để khởi chay nhiều các test thông qua các máy và các trình duyệt khác nhau tại cùng một thời điểm. Có thể hiểu đơn giản thông qua hình dưới đây:

selenium-grid

Trên đây là một số giới thiệu cơ bản nhất về Selenium IDE và Selenium webdriver ngoài ra còn Selenium Grid, mà cái này mình cũng chưa tìm hiểu nhiều, cho nên sẽ nói về sau khi đã tìm hiểu nhiều hơn về nó. Tùy theo điều kiện thực tế của dự án và đặc thù test mình có thể lựa chọn các công cụ phù hợp. Có thể sử dụng độc lập hay kết hợp các tool với nhau tùy mục đích để đạt được hiệu quả công việc cao nhất.

 

Nội dung bài viết và hình ảnh được tổng hợp từ nhiều nguồn khác nhau trên internet.

Tham khảo:

http://www.seleniumhq.org

http://seleniummaster.com/sitecontent/index.php/introduction-to-selenium-automation/36-what-is-selenium-test

http://www.guru99.com/introduction-to-selenium.html

0

Automation testing: Yêu lại từ đầu

Bạn là một tester, mỗi lần có một bản build mới, ngày qua ngày bạn vẫn cặm cụi test đi test lại những case mà hết round này đến round khác mà bạn đã check mỏi cả tay. Mặc dù bản build lần này chỉ là fix một vài lỗi, nhưng mà bạn cũng không thể tự tin chắc chắn là cái việc fix lỗi này của đám dev nó không làm ảnh hưởng đến mấy chức năng đã chạy ngon lành ở round trước, do đó mà bạn cứ phải tay – mắt check lại những case đó. Rất tốn thời gian.

regrestion_test

Hoặc là khi sản phẩm của mình cũng đến tầm giai đoạn mà release đến nơi rồi, bỗng dưng nhận được yêu cầu của khách hàng là thêm một ít chỗ này, hay bỏ một ít chỗ kia. Thế rồi khi xong công đoạn của Dev thì việc của bạn lại là test lại chỗ thêm,chỗ bớt đó có ảnh hưởng đến những cái đã ngon lành trước đó hay không, và rồi bạn lại cặm cụi test như những người nông dân chăm chỉ.

Test-Retest

Không làm thế thì làm thế nào được?

Tất nhiên là có cách rồi, nhiều cách là đằng khác. Người ta à thực ra là người tây họ cũng gặp phải vấn đề như bạn thôi, thế rồi họ nghĩ ra cái cách mà đỡ tốn công sức ‘manual’ cho họ, đó là tạo ra một công cụ tự động làm cho họ công việc ấy. Nhưng mà lưu ý rằng, automate không thay thế hoàn toàn 100% manual được, nhưng nó sẽ giúp tiết kiệm được rất rất nhiều chi phí cho việc retest và regression test.

Có rất nhiều tool hỗ trợ automate testing, được phần đông cộng đồng tester biết đến như là Selenium, HP QTP/UFT, TestComplete, IBM Rational Functional Tester, Ranorex, Jmetter, SoapUI, Appium, … rất nhiều, chỉ với từ khóa đơn giản là ‘automation testing tools’ thì google sẽ tìm ra cho bạn cả lô xích xông các link, bạn tha hồ tìm hiểu, vấn đề của bạn chỉ là làm thế nào để dùng được nó thôi.

Tuy nhiên, các tool đều là các tool thương mại cả, và vì là tool thương mại nên chi phí bạn bỏ ra để sử dụng tool đó khá là đắt đỏ, nhưng đổi lại thì bạn sẽ  được sử dụng một công cụ rất mạnh mẽ, thêm nữa là bạn sẽ luôn nhận được sự hỗ trợ nhiệt tình từ các supporter của nhà cung cấp.

Ngoài ra, nếu vấn đề ở mặt chi phí, thì yên tâm, hiện nay cũng có nhiều tool free để dùng, tính năng vẫn nhiều, cũng mạnh mẽ, cũng có các cộng đồng hỗ trợ rất đông đảo trên toàn cầu. Tiêu biểu như:

1. Selenium

Công cụ open source + free, ngoài việc bạn có thể lấy về để sử dụng thoải mái, thì bạn còn có thể đóng góp xây dựng để nó mạnh mẽ hơn nữa thông qua Official SeleniumHQ Github page . Selenium – công cụ hỗ trợ functional automation testing cho các ứng dụng web, bạn có thể execute script trên nhiều trình duyệt và các hệ điều hành khác nhau, Selenium tương thích với nhiều ngôn ngữ lập trình và các automation testing framework.

26594-QA-2-selenium-webdriver

Với selenium, bạn có thể tạo ra các script để thực hiện kiểm thử tự động trên các trình duyệt, và trên các môi trường test khác nhau.

Cùng với đó, bạn cũng có thể tạo ra các sript với selenium, giải pháp hỗ trợ tuyệt vời cho bạn trong việc tái hiện các bug, thực hiện kiểm thử hồi quy (regression testing), và exploratory testing.

2. Jmetter

apachejmeter_0

Jmetter là ứng dụng desktop được sử dụng nhiều trong kiểm thử hiệu năng ứng dụng web, đây cũng là một tool free cùng với sự hỗ trợ đông đảo từ cộng đồng người sử dụng. Về mặt giao diện người dùng, theo ý kiến chủ quan của mình thì nó thực sự có vẻ không được đẹp lắm nhưng lại khá là dễ sử dụng. Jmetter hỗ trợ nhiều loại ứng dụng, server và protocol như Web, SOAP, FTP, TCP, LDAP, SOAP, MOM, Mail Protocols, shell scripts, java objects, và cả database.

3. Appium

Mobile-App-Testing-1

Appium là một test automation framework, được sử dụng nhiều trong kiểm thử ứng dụng mobile. Tất nhiên là trong list này thì nó cũng là một tool free.

Appium hỗ trợ automation cho các ứng dụng native, hybrid và mobile web – những ứng dụng được build trên cả iOS và Android. Appium được đánh giá công cụ khá dễ dàng cài đặt cũng như sử dụng, và được cho là một trong những tool tốt nhất cho mobile automation testing.

4. SoapUI

SoapUI_0

Cuối cùng thì có SoapUI, đây cũng là một tool open source, được sử dụng trong API testing cho cả SOAP và REST APIs. SoapUI cung cấp OAP Web Services functional testing, REST API functional testing, WSDL coverage, message assertion testing và test refactoring.

Chúng ta đều biết rằng tool hỗ trợ thì rất nhiều, tuy nhiên việc quan trọng ở đây là làm sao lựa chọn được cái nào đó phù hợp với project, có thể áp dụng và mang lại giá trị nhất định cho project đó.

Bản thân mình đã có thời gian được – tự học về mấy tool trên này, và mình cũng áp dụng vào project của mình rồi, chỉ có điều chưa official, thế rồi cũng để ngỏ vì mình chuyển qua công ty khác. Tuy vậy thì mình vẫn muốn lại dành thời gian để tìm hiểu sâu hơn về mảng này. Viết được auto cho website book vé online của trang https://www.airasia.com hay là trang mua hàng nào đó, kiểu kiểu như vậy.

Vì thế tiếp theo bài này sẽ là những kiến thức basic để có thể bắt đầu với automation testing với Selenium, Jmetter, SoapUI, và Appium. Đầu tiên thì là để tổng hợp lại kiến thức đã học được, sau là để ôn lại những ngày tháng mình đã bắt đầu làm quen với automation. Hi vọng, những bài học mà mình đã đi qua, có thể là những bài học sau này mình lại có thể cần đến, hoặc có thể giúp ích được cho ai đó đang tự bắt đầu như mình.

0

Sống hoài với những dự định chưa xong…

hujan-hujanan-660x330

Ngày mưa gió.

Đã hơn 10 rưỡi đêm rồi mà còn vương vấn cái máy tính vì bài tập làm chưa xong.

Nghĩ ngợi một hồi, thôi để đó viết mấy dòng cho khuây khỏa, mà chẳng biết có khuây được không hay lại thêm nặng lòng…

Không sao, có lẽ là nó sẽ nhẹ nhàng đi chút.

Đã được nghe ai đó nói rằng “Đừng cố gắng tiết kiệm chi tiêu cho vừa số tiền mình có, mà hãy cố gắng kiếm tiền để đáp ứng chi tiêu của mình”. Nghe xong câu này thì đúng là thấy mình trong đó, bấy lâu nay mình luôn cố gắng cân đối chi tiêu để nó không vượt quá cái khoảng lương của mình hàng tháng. Ờ nhưng biết làm sao xoay sở để kiếm thêm tiền trong thời đại giờ được nhỉ?

Suy nghĩ bao lâu, bao thứ, cuối cùng thì mình nghĩ, có lẽ con đường phù hợp với mình nhất chính là bây giờ lao đầu vào học: học chuyên môn, học ngoại ngữ, học rồi nắm bắt xu thế mới… tóm lại là chỉ có học thôi. Nhưng mà là tự học.

May mắn của mình là mình có một người ‘sư phụ’ luôn luôn sẵn sàng chỉ bảo mình. Vấn đề chỉ ở mình thôi mà tại sao mình cứ càng cố gắng lại càng cảm thấy mục tiêu rời xa mình. Chẳng như người ta vẫn nói, đi một bước là tiến gần đến mục tiêu một bước.

Mình cảm thấy mình thật vô dụng, vô cùng vô dụng, có những thứ tưởng  như là quá đỗi đơn giản mà khi mình bắt tay vào cảm giác nó lại rối ren đến thế.

Mình đã sai. Mình đã cố gắng chưa đủ. Mà sự thực là mình cố gắng chỉ được nửa vời thôi.

Làm sao đây, mình cảm thấy mất phương hướng, niềm tin đặt vào bản thân không thể đầy.

Mình đã và đang mong muốn rất nhiều thứ, nhưng bản thân mình chưa dành thời gian cho những mong muốn ấy, biến mong muốn ấy thành cái hiện hữu, những thói quen cần rèn luyện.

Một lời thú tội, cho ngày mai cố gắng, nỗ lực hơn nữa.

Để ngày sau nhìn lại, bản thân mình đã cố gắng thật nhiều như thế nào.

~ Mình đang học tiếng trung: mục tiêu đến cuối năm là mình sẽ hoàn thành khóa trong app của mình.

~ Mình đang học Python: Mục tiêu của mình là sẽ viết đc một cái app cho riêng mình, cái gì cũng được, có thể là một bài tập nào đó trong cuốn online mình đang đọc. Hoàn thành bài tập về ocr cho test đa ngôn ngữ.

~ Mình đang học cơ bản về Webservice: Mục tiêu của mình là sẽ tổng hợp lại kiến thức đó trên blog này.

~ Mình đang học Jmetter: Mình cũng sẽ tổng hợp các thứ mình học được trên đây.

~ Mình đang ôn lại Selenium: Cùng với việc tổng hợp các kiến thức ôn luyện trên này, mình cũng sẽ tranh thủ làm lại một project cho một trang web nào đó, có thể là trang đặt vé máy bay của AirAsia.

~ Mình dự định cũng sẽ ôn lại tiếng anh để thi TOEIC vào dịp cuối năm nay.

Thế đó, cuộc sống hàng ngày của mình là một chuỗi những dự định, mình mới chỉ đang làm được hai trong số những việc đã liệt kê ở trên kia thôi.

Mình không muốn cuộc đời mình sẽ thất bại. Không muốn cuộc đời mình thua kém chỉ vì sự lười nhác và thiếu hiểu biết của mình.

Phải chăng là hơi tham lam, nên chẳng thể làm được việc gì thành. Mình phải cân nhắc.

302626_9567_10

Tự nhủ bản thân vậy.

Đứng dậy và cố gắng nào.

Tương lai vẫn đang ở phía trước, trái ngọt hay đắng đều là thành quả lao động của ngày hôm nay.

Đằng nào cũng phải đi, vậy nên thay vì cùng với một thái độ tiêu cực và sự lười biếng, ta sẽ thay bằng sự vui vẻ, lạc quan, sự tự tin và tinh thần minh mẫn nào, thêm cả sự chăm chỉ, vượt qua những cám dỗ tầm thường nữa! :))