<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                企業??AI智能體構建引擎,智能編排和調試,一鍵部署,支持知識庫和私有化部署方案 廣告
                # End-to-end testing Best Practices > 原文:[https://docs.gitlab.com/ee/development/testing_guide/end_to_end/best_practices.html](https://docs.gitlab.com/ee/development/testing_guide/end_to_end/best_practices.html) * [Prefer API over UI](#prefer-api-over-ui) * [Avoid superfluous expectations](#avoid-superfluous-expectations) * [Prefer to split tests across multiple files](#prefer-to-split-tests-across-multiple-files) * [Limit the use of the UI in `before(:context)` and `after` hooks](#limit-the-use-of-the-ui-in-beforecontext-and-after-hooks) * [Ensure tests do not leave the browser logged in](#ensure-tests-do-not-leave-the-browser-logged-in) * [Tag tests that require Administrator access](#tag-tests-that-require-administrator-access) * [Prefer `Commit` resource over `ProjectPush`](#prefer-commit-resource-over-projectpush) # End-to-end testing Best Practices[](#end-to-end-testing-best-practices "Permalink") **注意:**這是[測試指南中](../best_practices.html)最佳實踐的量身定制的擴展. ## Prefer API over UI[](#prefer-api-over-ui "Permalink") 端到端測試框架能夠根據具體情況來構造其資源. 應盡可能通過 API 來構造資源. 通過 API 構造測試所需的資源,我們可以節省時間和金錢. [Learn more](resources.html) about resources. ## Avoid superfluous expectations[](#avoid-superfluous-expectations "Permalink") 為了使測試保持精簡,重要的是我們僅測試需要測試的內容. 確保不添加任何與需要測試的內容無關的`expect()`語句. 例如: ``` #=> Good Flow::Login.sign_in Page::Main::Menu.perform do |menu| expect(menu).to be_signed_in end #=> Bad Flow::Login.sign_in(as: user) Page::Main::Menu.perform do |menu| expect(menu).to be_signed_in expect(page).to have_content(user.name) #=> we already validated being signed in. redundant. expect(menu).to have_element(:nav_bar) #=> likely unnecessary. already validated in lower-level. test doesn't call for validating this. end #=> Good issue = Resource::Issue.fabricate_via_api! do |issue| issue.name = 'issue-name' end Project::Issues::Index.perform do |index| expect(index).to have_issue(issue) end #=> Bad issue = Resource::Issue.fabricate_via_api! do |issue| issue.name = 'issue-name' end Project::Issues::Index.perform do |index| expect(index).to have_issue(issue) expect(page).to have_content(issue.name) #=> page content check is redundant as the issue was already validated in the line above. end ``` ## Prefer to split tests across multiple files[](#prefer-to-split-tests-across-multiple-files "Permalink") 我們的框架包括幾個并行化機制,這些機制通過并行執行 spec 文件來工作. 但是,由于測試是通過 spec *文件*而不是通過 test / example 并行化的,因此如果將新測試添加到現有文件中,我們將無法實現更大的并行化. 盡管如此,可能還有其他原因要向現有文件添加新測試. 例如,如果測試共享狀態的設置成本很高,則即使執行一次使用該設置的測試無法并行化,執行一次設置可能會更有效. 綜上所述: * **可以** :將測試拆分到單獨的文件中,除非測試共享昂貴的設置. * **不要** :在不考慮對并行化的影響的情況下,將新測試放在現有文件中. ## Limit the use of the UI in `before(:context)` and `after` hooks[](#limit-the-use-of-the-ui-in-beforecontext-and-after-hooks "Permalink") 限制使用`before(:context)`掛鉤僅通過 API 調用,非 UI 操作或基本 UI 操作(例如登錄`before(:context)`來執行設置任務. 我們使用[`capybara-screenshot`](https://github.com/mattheworiordan/capybara-screenshot)庫自動保存失敗時的屏幕截圖. `capybara-screenshot` [將屏幕](https://github.com/mattheworiordan/capybara-screenshot/blob/master/lib/capybara-screenshot/rspec.rb#L97) `capybara-screenshot` [保存在 RSpec 的`after` hook 中](https://github.com/mattheworiordan/capybara-screenshot/blob/master/lib/capybara-screenshot/rspec.rb#L97) . [如果`before(:context)`失敗,則不會調用`after`掛鉤](https://github.com/rspec/rspec-core/pull/2652/files#diff-5e04af96d5156e787f28d519a8c99615R148) ,因此不會保存屏幕截圖. 鑒于這一事實,我們應該將`before(:context)`使用僅限于不需要屏幕快照的那些操作. 同樣, `after`鉤子僅應用于非 UI 操作. 測試文件中`after` hook 中的任何 UI 操作都將在獲取屏幕快照的`after` hook 之前執行. 這將導致 UI 狀態從故障點移開,因此無法在正確的時刻捕獲屏幕截圖. ## Ensure tests do not leave the browser logged in[](#ensure-tests-do-not-leave-the-browser-logged-in "Permalink") 所有測試都希望能夠在測試開始時登錄. 有關示例,請參見: [https](https://gitlab.com/gitlab-org/gitlab/-/issues/34736) : [//gitlab.com/gitlab-org/gitlab/-/issues/34736](https://gitlab.com/gitlab-org/gitlab/-/issues/34736) 理想情況下,在`after(:context)` (或[`before(:context)`](#limit-the-use-of-the-ui-in-beforecontext-and-after-hooks) )塊中執行的任何動作都可以通過 API 執行. 但是,如果有必要通過 UI 進行操作(例如,如果不存在 API 功能),請確保在該塊的末尾注銷. ``` after(:all) do login unless Page::Main::Menu.perform(&:signed_in?) # Do something while logged in Page::Main::Menu.perform(&:sign_out) end ``` ## Tag tests that require Administrator access[](#tag-tests-that-require-administrator-access "Permalink") 我們不會運行需要管理員對生產環境進行訪問的測試. 當您添加需要管理員訪問權限的新測試時,請應用 RSpec 元數據`:requires_admin`以使該測試不會包含在針對生產環境和我們不想在其上運行這些測試的其他環境執行的測試套件中. 注意:在本地運行測試或配置管道時,可以將環境變量`QA_CAN_TEST_ADMIN_FEATURES`設置為`false`以跳過帶有`:requires_admin`標記的測試. ## Prefer `Commit` resource over `ProjectPush`[](#prefer-commit-resource-over-projectpush "Permalink") 與[使用 API??一致](#prefer-api-over-ui) ,請盡可能使用`Commit`資源. `ProjectPush`通過 Git 命令行界面(CLI)使用原始 Shell 命令,而`Commit`資源則發出 HTTP 請求. ``` # Using a commit resource Resource::Commit.fabricate_via_api! do |commit| commit.commit_message = 'Initial commit' commit.add_files([ {file_path: 'README.md', content: 'Hello, GitLab'} ]) end # Using a ProjectPush Resource::Repository::ProjectPush.fabricate! do |push| push.commit_message = 'Initial commit' push.file_name = 'README.md' push.file_content = 'Hello, GitLab' end ``` **注意:**當您的測試要求測試 SSH 集成或使用 Git CLI 時,使用`ProjectPush`會出現一些例外.
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看