当前位置:文档之家› 接口测试思路

接口测试思路

你好,我觉得接口测试用例的设计方法其实和功能测试用例的设计方法是类似的,因为接口是需要满足需求的,而接口测试所依赖的也是需求说明书,但是,因为接口测试毕竟是通过代码去测试代码,所以,为了保证覆盖率,可能会使用到单元测试的方法,具体的测试用例设计,我考虑的如下,请参考,如果有错误,一起讨论。

输入参数测试:针对输入的参数进行测试,也可以说是假定接口参数的不正确性进行的测试,确保接口对任意类型的输入都做了相应的处理:输入参数合法,输入参数不合法,输入参数为空,输入参数为null,输入参数超长;功能测试:接口是否满足了所提供的功能,相当于是正常情况测试,如果一个接口功能复杂时推荐对接口用例进行结构划分,这样子用例具有更好的可读性和维护性。

逻辑测试:逻辑测试严格讲应为单元测试,单元测试应保持内部逻辑的正确性,可单元测试和接口测试界限并不是那么清楚,所以我们也可以从给出的设计文档中考虑内部逻辑错误的分支情况和异常;异常情况测试:接口实现是否对异常情况都进行了处理,接口输入参数虽然合法,但是在接口实现中,也会出现异常,因为内部的异常不一定是输入的数据造成的,而有可能是其他逻辑造成的,程序需要对任何的异常都进行处理。

具体实列参考:需求内容:功能描述:店铺会有很多的评价,评价分两种类型,好评,差评,根据店铺的没个评价,确定这个店铺有多少个星。

具体的要求是1. 评价分好评,差评2. 连续5个好评可以转换为1个星,有一个差评,减少1个星3. 最多有5个星4. 初始星为0,最少有0个星接口设计:public interface IStoreService {/*** 根据店铺Id,得到店铺的星数* @param storeId店铺id* @return店铺星数*/public int getSotreStar(String storeId);}分析过程:从需求角度分析,需要测试的点包括:1.店铺没有评价2.店铺全部差评3.店铺全部好评4.店铺有差评,有好评5.点评评价数小于5个6.店铺评价中,连续好评不够5个7.根据星计算规则,店铺所得星号大于5个具体实现:private int getStar(List<PingJia> pingJiaList) {if (pingJiaList == null) {System.out.println("评价列表不能为null");return 0;}int star = 0;int pingJiaCount = pingJiaList.size();if (pingJiaCount < 5) {return star;}int goodPing = 0;for (int i = 0; i < pingJiaCount; i++) {if (pingJiaList.get(i).getPingJiaType() == PingType.goodPi ng) {goodPing++;if (goodPing == 5) {star++;goodPing = 0;}} else {goodPing = 0;if (star > 0) {star -= 1;}}}if (star > 5) {star = 5;}return star;}用例设计略测试过程:1. 分析需求,找出被测需求测试点:2. 分析测试点,通过测试用例设计方法,准备测试数据,添加期望结果,提炼测试点为可执行测试用例常用测试用例设计方法:1. 边界值2. 等价类3. 场景法4. 错误推测法5. 针对参数测试3. 根据测试用例,准备测试数据4. 编写测试代码,调用被测代码,执行测试,断言测试结果测试注意点1. 代码测试依赖的是需求,而不是开发的代码2. 代码测试的测试用例和功能测试用例类似,增加关于传入参数的验证在接口测试培训系列1中,描述了针对一个需求的实现方法,及对这个需求方法接口测试用例的设计,在本篇中,在该需求的基础上再增加需求,同时将需求扩展为一个小的项目,讲解针对项目的接口测试如何去做。

需求描述:1. 增加店铺对象,评价属于店铺2. 可以针对店铺增加评价,删除评价,修改评价3. 根据店铺id获得店铺的星4. 根据店铺id获得店铺的好评率5. 根据店铺id获得店铺在所有店铺当中的排序,排序算法是:星越多排序越靠前,如果星相等,则根据好评率排序,好评率越高,排序越靠前,如果好评率相等,则评价越多越靠前,如果评价数相等,则默认当前店铺排名靠前。

实现思路:1. 建立一个店铺类,具有店铺名称,店铺ID两个属性2. 建立一个评价类,具有所属店铺id,评价类型,更新时间属性3. 增加一个店铺操作类,具有增加评价,删除评价,修改评价,获取店铺星,获取店铺好评,获取店铺排序的方法4. 建立一个数据库,里面有两张表,一张店铺表,一张评价表5. 店铺表字段:店铺id,店铺名称6. 评价表字段:所属店铺id,评价类型,更新时间分层开发1.DAO层:具体的对数据库的操作public interface IPingJiaDao {//插入一条记录public boolean insert(PingJia pingJia);// 修改评价记录public boolean update(PingJia pingJia);// 删除评价记录public boolean delete(String pingJiaId);//得到一个店铺的评价列表public List<PingJia> getPingJiaList(String storeId);//得到一个店铺的好评率public double getGoodPingJiaRate(String storeId);}2.Service层:具体的业务逻辑层public interface IStoreService {//添加评价,public boolean addPingJia(PingJia pingJia);//修改评价类型public boolean updatePingJia(PingJia pingJia);//删除评价public boolean deletePingJia(String pingjiaId);//根据店铺Id,得到店铺的星数public int getSotreStar(String storeId);//得到店铺排序位置public int getStoreIndex(String storeId);//得到店铺好评率public double getStoreGoodRate(String storeId);}代码实现1.DAO实现,使用ibatis进行dao的实现2.Service实现,数据插入,更新,获取,直接通过调用dao方法实现,业务逻辑在service中实现可测试接口方法1.添加评价boolean addPingJia(PingJia pingJia)2.更新评价boolean updatePingJia(PingJia pingJia);3.删除评价boolean deletePingJia(String pingjiaId)4.获得店铺星数int getSotreStar(String storeId)5.得到店铺排序位置getStoreIndex(String storeId)6.得到店铺好评率int getStoreHaoPingLv(String storeId);接口测试过程1.@BeforeClass注解中,做初始化相关的操作,比如需要创建服务实例:storeService = new StoreService();2.@Test注解中,编写具体的测试用例,编写测试用例时可用的一些技巧:a.通过不同的接口方法参数来实现对不同业务场景的覆盖b.接口参数如果是基本数据类型,比如String,则需要考虑该参数是做什么用的,是否需要在调用被测方法之前准备相应的数据,比如,获得店铺星数,getSotreStar(StringstoreId)需要的参数是String类型的storeId,我们在测试的时候,在调用被测方法之前,就需要先为这个storeId对应的店铺构造评价,来满足对应的测试用例。

c. 接口参数如果是对象类型,则需要考虑是否可以通过独立的方法来提取设置对象属性过程,而将不同对象属性值通过方法参数传递,而如果对象属性过多,则可以考虑将部分对象属性构造为另外的一个对象d.调用被测方法后,需要根据被测方法返回值,断言被测方法是否返回期望结果,同时需要通过数据库验证e.如果一个测试用例中,涉及到多个步骤的验证,则需要在每个步骤后增加对应的验证方法。

f.在测试用例中,针对该测试产生的数据,需要进行销毁。

3. @AfterClass注解中,增加对数据清理及对象销毁相应的方法4. 关于数据库比对:可以将数据库操作,比对的方法专门提取为一个公共类。

1.什么情况下会使用mock技术单元的依赖对象,只关注被测单元的功能逻辑----------比如被测代码中需要依赖第三方接口返回值进行逻辑处理,可能因为网络或者候就可以使用mock技术来将被测单元和依赖模块独立开来,使得测试可以进行下去。

2.被测单元依赖的模块尚未开发完成,而被测单元需要依赖模块的返回值进行后续处理----------比如service层的代码中,包含对Dao层的调用,但是,DAO层代码尚未实现3.被测单元依赖的对象较难模拟或者构造比较复杂----------比如,支付宝支付的异常条件有很多,但是模拟这种异常条件很复杂或者无法模拟,比如,查询聚划算的订单结果,无法在测试环境进行模拟2.Mock技术分类1.手动构造mock对象---------------比如,可以自己写某个接口方法的实现,根据需要编写返回值,测试代码中使用该实现类对象缺点:会增加代码量,在写mock对象代码时,有可能引入错误2.使用开源代码提供的构造mock方法--------------比如easyMock,提供了对接口类的模拟,能够通过录制、回放、检查三步来完成大体的测试过程,可以验证方法的调用种类、次数、顺序,可以令Mock对象返回指定的值或抛出指定异常3.EasyMock使用1.引入easyMock------------在maven工程中,通过pom配置依赖关系<dependency><groupId>org.easymock</groupId><artifactId>easymock</artifactId><version>3.0</version><scope>test</scope></dependency>------------在普通java工程中,通过添加外部包的方式2.使用easyMock过程1.使用EasyMock生成Mock对象;pingJiaDao = mockControl.createMock(IPingJiaDao.class);2.设定Mock对象的预期行为和输出;EasyMock.expect(pingJiaDao.getGoodPingJiaRate(storeId)).andReturn(0.11);3.将Mock对象切换到Replay状态;EasyMock.replay(pingJiaDao);storeService.setStoredao(pingJiaDao);double rate = storeService.getStoreGoodRate(storeId);5.对Mock对象的行为进行验证。

相关主题