如何在浏览器列表上运行所有测试?

2024-05-15 04:18:29 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在用python behave编写一个测试套件,并希望在platforms-browsers-browserversions列表上运行测试

到目前为止,我所尝试的是将变量从特性传递到步骤定义,这对于一个场景非常有效。 我是这样做的

Feature: Test Main Page 

  Scenario Outline: Test Button with <browser>
    Given I go to main page with "<platform>""<Browser>""<BrowserVersion>"
    Then I can see Fahrzeug finden Button

    Examples: Browsers
        | platform        | Browser | BrowserVersion  |
        | Windows 10      | Chrome  | 76.0            |

我想做的是构建一个platforms-browsers-..列表,并将其用于所有或部分测试。 因此,所有测试都应该可以访问该列表。 一个可能的解决方案是编写一个宏特性来运行所有的步骤,这意味着我每次都要运行所有的测试


Tags: testbrowser列表定义套件with步骤button
2条回答

从我们的评论来看,我可以看到实现你目标的两种方法:

使用标记

您可以利用标签并从scenarioobjects访问它们。您应该注意以下几点:

documentation snippet

这对我们将要做的事情非常重要。有一个关于如何使用标记控制事物的教程,可以在here中找到,但是一般的想法是让场景文件的结构如下:

@Windows10_Chrome_76.0
@Windows10_Firefox_68.0
Scenario Outline: Test Button with the browser
    Given I go to main page with the browser
    Then I can see Fahrzeug finden Button

environment.py中,您将拥有:

def before_scenario(context, scenario):      
    for tag in scenario.tags:
        (platform, browser, browserVersion) = tag.split('_')

        if browser == "Chrome":
            # Initialize the browser with platform, browser, etc.
            context.browser = WebDriver.Chrome()
        elif browser == "Firefox":
            # Initialize the browser with platform, browser, etc.
            context.browser = WebDriver.Firefox()

steps文件中,您可以访问浏览器:

@given(u'I go to main page with the browser')
def step_impl(context)
    context.browser.get('https://yourUrl.com')

根据您的看法,缺点或者好处是,每个场景都需要用platform-browser-browserVersion标记,这有点麻烦。但主要的好处是,您可以更有效地控制在哪个浏览器上进行测试

使用类

您可以拥有某种浏览器处理类,比如BrowserHandler单例。但是,使用这种方法忽略了Python Behave的好处,所以我建议这样做

如果我理解正确的话,您基本上希望有一个基于browser、browser.version等运行大量测试(特性/场景)的参数化测试套件,并且您希望为上面的每个参数组合运行它

潜在解决方案:

  • 通过浏览器等进行迭代的外部自动化,通过使用userdata参数作为测试运行的上下文,为每次迭代运行behave -D browser=$CURRENT_BROWSER -D browser_version=$CURRENT_BROWSER_VERSION ...

  • 内部自动化:使用behave feature file作为自动化脚本,类似于上面的方法,但是它需要一个类似于When I run "behave -D browser=<Browser> -D browser_version=<BrowserVersion> ...more_here的步骤,通过使用上面的ScenarioOutline(意味着一个类似的ScenarioOutline)

提示:

  • 外部自动化使用“构建脚本”(shell脚本、makefile、invoke task…)运行behave N次,每个参数组合一次

  • 内部自动化分为两个阶段。您使用阶段1中的一个功能文件与阶段2中的许多其他功能文件一起运行behave。阶段2基本上是执行上面场景大纲的示例表中的一行。第一阶段基本上是第二阶段的蹦床。

另请参见:

相关问题 更多 >

    热门问题