Selenium——TestNG基础使用

TestNG介绍

  1. TestNG是一个与测试业务逻辑实现无关的测试框架,给测试提供一整套测试管理的解决方案;使用TestNG可以非常的管理被测系统所有测试脚本

  2. 给测试带来的便利:
    (1)丰富的断言方法,使用断言可以清晰的观察到测试的执行结果
    (2)提供了方便的注解方式来控制测试流程生命周期
    (3)通过参数化配置测试执行环境
    (4)提供了数据驱动测试解决方案
    (5)默认会提供HTML格式,并支持自定义扩展报告插件

  3. 基于注解,相比JUnit提供了更多的扩展功能,让程序员通过注解、分组、并行和参数化等多种方式组织和执行自动化测试脚本。
    官网链接

TestNG的常用注解

在这里插入图片描述

在此举一个简单的栗子:体会@test, @BeforeMethod, @AfterMethod, @BeforeClass,@AfterClass,

package testngdemo1;

import org.testng.annotations.AfterClass;
import org.testng.annotations.AfterMethod;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Test;

public class demo1 {
	
	public demo1() {
		System.out.println("...demo1的构造方法...");
	}
	
	@Test
	public void test1() {
		System.out.println("hello test1!!");
	}
	@Test
	public void test2() {
		System.out.println("hello test2!!");
	}
	@BeforeMethod
	public void before() {
		System.out.println("BeforeMethod");
	}
	@AfterMethod
	public void after() {
		System.out.println("AfterMethod");
	}
	
	@BeforeClass
	public void bclass() {
		System.out.println("@@@@BeforeClass");
	}
	@AfterClass
	public void aclass() {
		System.out.println("@@@@AfterClass");
	}
}


输出结果:
在这里插入图片描述

注意

  1. TestNG执行测试方法之前,会重新实例化测试类,即执行构造方法
  2. 如果继承父类,会先执行父类的构造方法
  3. 会先执行父类的BeforeClass
  4. 一个类里面可能存在多个测试方法(即被@Test注解的方法),默认测试方法的执行顺序是按照方法名的字典序升序排序执行的
    可用priority指定执行顺序(默认值为0),数值越小,越靠前执行。
@Test(priority = 0) 
public void testMethod3() { } 
@Test(priority = 1) 
public void testMethod2() { }
 @Test(priority = 2)
 public void testMethod1() { } 
这样指定以后,将按照testMethod3、testMethod2、testMethod1顺序执行
  1. 使用enable = false来跳过某测试方法
    @Test(enable = false)
  2. 依赖测试:某个测试用例被执行后再执行其他测试用例。可在不同测试方法间共享数据和程序状态
    举例说明:
    下述代码,如果并未用enable=false,应该先运行test1,test2,test3, 加上后,结果如下。
package testngdemo1;

import org.testng.annotations.Test;

public class demo1 {
	@Test
	public void test3() {
		System.out.println("333333");
	}
	@Test(dependsOnMethods="test3")
	public void test2() {
		System.out.println("2222");
	}
	@Test(dependsOnMethods="test2")
	public void test1() {
		System.out.println("111");
	}
}

运行结果:
在这里插入图片描述

7.TestNG提供了日志的功能,在测试过程中可以通过自定义方式记录测试脚本中的运行信息, 例如Reporter.log("已经打开浏览器了")

testng.xml

需要在当前包下新建一个.xml文件。
通过testng.xml的方式调用 TestNG:

  1. 举例说明testng.xml用法
    第一个代码块为xml文件中的内容
<!DOCTYPE suite SYSTEM "https://testng.org/testng-1.0.dtd" >
  
<suite name="Suite1" verbose="2" >
  <test name="test1" >
    <classes>
       <class name="testngdemo1.demo1" />
       <class name="testngdemo1.demo2" />
    </classes>
  </test>
</suite>

package testngdemo1;

import org.testng.annotations.AfterClass;
import org.testng.annotations.AfterMethod;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.BeforeTest;
import org.testng.annotations.Test;

public class demo1 {
	
	public demo1() {
		System.out.println("...demo1的构造方法...");
	}
	@Test
	public void test1() {
		System.out.println("hello test1!!");
	}
}

package testngdemo1;

import org.testng.annotations.AfterClass;
import org.testng.annotations.AfterMethod;
import org.testng.annotations.AfterTest;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.BeforeSuite;
import org.testng.annotations.BeforeTest;
import org.testng.annotations.Test;

public class demo2 {
	public demo2() {
		System.out.println("...demo2的构造方法...");
	}
	@BeforeSuite
	public void bsuite() {
		System.out.println("@BeforeSuite");
	}
	@BeforeTest
	public void btest() {
		System.out.println("BeforeTest");
	}
	@AfterTest
	public void atrest() {
		System.out.println("AfterTest");
	}
	
	@Test
	public void test2() {
		System.out.println("hello test2!!");
	}
}

输出结果:
在这里插入图片描述
@BeforeSuite 在当前测试集合任一测试用例运行前运行, 例如提前打开浏览器、设置结果保存位置等等。

  1. 指定包名而不是类名
<!DOCTYPE suite SYSTEM "https://testng.org/testng-1.0.dtd" >
 
<suite name="Suite1" verbose="1" >
  <test name="Regression1"   >
    <packages>
      <package name="testngdemo1" />
   </packages>
 </test>
</suite>

会把包里所有的测试用例运行。

testng.xml执行顺序:
(1)<test name="xxx" preserver-order="true">是可以保证节点下面的方法是按顺序执行的。
(2)parallel的取值
在如下位置进行对该值的设置:在这里插入图片描述

在这里插入图片描述

  1. 测试用例的分组

@Test(groups="分组名")

<!DOCTYPE suite SYSTEM "https://testng.org/testng-1.0.dtd" >
  
<suite name="Suite1" verbose="2" >
  <test name="test1" >
    <groups>
    <run>
    <include name="color"></include>
    <include name="person"></include>
    </run>
    </groups>
    <classes>
    <class name="testngdemo1.Corlor"></class>
    </classes>
  </test>
</suite>

package testngdemo1;

import org.testng.annotations.AfterGroups;
import org.testng.annotations.BeforeGroups;
import org.testng.annotations.Test;

public class Corlor {
	@BeforeGroups(groups = {"color"})
	public void beforeGroups() {
		System.out.println("beforeGroups");
	}
	
	@Test(groups = {"color"})
	public void testRed() {
		System.out.println("color---Red");
	}
	@Test(groups = {"color"})
	public void testBlue() {
		System.out.println("color---Blue");
	}
	
	@AfterGroups(groups = {"color"})
	public void  afterGroups() {
		System.out.println("afterGroups");
	}
	@BeforeGroups(groups = {"person"})
	public void beforeGroups2() {
		System.out.println("beforeGroups");
	}
	@Test(groups = {"person"})
	public void testStudent() {
		System.out.println("person - student");
	}
	@Test(groups = {"person"})
	public void testTeacher() {
		System.out.println("person - teacher");
	}
	@AfterGroups(groups = {"person"})
	public void  afterGroups2() {
		System.out.println("afterGroups2");
	}
}

运行结果:
在这里插入图片描述

  1. 参数化 @Parameters
    必须从.xml启动运行!
<!DOCTYPE suite SYSTEM "https://testng.org/testng-1.0.dtd" >
  
<suite name="Suite1" verbose="2" >
<parameter name="driverPath" value= "D:\\test\\Selenium\\geckodriver30.exe"></parameter>
<parameter name="ffPath" value="D:\\firefox\\firefox.exe"></parameter>
  <test name="test1" parallel="classes">
    <classes>
       <class name="dem3.Demo" />
       <class name="dem3.Demo2" />
    </classes>
  </test>
  
</suite>

package dem3;

import org.testng.annotations.Parameters;
import org.testng.annotations.Test;

public class Demo {
	@Parameters({"driverPath", "ffPath"})
	@Test
	public void test1(String path1, String path2) {
		System.out.println(path1);
		System.out.println(path2);
		System.out.println("Demo1"  + Thread.currentThread().getId());
	}
}

会把xml中设置的两个参数的值打印出来。方便下次使用。

数据提供者

  1. 举例
package testngdemo1;

import org.testng.annotations.DataProvider;
import org.testng.annotations.Test;

public class DataProviderDemo {

	@DataProvider(name = "user")
	public Object[][] createData(){
		return new Object[][] {
			{"admin", "123", 12}, 
			{"tom", "111", 45}
		};
	}
	
	@Test(dataProvider = "user")
	public void testData(String a, String b, int c) {
		System.out.println(a + ' ' + b + ' ' + c);;
	}	
}

输出结果:
在这里插入图片描述
2. 当提供数据不在该class中时:

package testngdemo1;

import org.testng.annotations.DataProvider;
import org.testng.annotations.Test;

public class DataProviderDemo {
	@Test(dataProvider = "user2", dataProviderClass=Provider.class)
	public void testData(String a, String b, int c) {
		System.out.println(a + ' ' + b + ' ' + c);;
	}
	
}

package testngdemo1;

import org.testng.annotations.DataProvider;

public class Provider {
	@DataProvider(name = "user1")
	public Object[][] createData(){
		return new Object[][] {
			{"admin", "123", 12}, 
			{"tom", "111", 45}
		};
	}
	
	@DataProvider(name = "user2")
	public Object[][] createData2(){
		return new Object[][] {
			{"adminnnnnn", "12333333", 1222222}, 
			{"tommmmmmmm", "11111111", 45555555}
		};
	}
}

断言

持续更新补充~~!!

编写测试用例的步骤

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
课程介绍你是否在寻找机会进入自动化测试领域? 你是否渴望学习selenium webdriver + Java以及最新的框架和技术进行web自动化测试? 你是否感兴趣学习Selenium如何用在你现有的项目里的? 这门课带你从Selenium搭建环境开始讲起,然后学习seleniumTestNG, logback, maven, jenkins。 我们假设学员没有任何自动化经验,来设计的这套课程。每个课题都从最基础的开始讲起。Selenium相关的该覆盖的课题都覆盖了。 例子都是来自于真实的web应用项目,帮助你理解不同的组件怎么用上自动化,这将展示给你一个行业层面的框架,增加自信心。 全网没有其他课程像这门课涵盖到如此之深的细节。 您将会学到什么 学完课程以后,你将拥有完整的Selenium Webdriver知识 你将具备从头开始设计Page Object、Page Factory、DATADRIVEN等搭建自动化框架的能力 用100多个实例对Selenium现实场景应用进行深入理解 全面了解TestNG, Maven, Jenkins, HTML报告,多浏览器并行测试 了解数据库测试和使用Selenium进行性能测试 你将彻底了解testNG框架 你从网上随便选择一个网站,都可以实现自动化,用所有可能的测试用例进行自动化测试 将提高你的编码技能,以编写最优化的自动化测试用例代码 你基本可以搞定任何Selenium面试,并能从设计阶段开始领导整个Selenium自动化项目 你应该能够使用应用程序的GUI来验证数据完整性 你将能够创建漂亮的报告来打动客户或领导 更深入地理解自动化指南和代码质量标准 会附带一个练习网站,可以用上所有可用的WebDriver功能,实现自动化 【适合人群】 软件手动测试人员想转为自动化测试的人员 自动化软件测试人员想加强专业技能的 刚毕业学生想从事软件行业 QA 组长或项目经理 【课程优势】 学完课程以后,你将拥有完整的Selenium Webdriver知识 【讲师介绍】 资质介绍: 12年以上软件测试工作经验,其中7年以上自动化测试开发经验 新书“Python3+Selenium3自动化测试项目实战”作者
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Xuhx&

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值