接口测试常见面试题

Posted 凡猫软件测试

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了接口测试常见面试题相关的知识,希望对你有一定的参考价值。




Q1· 

接口发布服务都有哪些协议?



我测试过得有两种协议 rest协议和soap协议

rest协议是什么?这种协议其实就是在http协议上制定了一些新的规范,依赖的还是http协议。

soap 协议是什么? 把传送的数据和响应的数据包装为 xml格式进行交互。




Q2· 

接口联调测试是干什么的,怎么测试的?


接口测试常见面试题(二)

有的时候我测试的平台,可能会依赖其他平台的接口的数据,这时候我们需要和被调用的平台去核实入参和出参的情况,等其他平台接口写好后,我这边进行调用,看看接口调用是否正常。




Q3· 

什么时候需要第三方接口?


接口测试常见面试题(二)

有的项目需要依赖其他第三方接口,比如物流项目需要调用 www.wuliu100.com提供好的 物流信息查询接口。还有有的项目需要调用第三方接口进行支付。

第三方怎么去测试?

一般情况下,我们开发会在自己的接口中去调用第三方接口,所以一般我们不会对第三方接口直接调用测试,而是调用我们自己开发写好的接口去测试。有的第三方接口会提供一些测试数据,比如绑卡接口卡号传入以01结尾的卡号第三方接口会返回绑卡失败,以02结尾的卡号返回超时等这些我们都要去模拟。




Q4· 

soapui怎么去测试接口?


接口测试常见面试题(二)

接口测试常见面试题(二)



Q5· 

Jmeter怎么去测试接口?


接口测试常见面试题(二)

Jmeter的话创建线程组,创建http请求和查看结果树,然后在http请求中填写内容,如果是post

请求需要把请求数据放在jmeter的parameters中或者bodayData中。填写好数据点击运行就好了。

接口测试常见面试题(二)



Q6· 

Postman 怎么去测试接口?


接口测试常见面试题(二)

安装postman工具,以前postman是一个浏览器插件,最新版可以直接下载安装。

安装好后可以可以模拟post/get请求进行测试。{statusCode:200, xxx :-1}

接口案例:




Q7· 

学生登录



/user/login


传参

 参数名

 类型 

必填

 说明

 mobileNo

 String 

Y

 登录名

 password

 String

Y

 加密后的密码

 isForce

 Boolean

N

 是否挤掉其他登陆用户{0:   否,1:是}

 syslnfo

 String

Y

 手机系统,ios/android

 devicelnfo 

 tring

N

 设备信息,包括手机系统版本和手机型号,用冒号分隔,

如:IOS 9.3:iPhone 6S Plus或ANDROID 4.0:Xiaomi2014811

 umengAppKey

 String

Y

 友盟appKey

 appSource

 String

Y

 来源,

 YIMI/CIWONG/LIANCHUANG/AO

 (一米教研使用YIMIEM )

 type

 String

N

 用户类型(STU:学生,TEA:教师,

 EM:教研,不传默认为学生)

 from

 枚举

N

 1.IOS

 2.安卓

 3.H5

 4.微信

 5.其他

 6.PC

apiVersion

 String

N

 接口版本号

 appVersion

 String

N

 App版本号

 sign

 String

Y

 数据校验


返回

参数名

类型

必填

说明

 result

 string


_

Success||failed

 code

 枚举


_

错误编码值

 message

 string


_

失败时返回原因

 token

 string


_

身份令牌

 data


_


_


_

userId

 lnt


_

用户ID(一米教研返回该字段)

 userName

 string


_

用户名称(一米教研返回该字段)

 realName

 string


_

用户真实姓名

 nickName

 string


_

用户昵称

 password

 string


_

密码

 roleId

 string


_

角色ID

 mobileNo

 string


_

手机号

 email

 string


_

邮箱

 sex

 string


_

性别(0男,1女)

 birthday

 string


_

生日

 headPicture

 string


_

 createTime

 string


_

创建日期

 provinceId

 string


_

省份ID

cityId

 string


_

城市ID

districtId

 string


_

地区ID

school

 string


_

学校

gradeId

 string


_

年级

hopeCurriculum

 string


_

希望学习的科目

isQQBind

 Integer


_

0:未绑定QQ   1绑定了QQ

isWXBind

Integer


_

0:未绑定微信   1绑定了微信


实例:

url: http://localhost:8007/user/login?mobileNo=18201865207&&password=123456

{

"result": "success",

"code": -1,

"message": "登录成功",

"data": 

{

"birthday": null,

"gradeId": 0,

"ucClientPwd": "",

"nickName": "139****0816",

"roleId": 0,

"sex": 1,

"hopeCurriculum": "",

"mobileNo": "13938250816",

"cityId": 0,

"userName": "13938250816",

"userId": 100000742,

"provinceId": 0,

"headPicture": "http://static.1mifd.com/static-files/user_pics/stu_head_pic/male.png",

"realName": "",

"ucClientNumber": "",

"password": "8f1b73e23ba0cbe33fd7f1557b2d4d74",

"isQQBind": 0,

"districtId": 0,

"createTime": 1487907172000,

"school": "",

"isWXBind": 0,

"email": ""

},

"token": "8535e57dcd6d75f8ca4fbc2f84223122"

}


Q8· 

什么是token?


接口测试常见面试题(二)

客户端访问服务器的时候,第一次会发一个令牌字符串,然后在后续发请求的同时,需要把令牌字符串也传送给服务器,保证所用的请求为同一个用户。比如登陆的时候服务器发给客户端一个token令牌,还有用户登录后每一次操作都会把该令牌发给服务器进行验证。




Q9· 

什么是sign?



签名是为了判断客户端发送的数据是否被发送的过程中更改,这时候客户端可以把所有的入参按一定规则加密(比如先排序后使用md5加密,再全部变成大写),这个加密后得到的字符串就是sign ; 发送数据的时候我们可以把所有的入参和sion一同发送给服务器,服务器根据自己的规则进行解密,如果解密后的数据和发送过来的数据一致,服务器会认为客户端发送过来的数据没有被中途拦截更改。


接口应用:

1、sign加密规则及调用

package com.chengcai.helloma;

import java.util.HashMap;

import java.util.Map;

public class asdfsf {


public static String createSign(Map<String, String> params, boolean encode)

           throws UnsupportedEncodingException {

       Set<String> keysSet = params.keySet();

       Object[] keys = keysSet.toArray();

       Arrays.sort(keys);

       StringBuffer temp = new StringBuffer();

       boolean first = true;

       for (Object key : keys) {

           if (first) {

               first = false;

           } else {

               temp.append("&");

           }

           temp.append(key).append("=");

           Object value = params.get(key);

           String valueString = "";

           if (null != value) {

               valueString = String.valueOf(value);

           }

           if (encode) {

               temp.append(URLEncoder.encode(valueString, "UTF-8"));

           } else {

               temp.append(valueString);

           }

       }


       return MD5.GetMD5Code(temp.toString()).toUpperCase();

}

public static void main(String[] args) {

Map mp = new HashMap();

mp.put("mobileNo", "12333534543");

mp.put("password", "asdfasfsfdsa");

String str = createSign(mp,true);

System.err.println(str);

}

}



Q10· 

接口自动化怎么做的?


接口测试常见面试题(二)

接口自动化的话,先配置环境,比如安装jdk、maven、eclipse,再导入依赖jar包比如

testng、reportng、log4j、jdbc还有hettpclient这些jar包添加在pom文件中,再写测试案例

把测试案例的excel文件存放在项目指定目录下。再使用httpclient结合testng开发自动化脚本,开发完成需要把代码提交到svn上,再配置jenkins让脚本每天凌晨以后自动执行,并且发邮件。

大概就是这样的一个过程。还有就是:自动化一定是要保证开发的脚本能够多次运行,这块就比较麻烦,比如查询接口就很好搞,因为不涉及到数据库的更改,但是比如一个接口对数据库的操作是更新或者删除或者增加,这时候就比较麻烦。比如如果接口对表中的数据进行了更新,我们需要接口自动化跑完以后把数据还原回来。还有接口如果对数据库进行增加,我们需要自动化跑完以后把增加的数据进行删除。再就是删除,我们每次先要造出接口需要删除的数据,再运行接口。这样保证接口能够重复运行。还有就是接口自动化一定不能仅仅验证结果,还需要验证后台数据库数据。




Q11· 

Pom文件内容包含哪些内容?


接口测试常见面试题(二)

Pom文件是有很多的功能,我这边用的主要是<dependencies>标签,在<dependencies>下添加项目依赖的jar包,再就是使用<build>标签进行构建控制,一个是控制构建过程中使用reportng生成结果报告,一个是构建过程用运行哪些testng的xml文件。来控制运行的测试案例。




Q12· 

Maven项目怎么配置的?


接口测试常见面试题(二)

1、先在本地解压maven包,再配置环境变量,添加maven_home和path值。

2、再配置本地仓库。

3、再在cmd中用命令初始化本地仓库。

4、再就是在eclipse中关联本地仓库,基本就这些。




Q13· 

什么是reportng?


接口测试常见面试题(二)

reportng是一个第三方写好的jar包,可以用来替换maven项目原有的结果报告,

 Reportng的结果报告比较清晰,有testcase的划分,还有百分比统计,还有如果一旦出错,可以看到具体的错误信息。




Q14· 

什么是testng?


接口测试常见面试题(二)

Testng是一个测试框架,其实和以前的junit差不多。

Testng主要大的功能一个是标注,一个是断言,还有testng.xml可以很方便的配置测试案例运行结构。




Q15· 

Testng都有哪些标注?


接口测试常见面试题(二)

Testng最常用的就是@Test和 @DataProvider    

@Test用来标记一个方法为测试方法。

@DataProvider 标记一个方法用于为测试方法提供数据。自动化测试过程中,测试数据和测试案例是分离的,可以是用DataProvider 标记一个方法为数据提供者,然后在方法内把excel中的测试数据读到一个二维数据中使用。

还有一些比如 beforemethod/aftermethod 在每个方法运行之前之后运行。

            beforesuilt/aftersuilt 在每个测试套件之前或者之后运行。这些用的相对较少。




Q16· 

Testng常用的断言有哪些?


接口测试常见面试题(二)

断言有很多,自动化过程中用的最多的就是 assertEqualas,用来比对excel中读取的预期结果和实际调用的接口返回的结果进行比对。也用到assertTrue。配合String.contents查看实际结果中是否包含预期结果。除此之外还有assertFalse、assertNull assertNotNull等等。




Q17· 

Testng的xml文件有需要怎么配置?


接口测试常见面试题(二)

配置的话比较简单,它的结构是层级包含的,一个suite可以包含多个test,一个test可以包含多个classes,一个classes可以包含多个class,我们可以根据不同的模块,把测试类放在不同的test下的。




Q18· 

什么是httpClient?怎么去使用?


接口测试常见面试题(二)

httpClient是 阿帕奇公司开发的一个开源jar包,导入项目后,可以使用java代码模拟http请求。用httpClient的话需要几步操作:

1. 先创建HttpClient对象。

2. 再创建具体的请求,如果需要发送GET请求,创建HttpGet对象;如果需要发送POST请求,创建HttpPost对象。

3. post请求需要在模拟请求体,httpclient提供了一个集合,可以把请求体中的key-value放在提供的集合中。 

4. 再就是调用HttpClient对象的execute(HttpUriRequest request)发送请求,该方法返回一个HttpResponse。

5. 一般做自动化我们需要把response的请求头和请求体拿出来,HttpClient提供了两个方法,getHeaders方法可获取服务器的响应头;调用HttpResponse的getEntity()方法可获取响应体。

我们需要看看请求头状态码是不是200,还有把请求体的数据拿出来,和预期结果进行比对。




Q19· 

http 接口和 webservice 接口的区别?


接口测试常见面试题(二)

①webservice 不用担心大小区别 ②不用担心中文 urlencode 问题 ③接口中实现的方法和要求参数一目了然 ④代码中不用多次声明认证(账号、密码)参数 ⑤传递参数可以数据、对象等




Q20· 

说说接口测试的流程,介绍request有哪些内容?


接口测试常见面试题(二)

流程:获取接口文档,依据文档设计接口参数,获取响应,解析响应,校验结果,判断测试是否通过。

request内容:(1)封装了各种请求类型,get、post等;(2)以关键字参数的方式,封装了各种请求参数,params、data、headers、token等;(3)封装了响应内容,status_code、json()、cookies、url等(4)session会话对象,可以跨请求。




Q21· 

谈谈你对HTTP协议的了解?(接口)


接口测试常见面试题(二)

超文本传输协议,端口为80,特点(无记忆功能、快速)是由请求和响应两部分组成请求由请求头、请求行、请求正文组成;响应是由响应头、响应行、响应正文组成,之前我们公司的接口是采用https协议的。

https http+ssl协议 端口443 面向安全的超文本传输协议




Q22· 

为什么要做接口测试?


接口测试常见面试题(二)

既然是接口获取和操作资源的方式,而大部分系统和产品中,资源一般都是产品的核心,比如微信核心资源就是通讯录关系链和聊天记录等,因此资源是必测的。

另外接口中大部分的内容是数据,通过数据的对比我们能推测到系统和产品的逻辑,测接口就是测逻辑。

最后接口中的返回相对单纯,不像web页面,html代码中有太多ui的东西,ui最不稳定,变化太快,接口相对稳定一点点,但是里面的干扰信息更少,断言相对容易很多。




Q23· 

接口测试用例怎么写?


接口测试常见面试题(二)

还是3a原则,这个我以前的回答里有。

A: arrange 初始化测试数据,就是造数据,这里的数据有我们输入的数据,也有目标接口所涉及的资源,比如hr系统中的用户信息,我们必须先有几条人员的详细信息才能去测获取人员信息的接口(当然只是正常的流程,我们有时候还需要清掉数据以便测试资源为空的情况);

A: act 调用接口,传入输入数据;

A: assert 断言, 对返回的资源信息进行断言,比如获取用户信息的接口返回了用户信息之后,我们要判断返回的用户是不是我们想要的那个用户,我们获取的是李雷的信息,接口如果返回韩梅梅,那么接口的逻辑就是不对的;




Q24· 

有哪些常见的接口?


接口测试常见面试题(二)

携程订飞机票,飞机票的信息一般都是通过各大航空公司的接口拿到的;

淘宝的物流信息,一般淘宝的物流信息都是通过各个物流公司的接口拿到的;

第三方微博客户端,个人用户的微博等信息都是通过微博的接口拿到的;




Q25· 

常见的接口测试工具有哪些?


接口测试常见面试题(二)

postman:推荐。基本功能免费。最简单的基于http接口的调试和测试工具;

jmeter:后置处理器配合断言基本上可以满足接口测试需求,就是测试报告要做二次开发

自己撸代码:推荐。配合类似xunit测试框架,基本可以满足一切需求;

soapui: 收费的;

insomnia:强力推荐。postman的弱化版,基本功能免费,重要的是工具代码开源,可以自己改;

paw: 强力推荐。mac上最强,淘宝买个授权好像就百把块钱;




Q26· 

如何查看接口的返回?


接口测试常见面试题(二)

我们现在已经知道了这个接口的情况了,如何查看接口的返回呢?

我们可以使用一些辅助工具帮助我们进行接口的调用,查看接口返回,最简单的跨平台调试工具推荐使用postman






往期精彩文章


以上是关于接口测试常见面试题的主要内容,如果未能解决你的问题,请参考以下文章

《软件测试常见面试题十四》

《软件测试常见面试题十四》

测试从业1到3年经验,常见面试题总结

2022最新整理软件测试常见面试题附答案

Java集合常见面试题

Java 并发常见面试题总结(下)