`

DDT(数据驱动测试)

阅读更多

当你测试一个方法时,它的分支很多,要不又很多if else 或者 switch 等等,在这种情况下,要想写个case将其覆盖,需要写很多test,这些test基本内容都是一样的,唯一的不一样就是参数和期望参数,这时很麻烦,虽然可以vc大法,但是测试数据看起来也并不是一目了然,那么我今天就把我刚学到得DDT(Data Driver Test)注意,不是TDD(Test Drivern Develop)测试记录一下,声明,我是菜鸟,很菜。

下面是所要用到得bean:

 

package ddttest;

import java.util.List;

public class Person {
	private  String name;
	private  int  age;
	private  double salary;
        //有点递归的感觉
	private List<Person> friends;
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}
	public double getSalary() {
		return salary;
	}
	public void setSalary(double salary) {
		this.salary = salary;
	}
	public List<Person> getFriends() {
		return friends;
	}
	public void setFriends(List<Person> friends) {
		this.friends = friends;
	}
	
	
}

 下面这个是要测试的类

package ddttest;

public class XMLParameterizedAdvanced {
	
	public String comparePerson(Person person)
	{
		if(person.getSalary() > 8000 && (person.getAge() < 30))
		{
			return "Good";
		}else if(person.getSalary() > 20000 && !(person.getFriends().isEmpty()))
		{
			return "Nice";
		}else {
			return "Normal";
		}
	}
}

  下面是测试类,为了方便我直接就在ddttest下生成了:

 
package ddttest;

import static org.junit.Assert.assertEquals;

import org.junit.Test;
import org.junit.runner.RunWith;
import org.junitext.XMLParameters;
import org.junitext.runners.XMLParameterizedRunner;

@RunWith(XMLParameterizedRunner.class)
public class XMLParameterizedAdvancedTest {
	private Person expectedPerson;
	private String actualReturn;
	
	@XMLParameters("/ddttest/test.xml")
	public XMLParameterizedAdvancedTest(Person expectedPerson, String actualReturn){
		this.expectedPerson = expectedPerson;
		this.actualReturn = actualReturn;
	} 
	@Test
	public void testComparePerson() {
		XMLParameterizedAdvanced test = new XMLParameterizedAdvanced();
		assertEquals(actualReturn,test.comparePerson(expectedPerson));
	}

}
 

   最后是测试数据的XML文件:

<?xml version="1.0" encoding="ISO-8859-1" ?>
<tests>
	<test>
		<bean id= "expectedPerson" class="ddttest.Person">
			<property name = "name" value = "ChenHong"/>
			<property name = "age" value = "27"/>
			<property name = "salary" value = "9000"/>
			<property name = "friends" />
		</bean>
			<string id = "actualReturn" value ="Good"/>
	</test>

	<test>
		<bean id= "expectedPerson" class="ddttest.Person">
			<property name = "name" value = "Lin dan"/>
			<property name = "age" value = "30"/>
			<property name = "salary" value = "25000"/>
			<property name = "friends">
		  <list>
			<bean class="ddttest.Person">
				<property name = "name" value = "Leecongwei"/>
				<property name = "age" value = "40"/>
				<property name = "salary" value = "5000"/>
				<property name = "friends" />
			</bean>
			<bean class="ddttest.Person">
				<property name = "name" value = "Jonason"/>
				<property name = "age" value = "40"/>
				<property name = "salary" value = "5000"/>
				<property name = "friends" />
			</bean>
		  </list>
		  </property>
		</bean>
			<string id = "actualReturn" value ="Nice"/>
	</test>
 
	<test>
		<bean id= "expectedPerson" class="ddttest.Person">
			<property name = "name" value = "Gade"/>
			<property name = "age" value = "27"/>
			<property name = "salary" value = "5000"/>
			<property name = "friends" />
		</bean>
			<string id = "actualReturn" value ="Normal"/>
	</test>  
</tests>

 再导入相应的jar包,就可以跑了,如果安装了,emma插件的,会发现覆盖率是百分之百。

注意:在编写测试数据的时候,指定class时,务必小心,不要将空格加入,这样会报

java.lang.ClassNotFoundException。。。

如果报了,那么一定是测试数据的XML没有正确,可以采用排除法,一点一点的定位出错误所在地点。

附件是一些jar包,其中jmockit.jar 是不用加的,加进去了可能会有问题。

还有,junit的src包也不要加,如果加了会出现异常。总之,自己多导两次包就应该可以找出问题了。

具体原因可能是junit的src包和junit的jar同时存在时,会有冲突。

分享到:
评论

相关推荐

    基于python的接口自动化测试 ddt数据驱动.docx

    总的来说,这个基于 Python 的接口自动化测试框架利用了数据驱动测试的方法,通过 DDT 模块和 Excel 数据源,实现了高效且易于维护的测试。这种框架对于接口测试来说非常实用,尤其是在面对复杂多变的接口参数时,...

    python实现接口自动化(python+unittest+requests+ddt数据驱动框架)

    python实现接口自动化测试: 1、测试框架:python+unittest+requests+ddt数据驱动 2、测试用例维护在excle 3、支持post方法、get方法等 4、支持测试报告结果发送至qq邮箱

    自动代测试数据驱动ddt.py

    数据驱动,自动化测试,unittest, ddt, data

    上手直接可用的接口自动化框架(包含数据驱动),最新版(pytest+ddt+db+yaml+allure)

    这种数据驱动的测试方式可以使测试用例更易于维护和扩展,因为不同的输入数据可以对应不同的测试场景。 “db”可能是指数据库,接口测试中常常需要与数据库交互,验证接口操作对数据库数据的影响。例如,可以通过...

    Python ddt模块数据驱动下载.rar

    - `example.py`: 包含使用ddt模块的示例代码,展示了如何使用ddt进行数据驱动测试。 - `docs`: 可能包含ddt的用户手册、API文档或其他相关说明。 - `tests`: 测试用例目录,包含了使用ddt编写的测试代码。 - `...

    从零搭建完整python自动化测试框架(UI自动化和接口自动化 )-持续更新.pdf

    DDT数据驱动测试则用于处理那些逻辑相同但测试数据不同的场景,通过分离测试数据,减少重复的自动化用例,使得测试脚本更为简洁。其核心思想是: 1. 测试数据单独维护。 2. 减少重复的自动化用例数量。 结合PO模式...

    postman数据驱动ddt.docx

    在IT行业中,Postman是一款非常流行的API测试工具,它提供了丰富的功能,包括数据驱动测试(Data Driven Testing,DDT)。在数据驱动测试中,测试脚本会根据外部数据源中的数据执行,使得测试更加灵活和全面。...

    python ddt实现数据驱动

    DDT包含类的装饰器ddt和两个方法装饰器data(直接输入测试数据) 通常情况下,data中的数据按照一个参数传递给测试用例,如果data中含有多个数据,以元组,列表,字典等数据,需要自行在脚本中对数据进行分解或者...

    python+selenium+ddt关键字驱动搭建自动化测试框架(csdn)————程序.pdf

    3. DDT(Data Driven Testing):DDT是Python的一个测试框架插件,它允许我们将测试数据与测试用例分离,使得测试用例可以由多组数据驱动。这使得测试更灵活,能覆盖更多场景,同时代码可读性更强。 4. BasePage 类...

    使用ddt执行数据驱动测试

    在Python中,我们可以利用`ddt`(Data Driven Tests)库来实现数据驱动测试。`ddt`库允许我们将测试数据参数化,这样就可以在同一测试脚本中使用多组输入值,而无需为每组数据编写独立的测试方法。首先,我们需要通过`...

    python3+unittest+request+ddt接口测试

    ddt(Data Driven Testing)是Python中的一个第三方库,它扩展了unittest,实现了数据驱动测试的功能。数据驱动测试允许我们将测试数据与测试逻辑分离,使测试用例更加灵活且可复用。通过ddt,我们可以为同一个测试...

    自动化测试DDT yaml数据驱动.docx

    数据驱动测试的关键在于将测试数据与测试逻辑分离,使得同一测试逻辑可以针对不同数据执行多次。在单元测试(unittest)和集成测试(pytest)框架中,可以利用这些数据来创建多个测试用例。例如,对于接口自动化测试...

    demo_ddt_interface:接口测试框架demo(ddt数据驱动excel管理测试用例)

    【标题】"demo_ddt_interface"是一个接口测试框架的示例,它采用了数据驱动测试方法,利用Excel来管理测试用例。这个框架是基于Python语言实现的,特别适合于进行接口自动化测试。 【描述】该项目的目录结构设计得...

    python+requests+pytest 接口自动化框架(8)

    接口自动化测试框架封装之数据类型处理以及DDT数据驱动封装 python+requests+pytest+allure+yaml 一、数据类型处理 “${read_extract_data(tag_id)}” 替换成 110 二、DDT数据驱动封装 数据驱动可以利用 excel,csv...

    automated-api-ddt-framework:自动化API数据驱动测试(DDT)框架

    自动化API DDT(数据驱动测试)框架 概述 API数据驱动测试(DDT)描述了一种测试方法,其中测试输入数据和断言键以及期望值均从表中驱动。 通常,该表是一个电子表格,每行代表一个测试步骤或一个API调用。 DDT的...

Global site tag (gtag.js) - Google Analytics