Selenium + TestNG + Cucumber + Maven 行为驱动测试框架

发表于:2020-8-04 11:09

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:運命の出会い    来源:博客园

  环境配置
  使用工具Seleniumtestng、cucumber、maven
  工具介绍:
  TestNG:
  TestNG是一个开源自动化测试框架,TestNG类似于JUnit(特别是JUnit 4),但它不是JUnit框架的扩展。它的灵感来源于JUnit。它的目的是优于JUnit,尤其是在用于测试集成多类时。
  TestNG中使用的注解
  注解之间存在执行顺序
  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结合起来实现自动化测试,就可以让我们的自动化过程体现出行为驱动的特性。
  feature文件的基本构成
  Given: Given一般用于在Scenario中描述系统的初始状态。它的目的是使系统在使用前处于一个已知的状态,要避免在Given中谈论交互上的事情。
  When: When描述一个事件或者动作。他可以是与系统间的交互,也可以是由另一个系统触发的事件。cucumber强烈推荐每个Scenario只有一个When,当你觉得需要加更多的When的时候,通常就是需要拆分成多个Scenario的信号。
  Then: Then描述期望的输出或者结果。对Then的step definition应该使用断言去比较期望值和实际值,就和单元测试差不多。
  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
  配置完成后,maven会从maven中央仓库自动下载相关的jar包文件,并自动导入。
  创建feature文件:
  这是一个简单的登录场景,大概流程为进入到登录页面,然后输入用户名和密码,最后点击提交按钮,再验证登录是否成功,参数化每次运行逐行读取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注解方法中关闭浏览器
  说明:
  该类必须继承AbstractTestNGCucumberTests类,否则使用testng调用该类时会找不到feature文件。
  features:feature文件所在路径,该路径必须是项目全路径去掉项目名的路径。
  glue:步骤类所在包名,只需要写包名成即可,包名中的“.”使用“/”代替。
  pulgin:插件,这里使用的是指定html与json结果存放路径。
  monochrome:表示在控制台输出时,输出的信息是否可读,ture表示可读,false表示非可读。
  配置TestNG文件
  配置完成以后可以通过运行该xml文件来执行我们的测试用。
  执行完成以后得到执行结果

      本文内容不用于商业目的,如涉及知识产权问题,请权利人联系51Testing小编(021-64471599-8017),我们将立即处理
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号