接口测试总结

来源:互联网 发布:cocos2d js引擎 编辑:程序博客网 时间:2024/05/12 00:46

参与产品的接口测试也已经有一段时间了,也是第一次参加接口测试方面工作,给自己这一段时间的工作做一个总结。


关于测试流程:
由于接到需求的时候开发人员接口已经开发的差不多,所以需求阶段并没有介入。
了解测试需求,编写测试计划、测试计划review、编写测试用例、测试用例review评审、编写测试代码、部署到enkins平台实现持续集成。

关于测试要点:
接口文档测试-接口介绍是否清晰,结合测试过程检查接口参数名称类型介绍是否有错误
单个接口测试-正常异常参数
多个接口组合的业务流程测试
性能测试
安全性测试
错误码的测试-错误码的测试如果单个接口测试中能够完全覆盖也可以不用单独编写测试代码。

关于测试思路:
接口是开放给其他用户使用的,在测试保证所有功能正常的情况下觉的还需要考虑接口的设计需要尽量的避免接口使用者因为自己代码的问题引入一些bug。
例子:一个接口可以批量的收藏一些文章,但是最大值为50
这时候对于超过50的时候怎么处理就会涉及到一些问题,超过50的时候可以返回相应的错误码,也可以只截取前面50条数据进行收藏。
如果选择的是截取前面50条数据进行收藏,接口使用者在写代码的时候可能如果传入了超过50个数据,但是只截取了前面的,会导致丢掉一些数据,如果开发人员自己没发现,会导致这个问题流入到测试阶段,增加工作量。对于超过边界值的问题个人是建议开发那边都统一返回相应的错误码。

关于接口自动化覆盖率:
接口测试自动化相对于UI自动化来说稳定性是会高很多,接口自动化的收益率也会比UI层的高很多,所以关于接口测试的自动化覆盖率是越高越好,当前项目中接口的自动化覆盖率在95%以上,存在几个确实不方便自动化的通过半自动化的方式,编写测试代码,人工查看测试结果。

关于测试技术:
使用了HttpClient+TestNG+jenkins


测试的具体实现:
数据驱动-接口基本上都是一些参数的不一样,这里直接使用了testng自带的数据驱动来管理不同的参数
数据准备-测试的过程中肯定会涉及到很多数据准备的时候,这边是能通过数据库操作的就尽量通过数据库操作来准备清理数据,而对于是否使用其它接口来准备数据的这个可能是有点争议,不过个人的更倾向于更多的使用数据库来准备数据,毕竟其它的接口测试中你也不能保证一定就是正确的,所以会有可能使用了一个错误的接口来准备数据,导致数据准备就出错了。
结果验证-当前测试接口的返回值是xml格式的,对于测试结果的验证可以选择编写xpath来验证,不过怕内容多xpath写的后续不容易维护,所以还是选择按照每个接口的返回值,通过dom4j解析xml,对于解析出来的内容做相应的断言。

例子:
测试方法
@Test(dataProvider = "accountUpdateProfile", dataProviderClass = AccountData.class, groups = {"regression","debug"})
public void testAccountUpdateProfile(String nickName,String gender,String introduction, String returnCode) throws TBlogException, DocumentException, SQLException, UnsupportedEncodingException{
String xml = client.accountUpdateProfile(nickName,gender,introduction);
CommonVerify.verifyAccountUpdateProfile(xml,nickName,gender,introduction,returnCode);
}

驱动数据,如果输入正常的参数则返回码为200,如果输入异常的参数,则返回接口中定义的错误码
@DataProvider( name = "accountUpdateProfile" )
public static Object[][] accountUpdateProfile() {
return new Object[][] {
//nickname/gender/instroduction/code
//验证gender的值
{"kevin测试", "1","autotest","200"},
{"kevin测试", "0","autotest测试","200"},
{"kevin", "1.5","autotestkevin","118"},
{"kevin", "1.0","autotestkevin","118"},
{"kevin", "-1","autotestkevin","290"},
{"kevin", "2","autotestkevin","290"},
{"kevin", "asda","autotestkevin","118"},

                        。。。。。
};
}


具体的调用接口方法
/*
 * account/update_profile 更新当前用户的个人信息(昵称、性别、个人介绍)
 */
public String accountUpdateProfile(String nickName, String gender,
String introduction) throws TBlogException,
UnsupportedEncodingException {
String url = CommonString.SERVER_URL + "account/update_profile.xml";
if (nickName != null || gender != null || introduction != null)
url = url + "?";
if (nickName != null)
url = url + "nickname=" + URLEncoder.encode(nickName, "utf-8")
+ "&";
if (gender != null)
url = url + "gender=" + gender + "&";
if (introduction != null)
url = url + "introduction="
+ URLEncoder.encode(introduction, "utf-8");
Response response = get(url, true);
return getResponse(response);
}


具体的验证方法
/*
 * account/update_profile 更新当前用户的个人信息
 */
public static void verifyAccountUpdateProfile(String xml, String nickName,
String gender, String introduction, String returnCode)
throws DocumentException {
if (returnCode.equals(CommonString.OKCODE)) {
Element rootElm = DocumentHelper.parseText(xml).getRootElement();
String rootName = rootElm.getName();
Assert.assertEquals(rootName, "user");
if (nickName == null || "".equals(nickName)) {
// 保证昵称没有被清空
Assert.assertNotSame(rootElm.elementText("nickname"), "");
} else {
Assert.assertEquals(rootElm.elementText("nickname"), nickName);
}

if (gender == null || "".equals(gender)) {// 保证gender没有被清空
Assert.assertNotSame(rootElm.elementText("gender"), "");
} else {
Assert.assertEquals(rootElm.elementText("gender"), gender);
}

if (introduction == null || "".equals(introduction)) {// 保证introduction没有被清空
Assert.assertNotSame(rootElm.elementText("description"), "");
} else {
Assert.assertEquals(rootElm.elementText("description"),
introduction);
}

} else {
verifyErrorCode(xml, returnCode);
}

持续集成:
写完所有测试用例,实现自动化之后要做的事那就是实现持续集成,及时的跟进开发的质量,尽早发现开发修改代码引起的bug。
这个的接口代码部署在了Jenkins平台中,加上Jenkins平台中的tesng插件以及Email-ext plugin插件,可以方便的实现运行后在Jenkins平台或者通过邮件发送运行结果。

Jenkin平台加上Testng插件后查看每次的运行结果

接口测试总结 - kevinkong - 风之云的足迹
 



配置了Email-ext plugin插件后邮件中收到的测试结果

 
接口测试总结 - kevinkong - 风之云的足迹

转载自:http://kongqingyun123.blog.163.com/blog/static/63772835201262104529780/

0 0
原创粉丝点击