zoukankan      html  css  js  c++  java
  • BDD自动化测试框架cucumber(1): 最基本的demo

    BDD(Behavior Driven Development),行为驱动开发, 对应自动化测试框架,python有behave,java有cucumber, 这次记录cucumber+springboot+maven的自动化测试框架。

    基本结构如下:

     1)POM.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <project xmlns="http://maven.apache.org/POM/4.0.0"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
        <modelVersion>4.0.0</modelVersion>
    
        <!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-parent -->
        <parent>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-parent</artifactId>
            <version>2.3.3.RELEASE</version>
        </parent>
    
        <groupId>org.example</groupId>
        <artifactId>cucumberExample</artifactId>
        <version>1.0-SNAPSHOT</version>
    
        <!--can set the same version for the same module-->
        <properties>
            <cucumber.version>2.3.1</cucumber.version>
            <cucumber-reporting.version>3.14.0</cucumber-reporting.version>
            <maven.compiler.version>3.7.0</maven.compiler.version>
            <java.compiler.version>1.8</java.compiler.version>
        </properties>
    
        <dependencies>
            <!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-test -->
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-test</artifactId>
                <scope>test</scope>
            </dependency>
    
            <!-- https://mvnrepository.com/artifact/io.cucumber/cucumber-java8 -->
            <dependency>
                <groupId>io.cucumber</groupId>
                <artifactId>cucumber-java8</artifactId>
                <version>${cucumber.version}</version>
            </dependency>
    
            <!-- https://mvnrepository.com/artifact/io.cucumber/cucumber-spring -->
            <dependency>
                <groupId>io.cucumber</groupId>
                <artifactId>cucumber-spring</artifactId>
                <version>${cucumber.version}</version>
            </dependency>
    
            <!-- https://mvnrepository.com/artifact/io.cucumber/cucumber-junit -->
            <dependency>
                <groupId>io.cucumber</groupId>
                <artifactId>cucumber-junit</artifactId>
                <version>${cucumber.version}</version>
            </dependency>
            <!-- https://mvnrepository.com/artifact/net.masterthought/cucumber-reporting -->
            <dependency>
                <groupId>net.masterthought</groupId>
                <artifactId>cucumber-reporting</artifactId>
                <version>${cucumber-reporting.version}</version>
            </dependency>
    
        </dependencies>
        <build>
            <plugins>
                <plugin>
                    <!-- https://mvnrepository.com/artifact/org.apache.maven.plugins/maven-compiler-plugin -->
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-compiler-plugin</artifactId>
                    <version>${maven.compiler.version}</version>
                    <configuration>
                        <source>${java.compiler.version}</source>
                        <target>${java.compiler.version}</target>
                    </configuration>
                </plugin>
                <plugin>
                    <!-- https://mvnrepository.com/artifact/org.apache.maven.plugins/maven-surefire-plugin -->
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-surefire-plugin</artifactId>
                    <version>3.0.0-M5</version>
                    <inherited>true</inherited>
                    <dependencies>
                        <!-- https://mvnrepository.com/artifact/org.apache.maven.surefire/surefire-junit4 -->
                        <dependency>
                            <groupId>org.apache.maven.surefire</groupId>
                            <artifactId>surefire-junit4</artifactId>
                            <version>3.0.0-M5</version>
                        </dependency>
                    </dependencies>
                    <configuration>
                        <argLine>-Xmx1024m</argLine>
                        <argLine>-Xms1024m</argLine>
                        <forkCount>3.0c</forkCount>
                        <reuseForks>true</reuseForks>
                        <testFailureIgnore>true</testFailureIgnore>
                        <includes>
                            <include>**/demoRunner.class</include>
                        </includes>
                    </configuration>
                </plugin>
            </plugins>
        </build>
    
    </project>

    2)features: 最重要的环节,用户场景

    @login
    Feature: login function
    
      Scenario Outline: password checking
        Given I have open the login page
        And input account=<account>
        And input password=<password>
        When I click the LOGIN button
        Then it return login success to me
    
        Examples:
        |account|password|
        |user1  |password1|
        |user2  |password2|

    3)steps: 实现feature 里面每一个步骤的逻辑,一句话对应一个step一个方法

    备注:这里我还没有加上方法体,以后再加

    package steps;
    /*
     * @author Helen Lee
     * @create 2020/9/11
     * @description
     */
    import cucumber.api.java.en.Given;
    import cucumber.api.java.en.Then;
    import cucumber.api.java.en.When;
    import org.junit.Assert;
    
    public class login_steps {
        @Given("I have open the login page")
        public void iHaveOpenTheLoginPage() {
        }
    
        @Given("input account=(.*)")
        public void inputAccountAccount(String account) {
    
        }
    
        @Given("input password=(.*)")
        public void inputPasswordPassword(String password) {
    
        }
    
        @When("I click the LOGIN button")
        public void iClickTheLOGINButton() {
    
        }
    
        @Then("it return login success to me")
        public void itReturnLoginSuccessToMe() {
        }
    }

    4)runner: 执行testcases

    /*
     * @author Helen Lee
     * @create 2020/9/11
     * @description
     */
    
    import cucumber.api.CucumberOptions;
    import cucumber.api.junit.Cucumber;
    import org.junit.runner.RunWith;
    import org.springframework.boot.test.context.SpringBootTest;
    
    @RunWith(Cucumber.class)
    @SpringBootTest
    @CucumberOptions(
            tags = {"@login"},
            features = {"src/main/resources/features"},
            glue = {"steps"},
            plugin = {
                    "pretty",
                    "html:target/cucumber",
                    "json:target/cucumberReportJsonFiles/cucumber-report.json"
            }
    )
    public class demoRunner {
        public void test() {
        }
    }

    完成这四个之后,就可以run demoRunner了,结果如下:跑了user1/password1 和user2/passwords两个test cases

  • 相关阅读:
    【Win 10 应用开发】获取本机的IP地址
    【Win 10应用开发】延迟共享
    【Win 10 应用开发】共享目标(UWP)
    【Win 10应用开发】响应系统回退键的导航事件
    编写Windows服务疑问2:探索服务与安装器的关系
    编写Windows服务疑问1:操作过程
    服务器常见错误代码500、501、502、503、504、505
    git reset与git revert的区别
    Redis集群方案怎么做?
    ThinkPHP设计模式与Trait技术
  • 原文地址:https://www.cnblogs.com/helenMemery/p/13646026.html
Copyright © 2011-2022 走看看