今日重点
- Java注解
- Java反射
- 自定义@Depends注解
解决问题
上篇讲了接口场景化用例中的2个问题:
- 接口之间有依赖关系,有执行顺序要求;
- 场景化接口其中如果有接口失败,后续接口需要ignore;
今天我们来说说另一个问题,接口参数数据依赖问题;
解决方案
1.业务
生成订单接口
代码语言:javascript复制{
"phone": "0800485801",
"appid": "1000000001",
"amount": "5800",
"trans_type": "01",
"mchnt_no": "309040889121950"
}
查询订单状态
代码语言:javascript复制{
"appid": "10000001", //GenOrderService接口请求参数
"order_id": "18053000313296", //GenOrderService接口返回参数
"coord_longitude": "121.563352",
"coord_latitude": "31.24005"
}
订单支付
代码语言:javascript复制{
"appid": "10000001", //GenOrderService接口请求参数
"order_id": "18053000313296", //GenOrderService接口返回参数
"coord_longitude": "121.563347",
"coord_latitude": "31.240055",
"field8583": "60000900006001003100170",
"pay_type": "01"
}
上述接口场景是订单支付场景,GetPayStatusService和SwitchPospDataService接口请求参数中都依赖GenOrderService接口返回的订单号,请求参数中依赖GenOrderService接口请求参数中的appid;
2.方案
3.注解
代码语言:javascript复制@Depends({@Depend(rely = "GenOrderService",rule = "$response.$..order_id=$..order_id"),
@Depend(rely = "GenOrderService",rule = "$request.$..appid=$..appid")})
代码语言:javascript复制import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import static java.lang.annotation.ElementType.METHOD;
import static java.lang.annotation.ElementType.TYPE;
@Target({METHOD,TYPE})
@Retention(RetentionPolicy.RUNTIME)
public @interface Depends {
Depend[] value();
}
代码语言:javascript复制import java.lang.annotation.*;
import static java.lang.annotation.ElementType.METHOD;
import static java.lang.annotation.ElementType.TYPE;
@Target({METHOD,TYPE})
@Retention(RetentionPolicy.RUNTIME)
public @interface Depend {
String rely();
String rule();
}
@Depends:注解主要是解决接口场景化过程中接口数据依赖问题,处理多个接口参数依赖问题;
@Depend:注解具体解决依赖参数;
rely:表示依赖接口
rule:依赖规则处理
rule = "..order_id",
rule = "..appid",
4.Java反射
反射主要的功能
- 运行时构造一个类的对象;
- 运行时获取一个类所具有的的成员变量和方法;
- 运行时调用任意一个对象的方法;
- 生成动态代理;其实反射最主要的功能我觉得是与框架搭配使用;
实现方案
- 框架在执行接口过程中会保持接口全生命周期的参数如:请求、返回等参数信息;
- 框架在执行用例之前会判断是否存在@Depends如果存在则会利用反射进行解析然后根据规则来处理接口依赖参数;
- 通过解析Json报文进行注入替换;
注:@Depends反射解析代码暂不提供,此代码需要依赖框架执行;
5.总结
接口场景化
- 接口之间有依赖关系,有执行顺序要求;
- 接口场景化用例执行中如果有接口失败,后续接口需要ignore;
- 接口场景化数据依赖;
通过@DisabledOnScenario和@Depends注解我们解决了接口场景化用例的痛点;如果在接口场景化测试过程中