+4

Giới thiệu tổng quan về codeception

1. Codeception là gì?

Codeception  là 1 test tool được bắt đầu phát triển từ tháng 11 năm 2011, nên có thể nói nó còn khá mới đối với nhiều tester. Codeception dùng để viết test code, có thể xử lý được các công đoạn của test từ unit test, functions test, acception test, API test, mock test. Trong lõi nó được tích hợp PHPUnit, Selenium, nên những gì sử dụng được trong PHPUnit, Selenium thì đều có thể sử dụng được trong Codeception.

2. Các tính năng của Codeception

  • Selenium WebDriver integration
  • Elements matched by name, CSS, XPath
  • Symfony2, Laravel4, Yii, Phalcon, Zend Framework integration
  • PageObjects and StepObjects included
  • BDD-style readable tests
  • Powered by PHPUnit
  • API testing: REST,SOAP,XML-RPC
  • Facebook API testing
  • Data Cleanup
  • HTML, XML, TAP, JSON reports
  • CodeCoverage and Remote CodeCoverage
  • Parallel Execution

3. Ưu điểm của codeception

  • Dễ viết: viết test code giống như việc viết test case cho dự án.
  • Dễ đọc: Chỉ cần đọc chính đoạn test code đó có thể hiểu là muốn test cái gì. Cho nên khi thay đổi spec của dự án thì có thể thay đổi được đoạn test code này một cách đơn giản.
  • Dễ sử dụng: Đóng gói thành package, chỉ cần 1 câu lệnh có thể install được. Các gói library khác tự động được install nên không cần phải xử lý gì thêm nữa cả.
  • Đơn giản: Functional Test thì nhúng vào từng framework không cần phải thiết lập web site để test.
  • Dễ debug: khi test failed còn chụp cả screen shot.

4. Ví dụ đơn giản

Để thấy được ưu điểm của codeception chúng ta hãy xem một ví dụ đơn giản về chức năng Login với yêu cầu như sau:

  • Nhập đúng username & password, sau đó click vào Login thì sẽ login được.
  • Nhập không đúng username & password, sau đó click Login thì sẽ không login được, và sẽ nhìn thấy message lỗi: "Incorrect username or password." Chúng ta sẽ test yêu cầu trên với Chrome.

Bước 1: Thiết định Codeception(Để có thể sử dụng Chrome)

File thiết định là: tests/acceptance.suite.yml


class_name: AcceptanceTester
modules:
    enabled:
           - WebDriver
           - AcceptanceHelper
    config:
        WebDriver:
            url: 'YOU PAGE'
            browser: chrome

Bước 2: Dùng câu lệnh dưới để gen file test ra

./vendor/bin/codecept generate:cept functional Login
./vendor/bin/codecept generate:cept functional LoginFail

Bước 3: Tạo test code

Login: tests/acceptance/LoginCept.php

$I = new AcceptanceTester($scenario);
$I->wantTo('Correct Login');
$I->amOnPage('/login');
$I->see('Login');
$I->fillField('LoginForm[username]', 'admin');
$I->fillField('LoginForm[password]', 'admin');
$I->click('Login');
$I->wait(3);
$I->see('Logout(admin)');
$I->seeInCurrentUrl('management');

LoginFail: ・tests/acceptance/LoginFailCept.php
$I = new AcceptanceTester($scenario);
$I->wantTo('Fail Login');
$I->amOnPage('/login');
$I->see('Login');
$I->fillField('LoginForm[username]', 'admin');
$I->fillField('LoginForm[password]', 'admin1');
$I->click('Login');
$I->wait(3);
$I->see('Incorrect username or password.');
$I->seeInCurrentUrl('login');

Qua cách sử dụng method name bạn có thấy ngôn ngữ sử dụng giống như bạn đang viết tesst case không? Nếu bạn sử dụng IDE thì việc tìm các method name cũng rất dễ dàng.

Selection_017.png

Bước 4: chạy test code

./vendor/bin/codecept run acceptance --debug
Codeception PHP Testing Framework v2.0.4
Powered by PHPUnit 4.2.0 by Sebastian Bergmann.
 
Acceptance Tests (2) ----------------------------------------------------------------------------
Modules: WebDriver, AcceptanceHelper
-------------------------------------------------------------------------------------------------
Trying to Correct Login (LoginCept)                                                        
Scenario:
* I am on page "/login"
* I see "Login"
* I fill field "LoginForm[username]","admin"
* I fill field "LoginForm[password]","admin"
* I click "Login"
* I wait 3
* I see "Logout(admin)"
* I see in current url "management"
 PASSED
 
Trying to Fail Login (LoginFailCept)                                                       
Scenario:
* I am on page "/login"
* I see "Login"
* I fill field "LoginForm[username]","admin"
* I fill field "LoginForm[password]","admin1"
* I click "Login"
* I wait 3
* I see "Incorrect username or password."
* I see in current url "login"
 PASSED
 
-------------------------------------------------------------------------------------------------
 
 
Time: 10.85 seconds, Memory: 10.00Mb
 
OK (2 tests, 6 assertions)

Vậy là xong, bạn chỉ việc run test code và nó sẽ show ra kết qủa cho bạn là PASSED or FAILED.

Bước 5: từ test code gen ra file test case như sau

・tests/_data/scenarios/acceptance/Login.txt

I WANT TO CORRECT LOGIN

I am on page '/login'

I see 'Login'

I fill field 'LoginForm[username]'," 'admin'

I fill field 'LoginForm[password]'," 'admin'

I click 'Login'

I wait "3"

I see 'Logout(admin)'

I see in current url 'management'

tests/_data/scenarios/acceptance/LoginFail.txt

I WANT TO FAIL LOGIN   I am on page '/login'

I see 'Login'

I fill field 'LoginForm[username]'," 'admin'

I fill field 'LoginForm[password]'," 'admin1'

I click 'Login'

I wait "3"

I see 'Incorrect username or password.'

I see in current url 'login'

5. Kết luận

Bên trên chỉ là 1 ví dụ đơn giản để các bạn thấy rằng việc viết test code trong codeception rất dễ dàng giống như bạn viết test case vậy. Thay vì thời gian dùng để test đi test lại nhiều lần thì các bạn dành thời gian viết test code sau đó mỗi lần cần test lại chỉ việc run test code là xong. Các phần sau tôi sẽ giới thiệu kỹ hơn về việc sử dụng code ception trong unit test, functions test, acception test. Cảm ơn các bạn đã quan tâm.

Nguồn: http://codeception.com/


All Rights Reserved

Viblo
Let's register a Viblo Account to get more interesting posts.