cucumber并发java_行为驱动:Cucumber + Selenium + Java(二) - 第一个测试

2023-10-11 20:20

本文主要是介绍cucumber并发java_行为驱动:Cucumber + Selenium + Java(二) - 第一个测试,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

在上一篇中,我们搭建好了Selenium + Cucumber + Java的自动化测试环境,这一篇我们就赶紧开始编写我们的第一个BDD测试用例。

2.1 创建features

我们在新建的java项目中,新建一个文件夹名为features,然后右键点击该文件夹,新建一个名为test.feature的新文件。

文件建好后,你会看到他呈现出与普通文本文件不同的样式,并且自带很多内容:

4d2d3de84baf5ced4831dc547358ffcc.png

这些内容实际是cucumber给我们提供的feature模板,我们按照这个模板写出第一个测试用例。

我们用自然语言,结合Given,When,And,Then这些关键字来编写测试用例:

Feature: Test baidu search for selenium

Search for selenium on baidu

@tag

Scenario: Test Baidu search for selenium

Given I navigate to baidu

When I send keyword into searchbox

And I click search button

Then The correct search result is returned

可以看到,这个用例就是用自然表述性语言撰写的,具有很高的可读性,不需要懂代码也都能看明白这个用例测试的内容:就是去到百度,然后搜索关键字,判断搜索是否成功。

2.2 创建runner

这个用例既然是自然语言撰写的,也就还暂时不能实现自动化执行,我们接下来还要编写这个用例对应的实际selenium java代码的实现过程,其实就是用java对我们的用例进行“翻译”,好让selenium能读懂,并进行测试的执行。

首先,在src目录下新建package名为runner,然后新建一个java class名为cucumberRunner,这个类里面我们写入如下代码:

packageRunner;importorg.junit.runner.RunWith;importcucumber.api.CucumberOptions;importcucumber.api.junit.Cucumber;

@RunWith(Cucumber.class)

@CucumberOptions(features=("features"),glue=("stepDefinition"))public classCucumberRunner {

}

这个类主要起的作用实际上就是我们cucumber的执行入口,同时他定义了cucumber用例执行时的一些特性,比如CucumberOptions标签里,features指定用例文件的目录,glue则指定对应java翻译代码的位置。写好这个类以后,我们可以马上右键对他点击,运行Run As -> JUnit Test。运行之后,系统输出了一些日志:

f1dcd510f1fd5c3288e6cecc94467094.png

从日志里面我们可以看到,系统提示:我们定义了4个测试步骤,但都没有实现,下面我们马上来实现这些步骤。

2.3 实现步骤定义

在src目录下新建stepDefinitions包,然后在包下新建一个java class名为TestBaidu,这个类里面我们就实现之前的feature里面定义的测试步骤。

我们输入如下代码:

packagestepDefinitions;importjava.util.concurrent.TimeUnit;importorg.openqa.selenium.By;importorg.openqa.selenium.WebDriver;importorg.openqa.selenium.WebElement;importorg.openqa.selenium.firefox.FirefoxDriver;importorg.testng.Assert;importcucumber.api.PendingException;importcucumber.api.java.en.Given;importcucumber.api.java.en.Then;importcucumber.api.java.en.When;public classTestBaidu {

WebDriver driver;

@Given("^I navigate to baidu$")public void i_navigate_to_baidu() throwsThrowable {

driver= newFirefoxDriver();

driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);

driver.manage().window().maximize();

driver.get("http://www.baidu.com");

}

@When("^I send keyword into searchbox$")public void i_send_keyword_into_searchbox() throwsThrowable {

WebElement searchBox;

searchBox= driver.findElement(By.id("kw"));

searchBox.sendKeys("selenium");

}

@When("^I click search button$")public void i_click_search_button() throwsThrowable {

WebElement searchButton;

searchButton= driver.findElement(By.id("su"));

searchButton.click();

}

@Then("^The correct search result is returned$")public void the_correct_search_result_is_returned() throwsThrowable {

WebElement searchResult;

searchResult= driver.findElement(By.xpath(".//*[@id='container']/div[2]/div/div[2]/span"));

Assert.assertTrue(searchResult.isDisplayed());

Thread.sleep(2000);

driver.quit();

}

}

写好以后,再次运行runner类,可以看到测试执行成功了:)

947cf0c0c2ece5f410d87d0113b902f7.png

下一篇我们来使用tags对cucumber测试用例进行分组。

这篇关于cucumber并发java_行为驱动:Cucumber + Selenium + Java(二) - 第一个测试的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/190594

相关文章

基于SpringBoot+Mybatis实现Mysql分表

《基于SpringBoot+Mybatis实现Mysql分表》这篇文章主要为大家详细介绍了基于SpringBoot+Mybatis实现Mysql分表的相关知识,文中的示例代码讲解详细,感兴趣的小伙伴可... 目录基本思路定义注解创建ThreadLocal创建拦截器业务处理基本思路1.根据创建时间字段按年进

Java编译生成多个.class文件的原理和作用

《Java编译生成多个.class文件的原理和作用》作为一名经验丰富的开发者,在Java项目中执行编译后,可能会发现一个.java源文件有时会产生多个.class文件,从技术实现层面详细剖析这一现象... 目录一、内部类机制与.class文件生成成员内部类(常规内部类)局部内部类(方法内部类)匿名内部类二、

SpringBoot实现数据库读写分离的3种方法小结

《SpringBoot实现数据库读写分离的3种方法小结》为了提高系统的读写性能和可用性,读写分离是一种经典的数据库架构模式,在SpringBoot应用中,有多种方式可以实现数据库读写分离,本文将介绍三... 目录一、数据库读写分离概述二、方案一:基于AbstractRoutingDataSource实现动态

Springboot @Autowired和@Resource的区别解析

《Springboot@Autowired和@Resource的区别解析》@Resource是JDK提供的注解,只是Spring在实现上提供了这个注解的功能支持,本文给大家介绍Springboot@... 目录【一】定义【1】@Autowired【2】@Resource【二】区别【1】包含的属性不同【2】@

springboot循环依赖问题案例代码及解决办法

《springboot循环依赖问题案例代码及解决办法》在SpringBoot中,如果两个或多个Bean之间存在循环依赖(即BeanA依赖BeanB,而BeanB又依赖BeanA),会导致Spring的... 目录1. 什么是循环依赖?2. 循环依赖的场景案例3. 解决循环依赖的常见方法方法 1:使用 @La

Java枚举类实现Key-Value映射的多种实现方式

《Java枚举类实现Key-Value映射的多种实现方式》在Java开发中,枚举(Enum)是一种特殊的类,本文将详细介绍Java枚举类实现key-value映射的多种方式,有需要的小伙伴可以根据需要... 目录前言一、基础实现方式1.1 为枚举添加属性和构造方法二、http://www.cppcns.co

Elasticsearch 在 Java 中的使用教程

《Elasticsearch在Java中的使用教程》Elasticsearch是一个分布式搜索和分析引擎,基于ApacheLucene构建,能够实现实时数据的存储、搜索、和分析,它广泛应用于全文... 目录1. Elasticsearch 简介2. 环境准备2.1 安装 Elasticsearch2.2 J

Java中的String.valueOf()和toString()方法区别小结

《Java中的String.valueOf()和toString()方法区别小结》字符串操作是开发者日常编程任务中不可或缺的一部分,转换为字符串是一种常见需求,其中最常见的就是String.value... 目录String.valueOf()方法方法定义方法实现使用示例使用场景toString()方法方法

Java中List的contains()方法的使用小结

《Java中List的contains()方法的使用小结》List的contains()方法用于检查列表中是否包含指定的元素,借助equals()方法进行判断,下面就来介绍Java中List的c... 目录详细展开1. 方法签名2. 工作原理3. 使用示例4. 注意事项总结结论:List 的 contain

Java实现文件图片的预览和下载功能

《Java实现文件图片的预览和下载功能》这篇文章主要为大家详细介绍了如何使用Java实现文件图片的预览和下载功能,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... Java实现文件(图片)的预览和下载 @ApiOperation("访问文件") @GetMapping("