我正在用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-..
列表,并将其用于所有或部分测试。
因此,所有测试都应该可以访问该列表。
一个可能的解决方案是编写一个宏特性来运行所有的步骤,这意味着我每次都要运行所有的测试
从我们的评论来看,我可以看到实现你目标的两种方法:
使用标记
您可以利用标签并从
scenario
objects访问它们。您应该注意以下几点:这对我们将要做的事情非常重要。有一个关于如何使用标记控制事物的教程,可以在here中找到,但是一般的想法是让场景文件的结构如下:
在
environment.py
中,您将拥有:在
steps
文件中,您可以访问浏览器:根据您的看法,缺点或者好处是,每个场景都需要用
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基本上是执行上面场景大纲的示例表中的一行。第一阶段基本上是第二阶段的蹦床。
另请参见:
相关问题 更多 >
编程相关推荐