接口介绍
该项目的主流程即如下5个接口
1.注册接口
2.登录接口
3.项目接口
4.子项目接口
5.成员接口
简单梳理下接口之间的关联:
1.先请求注册接口,得到账号密码等
2.使用注册的账号密码进行登录,得到返回token
3.项目接口使用该token进行添加项目,得到项目ID
4.子项目接口使用token,和项目ID进行请求,得到子项目ID
5.成员接口使用token,项目ID,子项目ID请求,成功添加成员
注意:
1.用例设计暂未考虑异常情况,仅考虑主功能
2.成员接口需要使用到项目ID和子项目ID,这里把项目接口和子项目接口的用例写到成员接口的用例中去,作为其前置条件。故成员接口共有3条用例
单独运行用例,执行结果如下:
发现单独运行时,每个模块均无报错,执行成功
接下来使用测试套件一并执行,结果如下:
发现运行到成员模块时,报错。
为什么会是这样的呢?
通过仔细排查,调试发现:套件运行时,会把到测试方法截至的代码收集到套件中优先执行,这部分代码的作用是动态生成成员接口请求时所需要的数据(项目名啊,子项目名啊等数据)
如图所示
然而模块运行的顺序是:
子项目模块–>项目模块–>成员模块
所以代码的运行顺序是:
红色标记的代码–>子项目模块代码–>项目模块代码–>成员模块代码
当执行完红色标记的代码后,生成了项目名,子项目名等数据存储了起来,继续执行子项目模块和项目模块时,因为其测试方法内部也有动态生成项目名,子项目名等数据(如下图所示),这样就会把之前存储的数据替换掉,用于请求。并在数据库中生成记录
这就导致,代码运行到成员模块时,红色标记的代码因为一早就被执行,所以不会再执行,只会继续执行下面的代码。而数据也是替换过后的数据(已用于请求,故数据库中已存在)
而从接口文档中得知,项目名,子项目名不能重复,所以最终请求成员接口时是报错的,因为使用的数据在数据库中已存在
解决方法:
把红色标记的代码放在setUpClass类方法中,作为前置条件单独执行,运行结果如图:
也可放在测试方法内部,结果如图: