行为驱动:Cucumber + Selenium + Java(一) - Cucumber简单操作实例

场景(Scenarios)

     场景是Cucumber结构的核心之一。每个场景都以关键字“Scenario:”(或本地化一)开头,后面是可选的场景标题。每个Feature可以有一个或多个场景,每个场景由一个或多个步骤组成。一个非常简单的场景示例可以是:

     Scenario:验证帮助功能。给定用户导航到Facebook。当用户单击帮助时,将打开帮助页面。

     考虑一种情况,其中我们需要不止一次地执行测试场景。假设,我们需要确保登录功能适用于所有类型的订阅用户。这需要多次执行登录功能场景。复制粘贴相同的步骤为了只重新执行代码,似乎不是一个聪明的主意。为此,Gherkin提供了一个更多的结构,这是场景概要。

     Scenario Outline: 场景大纲类似于场景结构;唯一的区别是提供多个输入。从下面的示例中可以看出,测试用例保持不变,不可重复。在底部,我们为变量“Username”和“Password”提供了多个输入值。运行实际测试时,Cucumber将用提供的输入值替换变量,它将执行测试。一旦执行了pass-1,测试将使用另一个输入值重新运行第二次迭代。这样的变量或占位符可以用“<>”表示,同时用gherkin语句提及。

例如:ScenarioOutline:一个社交网站的登录功能。将用于引导到Facebook。当用户输入用户名:<username>,密码:<password>,这时登录成功。

参数列表如下:

    ![](https://s4.51cto.com/images/blog/202011/30/21eb5d715587283889578fa1d41f4302.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_30,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=)  

有一些提示和技巧来巧妙地定义Cucumber场景:

  1. 每个步骤应该清楚地定义,以便它不会给读者造成任何混乱。

  2. 不要重复测试场景,如果需要使用场景大纲来实现重复。

  3. 以一种方式开发测试步骤,它可以在多个场景和场景大纲中使用。

  4. 尽可能保持每个步骤完全独立。例如:“给定用户已登录”。这可以分为两个步骤:输入用户名、点击登录。

附注(Annotations) 附注是预定义的文本,其具有特定的含义。 它让编译器/解释器知道,应该在执行时做什么。Cucumber有以下几个附注。

Given 它描述了要执行的测试的先决条件。示例:GIVEN I am a Facebook user

When 它定义任何测试场景执行的触发点。示例:WHEN I enter "<username>"

Then Then保存要执行的测试的预期结果。示例:THEN loginshould be successful

And 它提供任何两个语句之间的逻辑AND条件。AND可以与GIVEN、WHEN和THEN语句结合使用。示例:WHEN I enter my "<username>" AND Ienter my "<password>"

But 它表示任何两个语句之间的逻辑或条件。But可以与GIVEN、WHEN和THEN语句结合使用。示例:THEN login should be successful.BUT home page should not be missing

Scenario 关于测试下的场景的详细信息需要在关键字“Scenario:”之后捕获。示例:

Scenario:

        GIVEN I am aFacebook user

        WHEN I enter my

        AND I enter my

        THEN loginshould be successful.

        BUT home pageshould not be missing.

Scenario Outline
Scenario Outline: Login functionality for a socialnetworking site.

     Givenuser navigates to Facebook

     WhenI enter Username as "<username>"

     AndPassword as "<password>"

     Thenlogin should be unsuccessful

示例:

     ![](https://s4.51cto.com/images/blog/202011/30/d36ee50a6d690451c1df841821509813.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_30,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=)

Background Background通常具有在每个场景运行之前要设置什么的指令。但是,它在“Before”hook之后执行。因此,当我们想要设置Web浏览器或者我们想要建立数据库连接时,这时最佳的运用代码的方式。示例:

     Background:

     Go to Facebook home page.

场景实例

Step_1:创建一个名为:parm.feature的feature文件。创建步骤,在src\test\resources\feature路径下,创建parm.feature,然后输入文件名:parm.feature,打开文件,填写如下信息到文件,并保存:


Feature: 360影视登录页面参数化登录功能

#怎样实现重复输入账号密码操作的步骤
  Background: 用户打开360影视首页
    Given 用户正停留在360影视登录页

#输入账号密码a1/a1
  Scenario:
    When 用户输入用户名 "a1"
    And 用户输入密码 "a1"
    Then 登录失败,提示手机号不合法

#输入账号密码a2/a2
  Scenario:
    When 用户输入用户名 "a2"
    And 用户输入密码 "a2"
    Then 登录失败,提示手机号不合法

#输入账号密码a3/a3
  Scenario:
    When 用户输入用户名 "a3"
    And 用户输入密码 "a3"
    Then 登录失败,提示手机号不合法

Step_2:创建一个step定义文件。创建步骤,创建一个类ParamDemo,java

ParamDemo.java



package com.cucumber.demo;

import cucumber.api.java.en.Given;
import cucumber.api.java.en.Then;
import cucumber.api.java.en.When;
import org.junit.Assert;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;

public class ParamDemo {

    WebDriver driver;

    @Given("^用户正停留在360影视登录页$")
    public void goToCsdn() {
        driver = new ChromeDriver();
        driver.navigate().to("https://i.360kan.com/login");
        driver.manage().window().maximize();
    }

    @When("^用户输入用户名 \"(.*)\"$")
    public void enterUsername(String arg1) {
        driver.findElement(By.name("loginname")).sendKeys(arg1);
    }

    @When("^用户输入密码 \"(.*)\"$")
    public void enterPassword(String arg1) {
        driver.findElement(By.name("loginpassword")).sendKeys(arg1);
        driver.findElement(By.linkText("立即登录")).click();
    }

    @Then("^登录失败,提示手机号不合法$")
    public void checkFail() {
        String msg=driver.findElement(By.xpath("//p[@class='b-signin-error js-b-signin-error error-2']")).getText();
        Assert.assertEquals("输入手机号不合法",msg);
        driver.close();
    }
}

Step_3:创建一个runner 类文件。创建步骤,创建执行文件RunCukesTest.java

import cucumber.api.CucumberOptions;
import cucumber.api.junit.Cucumber;
import org.junit.runner.RunWith;
 
@RunWith(Cucumber.class)
@CucumberOptions(
        features = {"src/test/resources/feature/"},
        format = {"pretty", "html:target/cucumber", "json:target/cucumber.json"},
        glue = {"com.cucumber"}
)
public class RunCukesTest {
}

Step_4:运行test的选项:选择RunCukesTest.java,右击选择“Run as”运行即可

参考链接:https://blog.csdn.net/henni_719/article/details/53608144

EOF

本文作者:久曲建的测试窝 本文链接:https://www.cnblogs.com/longronglang/p/10424079.html 关于博主:评论和私信会在第一时间回复。或者直接私信我。 版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处! 声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力! 优秀不够,你是否无可替代

欢迎关注我的微信公众号:软件测试君