我正在使用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-..列表,并将其与所有测试或部分测试一起使用。所以这个列表应该对所有的测试都是可访问的。一种可能的解决方案是编写一个运行所有步骤的宏功能,这意味着我每次都必须运行所有测试!
发布于 2019-09-20 02:44:33
继续我们的评论,我可以看到两种方法来实现你的目标:
使用标签
您可以利用标签并从scenario objects访问它们。您需要注意的是:

这对于我们接下来要做的事情非常重要。有一个关于如何用标签控制东西的教程,可以在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的好处,所以我建议您这样做。
发布于 2019-09-22 20:08:19
如果我理解正确的话,您基本上希望有一个参数化的测试套件,基于浏览器、browser.version等运行许多测试(功能/场景),并且您希望为上面的每个参数组合运行它。
潜在的解决方案:
behave -D browser=$CURRENT_BROWSER -D browser_version=$CURRENT_BROWSER_VERSION ...。When I run "behave -D browser=<Browser> -D browser_version=<BrowserVersion> ...more_here的步骤,通过使用上面的ScenarioOutline (意思是类似的步骤)提示:
另请参阅:
https://stackoverflow.com/questions/57972791
复制相似问题