构建JSON的API接口描述文件
以下是一个简单的json用来描述API,主要有以下几个字段:
·queryParamters: 这个字段不是必须的,用来记录URL里面的可选参数,也就是在URL里面?之后的参数的
·pathParameters: 这个字段也不是一个必须要填写的,这个参数主要是用来记录URL中的参数在//之间的
·method:这个是必须要填写的,这是请求的方式,主要包括了get/post/delete/put等
·resourceURL:必须填写,用来标示请求资源的位置
·contentType:不是必须填写,如果请求的contentType是application/json,则可以不写,否则需要填写
·headers,不是必须填写,一般情况下可以不需要填写,因为默认的header值已经在工具类里设好了
·body: 如果请求没有body,可以不用填写,否则建议填写请求对应的JSON的类名(也不是必须要写的,目前框架还没有支持)
事实上一上内容大部分不是必须要填写的,但是还是建议可以填写完成,或许以后会用到。
{
"queryParameters":["userCode", "password" ],
"pathParameters":["ticketId","userId"],
"method":"POST",
"resourceURL":"/login",
"contentType":"application/x-www-form-urlencoded",
"headers":{"tokenId":"1234567432","Authorization":"890998776"} "body":"com.abcd.ddsf" }
构建一个调用API的JAVA类
以下是构建一个调用API的JAVA类的例子,需要做以下的事情: - 这个类需要继承BaseWebService - 起上一个和这个API做的事情相匹配的名字 - 指定描述那个API接口的JSON文件的路径 - 继承BaseWebService的构造函数
public class LoginAPI extends BaseWebService { private final static String loginAPIDescriptionPath = "servicedescription/loginapi.json"; public LoginAPI(RequestData data) { super(loginAPIDescriptionPath, data);
}
}
构建测试数据文件
测试数据还是使用外部excel的方式,他的格式基本可以固定,如下例:img
解释一下这个数据: RequestData.queryParameters(usercode), 表示queryParameter的一个key值是usercode,value就是用来进行数据驱动测试的值。
那么如果需要body的值呢,只要excel新增一列,列的第一行名字是RequestData.body就可以,如果是JSON格式的,就把真实的JSON这里就可以
如果是pathParameter,那么就是RequestData.pathParameters(${key}),${key}表示你的pathParameter的名字
这个测试数据文件,需要放在Test的resource是目录里面,可以放在一个子目录里面。
构建测试用例
主要步骤包括: - 构建Dataprovider - 构建测试方法
@DataProvider(name="login_data") public Iterator getLoginData(Method m) throws InvocationTargetException, Exception, IOException {
Map clazzMap = new HashMap();
clazzMap.put("RequestData", RequestData.class); // build的参数就是所在测试数据文件的位置 Iterator y= ExcelHelper.build("testcase/login/loginapitest.xls").loadExcelDataToIterator(clazzMap); return y;
} @Test(dataProvider = "login_data") public void testLoginAPITes(RequestData data){
LoginAPI api = new LoginAPI(data);
api.execute(); //获取返回的类 System.out.println(api.getResponse()); //获取返回的状态代码,如200,302,401,500 ....... System.out.println(api.getResponse().getStatusCode()); //获取返回的包体 System.out.println(api.getResponse().getBody().toString()); //获取返回的header内容 System.out.println(api.getResponse().getHeaders()); //可以根据返回值内容进行验证 }
具体的验证内容需要在得到返回值之后进行验证,由于每个接口的返回值都不一样,所以都需要定制这些检查点.
API测试代码结构
·API类: 放置在apis目录里面
·JSON: 放置在resource的servicedescription目录下
·测试数据文件: 放置在resource的testcase下面目录下,可以起一个子目录,名字和API相匹配
·测试类: 放置在test目录相面