前言
再好的测试框架或者是测试环境,也都是为了测试用例服务,怎样写出高质量的测试用例才是关键,符合项目需求,能发现问题,能提高效率的自动化测试用例,才是比较有效的自动化接口测试用例。
之前的文章也介绍过我们应该测试什么接口,简单到具体实现就是方法。
一、方法类型
方法类型按照返回值的角度可以分为两种。(构造函数比较特殊)
有返回值类型的方法。
没有返回值类型的方法。
这里先给大家一些前提的概念。然后再一一进行各种类型接口的分析,然后该如何编写测试用例。
二、编写测试用例步骤
1.深刻理解接口对应的业务和具体代码的实现
在测试接口之前如果不深入理解这个接口对应的业务功能。
那么写出来的测试用例也是脱离业务的,部分用例会存在测试意义不大的使用场景。
举个案例:
之前有个接口是查询公交路线的接口,接口传入起始点和终点的经纬度,返回查询到的公交路线的详细信息。
从结果的角度考虑,我们会设计两种场景的测试用例。
有公交路线的。
没有公交路线的。
业务角度
从用户的角度考虑,是不知道有没有确定的公交路线。
但我们需要站在用户的角度去考虑使用场景。
对于市内:家和公司,景点,医院,学校,超市,商场,汽车站,火车站,飞机场,政府部门。等生活常用场景,分别覆盖有公交路线的,没公交路线的。
跨市:传入跨市坐标点,有公交路线的,没公交路线的。
跨省:传入跨省,有公交路线的,没公交路线的。
特殊场景:同一坐标点,去国外,台湾,海南,海上等。
以上场景都是根据从业务的角度去考虑设计测试用例,基本上覆盖了大部分的场景。
代码角度
比如:就是对经纬度的一个遍历,(0,90)(90,180)
南极,北极,181,361,360等
有的接口实现会根据环境或者参数产生不同的分支,if else语句 ,switch case语句等
我们需要采用白盒测试的思维去覆盖每一种情况。
比如有的接口是更新数据库的操作,当需要更新数据库的数据和数据库已存在的数据不同时,才需要进行更新。
这种接口就需要覆盖两种场景,与数据库相同,与数据库不相同的场景。
有的接口还存在身份验证的问题,需要考虑验证信息是否正确的因素。但是业务上可能就是登录成功后。
接口种类有很多,此处我只列举了几种,大家一定要对接口的实现和对应的业务理解深入。
正常情况下,一个接口可以写出5-12条以上的测试用例。
测试用例设计思维导图
将以上场景,以思维导图的形式,和测试TE评审后即可进行编写测试用例。
2.代码实现
1.创建测试类
2.编写测试用例@Test
3.测试用例调试(合入)
案例:
public class XXXTest {
@BeforeClass
public static void classSetup(){
//一次,测试类加载时只执行一次
}
@Before
public void setUp(){
// before test
//每条测试用例执行之前都会做的
}
@Test
public void testXXX() {
//准备测试环境和参数
//因为可以访问源码,直接调用接口
//断言期望值
}
@Test
public void testxxx2(){
}
@Test
public void testxxx1(){
}
@After
public void tearDown(){
//测试用例执行完之后都会做的
//需要还原测试用例修改的环境,比如数据库操作等
}
@AfterClass
public static void classtearDown(){
//同上类似
}
}
3.断言细节
我们在对接口的返回值进行断言时,遵循以下几点规则。
1.断言到数据的三层
2.断言到基本数据类型
3.输入和输出的必然逻辑关系(尽量满足充分且必要的条件)
三、特殊类型接口
无返回值接口
有的接口存在没有返回值的情况,但大部分接口是通过间接的方式去获取返回值。
常见的set类型接口,可能直接返回true或者false。
但是数据是否真正被修改还是需要通过get进行查询,从而进行断言。
最特殊的情况,就是接口没有任何方式获取到返回值,那么就说明这种接口的设计存在缺陷,不符合编程的设计思想,接口不好测,可以推动开发去重构接口。
异步接口
处理这种接口时,通常都是接口采用的是观察者模式的设计,监察到接口回调时,才会进行返回值的处理,这种接口也是比较常见的,很多接口处理起来可能是个耗时动作,都会采用这种设计。
两个线程,测试用例所在线程,接口回调发生的异步线程,怎么让他们实现等待和同步呢。
其实java提供很多方法,此处我就提及一下ConditionVariable的用法,类似于锁机制。
在我们调用接口后,如果不在测试线程等在接口回调的异步线程返回结果,那么就会直接会进行下一步的断言,而此时是没有拿到期望的返回值,这种情况肯定是不允许的。
所以使用ConditionVariable ,在异步回调中打开锁,在测试线程调用接口后关闭锁并设置等待时长,规定时间内,如果异步回调没有将锁打开,说明接口响应超时。如果规定时间内,锁打开,则说明异步回调以及处理完。
总结
接口测试的经验就一共三篇文件,介绍了接口测试的概念,测试什么,有什么意义,包括环境搭建,包括测试用例的编写,总结一句话,持之以恒,大家共勉。
有任何疑问欢迎大家留言和讨论,接口测试的经验也只是我个人的总结,大家需要根据实际的项目需要去使用。