51Testing软件测试论坛
标题:
Selenium + TestNG + Cucumber + Maven 行为驱动测试框架
[打印本页]
作者:
lsekfe
时间:
2020-8-5 12:02
标题:
Selenium + TestNG + Cucumber + Maven 行为驱动测试框架
环境配置
使用工具Selenium、testng、cucumber、maven
工具介绍:
TestNG:
TestNG是一个开源自动化测试框架,TestNG类似于JUnit(特别是JUnit 4),但它不是JUnit框架的扩展。它的灵感来源于JUnit。它的目的是优于JUnit,尤其是在用于测试集成多类时。
TestNG中使用的注解
[attach]129166[/attach]
注解之间存在执行顺序
BeforeSuite -> BeforeTest -> BeforeClass -> BeforeMethod -> Test-> AfterMethod -> AfterClass -> AfterTest -> AfterSuite
TestNG 中的xml文件
使用ide或eclipse执行引用了testng标签类的话会自动生成一个default.xml文件,当然我们也可以通过新建配置文件的方式来执行我们的测试类。
下面是一个简略的tesng.xml文件
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="Suite" parallel="tests" thread-count="2" preserve-order="true">
<parameter name="runip" value="http://10.168.1.191:4444"/>
<test name="Test1">
<classes>
<class name="web.runner.service.AddStaffRunner" />
<class name="web.runner.service.UpdateStaffRunner" />
<class name="web.runner.service.DisableStaffRunnner" />
<class name="web.runner.service.SearchStaffRunner" />
</classes>
</test>
<test name="Test2">
<classes>
<class name="web.runner.protal.LoginRunner"/>
</classes>
</test>
</suite>
复制代码
说明:
suite定义一个测试套件,可以设置是否使用多线程,可包含多个测试用例或者测试group。
parallel = classes 在相同线程中相同类中的运行所有的方法,但是每个类都会用不同的线程运行。
thread-count =2 可同时执行2个case。
preserve-order = true classes和methods按照配置中的顺序执行,false为乱序执行。
parameter 标签传递参数。
Cucumber介绍
Cucumber可以让人们用近似自然的语言去描述Feature和场景,根据Feature驱动开发。用作软件技术人员和非技术之间验收测试的桥梁。它是一个命令行工具。运行后,会执行features中的内容。feature中的step会调用stepdefinitions,stepdefinitions就是用代码来描述的场景与步骤,我们将Cucumber这个框架和Selenium结合起来实现自动化测试,就可以让我们的自动化过程体现出行为驱动的特性。
[attach]129167[/attach]
feature文件的基本构成
Given: Given一般用于在Scenario中描述系统的初始状态。它的目的是使系统在使用前处于一个已知的状态,要避免在Given中谈论交互上的事情。
When: When描述一个事件或者动作。他可以是与系统间的交互,也可以是由另一个系统触发的事件。cucumber强烈推荐每个Scenario只有一个When,当你觉得需要加更多的When的时候,通常就是需要拆分成多个Scenario的信号。
Then: Then描述期望的输出或者结果。对Then的step definition应该使用断言去比较期望值和实际值,就和[url=]
单元测试
[/url]差不多。
But和And: 当有几个Given,When,Then的时候,可以用And和But增加其可读性(不推荐使用and和but)。
Background :当在同一个Feature里有多个Scenario有相同Given的时候,可以使用Background将这些Given抽到一起。这样这个Feature的每个Scenario在运行的时候,都会先运行一次Background。(不要设置复杂的状态、尽量简短、一个feature只能有一个background)。
Scenario :表示一个测试场景。
Scenario Outline :表示参数化的测试场景,与Examples配合使用,每次运行feature文件时都会去逐行读取Examples中的参数运行该场景。
对应传统测试工具:
Feature (功能)-------------test suite (测试用例集)
Scenario(情景)-----------test case (测试用例)
Given(给定)-------------setup(创建测试所需环境)
When(当)----------------test(触发被测事件)
Then(则)-----------------assert(断言,验证结果)
创建Maven工程
在pom文件中配置相关jar包
cucumber-java
cucumber-core
cucumber-testng
gherkin
selenium-java
testng
[attach]129168[/attach]
配置完成后,maven会从maven中央仓库自动下载相关的jar包文件,并自动导入。
创建feature文件:
[attach]129169[/attach]
这是一个简单的登录场景,大概流程为进入到登录页面,然后输入用户名和密码,最后点击提交按钮,再验证登录是否成功,参数化每次运行逐行读取Examples中的参数,所以这个场景会以不同的参数运行四次。
可以看出这个常用是用简单的描述性语言写的,具有很高的可读性,不需要懂代码也可以看明白这个用例测试的内容。
定义并关联测试Step(步骤):
package web.testcases.protal;
import org.openqa.selenium.WebDriver;
import io.cucumber.java.en.Given;
import io.cucumber.java.en.Then;
import io.cucumber.java.en.When;
import web.autotest.untils.BrowserDriver;
import web.page.base.HomeBasePage;
import web.step.base.protal.LoginDefinition;
public class LoginTestCase{
public static WebDriver driver;
private LoginDefinition loginDef;
private HomeBasePage homeBasePage;
public LoginTestCase() {
driver = new BrowserDriver().setUp();
loginDef = new LoginDefinition(driver);
homeBasePage = new HomeBasePage(driver);
}
@Given("^进入到登录页面$")
public void toLoginPage(){
loginDef.toFunction("登录");
}
@When("^登录界面输入用户名(.*)密码(.*)点击登录按钮$")
public void ClickBtnToHome(String username, String password){
loginDef.LoginFunction(username, password);
}
@Then("^判断正确登录情况是否正确(.*)$")
public void VerifyRight (String message){
loginDef.verifyEquals(homeBasePage.getText(homeBasePage.userinfometion), message);
}
@Then("^判断错误登录情况是否正确(.*)$")
public void VerifyError(String message){
loginDef.verifyEquals(loginDef.isTextPresent(message));
}
}
复制代码
在步骤类中通过注解来关联feature文件中的步骤,“(.*)”表示匹配所有传过来的参数,也可使用正则表达式进行匹配,而步骤方法中则是你需要调用的方法
创建Runner类
使用runner类的主要目的是可使用testng来调用feature文件,并生成测试结果。也可以把feature文件所要执行的内容看成一个@Test方法,在Runner中可以自由使用testng中的注解,比如每次运行结束后在@AfterMethod注解方法中关闭[url=]
浏览器
[/url]。
[attach]129170[/attach]
说明:
该类必须继承AbstractTestNGCucumberTests类,否则使用testng调用该类时会找不到feature文件。
features:feature文件所在路径,该路径必须是项目全路径去掉项目名的路径。
glue:步骤类所在包名,只需要写包名成即可,包名中的“.”使用“/”代替。
pulgin:插件,这里使用的是指定html与json结果存放路径。
monochrome:表示在控制台输出时,输出的信息是否可读,ture表示可读,false表示非可读。
配置TestNG文件
[attach]129171[/attach]
配置完成以后可以通过运行该xml文件来执行我们的测试用。
执行完成以后得到执行结果
[attach]129172[/attach]
作者:
Miss_love
时间:
2020-12-25 13:55
支持分享
欢迎光临 51Testing软件测试论坛 (http://bbs.51testing.com/)
Powered by Discuz! X3.2