Khi sử dụng Behat, với các ứng dụng phức tạp cần cấu hình cho bộ tính năng, Behat sử dụng cấu hình YAML để cấu hình file và profile. Tất cả cấu hình đƣợc đi ̣nh bên trong m ột tập tin cấu hình có định dạng .yml, mặc định Behat sẽ đọc tập tin behat.yml hoặc config/behat.yml để tải các cấu hình cho ứng dụng sƣ̉ dụng Behat.
Một tập tin cấu hình chứa các cấu hình về các thành phần mở rộng, đi ̣nh dạng kết quả trả về , đƣờng dẫn trang web cần kiểm thử, … .Nhìn chung tập tin cấu hình có định dạng nhƣ Hình 3-5. # behat.yml default: paths: features: 'features' bootstrap: 'features/bootstrap' context: parameters: default_browser: 'goutte' ansi: ~
test_param:'abc' test_pass: 'xyz' extensions: Behat\MinkExtension\Extension: goutte: guzzle_parameters: ssl.certificate_authority: system curl.options: 64: false # CURLOPT_SSL_VERIFYPEER 172: false # CURLOPT_CERTINFO selenium2: ~ Test\TestExtension\Extension: imports: - behat.local.yml […]
Hình 3-5 Cấu hình behat.yml
Trong tâ ̣p tin cấu hình behat .yml, có nhiều khối cấu hình khách nhau . Các cấu hình cơ bản nhƣ sau:
Paths: Khối cấu hình đầu tiên là paths, các tham số của khối cấu hình này sẽ chỉ ra đi ̣a chỉ thƣ mu ̣c chƣ́a các tính năng features và các tâ ̣p tin bootstrap để Behat làm việc. # behat.yml default: paths: features: features bootstrap: %behat.paths.features%/bootstrap
Tham số features: chỉ ra đƣờng dẫn lƣu trƣ̃ các đ ịnh nghĩa tính năng *.feature, Behat tƣ̣ đô ̣ng đ ọc tất cả các tập tin có phần mở rộng .feature ở trong thƣ mục này để kiểm thử hệ thống.
Tham số bootstrap xác định thƣ mục Behat sẽ tự động tải các tập tin có phần mở rộng .php
Filters: Khối cấu hình filters xác định tính năng lọc qua các định danh hoặc tag để thực hiện các tính năng. Khi gă ̣p khối cấu hình này, Behat sẽ chỉ đo ̣c và thực hiện những tính năng mà các giá trị các tham số của khối này giới hạn.
# behat.yml default: filters: tags: "@wip"
Context: Khối này đƣợc sử dụng để thiết lập một lớp ngữ cảnh mặc định hoặc khởi tạo một ngữ cảnh từ behat.yml.
# behat.yml default: context: class: Your\Custom\Context parameters: base_url: http://test.mink.loc
Thuộc tính class xác định tên lớp ngƣ̃ cảnh cần s ử dụng, lớp này có thể đƣợc truy cập bởi Behat và cài đặt Behat\Behat\Context\ContextInterface.
Formatter: Là khối cấu hình định dạng hiển thi ̣ các k ết quả trả ra của Behat. # behat.yml default: formatter: name: pretty parameters: decorated: true verbose: false time: true language: en output_path: null multiline_arguments: true #...
Thuộc tính name là tên của định dạng kết quả trả về khi thực hiện các tính năng.
Profiles: Khối profiles thiết đặt các cấu hình khác nhau để thực hiện tập tính năng . Chẳng ha ̣n mu ốn đƣa ra các kết quả đƣợc hiển thị theo các đi ̣nh dạng khác nhau khi thực hiện các tính năng, thì ta có thể sử dụng hai profile với các tham số tƣơng tự nhau, khác nhau về khối formatter. Ví dụ:
# behat.yml default: context: class: Your\Custom\Context wip: filters: tags: "@wip" formatter: name: progress ci: formatter: name: junit parameters:
output_path: /var/tmp/junit
Trong ví dụ này, ngoài profile mặc định có thêm hai profile là wip và ci. Cả ba profile đều dùng lớp ngữ cảnh Your/Custom/Context, nhƣng profile wip sẽ chỉ thực hiện các kịnh bản chứa tag @wip và hiển thị kết quả thực hiện đƣợc theo định dạng progress, còn ci sẽ thực hiện tất cả các tính năng và đƣa ra kết quả theo định dạng junit vào thƣ mục /var/tmp/junit.
Để thực hiện các profile mở rộng này ta dùng tham số --profile
behat --profile wip
Extensions: Khối này cho phép kh ởi động các thành phần mở rộng cho bộ kiểm thử hoặc cho một profile cụ thể của một bộ cụ thể.
# behat.yml default: extensions: Behat\Symfony2Extension\Extension: ~ mink: extensions: mink-extension.phar: base_url: http://domain.org api: extensions: Behat\WebApiExtension\Extension: base_url: http://api.domain.org
Ví dụ trên sử dụng hai phần mở rộng khác nhau phụ thuộc vào từng profile. Với Mink ta gọi MinkExtension và API sẽ có WebApiExtension, nhƣng cả hai đều sử dụng thành phần mở rộng đƣợc xác định ở default. Khối Extensitons nhằm mục đích giúp chúng ta tích hợp Behat với các công cụ hoặc nền tảng khác.
Imports: Khối Import cho phép đă ̣t các cấu hình chia sẻ t ập tính năng và các bộ kiểm thử giữa các hệ thống khác nhau.
# behat.yml imports:
- some_installed_pear_package_or_lib/behat.yml - /full/path/to/custom_behat_config.yml
Tất cả các tập tin từ khối imports sẽ đƣợc tải bởi Behat và trộn chung vào tập tin behat.yml.
Với những ứng dụng web phức tạp, việc cấu hình hệ thống để làm việc với Behat là rất quan trọng, chúng giúp đội phát triển nắm đƣợc cách hệ thống làm việc và cách tổ chức hệ thống. Cấu hình behat.yml chứa các cấu hình khác nhau, tuy nhiên tùy vào mục đích sử dụng ngƣời lập trình sẽ đặt cấu hình cho những khối cần thiết, còn các khối không thiết lập Behat sẽ tự gọi các cấu hình mặc định để thực thi.
CHƢƠNG 4. ÁP DỤNG PHÁT TRIỂN PHẦN MỀM HƢỚNG HÀNH VI VÀ CÔNG CỤ BEHAT
Nhƣ đã mô tả ở các phần trên , phát triển phần mềm hƣớng hành vi là kỹ thuâ ̣t phát triển phần mềm dƣ̣a vào viê ̣c mô tả hành v i của ƣ́ng du ̣ng , mục đích của nó nhằm tạo ra một hệ thống đáp ứng mong muốn của khách hàng . Các hệ thống sƣ̉ du ̣ng kỹ thuâ ̣t phát triển phần mềm hƣớng hành vi thƣờng đi kèm với công cu ̣ hỗ trợ nhằm tƣ̣ đô ̣ng hóa viê ̣c kiểm thƣ̉ chấp nhâ ̣n hê ̣ thống. Trong phần này, tác giả xây dựng một vài chức năng nhỏ , minh ho ̣a cho viê ̣c áp du ̣ng kỹ thuâ ̣t phát triển phần mềm hƣớng hành vi và công cụ Behat để phát triển ứng dụng Web.
Ứng dụng xây dựng một trang web bán hàng trƣ̣c tuyến. Hệ thống có các chức năng cơ bản nhƣ sau:
Quản lý thành viên: đăng ký, đăng nhập, yêu cầu mật khẩu.
Hiển thị sản phẩm theo danh sách hoặc hiển thị theo các tiêu chí lọc, tìm kiếm.
Cho phép các thành viên của hệ thống mua hàng và thanh toán.
Cho phép ngƣời quản tri ̣ quản lý sản phẩm , quản lý ngƣời dùng , quản lý hóa đơn, …
Giả sử để phát triển hệ thống ta chọn phƣơng pháp lặp chẳng hạn nhƣ quy trình Scrum . Trong mỗi vòng lă ̣p sẽ áp du ̣ng kỹ thuâ ̣t phát triển phần mềm hƣớng hành vi và công cu ̣ Behat . Trong phần này , tác giả chỉ chú trọng cách thƣ́c áp du ̣ng BDD và Behat để xây dƣ̣ng và kiểm thƣ̉ tính năng.