接口测试常见面试题
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 |
|
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 |
|
手机号 |
|
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
往期精彩文章
以上是关于接口测试常见面试题的主要内容,如果未能解决你的问题,请参考以下文章