51Testing软件测试论坛

 找回密码
 (注-册)加入51Testing

QQ登录

只需一步,快速开始

微信登录,快人一步

手机号码,快捷登录

查看: 10721|回复: 0
打印 上一主题 下一主题

Cucumber Java新手上路(2)- java环境配置,工程建立及初步应用

[复制链接]
  • TA的每日心情
    无聊
    2016-2-23 22:26
  • 签到天数: 3 天

    连续签到: 1 天

    [LV.2]测试排长

    跳转到指定楼层
    1#
    发表于 2016-2-14 22:06:22 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    首先分享两个链接地址,一个是乙醇分享的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理论上对应

    目录图例如下:

    好了,到此测试工程建立完毕

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


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


    0 Scenarios
    0 Steps
    0m0.000s


    如图:


    目前只建立了工程目录,还没有任何的源码文件,接下来写一个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

    • Feature:用来描述我们需要测试的功能
    • Scenario: 用来描述测试场景
    • Given: 前置条件
    • When: 描述测试步骤
    • Then: 断言
    • And:描述与上述关键字同级别的另一个操作
    再次运行工程,得到如下结果:
    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+)$").........




    意思是说有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)


    说明测试用例运行成功

    特别说明:在代码中@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

    x
    分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
    收藏收藏
    回复

    使用道具 举报

    本版积分规则

    关闭

    站长推荐上一条 /1 下一条

    小黑屋|手机版|Archiver|51Testing软件测试网 ( 沪ICP备05003035号 关于我们

    GMT+8, 2024-11-8 04:51 , Processed in 0.065223 second(s), 24 queries .

    Powered by Discuz! X3.2

    © 2001-2024 Comsenz Inc.

    快速回复 返回顶部 返回列表