51Testing软件测试论坛

标题: Cucumber Java新手上路(2)- java环境配置,工程建立及初步应用 [打印本页]

作者: 随尘    时间: 2016-2-14 22:06
标题: Cucumber Java新手上路(2)- java环境配置,工程建立及初步应用
首先分享两个链接地址,一个是乙醇分享的cucumber框架jar包,一个是我分享的cucumber框架jar包云盘
http://pan.baidu.com/s/1pJjA4SN
http://pan.baidu.com/s/1o7cUSye
配置好cucumber测试框架之后,配置电脑的Java环境(去问度娘)

建立文件夹及目录结构:
---cucumber_java
     |---features                          放置cucumber自然语言测试用例的文件夹,该文件夹中的文件以.feature结尾
     |---implementation               放置java中一些工具类或外部调用类的文件夹,该文件夹中的文件以.java和.class结尾
     |---jars                                 放置jar包的文件夹,比如一些外部工具jar包,cucumber测试框架的java jar包就放在这个文件夹下
     |---step_definitions               放置java测试用例的文件夹,内容与features理论上对应

目录图例如下:
[attach]100019[/attach]
好了,到此测试工程建立完毕

使用命令行运行一下工程:
在工程根目录输入:java -cp "./jars/*" cucumber.api.cli.Main features


得到结果:
No features found at [features]


0 Scenarios
0 Steps
0m0.000s


如图:
[attach]100020[/attach]

目前只建立了工程目录,还没有任何的源码文件,接下来写一个feature文件
feature文件中描述的就是自然语言的测试用例,可以使大家都可以看懂


在features目录下,新建java_test.feature:
    Feature: Test Jave cucumber use scene 5+6=11

    Scenario: test java cucumber sum
        Given I input a number 5
        And input other number 6
        When Calculation of two numbers sum
        Then result is 11

再次运行工程,得到如下结果:
1 Scenarios(1 undefined)
4 Steps(4 undefined)
0m0.000s

You can implement missing steps with the snippets below:
@Given("^I input a number (\\d+)$").........

[attach]100021[/attach]


意思是说有1个Scenario,4个step没有定义;
这说明我们的feature文件创建成功了,但是只有自然语言测试用例是无法完成的,需要使用编程语言来实现对自然语言测试用例的方法,
按照系统中的提示去写,在step_definitions文件夹中新建sum.java:
package step_definitions;
import cucumber.api.*;
import cucumber.api.java.en.*;
import static org.junit.Assert.*;
import org.junit.*;

public class sum {
        int a;
        int b;
        int c;
       
    @Test
    @Given("^I input a number (\\d+)$")
    public void number(int number) throws Throwable {  
                a = number;
    }
       
        @Test
        @And("^input other number (\\d+)$")
        public void other(int other) throws Throwable{
                b = other;
        }
       
        @Test
    @When("^Calculation of two numbers sum$")                                                      
    public void sum() throws Throwable {                           
        c = a+b;
    }      
       
    @Test       
    @Then("^result is (\\d+)$")                                                   
    public void result(int result) throws Throwable {                        
                assertEquals(result,c);
    }         

}


在工程根目录下运行:javac -cp "./jars/*;." step_definitions\*.java                         对java文档进行编译
在运行:java -cp "./jars/*;." cucumber.api.cli.Main -g step_definitions features        重新运行该工程
得到如下结果:
1 Scenarios(1 passed)
4 Steps(4 passed)

[attach]100022[/attach]
说明测试用例运行成功

特别说明:在代码中@Given,@And,@When,@Then,使用的是 import cucumber.api.java.en.*; 下的方法,当初找这个包用了很大的功夫
而标注后括号中的内容,与feature文件中的自然语句一致,已   ("^   开头,已  $")  结尾,数字部分用 (\\d+)代替,
如,feature: Given I input a number 5
    sum.java: @Given("^I input a number (\\d+)$")


这是告诉@Givne之后的代码块,我要执行Given I input a number 5这样一个操作,而操作传参就是5
其实整个过程总很难过,系统关注三个部分,“Given”,“5”,和“I input a number”
Given是执行的前置条件,条件内容为5,而 I input a number 这句其实想写什么都行,系统不会关注这部分的语法,只要feature与java代码中的内容保持一致即可








欢迎光临 51Testing软件测试论坛 (http://bbs.51testing.com/) Powered by Discuz! X3.2