java语言运用junit框架完成自动化测试

一、引入单元测试框架的原因

1、当测试用例的数量较大时候,使用框架管理更方便

2、框架可以提供方便的断言方式

3、可以提供可视化的报告输出(ant工具)

二、junit单元测试用例的创建

1、启动eclipse软件

2、创建java工程,设置正确的jre环境(不要太高:jre17就太高了,jre1.7太低了)

3、创建/导入一个被测试的类

4、创建一个Junit test case/一个普通的java类

5、用@Test注解一个方法,并导入junit的包即可

三、常见的注解的用法

1、@Test

定义单元测试用例的注解,用它声明的方法就是单元测试用例方法。

2、@Before和@After

测试用例的初始化和资源释放方法,@Before修饰的方法再每个用例执行执行执行一遍;@After修饰的方法在每一个测试用例执行之后执行一遍。

3、@BeforeClass和@AfterClass

必须是静态的方法,也就是类方法。

@BeforeClass修饰的方法,在类中只会在最早、运行一次。

@AfterClass修饰的方法,在类中只会在最后、运行一次。

4、@Test(timeout=50)

超时测试,如果用例执行超过了50ms,就算断言通过,该用例也会被置为失败。

5、@Ignore(”xxxx“)

忽略测试,该用例不会被执行。

6、@Test(expected=xxx.class)

注解的用例如果抛出xxx的异常的话,用例则通过,否则失败。

 
package com.qf.unit;
public class Calculator{
	 //乘法未实现
	 //确定方法的返回值类型的方法的参数列表
	 public int ChengFa(int a,int b){
		 
		 System.out.println("乘法未实现");
		 return 1; 
		 
	 }
	 public int ChengFang(int a) {
		 
		 System.out.println("chengfang实现");
		 return a*a;
	 }
	 public int chufa(int a,int b) {
		 
		 System.out.println("除法实现");
		 return a/b;
	 }
	 
	 
	 
 }
package com.qf.testCase;

import static org.junit.Assert.*;

import org.junit.AfterClass;
import org.junit.BeforeClass;
import org.junit.Test;

import com.qf.unit.Calculator;

public class calcasechufa {

	@BeforeClass
	public static void setUpBeforeClass() throws Exception {
		System.out.println("前置已实现");
	}

	@AfterClass
	public static void tearDownAfterClass() throws Exception {
		System.out.println("后置已实现");
	}

	@Test
	public void test() {
		Calculator cal = new Calculator();
		int cc = cal.chufa(6, 3);
		int dd = 2;
		assertEquals(dd,cc);
		 
	}
	@Test
	public void test01() {
		Calculator cal = new Calculator();
		int cc = cal.ChengFa(6, 3);
		int dd = 2;
		assertEquals(dd,cc);

	}
}

7、@RunWith(parameterized.class)

 用来修饰类,则该类是可以进行参数化的。(数据驱动测试)

package com.qf.testcase;

import static org.junit.Assert.*;

import java.util.Arrays;
import java.util.Collection;

import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
import org.junit.runners.Parameterized.Parameters;

import com.qf.unit.Calculator;


//通过@RunWith(Parameterized.class)修饰的类就是一个数据驱动的测试用例类
@RunWith(Parameterized.class)
public class ParaRun {
	Calculator calc = new Calculator();
	//创建一个变量来存储参数(输入数据)
	int para;
	//创建一个变量存放预期结果
	int result;
	
	
	//创建的数据驱动的数据源
	@Parameters
	public static Collection<Object[]> data(){
		return Arrays.asList(new Object[][]{
			{2,4},
			{5,12},
			{1,1},
			{3,9},
			{6,36},
			{10,100},
			});
	}
	
	
	//创建构造方法,从数据源种提取数据(每次提一行),该用例会执行6次,每次不同的值
	public ParaRun(int para,int result){
		this.para = para;
		this.result = result;
	}
	
	
	@Test
	public void test(){
		System.out.println(this.result);
		int actualValue =calc.chengFang(this.para);
		int expectValue = this.result;
		assertEquals(expectValue,actualValue);
	}
	
}

四、单元测试用例执行

1、打包执行

使用@RunWith(Suite.class),并使用@Suite.SuiteClasses({xx.class,yyy.class})注解类

直接运行即可。

 与测试用例同以及目录下,直接调用执行

package com.qf.testcase;
/*
		实现步骤:
			1、创建普通的java类文件
			2、使用@RunWith(Suite.class)
			3、@Suite.SuiteClasses({xxx.class,yyy.class})
			4、运行junit用例可
 */
import org.junit.runner.RunWith;
import org.junit.runners.Suite;

@RunWith(Suite.class)
@Suite.SuiteClasses({
	CalcCase.class,
	com.qf.testcase.CalcCaseChengFang.class,
	com.qf.testcase.ParaRun.class
})
public class SuiteRun {}

2、ant执行

先选中工程--export-->ant buildfiles

build.xml-->run ant-->选择要执行的文件,运行即可

在输出的junit目录下,用浏览器打开index.html文件查看结果即可

五、结合junit的自动化测试脚本开发

设置线程等待:driver.manage().timeouts().implicitlyWait(100,TimeUnit.SECONDS);

屏幕上滑动driver.swipe(163,336,541,336,1000)

使用java+appium+junit开发计算器的自动化测试脚本:

package com.qf;

import static org.junit.Assert.*;

import java.net.MalformedURLException;
import java.net.URL;
import java.util.concurrent.TimeUnit;

import org.junit.AfterClass;
import org.junit.BeforeClass;
import org.junit.Test;
import org.openqa.selenium.remote.DesiredCapabilities;

import io.appium.java_client.AppiumDriver;

public class CalcTest {

	public static DesiredCapabilities des;
	public static AppiumDriver driver;
	@BeforeClass
	public static void beforeClass(){
		des = new DesiredCapabilities();
		des.setCapability("platformName", "Android");
		des.setCapability("platformVersion", "5.1.1");
		des.setCapability("deviceName", "Android Emulator");
		des.setCapability("noReset", true);
		des.setCapability("appPackage", "com.lilysgame.calculatorjw");
		des.setCapability("appActivity", "com.lilysgame.calculator.MainActivity");
		
		try {
			driver = new AppiumDriver(new URL("http://127.0.0.1:4723/wd/hub"),des);
			driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
		} catch (MalformedURLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

	@Test
	public void testAdd() throws InterruptedException {

		driver.findElementById("com.lilysgame.calculatorjw:id/btnClear").click();
		Thread.sleep(2000);
		driver.findElementById("com.lilysgame.calculatorjw:id/btnOne").click();
		Thread.sleep(2000);
		driver.findElementById("com.lilysgame.calculatorjw:id/btnAdd").click();
		Thread.sleep(2000);
		driver.findElementById("com.lilysgame.calculatorjw:id/btnTwo").click();
		Thread.sleep(2000);
		driver.findElementById("com.lilysgame.calculatorjw:id/btnEqual").click();
		Thread.sleep(2000);

		String actualValue = driver.findElementById("com.lilysgame.calculatorjw:id/et_show").getAttribute("text");
		String expectValue = "3";
		assertEquals(expectValue,actualValue);
	}
	
	@Test
	public void testJian() throws InterruptedException {

		driver.findElementById("com.lilysgame.calculatorjw:id/btnClear").click();
		Thread.sleep(2000);
		driver.findElementById("com.lilysgame.calculatorjw:id/btnTwo").click();
		Thread.sleep(2000);
		driver.findElementById("com.lilysgame.calculatorjw:id/btnMinus").click();
		Thread.sleep(2000);
		driver.findElementById("com.lilysgame.calculatorjw:id/btnOne").click();
		Thread.sleep(2000);
		driver.findElementById("com.lilysgame.calculatorjw:id/btnEqual").click();
		Thread.sleep(2000);
	
		String actualValue = driver.findElementById("com.lilysgame.calculatorjw:id/et_show").getAttribute("text");
		String expectValue = "1";
		assertEquals(expectValue,actualValue);
	}
	
	@Test
	public void testChu() {
		
	}
	
	@Test
	public void testCheng() {
		
	}
	
	
	@AfterClass
	public static void afterClass(){
		driver.quit();
		des = null;
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值