Helpex - Trao đổi & giúp đỡ Đăng nhập

Hướng dẫn sử dụng Selenium Python: Bắt đầu với BDD trong cách cư xử

Khi công nghệ ngày càng phức tạp, số người thực sự hiểu về nó sẽ giảm đi. Với tự động hóa thử nghiệm Selenium, câu chuyện không quá khác biệt, các bên liên quan chính trong một dự án, với nền tảng phi kỹ thuật nhưng có hiểu biết sâu sắc hơn về nhu cầu của khách hàng và các trường hợp sử dụng, có thể gặp khó khăn khi đóng góp vào quy trình.

Sẽ không tuyệt vời sao, nếu người thử nghiệm, nhà phát triển, người quản lý sản phẩm, người quản lý kinh doanh và các bên liên quan khác trong một dự án có thể ngồi dưới một mái nhà để khám phá các trường hợp thử nghiệm mới, câu chuyện người dùng và lỗi để đảm bảo chất lượng sản phẩm tuyệt vời?

Chà, điều này không phải là quá xa vời! Với Python Behave , một khung BDD (Phát triển theo hướng hành vi), được viết bằng ngôn ngữ đơn giản, bạn có thể giúp các bên liên quan dễ dàng hiểu logic trong các tập lệnh thử nghiệm.

Trong hướng dẫn Python Selenium này, tôi sẽ cung cấp cho bạn cái nhìn chi tiết về việc thực hiện tự động hóa thử nghiệm Selenium với Python Behave, một khung tự động hóa thử nghiệm theo hướng hành vi.

Dưới đây là các chủ đề phụ được đề cập như một phần của hướng dẫn Selenium Python này :

BDD trong Python Behave là gì?

Phát triển theo hướng hành vi (BDD) là một phần mở rộng của TDD (Phát triển theo hướng kiểm tra) được sử dụng để kiểm tra trình duyệt tự động. Theo BDD, việc triển khai chức năng diễn ra ở giai đoạn sau vì các thử nghiệm nên được tạo trước. Các cuộc thảo luận và trò chuyện sâu sắc tạo thành nền tảng của BDD khi tất cả các bên liên quan (kỹ thuật và phi kỹ thuật) làm việc hướng tới việc tạo ra các trường hợp tự động hóa thử nghiệm Selenium hiệu quả phù hợp với các yêu cầu tính năng.

Là một nhà phát triển hoặc người thử nghiệm, bạn có thể nghi ngờ về các tình huống khi bạn cần chọn BDD thay vì TDD. TDD là lý tưởng khi phải kiểm tra một đơn vị duy nhất và bạn không muốn thực hiện kiểm tra hồi quy sớm hơn. Sự phức tạp nhân lên và việc triển khai có thể không thành công nếu các mô-đun khác nhau được tích hợp. Đây là nơi BDD có thể được sử dụng vì nó phù hợp nhất để kiểm tra tích hợp hoặc kiểm tra hành vi.

Phần tốt nhất về các bài kiểm tra hành vi là các bài kiểm tra bắt nguồn từ các tính năng và đặc điểm kinh doanh, không giống như các phương pháp kiểm tra khác trong đó các thông số kỹ thuật tạo thành cơ sở của mã kiểm tra. BDD đứng trên trụ cột của giao tiếp / trò chuyện hiệu quả và mọi thứ ngoài điều đó là tùy chọn.

BDD cũng được coi là một biến thể khác của ATDD (Phát triển theo hướng kiểm tra chấp nhận); sự khác biệt cơ bản là trong BDD, trọng tâm chính là hành vi hơn là các bài kiểm tra.

Các tình huống thử nghiệm trong BDD

Ưu điểm chính của việc sử dụng BDD là ngôn ngữ được sử dụng để viết các kịch bản thử nghiệm có bản chất đơn giản. Khi bạn đã hiểu sâu về việc tạo các kịch bản tự động hóa kiểm tra Selenium, bạn có thể dễ dàng hiểu kiểm tra BDD được viết với một số khung kiểm tra BDD khác như SpecFlow, Cucumber, v.v.

Trước khi viết kịch bản tự động hóa thử nghiệm Selenium, trước tiên các nhà phát triển phải đưa ra các câu chuyện của người dùng. Một câu chuyện người dùng tốt sẽ rất quan trọng trong việc ghi lại tính năng và thực hiện các bài kiểm tra chấp nhận.

Các tình huống trong BDD cho biết một tính năng cụ thể sẽ hoạt động như thế nào tùy thuộc vào các tham số đầu vào được cung cấp cho thử nghiệm. Bất kể khung kiểm tra BDD đang được sử dụng, định dạng tổng thể của tệp tính năng vẫn được giữ nguyên.

Để tạo kịch bản, Gherkin, một ngôn ngữ dành riêng cho miền, được sử dụng để triển khai các kịch bản tự động hóa thử nghiệm Selenium. Không giống như các phương pháp thử nghiệm khác dựa trên các thông số kỹ thuật, các kịch bản trong BDD dựa trên các yêu cầu kinh doanh và tính năng vì chúng có thể được hiểu rõ bởi giới kỹ thuật cũng như những người không chuyên về kỹ thuật. BDD không bị giới hạn trong Python Behave nhưng cũng được sử dụng trong các khuôn khổ khác như Cucumber để thử nghiệm Selenium .

Ưu điểm của BDD

Có một số lợi ích khi sử dụng BDD; một số trong số những cái chính được liệt kê dưới đây:

  • BDD đảm bảo rằng tất cả các bên liên quan cần thiết của dự án đều ở trên cùng một trang và cùng làm việc hướng tới việc làm cho sản phẩm tốt hơn thông qua thử nghiệm.

  • Vì các bài kiểm tra được viết bằng Gherkin, tức là một ngôn ngữ đơn giản, mọi thành viên trong nhóm đều có thể tham gia vào việc tạo bài kiểm tra, như các kịch bản tự động hóa kiểm tra Selenium được viết bằng ngôn ngữ đơn giản trong Gherkin. Tìm hiểu thêm về  phát triển theo định hướng kinh doanh với Gherkin .

  • Các bài kiểm tra BDD có thể tái sử dụng nhiều hơn và mang tính mô-đun khi so sánh với các bài kiểm tra TDD vì những thay đổi trong nghiệp vụ hoặc đặc điểm kỹ thuật sẽ dẫn đến những thay đổi tối thiểu trong các tính năng và tình huống BDD tương ứng.

  • Vì tập trung vào đặc điểm kinh doanh và tính năng, các bài kiểm tra BDD có thời hạn sử dụng được cải thiện so với TDD

Kịch bản BDD và Tệp tính năng trong Gherkin

Các bài kiểm tra trong BDD dựa trên các nguyên tắc 'Cho, Khi nào, Khi đó'. Cú pháp đơn giản của Gherkin như sau:

Scenario: Title/Short Description
    Given [A Precondition]
    When [Some Event]
    Then [Some Outcome]


Giả sử, bạn muốn tìm kiếm LambdaTest trên công cụ tìm kiếm DuckDuckGo, kịch bản thử nghiệm sẽ là 'Thực hiện tìm kiếm LambdaTest' trên DuckDuckGo và câu chuyện của người dùng sẽ bao gồm việc sử dụng lý tưởng các từ khóa Gherkin để đạt được kết quả cuối cùng.

Feature: LambdaTest search
Scenario: Search for LambdaTest on DuckDuckGo
    Given I am on the DuckDuckGo homepage
    When I enter search term as LambdaTest
    Then Search results for LambdaTest should appear


Ví dụ được hiển thị ở trên trong hướng dẫn Python Selenium này sử dụng các từ khóa Gherkin được sử dụng thường xuyên nhất, tức là Given, When và Then. Thông tin chi tiết về các từ khóa đang được sử dụng ở bên dưới trong hướng dẫn Selenium Python này:

  • Từ khóa tính năng - Cung cấp mô tả cấp cao về tính năng phần mềm.

  • Từ khóa Scenario - Cho biết tiêu đề của test case.

  • Từ khóa cho trước - Mô tả một tập hợp các điều kiện trước cho kịch bản tự động hóa thử nghiệm Selenium. Trong ví dụ trên cho hướng dẫn Selenium Python, điều kiện tiên quyết là người dùng phải ở trên trang chủ DuckDuckGo.

  • Từ khóa When - Mô tả các bước kịch bản. Đây là nơi diễn ra cuộc hành quyết. Như hình trên, người dùng nên nhập cụm từ tìm kiếm trước khi thực hiện thao tác tìm kiếm.

  • Từ khóa then -  Mô tả kết quả Kịch bản. Việc xác thực cũng được thực hiện trong bước này. Kết quả tìm kiếm LambdaTest sẽ xuất hiện trong cửa sổ tìm kiếm.

  • Và - Được sử dụng để cung cấp các bước bổ sung. Nó được sử dụng cùng với các từ khóa khác như Given, When và Then.

Tệp tính năng trong Gherkin  là các tệp văn bản thuần túy đơn giản có phần mở rộng .feature và có thể đóng vai trò quan trọng trong phát triển theo định hướng kinh doanh . Tệp tính năng có thể chứa một hoặc nhiều tình huống. Thẻ có liên quan (@Tag) được sử dụng để phân biệt giữa các Kịch bản khác nhau. Được hiển thị bên dưới trong hướng dẫn Selenium Python này, là một tệp tính năng đơn giản bao gồm hai Kịch bản - Tìm kiếm từ khóa LambdaTest trên Google và Tìm kiếm từ khóa LambdaTest trên DuckDuckGo.

Feature: Search using Google and DuckDuckGo
    Search for LambdaTest on Google
    Search for LambdaTest on DuckDuckGo
    Compare the results 
 
@LambdaTestSearch
Scenario: Search for LambdaTest on DuckDuckGo
    Given I am on the DuckDuckGo homepage
    When I enter search term as LambdaTest
    Then Search results for LambdaTest should appear
 
Scenario: Search for LambdaTest on Google
    Given I am on the Google homepage
    When I enter search term as LambdaTest
    Then Search results for LambdaTest should appear


Bắt đầu với hành vi trong Python để kiểm tra hành vi

Trong hướng dẫn Selenium Python này, tôi sẽ chỉ cho bạn cách sử dụng khung kiểm tra BDD được gọi là Behave with Selenium và Python đặc biệt cho các tình huống liên quan đến kiểm tra trình duyệt tự động.

Behave trong Python là gì?

Behave là một khung kiểm tra hướng hành vi phần lớn giống với các khung kiểm tra BDD khác như Cucumber, SpecFlow, Cucumber-JVM, v.v. Là một khung kiểm tra BDD, Python Behave về cơ bản khác với các khung kiểm tra Selenium Python phổ biến khác như pytest , pyunit, v.v.

Các tệp tính năng trong Python Behave tương tự như các tập lệnh thử nghiệm. Các hook trong environment.py và fixtures có thể chèn logic trình trợ giúp để thực thi tự động hóa thử nghiệm Selenium.

Bối cảnh trong Python Behave

Ngữ cảnh là một tính năng rất quan trọng trong Python Behave nơi người dùng và Behave có thể lưu trữ thông tin để chia sẻ xung quanh. Nó giữ thông tin ngữ cảnh trong quá trình thực hiện các bài kiểm tra. Nó là một đối tượng có thể lưu trữ dữ liệu do người dùng xác định cùng với dữ liệu do Python Behave xác định, trong các thuộc tính ngữ cảnh. Nó chạy ở ba cấp độ (tính năng, kịch bản và thử nghiệm) được quản lý tự động bởi Python Behave.

Một lớp mới được thêm vào ngữ cảnh bất cứ khi nào Python Behave khởi chạy vào một tính năng hoặc kịch bản mới. Điều này cho phép cấp hoạt động mới thêm các giá trị mới hoặc ghi đè các giá trị đã được xác định trước đó trong suốt thời gian của hoạt động đó. Đây có thể được gọi là phạm vi.

Các giá trị có thể được xác định trong tệp điều khiển môi trường, tức là môi trường.py có thể được đặt ở mức tính năng và sau đó được ghi đè cho một số tình huống. Các thay đổi được thực hiện ở cấp kịch bản không ảnh hưởng vĩnh viễn đến giá trị được đặt ở cấp tính năng. Biến ngữ cảnh trong mọi trường hợp là một thể hiện của behavior.runner.Context .

Kiểm soát môi trường (environment.py) trong Python Behave

Environment.py là một tệp môi trường có các móc Python Behave. Nó có thể được sử dụng để xác định mã cần được thực thi trước và sau khi xảy ra các sự kiện nhất định trong chu trình tự động hóa kiểm tra Selenium.

Dưới đây là một số điều khiển môi trường phổ biến có thể được sử dụng trong Python Behave:

  • before_step (bối cảnh, bước), after_step (bối cảnh, bước) - Thực hiện trước và sau mỗi bước.

  • before_scenario (bối cảnh, kịch bản), after_scenario (bối cảnh, kịch bản) - Thực hiện trước và sau mỗi kịch bản.

  • before_scenario (ngữ cảnh, tính năng), after_scenario (ngữ cảnh, tính năng) - Thực thi trước và sau mỗi tính năng.

  • before_all (bối cảnh), after_all (bối cảnh) - Được thực thi trước và sau khi thực hiện toàn bộ chu trình thử nghiệm. Trong các ví dụ về tự động hóa kiểm tra Selenium được trình bày dưới đây, chúng tôi sẽ sử dụng before_all và after_all để phân bổ và phân bổ các tài nguyên cần thiết cho việc thực thi kiểm tra.

Cách cài đặt Python Behave và các phụ thuộc khác để tự động hóa kiểm tra Selenium

Trước khi cài đặt Python Behave, các điều kiện tiên quyết phải được cài đặt trên máy. Hỗ trợ chính thức cho Behave là dành cho Python 2 nhưng nó hoạt động hoàn toàn tốt với Python 3.x. Để trình diễn thử nghiệm trình duyệt tự động với Behave và Selenium, chúng tôi sẽ sử dụng máy thử nghiệm với hệ điều hành Windows 10.

Python dành cho Windows có thể được tải xuống từ đây . IDE (Môi trường Phát triển Tích hợp) mà tôi sẽ sử dụng là PyCharm (Phiên bản Cộng đồng) có thể được tải xuống từ trang web PyCharm .

Vì khuôn khổ Selenium được sử dụng với Python Behave, bạn cũng cần cài đặt Selenium WebDriver cho trình duyệt web mà trên đó tự động kiểm tra Selenium được thực hiện. Bạn có thể tải xuống Selenium WebDriver cho các trình duyệt web phổ biến từ các vị trí sau:

Sau khi cài đặt xong các điều kiện tiên quyết bắt buộc, bây giờ bạn có thể cài đặt khung Python Behave. Có một số cách sử dụng mà bạn có thể cài đặt Python Behave trên máy của mình.

a. Sử dụng lệnh Pip

Thực hiện lệnh sau trên thiết bị đầu cuối

pip install behave

b. Sử dụng phân phối nguồn Python Behave

Sau khi phân phối nguồn hoạt động được giải nén, hãy nhập thư mục “behavior- ” mới được tạo và thực hiện lệnh sau:

python setup.py install

c. Sử dụng Kho lưu trữ Github

Chạy lệnh sau trên thiết bị đầu cuối để cài đặt phiên bản hoạt động mới nhất từ kho lưu trữ GitHub .

pip install git+https://github.com/behave/behave

Cấu trúc Thư mục (Dự án)

Vì các tệp thuộc các loại khác nhau hiện diện trong bất kỳ dự án nào sử dụng Python, nên khuôn khổ có cấu trúc thư mục nghiêm ngặt. Cấu trúc dự án được bảo vệ này rất hữu ích khi thêm các tính năng mới vào một dự án hiện có vì các tệp được đặt trong các thư mục cụ thể trong cấu trúc. Nếu yêu cầu của dự án không phức tạp, bạn vẫn có thể loại bỏ cấu trúc và sử dụng một thư mục duy nhất cho tất cả các loại tệp. Tuy nhiên, việc duy trì một cấu trúc dự án thống nhất giúp đảm bảo khả năng bảo trì của dự án.

  • Toàn bộ quá trình triển khai phải có trong thư mục 'tính năng'.

  • Tệp tính năng (* .feature) phải có trong thư mục 'tính năng', bao gồm 'môi trường.py' (chứa các móc cần thiết để khởi tạo và khử khởi tạo).

  • Việc triển khai các định nghĩa bước phải có trong thư mục các tính năng / bước.

  • Trong hướng dẫn Selenium Python này, tôi sẽ trình bày các kịch bản tự động hóa kiểm tra Selenium do đó; chúng tôi sẽ có cài đặt cấu hình sẽ nằm trong tệp .ini / .cfg.

Cấu trúc thư mục tổng thể cho hướng dẫn Selenium Python này được hiển thị bên dưới:

[Root Directory]
| ‐‐-------------------  Core Implementation
| ---------------------- [features]
|   		         | -------------- environment.py
|   		         | -------------- *.feature
| 		         | -------------- [steps]
|   	          			  | -------------- *_steps.py
| ---------------------- [helpers]
|   		         | -------------- *.py
| ---------------------- [Config Settings (behave.ini | setup.cfg | .behaverc)]


Bạn có thể xem ảnh chụp nhanh của thư mục dự án bên dưới, được sử dụng trong hướng dẫn Selenium Python này.

Hướng dẫn sử dụng Selenium Python: Bắt đầu với BDD trong cách cư xử

Làm thế nào để chạy thử nghiệm trên Behave và Selenium WebDriver?

Trong phần này của hướng dẫn Python Selenium, chúng ta sẽ xem xét việc sử dụng khuôn khổ Python Behave với Selenium WebDriver cho các tình huống liên quan đến kiểm tra trình duyệt tự động.

ToDoApp: Thử nghiệm với Behave và Selenium WebDriver

Để chứng minh cách sử dụng Python Behave với Selenium WebDriver cục bộ, tôi sẽ lấy ví dụ về một ứng dụng việc cần làm đơn giản. Được hiển thị bên dưới trong hướng dẫn này trong hướng dẫn Selenium Python này là chi tiết hơn về bài kiểm tra tổng thể:

  1. Điều hướng đến ứng dụng việc cần làm bằng Chrome WebDriver.

  2. Đánh dấu hai mục đầu tiên là Xong tức là Kiểm tra hai mục đó.

  3. Thêm một mục mới - Yey, Hãy thêm nó vào danh sách

  4. Nhấp vào nút Thêm để thêm mục mới đó vào danh sách

Thực hiện

Quy trình triển khai tổng thể cho hướng dẫn Selenium Python này được chia thành các bước đơn giản

  1. Tạo dự án

  2. Tính năng tạo tệp

  3. Tạo Cài đặt cấu hình (behavior.ini | setup.cfg)

  4. Tạo các chức năng của người trợ giúp

  5. Tạo tệp kiểm soát môi trường (environment.py)

  6. Tạo định nghĩa bước cho mỗi Bước tình huống

  7. Chấp hành

Hãy xem xét từng nhiệm vụ phụ này cho hướng dẫn Selenium Python chi tiết hơn:

1. Tạo dự án - Tạo một dự án mới trong PyCharm bằng cách sử dụng tùy chọn Tệp -> Dự án mới. Trước khi tạo dự án, bạn phải đảm bảo rằng các điều kiện tiên quyết tức là Python, Behave đã được cài đặt trên máy.

2. Tạo tệp tính năng - Tất cả các tệp tính năng của Gherkin phải có trong thư mục features \ bước. Chúng tôi sử dụng các từ khóa Sau đó, Khi nào và Sau đó để đưa ra ToDoApp.feature.

Điều kiện tiên quyết là người dùng phải có mặt trên ứng dụng ToDo. Do đó, bước Kịch bản bắt đầu với từ khóa Given.

Given that I am on the LambdaTest Sample app

Dưới đây là tệp Tính năng cho ứng dụng Công việc - Các bước tình huống được tạo dựa trên các tác vụ phải thực hiện trong thử nghiệm, tức là Nhấp vào hộp kiểm đầu tiên và hộp kiểm thứ hai và đánh dấu là Đã xong.

Feature: Test to add item
 
Scenario: Test Advance boy
  Given I go to 4davanceboy to add item
  Then I Click on first checkbox and second checkbox
  When I enter item to add
  When I click add button
  Then I should verify the added item


3. Tạo Cài đặt cấu hình (behavior.ini | setup.cfg) - Các tệp cấu hình (behavior.ini, setup.cfg, tox.ini và .behaverc) trong Python Behave không gặp vấn đề như fixtures và có thể được sử dụng để thiết lập lên môi trường.

Trong behavior.ini, các giá trị trong thẻ [behavior.userdata] là các biến môi trường do người dùng xác định. Trong setup.cfg, các biến môi trường do người dùng xác định nằm trong thẻ [Môi trường].

Trong ví dụ của chúng tôi, trình duyệt mà quá trình kiểm tra được thực hiện là Chrome và một biến môi trường mới 'Trình duyệt' được định nghĩa trong setup.cfg.

[Environment] Browser = chrome

4. Tạo các chức năng của người trợ giúp - Tương tác với các phần tử web trên một trang web được thực hiện thông qua Selenium WebDriver của trình duyệt tương ứng. Bạn có thể sử dụng trực tiếp các API Selenium WebDriver cho Python trong việc triển khai tự động hóa thử nghiệm Selenium, tuy nhiên, nó sẽ dẫn đến mã lặp lại. Ngoài ra, nó làm cho mã khó bảo trì hơn rất nhiều.

Do đó, tôi đã tạo các hàm Trợ giúp (hoặc các hàm trình bao bọc) gọi nội bộ các API Selenium WebDriver tương ứng cho Python . Vì tất cả các phần tử trên một trang web có thể không được tải đồng thời, nên một quá trình chờ rõ ràng trong Selenium phải được thực hiện trước khi bất kỳ hành động nào được thực hiện trên phần tử web.

Lớp WebDriverWait được sử dụng để xác định thời gian chờ tùy thuộc vào các điều kiện nhất định trước khi tiếp tục mã. Cùng với trình bao bọc cho Selenium WebDriverWait, chúng tôi tạo các chức năng trình bao bọc để thực hiện các hành động như tạo một Selenium WebDriver (mở), giải phóng tài nguyên được cấp phát bởi Selenium WebDriver (đóng), định vị phần tử bằng XPath , định vị phần tử bằng ID , v.v.

from selenium.webdriver.common.by import By
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
 
class HelperFunc(object):
    __TIMEOUT = 10
 
    def __init__(self, driver):
        super(HelperFunc, self).__init__()
        self._driver_wait = WebDriverWait(driver, HelperFunc.__TIMEOUT)
        self._driver = driver
 
    def open(self, url):
        self._driver.get(url)
 
    def maximize(self):
        self._driver.maximize_window()        
        
    def close(self):
        self._driver.quit()
        
    # Helper functions that are used to identify the web locators in Selenium Python tutorial  
 
    def find_by_xpath(self, xpath):
        return self._driver_wait.until(EC.visibility_of_element_located((By.XPATH, xpath)))
 
    def find_by_name(self, name):
        return self._driver_wait.until(EC.visibility_of_element_located((By.NAME, name)))
 
    def find_by_id(self, id):
        return self._driver_wait.until(EC.visibility_of_element_located((By.ID, id)))


Trong phương thức khởi tạo, bản thể hiện của biến self._driver_wait có tham chiếu đến bản sao của lớp Selenium WebDriverWait (tức là lớp selenium.webdriver.support.wait.WebDriverWait). self._driver_wait được sử dụng trong tất cả các hàm trợ giúp để đảm bảo rằng phần tử web tương ứng được tải trước khi thực hiện bất kỳ thao tác tìm kiếm phần tử nào qua XPath, ID, v.v. trên trang.

def __init__(self, driver):
        super(HelperFunc, self).__init__()
        self._driver_wait = WebDriverWait(driver, HelperFunc.__TIMEOUT)
        self._driver = driver
 
    def open(self, url):
	 self._driver.get(url)


Để khởi động Selenium WebDriver, chúng ta có thể sử dụng các đồ đạc hoạt động. Giống như đồ đạc pytest , đồ đạc trong hành vi cũng là các chức năng chủ yếu được sử dụng để thực thi mã liên quan đến hoạt động khởi tạo, cấu hình và dọn dẹp trong chu kỳ thử nghiệm. Đồ đạc có phạm vi được xác định bằng thẻ @fixture. Các đồ đạc khi được sử dụng trong các tình huống liên quan đến kiểm tra trình duyệt tự động có một nhược điểm rất lớn - các bản sao trình duyệt sẽ mở và đóng cho mọi tình huống / tính năng bằng thẻ @fixture. Đây không phải là một lựa chọn tốt khi kiểm tra phải được thực hiện trên các loại và phiên bản trình duyệt web khác nhau.

Trong Hướng dẫn Selenium Python này, hàm môi trường được sử dụng để khởi động WebDriver. Việc truy cập vào cá thể Web được thực hiện thông qua hàm môi trường before_all trong environment.py

from selenium import webdriver
from helper.helper_base import HelperFunc
 
def get_browser(browser):
    if browser == "chrome":
        return HelperFunc(webdriver.Chrome())


5. Tạo tệp điều khiển môi trường (environment.py) -  Các hook bắt buộc phải được thực thi trước và sau chu trình tự động hóa kiểm tra Selenium được định nghĩa trong environment.py. Vì tệp cấu hình (setup.cfg) được sử dụng để xác định các biến môi trường do người dùng xác định, mô-đun ConfigParser phải được sử dụng để phân tích cú pháp nội dung của tệp .cfg. PyCharm sẽ nhắc cài đặt các phụ thuộc cần thiết khi dự án được tải.

Hướng dẫn sử dụng Selenium Python: Bắt đầu với BDD trong cách cư xử

from behave.fixture import use_fixture_by_tag
from selenium import webdriver
import os
from configparser import ConfigParser
from selenium.webdriver.common.keys import Keys
import time
from behave.fixture import use_fixture_by_tag
from helper.helper_web import get_browser
 
def before_all(context):
    config = ConfigParser()
    print((os.path.join(os.getcwd(), 'setup.cfg')))
    my_file = (os.path.join(os.getcwd(), 'setup.cfg'))
    config.read(my_file)
 
    # Reading the browser type from the configuration file for Selenium Python Tutorial
    helper_func = get_browser(config.get('Environment', 'Browser'))
    context.helperfunc = helper_func
    
    # Local Chrome WebDriver
    #if context.browser == "chrome":
    #   context.driver = webdriver.Chrome()
 
def after_all(context):
    context.helperfunc.close()


Trình duyệt mà các thử nghiệm đã được thực hiện được đọc từ biến 'Trình duyệt' được xác định trong setup.cfg trong phần [Môi trường]

my_file = (os.path.join(os.getcwd(), 'setup.cfg'))
    config.read(my_file)
 
    # Reading the browser type from the configuration file for Selenium test automation
    helper_func = get_browser(config.get('Environment', 'Browser'))


Tài nguyên được phân bổ cho tự động hóa kiểm tra Selenium được giải phóng như một phần của kiểm soát after_all. Như đã thấy trong phần triển khai bên dưới, các chức năng môi trường (hoặc chức năng trợ giúp) được sử dụng để thực hiện hoạt động dọn dẹp.

def after_all(context):
    context.helperfunc.close()


6. Tạo định nghĩa bước cho mỗi bước kịch bản - Mỗi bước kịch bản được ánh xạ tới một hàm Python được trang trí được gọi là định nghĩa bước. Được hiển thị bên dưới trong hướng dẫn Selenium Python này là một đoạn mã của một bước kịch bản được ràng buộc với định nghĩa bước:

Bước tình huống -

Given I go to 4davanceboy to add item

Định nghĩa bước -

@given('I go to 4davanceboy to add item')
def step(context):
    context.helperfunc.open('https://lambdatest.github.io/sample-todo-app/')
    context.helperfunc.maximize()


Dưới đây là cách triển khai đầy đủ các định nghĩa bước cho hướng dẫn Selenium Python này:

#Python Behave testing example for Selenium test automation
from selenium import webdriver
import os
from configparser import ConfigParser
from selenium.webdriver.common.keys import Keys
import time
from behave import given, when, then
 
@given('I go to 4davanceboy to add item')
def step(context):
    context.helperfunc.open('https://lambdatest.github.io/sample-todo-app/')
    context.helperfunc.maximize()
 
@then('I Click on first checkbox and second checkbox')
def click_on_checkbox_one(context):
    context.helperfunc.find_by_name('li1').click()
    context.helperfunc.find_by_name('li2').click()
 
@when('I enter item to add')
def enter_item_name(context):
    context.helperfunc.find_by_id('sampletodotext').send_keys("Yey, Let's add it to list")
 
@when('I click add button')
def click_on_add_button(context):
    context.helperfunc.find_by_id('addbutton').click()
 
@then('I should verify the added item')
def see_login_message(context):
    added_item = context.helperfunc.find_by_xpath("//span[@class='done-false']").text
 
    time.sleep(10)
 
    if added_item in "Yey, Let's add it to list":
        return True
    else:
        return False


Như đã thấy trong phần triển khai ở trên cho hướng dẫn Selenium Python này, đối tượng Context được sử dụng để truy cập các hàm trợ giúp / môi trường. Các chức năng trợ giúp tương ứng được sử dụng để gọi trình duyệt web, mở URL kiểm tra, định vị các phần tử tương ứng trên trang và thực hiện các hành động cần thiết trên các phần tử đó sau khi chúng được tải trên trang.

Các phần tử có thể được xác định bằng cách sử dụng công cụ Kiểm tra trong trình duyệt Chrome / Firefox.

Hướng dẫn sử dụng Selenium Python: Bắt đầu với BDD trong cách cư xử

Là một phần của định nghĩa bước cho bước Tôi Nhấp vào hộp kiểm đầu tiên và hộp kiểm thứ hai, hai phần tử hộp kiểm được đặt bằng cách sử dụng bộ định vị Tên. Sau khi xác định vị trí, một thao tác nhấp chuột được thực hiện trên các phần tử đó.

@then('I Click on first checkbox and second checkbox')
def click_on_checkbox_one(context):
    context.helperfunc.find_by_name('li1').click()
    context.helperfunc.find_by_name('li2').click()


7. Thực thi - Để thực hiện các bài kiểm tra BDD mới được triển khai, chúng tôi sử dụng công cụ dòng lệnh có thể được cấu hình bằng cách sử dụng các tệp cấu hình và cũng có một loạt các đối số dòng lệnh.

Để thực thi, thư mục hiện tại của bạn phải là thư mục chứa mã nguồn, thư mục - tính năng, trình trợ giúp, v.v.

Hướng dẫn sử dụng Selenium Python: Bắt đầu với BDD trong cách cư xử

Python Behave hỗ trợ một số đối số dòng lệnh. Thực thi lệnh trợ giúp để biết thêm về các tùy chọn đó.

behave --help

Tệp tính năng nằm trong features \ ToDoApp.feature. Chạy lệnh sau trên thiết bị đầu cuối để kích hoạt việc thực thi tệp tính năng.

behave features\ToDoApp.feature

Dưới đây là ảnh chụp nhanh thực thi của quá trình tự động hóa kiểm tra Selenium được thực hiện bằng cách sử dụng WebDriver cục bộ:

Hướng dẫn sử dụng Selenium Python: Bắt đầu với BDD trong cách cư xử

Sử dụng Python Behave với Cloud Selenium Grid

Tự động hóa kiểm tra Selenium với Selenium Grid cục bộ có thể được sử dụng để kiểm tra trên một số lượng có thể đếm được của các tổ hợp trình duyệt và hệ điều hành. Có một cơ sở hạ tầng nội bộ chứa các máy có các loại trình duyệt, phiên bản trình duyệt và hệ điều hành khác nhau có thể rất tốn kém. Nó cũng không phải là một cách tiếp cận có thể mở rộng.

Kiểm tra trình duyệt tự động cho các sản phẩm web là cực kỳ quan trọng vì nó giúp cải thiện phạm vi kiểm tra, do đó, chất lượng sản phẩm. Một cách tiếp cận có thể mở rộng hơn là sử dụng thử nghiệm trình duyệt chéo trên đám mây vì các thử nghiệm có thể được thực hiện trên một số lượng lớn các kết hợp trình duyệt và nền tảng.

Nỗ lực liên quan đến việc chuyển triển khai hiện có trên lưới Selenium cục bộ sang lưới Selenium từ xa dựa trên đám mây là rất ít vì những thay đổi chủ yếu liên quan đến cơ sở hạ tầng. Khi bạn đã tạo tài khoản trên LambdaTest, bạn phải ghi lại tên người dùng và khóa truy cập từ Phần Hồ sơ vì sự kết hợp đó được sử dụng để truy cập Cloud Selenium Grid . Bảng điều khiển được sử dụng để xem tất cả các chi tiết liên quan đến các thử nghiệm được thực hiện trên lưới Selenium từ xa. Trình tạo khả năng được sử dụng để tạo trình duyệt và khả năng nền tảng mong muốn sẽ được sử dụng để kiểm tra trình duyệt tự động.

ToDoApp: Thử nghiệm với Python Behave và Remote Selenium WebDriver

Để chứng minh việc sử dụng Python Behave với Selenium WebDriver từ xa, chúng tôi sử dụng cùng một kịch bản thử nghiệm của ToDoApp. Các bước phải được thực hiện trong các bài kiểm tra cũng được giữ nguyên.

  1. Điều hướng đến ứng dụng việc cần làm https://lambdatest.github.io/sample-todo-app/ bằng Chrome WebDriver.

  2. Đánh dấu hai mục đầu tiên là Xong tức là Kiểm tra hai mục đó.

  3. Thêm một mục mới - Yey, Hãy thêm nó vào danh sách

  4. Nhấp vào nút Thêm để thêm mục mới đó vào danh sách

Thực hiện

Mã hiện tại phải được thay đổi để làm cho nó hoạt động trên lưới Cloud Selenium. Logic cốt lõi của các kịch bản thử nghiệm vẫn không thay đổi. Dưới đây là những thay đổi chính trong việc triển khai trong hướng dẫn Selenium Python này:

  1. Để trình bày cách sử dụng behavior.ini, setup.cfg sẽ không được sử dụng để tạo cài đặt cấu hình. Giống như setup.cfg, behavior.ini cũng sẽ xuất hiện trong thư mục mẹ có chứa mã kiểm tra.

  2. Khi cài đặt cấu hình khác được sử dụng, các thay đổi tương ứng phải được thực hiện trong quá trình triển khai. Các tệp phải được thêm / thay đổi dưới đây:

Add – behave.ini
Modify - helper\helper_web.py
Modify - features\environment.py
Modify - features\steps\ToDoApp_steps.py


Các bài kiểm tra phải được thực hiện trên Chrome (phiên bản - 76.0) cho nền tảng Windows 10. Các khả năng cần thiết có thể được tạo bằng cách sử dụng trình tạo khả năng LambdaTest.

capabilities = {
        "build" : "your build name",
        "name" : "your test name",
        "platform" : "Windows 10",
        "browserName" : "Chrome",
        "version" : "76.0"
}


Các khả năng sẽ là một phần của tệp behavior.ini và các mục nhập tương ứng từ tệp ini được đọc trong API get_browser (được định nghĩa trong helper \ helper_web.py).

1. Tạo Cài đặt cấu hình (behavior.ini)

Được hiển thị bên dưới là nội dung của behavior.ini:

[behave]
stderr_capture = False
stdout_capture = False
[behave.userdata]
name = user-name@gmail.com
app_key = access_key
platform = Windows 10
browser = chrome
browser_version = 76.0


Thay vì chỉ tên trình duyệt (tức là Chrome) được bao gồm trong cài đặt cấu hình để kiểm tra bằng cách sử dụng Selenium WebDriver cục bộ, ở đây các khả năng trình duyệt khác cùng với thông tin đăng nhập LambdaTest sẽ có mặt. Tổ hợp tên người dùng và phím truy cập có thể được lấy từ Phần hồ sơ trên LambdaTest.

Do đó, đối tượng ngữ cảnh chứa nhiều thông tin hơn khi so sánh với thử nghiệm tương ứng đã sử dụng Selenium WebDriver cục bộ.

2. Tạo các Hàm trợ giúp thích hợp (helper_web.py)

Cùng với trình duyệt, bốn đối số khác được thêm vào API get_browser. Các đối số bổ sung này phù hợp với các tham số có trong phần [behavior.userdata] của behavior.ini.

from selenium import webdriver
from helper.helper_base import HelperFunc
 
caps = {}
 
def get_browser(browser, browser_version, platform, user_name, access_key):
    remote_url = "https://" + user_name + ":" + access_key + "@hub.lambdatest.com/wd/hub"
    caps['name'] = "[LambdaTest] [Behave] ToDo Application using Behave and Selenium"
    caps['build'] = "[LambdaTest] [Behave] ToDo Application using Behave and Selenium"
    caps['browserName'] = browser
    caps['version'] = browser_version
    caps['platform'] = platform
    caps['network'] = True
    caps['visual'] = True
    caps['video'] = True
    caps['console'] = True
    if browser == "chrome":
        # return Web(webdriver.Chrome())
        return HelperFunc(webdriver.Remote(command_executor=remote_url, desired_capabilities=caps))


Để đơn giản hóa, chúng tôi đã sử dụng trình duyệt thử nghiệm như Chrome. Thay vì sử dụng Selenium WebDriver cục bộ, Selenium WebDriver từ xa cho Chrome sẽ được gọi. Các khả năng của trình duyệt được chuyển cùng với remote_url chứa vị trí của lưới Selenium từ xa.

def get_browser(browser, browser_version, platform, user_name, access_key):
    remote_url = "https://" + user_name + ":" + access_key + "@hub.lambdatest.com/wd/hub"
……………………………………………………………………………………………………………………………….
……………………………………………………………………………………………………………………………….
if browser == "chrome":
        # return Web(webdriver.Chrome())
        return HelperFunc(webdriver.Remote(command_executor=remote_url, desired_capabilities=caps))


3. Tạo tệp kiểm soát môi trường (environment.py)

Ngoài biến trình duyệt được đặt hiện tại, chúng tôi đã xác định browser_version và nền tảng trong phần [behavior.userdata] của behavior.ini.

from behave.fixture import use_fixture_by_tag
from selenium import webdriver
import os
from configparser import ConfigParser
from selenium.webdriver.common.keys import Keys
import time
from behave.fixture import use_fixture_by_tag
from helper.helper_web import get_browser
 
caps = {}
 
def before_all(context):
    caps['browserName'] = context.config.userdata['browser']
    caps['version'] = context.config.userdata['browser_version']
    caps['platform'] = context.config.userdata['platform']
 
    helper_func = get_browser(caps['browserName'], caps['version'], caps['platform'], context.config.userdata['name'],
                  context.config.userdata['app_key'])
    context.helperfunc = helper_func
 
def after_all(context):
    context.helperfunc.close()


Các giá trị từ phần [behavior.userdata] (trong behavior.ini) được đọc bằng cách sử dụng config.userdata ['property_name'] trong before_all hook. Các giá trị này cũng được thêm vào đối tượng ngữ cảnh vì chúng sẽ được sử dụng trong toàn bộ chu kỳ thử nghiệm.

def before_all(context):
    caps['browserName'] = context.config.userdata['browser']
    caps['version'] = context.config.userdata['browser_version']
    caps['platform'] = context.config.userdata['platform']
 
    helper_func = get_browser(caps['browserName'], caps['version'], caps['platform'], context.config.userdata['name'],
                  context.config.userdata['app_key'])


4. Tạo định nghĩa bước cho mỗi Bước tình huống (tính năng \ bước \ ToDoApp_steps.py)

Mặc dù không có thay đổi lớn nào trong tệp chứa định nghĩa bước, một thay đổi nhỏ được thực hiện để loại bỏ cảnh báo urllib3.

from selenium import webdriver
import os
from configparser import ConfigParser
from selenium.webdriver.common.keys import Keys
import time
from behave import given, when, then
import urllib3
 
urllib3.disable_warnings()
 
@given('I go to 4davanceboy to add item')
def step(context):
    context.helperfunc.open('https://lambdatest.github.io/sample-todo-app/')
    context.helperfunc.maximize()
........................................................
........................................................
........................................................


Để thực hiện các bài kiểm tra trên lưới Selenium từ xa, chúng tôi kích hoạt lệnh ứng xử Python tương tự trên thiết bị đầu cuối

behave features\ToDoApp.feature

Dưới đây là ảnh chụp nhanh thực thi trên LambdaTest cho bài kiểm tra được thực hiện bằng cách sử dụng Selenium WebDriver từ xa:

Hướng dẫn sử dụng Selenium Python: Bắt đầu với BDD trong cách cư xử

Trang tổng quan tự động hóa chứa thông tin chi tiết về thử nghiệm, bao gồm tóm tắt, nhật ký mạng, nhật ký Selenium, ngoại lệ, v.v. Dưới đây là ảnh chụp nhanh quá trình thực thi của tệp tính năng (tức là tính năng \ ToDoApp.feature) trong hướng dẫn Selenium Python này:

Hướng dẫn sử dụng Selenium Python: Bắt đầu với BDD trong cách cư xử

Ưu và nhược điểm của Python Behave Framework

Mọi khung công tác đều có những ưu điểm (ưu) và khuyết điểm (nhược điểm), trường hợp của khung hành xử Python cũng vậy. Mặc dù nó là một khuôn khổ phổ biến cho BDD nhưng nó không có phần thiếu sót công bằng.

Ưu điểm của việc sử dụng Python Behave Framework

  • Tài liệu và hướng dẫn trực tuyến tuyệt vời.

  • Hỗ trợ  PyCharm (Phiên bản Chuyên nghiệp) .

  • Hỗ trợ đầy đủ ngôn ngữ Gherkin.

  • Dễ dàng tăng cường với kiến ​​thức trước đây về bất kỳ khung BDD nào.

  • Dễ dàng thiết lập và dọn dẹp do có sẵn các chức năng môi trường, cài đặt cấu hình, đồ đạc, v.v.

  • Hỗ trợ tích hợp với  Django và  Flask .

Nhược điểm của việc sử dụng Python Behave Framework

  • Không được hỗ trợ bởi  PyCharm (Phiên bản Cộng đồng) .

  • Các bước chia sẻ giữa các tệp tính năng khác nhau không đơn giản.

  • Không có hỗ trợ tích hợp để thực hiện kiểm tra song song. Các giải pháp thay thế để thực hiện kiểm tra song song yêu cầu phần mềm bổ sung, các chủ đề thảo luận phổ biến trên StackOverflow  tại đây và  tại đây .

  • Khuôn khổ phổ biến hành xử song song mà trước đó đã tạo điều kiện thực thi thử nghiệm song song trên hành vi Python hiện không được dùng nữa.

Nó là một bọc!

Behave là một trong những khung BDD phổ biến được các học viên Python có kinh nghiệm ưa thích. Trong hướng dẫn Python Selenium này, tôi đã giải thích chi tiết cách sử dụng Python Behave để tự động hóa kiểm tra Selenium. Ưu điểm của việc sử dụng Python Behave là có rất nhiều tài liệu và hỗ trợ có sẵn trên internet có thể hữu ích để bắt đầu.

Vì Gherkin được sử dụng, việc tạo các tệp tính năng không yêu cầu bất kỳ bí quyết kỹ thuật nào. Thử nghiệm song song với Python là tính năng quan trọng nhất khi nói đến tự động hóa thử nghiệm Selenium vì nhiều thử nghiệm phải được thực hiện trên tổ hợp 'N' của các trình duyệt, nền tảng và thiết bị.

Python Behave phù hợp nhất để kiểm tra trình duyệt tự động nối tiếp. Ngay cả khi chúng tôi chuyển thử nghiệm sang lưới Selenium mạnh mẽ, bạn có thể không nhận được thông lượng mong đợi vì thử nghiệm song song là một việc phức tạp. Tóm lại, Python có tập hợp các tính năng phù hợp (với một vài thiếu sót) giúp nó hữu ích cho BDD.

Đó là tất cả cho bây giờ, tôi hy vọng bạn tìm thấy bài viết thông tin. Hãy retweet bài viết này và chia sẻ nó với những người bạn của bạn!

Chúc bạn thử nghiệm vui vẻ☺

9 hữu ích 0 bình luận 9.2k xem chia sẻ

Có thể bạn quan tâm

loading