当你测试一个方法时,它的分支很多,要不又很多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 模块和 Excel 数据源,实现了高效且易于维护的测试。这种框架对于接口测试来说非常实用,尤其是在面对复杂多变的接口参数时,...
python实现接口自动化测试: 1、测试框架:python+unittest+requests+ddt数据驱动 2、测试用例维护在excle 3、支持post方法、get方法等 4、支持测试报告结果发送至qq邮箱
数据驱动,自动化测试,unittest, ddt, data
这种数据驱动的测试方式可以使测试用例更易于维护和扩展,因为不同的输入数据可以对应不同的测试场景。 “db”可能是指数据库,接口测试中常常需要与数据库交互,验证接口操作对数据库数据的影响。例如,可以通过...
- `example.py`: 包含使用ddt模块的示例代码,展示了如何使用ddt进行数据驱动测试。 - `docs`: 可能包含ddt的用户手册、API文档或其他相关说明。 - `tests`: 测试用例目录,包含了使用ddt编写的测试代码。 - `...
DDT数据驱动测试则用于处理那些逻辑相同但测试数据不同的场景,通过分离测试数据,减少重复的自动化用例,使得测试脚本更为简洁。其核心思想是: 1. 测试数据单独维护。 2. 减少重复的自动化用例数量。 结合PO模式...
在IT行业中,Postman是一款非常流行的API测试工具,它提供了丰富的功能,包括数据驱动测试(Data Driven Testing,DDT)。在数据驱动测试中,测试脚本会根据外部数据源中的数据执行,使得测试更加灵活和全面。...
DDT包含类的装饰器ddt和两个方法装饰器data(直接输入测试数据) 通常情况下,data中的数据按照一个参数传递给测试用例,如果data中含有多个数据,以元组,列表,字典等数据,需要自行在脚本中对数据进行分解或者...
3. DDT(Data Driven Testing):DDT是Python的一个测试框架插件,它允许我们将测试数据与测试用例分离,使得测试用例可以由多组数据驱动。这使得测试更灵活,能覆盖更多场景,同时代码可读性更强。 4. BasePage 类...
在Python中,我们可以利用`ddt`(Data Driven Tests)库来实现数据驱动测试。`ddt`库允许我们将测试数据参数化,这样就可以在同一测试脚本中使用多组输入值,而无需为每组数据编写独立的测试方法。首先,我们需要通过`...
ddt(Data Driven Testing)是Python中的一个第三方库,它扩展了unittest,实现了数据驱动测试的功能。数据驱动测试允许我们将测试数据与测试逻辑分离,使测试用例更加灵活且可复用。通过ddt,我们可以为同一个测试...
数据驱动测试的关键在于将测试数据与测试逻辑分离,使得同一测试逻辑可以针对不同数据执行多次。在单元测试(unittest)和集成测试(pytest)框架中,可以利用这些数据来创建多个测试用例。例如,对于接口自动化测试...
【标题】"demo_ddt_interface"是一个接口测试框架的示例,它采用了数据驱动测试方法,利用Excel来管理测试用例。这个框架是基于Python语言实现的,特别适合于进行接口自动化测试。 【描述】该项目的目录结构设计得...
接口自动化测试框架封装之数据类型处理以及DDT数据驱动封装 python+requests+pytest+allure+yaml 一、数据类型处理 “${read_extract_data(tag_id)}” 替换成 110 二、DDT数据驱动封装 数据驱动可以利用 excel,csv...
自动化API DDT(数据驱动测试)框架 概述 API数据驱动测试(DDT)描述了一种测试方法,其中测试输入数据和断言键以及期望值均从表中驱动。 通常,该表是一个电子表格,每行代表一个测试步骤或一个API调用。 DDT的...