首页 > 解决方案 > 是否可以指定在行为中使用哪个步骤实现?

问题描述

我的测试套件具有适用于桌面和移动设备的功能/场景。某些步骤最终将具有相同的名称(即,当我转到主页时,当我单击订单时......等)

虽然移动和桌面之间的实现会有所不同,但我现在唯一能想到的解决方案是稍微更改场景名称when I go to home page on phone,但我仍在寻找一种方法来指定要使用的实现。

如果您可以推荐一些东西(例如构建两个测试套件,一个用于移动设备,一个用于桌面),我也会进行更好的设置,但似乎这会创造更多的工作而不是节省。

标签: pythonautomationqapython-behave

解决方案


在我目前基于 Behave 的 UI 测试框架中,我们依赖

一次编写,到处测试

原则。意思是,Gherkin 是声明性的,通过注释/标签指定适用于桌面 Web 或移动设备的场景。两个平台的名称、步骤和流程相同。实际处理是通过DSL 层策略模式完成的,以在运行时获取适当的驱动程序和流。所以,从设计的角度来看,它看起来像这样:

                              ===========================
                              | Gherkin (feature files) |
                              ===========================
                                          |
                         =====================================
                         | Step definitions (step_functions) |
                         =====================================
                                          |
                            ===============================
                            |            DSL              |
                            | (domain_models, strategies) |
                            |     e.g. login, register    |
                            ===============================
                                          |
                      ==============================================
                      |              Selenium Wrappers             |
                      |    (facade, decorators, adapters, proxy)   |
                      |e.g. atoms/element_actions.py or elementium |
                      ==============================================
                                          |
                         =========================================
                        |          Automation code              |
                        | (python bindings, protractor porting) |
                        =========================================
                                   /                  \
          _________________________________________________________________
                                SELENIUM ARCHITECTURE HERE
                              /                            \
                     ==============                 =================
                     | appium_api |                 | webdriver_api |
                     ==============                 =================
                            |                               |
                    =======   ===========    ==============   ===============
                    | iOS |   | Android |    |ChromeDriver|   |FirefoxDriver|
                    =======   ===========    ==============   ===============

您需要做的就是将自定义标志传递给您的特定/CI 运行,就像这样-D platform=desktop -D browser=chrome。这可以通过 TagsManager 获取并通过调度映射执行到适当的策略。

所以,你不需要

构建两个测试套件,一个用于移动设备,一个用于桌面


推荐阅读