接口测试思路_第1页
接口测试思路_第2页
接口测试思路_第3页
已阅读5页,还剩4页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、你好,我觉得接口测试用例的设计方法其实和功能测试用例的设计方法是类似的,因为接口是需要满足需求的, 而接口测试所依赖的也是需求说明书,但是,因为接口测试毕竟是通过代码去测试代码,所以,为了保证覆盖率,可能会使用到单元测试的方法,具体的测试用例设计,我考虑的如下,请参考,如果有错误,一起讨论。输入参数测试:针对输入的参数进行测试,也可以说是假定接口参数的不正确性进行的测试, 确保接口对任意类型的输入都做了相应的处理:输入参数合法,输入参数不合法,输入参数为空,输入参数为 n ull,输入参数超长;功能测试:接口是否满足了所提供的功能,相当于是正常情况测试,如果一个接口功能复杂时推荐对接口用例进行

2、结构划分,这样子用例具有更好的可读性和维护性。逻辑测试:逻辑测试严格讲应为单元测试,单元测试应保持内部逻辑的正确性,可单元测试和接口测试界限并不是那么清楚,所以我们也可以从给出的设计文档中考虑内部逻辑错误 的分支情况和异常;异常情况测试:接口实现是否对异常情况都进行了处理,接口输入参数虽然合法, 但是在接口实现中,也会出现异常,因为内部的异常不一定是输入的数据造成的,而有可能是其他逻辑造成的,程序需要对任何的异常都进行处理。具体实列参考:需求内容:功能描述: 店铺会有很多的评价,评价分两种类型,好评,差评,根据店铺的没个评价,确定这个店铺有多少个星。具体的要求是1. 评价分好评,差评2. 连续

3、5个好评可以转换为 1个星,有一个差评,减少1个星3. 最多有5个星4. 初始星为0,最少有0个星接口设计:public in terface IStoreService /*根据店铺Id,得到店铺的星数*paramstoreId店铺 id*return店铺星数*/publicintgetSotreStar(Stri ng storeId);分析过程:从需求角度分析,需要测试的点包括:1. 店铺没有评价2. 店铺全部差评3. 店铺全部好评4. 店铺有差评,有好评5. 点评评价数小于 5个6. 店铺评价中,连续好评不够5个7. 根据星计算规则,店铺所得星号大于5个具体实现:private int

4、 getStar(List<P in gJia> pin gJiaList) if (pin gJiaList =n ull ) System.out .println("评价列表不能为null");return 0;int star = 0;intpin gJiaCou nt = pin gJiaList.size();if (pin gJiaCou nt < 5) return star;int goodP ing = 0;for (int i = 0; i < pin gJiaCou nt; i+) if (pin gJiaList.get(i

5、).getP in gJiaType() = Pin gType.ng ) goodP in g+;if (goodP ing = 5) sta 叶+;goodP ing = 0;else goodP ing = 0;if (star > 0) star -= 1;if (star > 5) star = 5;return star;用例设计略测试过程:1. 分析需求,找岀被测需求测试点:2. 分析测试点,通过测试用例设计方法,准备测试数据,添加期望结果,提炼测试点为可执行 测试用例常用测试用例设计方法:1. 边界值2. 等价类3. 场景法4. 错误推测法5. 针对参数测试good

6、Pi3. 根据测试用例,准备测试数据4. 编写测试代码,调用被测代码,执行测试,断言测试结果测试注意点1. 代码测试依赖的是需求,而不是开发的代码2. 代码测试的测试用例和功能测试用例类似,增加关于传入参数的验证在接口测试培训系列1中,描述了针对一个需求的实现方法,及对这个需求方法接口测试用例的设计,在 本篇中,在该需求的基础上再增加需求,同时将需求扩展为一个小的项目,讲解针对项目的接口测试如何 去做。需求描述:1. 增加店铺对象,评价属于店铺2. 可以针对店铺增加评价,删除评价,修改评价3. 根据店铺id获得店铺的星4. 根据店铺id获得店铺的好评率5. 根据店铺id获得店铺在所有店铺当中的

7、排序,排序算法是:星越多排序越靠前,如果星相等,则根 据好评率排序,好评率越高,排序越靠前,如果好评率相等,则评价越多越靠前,如果评价数相等,则默认当前店铺排名靠前。实现思路:1. 建立一个店铺类,具有店铺名称,店铺ID两个属性2. 建立一个评价类,具有所属店铺id,评价类型,更新时间属性3. 增加一个店铺操作类,具有增加评价,删除评价,修改评价,获取店铺星,获取店铺好评,获取店 铺排序的方法4. 建立一个数据库,里面有两张表,一张店铺表,一张评价表5. 店铺表字段:店铺id,店铺名称6. 评价表字段:所属店铺id,评价类型,更新时间分层开发1. DAO层:具体的对数据库的操作 public

8、interface IPingJiaDao /插入一条记录publicbooleaninsert(PingJia pingJia);/ 修改评价记录publicbooleanupdate(PingJia pingJia);/ 删除评价记录publicbooleandelete(String pingJiaId);/得到一个店铺的评价列表public List<PingJia> getPingJiaList(String storeId);/得到一个店铺的好评率public double getGoodPingJiaRate(String storeId);2. Service层:具

9、体的业务逻辑层public interface IStoreService /添加评价,public boolean addPingJia(PingJia pingJia);/修改评价类型public boolean updatePingJia(PingJia pingJia);/删除评价public boolean deletePingJia(String pingjiald);/根据店铺Id,得到店铺的星数publicintgetSotreStar(String storeId);/得到店铺排序位置publicintgetStorelndex(String storeId);/得到店铺好评

10、率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 getSotreSta

11、r(String storeId)5. 得到店铺排序位置getStoreIndex(String storeId)6. 得到店铺好评率 int getStoreHaoPingLv(String storeId);接口测试过程1. BeforeClass注解中,做初始化相关的操作,比如需要创建服务实例:storeService = new StoreService();2. Test注解中,编写具体的 测试用例,编写测试用例时可用的一些技巧:a. 通过不同的接口方法参数来实现对不同业务场景的覆盖b. 接口参数如果是基本数据类型,比如String,则需要考虑该参数是做什么用的,是否需要在调用被测方

12、法之前准备相应的数据,比如,获得店铺星数,getSotreStar(String storeId)需要的参数是String类型的storeId,我们在测试的时候,在调用被测方法之前, 就需要先为这个storeId对应的店铺构造评价,来满足对应的测试用例。c. 接口参数如果是对象类型,则需要考虑是否可以通过独立的方法来提取设置对象属性 过程,而将不同对象属性值通过方法参数传递,而如果对象属性过多,则可以考虑将部分对 象属性构造为另外的一个对象d. 调用被测方法后,需要根据被测方法返回值,断言被测方法是否返回期望结果,同时需要 通过数据库验证e. 如果一个测试用例中,涉及到多个步骤的验证,则需要在

13、每个步骤后增加对应的验证方法。f. 在测试用例中,针对该测试产生的数据,需要进行销毁。3. AfterClass注解中,增加对数据清理及对象销毁相应的方法4. 关于数据库比对:可以将数据库操作,比对的方法专门提取为一个公共类。1.什么情况下会使用mock技术1. 需要将当前被测单元和其依赖模块独立开来,构造一个独立的 测试环境,不关注被测单元的依赖对象,只关注被测单元的功能逻辑他环境因素,调用第三方经常会中断或者失败,无法对被测单元进行测试,这个时候就可以使用mock技术来将被测单元和依赖模块独立开来,使得测试可以进行下去。2.被测单元依赖的模块尚未开发完成,而被测单元需要依赖模块的返回值进行

14、后续处理比如service层的代码中,包含对 Dao层的调用,但是,DAO层代码尚未实现3.被测单元依赖的对象较难模拟或者构造比较复杂比如,支付宝支付的异常条件有很多,但是模拟这种异常条件很复杂或者无法模拟,比如,查询聚划算的订单结果,无法在测试环境进行模拟2. Mock技术分类1.手动构造mock对象比如,可以自己写某个接口方法的实现,根据需要编写返回值,测试代码中使用该实现类对象缺点:会增加代码量,在写mock对象代码时,有可能引入错误2.使用开源代码提供的构造 mock方法比如easyMock,提供了对接口类的模拟,能够通过录制、回放、检查三步来完成大体的测试过程,可以验证方法的调用种类

15、、次数、顺序,可以令Mock对象返回指定的值或抛出指定异常3. EasyMock 使用1.引入 easyMock在 maven工程中,通过 pom 配置依赖关系dependency >vgroupld>org.easymock</ groupld >< artifactId >easymock </ artifactld >< 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(storeld).andReturn(0.11);3. 将Mock对象切换到Replay状态;Eas

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论