软件测试工程师面试题:给你一个接口,如何进行测试?

2021年3月3日10:53:02 发表评论 150 views

中级软件测试工程师岗位的面试中,总会被问到:给你一个接口,如何进行测试?说实话,这个问题难么?会者不难,难者不会!大家的想法和态度肯定都不会相同。接下来,我们用一个面试中的实例进行好好的分析,看看到底接口该怎么进行测试!下面请看面试题

软件测试工程师面试题:给你一个接口,如何进行测试?

有如下用户登录的的API接口:

/userLogin?userName={user_id}&password={passwd}

对应的数据库的user表字段如下:

软件测试工程师面试题:给你一个接口,如何进行测试?

该api接口的需求如下:

1.用户名和密码,只能是数字和字母,当不满足时,接口需要返回400的http response code

2.用户名和密码不匹配,登录应该失败,这时接口需要返回403的http response code,且需要将user表的该user这行记录下面的failed_count字段加1

3.用户名和密码匹配,登录应该成功,接口需要返回200的http response code,且在body里需要返回一个长度是36位加密的token,且需要将user表的该user这行记录下面的failed_count字段置为0, last_login_time字段置为当天的时间

请完成以下两个题目:

1.写出该接口的测试用例。

2.当该接口出现bug时写出需要提交的信息。

软件测试工程师面试题:给你一个接口,如何进行测试?

题目就是上面的内容,看上去挺复杂的,但是我们只需要静下心来好好的分析一下,从题目、表述和要完成的内容等多个方面去分析:

首先,就是要看清楚人家要我们出什么样的东西。根据题目要求:我们需要出以下两个东西:

1、设计测试用例(读API接口和规则,提取需求点)

2、提交bug(需要什么信息)

只有搞清楚了要完成的东西,我们才不至于所答非所问,才能按照准确的目标高效的完成。

其次,我们要分析题目,看看从题目中,我们能分析出来什么有价值的信息:

1、从API的接口地址中,可以初步判断,该接口的请求方式为:Get。因为参数名和参数值在URL中可见。(这个大家可以参考HTML表单数据提交的过程中的表现,这里就不多说了。)当然也有其他可能,毕竟我们还不知道是什么接口传输协议。

2、根据数据表中字段,可以知道每一个的含义、数据类型以及该数据类型的边界。

3、接口测试,一定要跟数据库中的对应数据做查询和对比,数据的变化作为测试的重点。

4、针对需求1,考虑等价类,用户名和密码这两个参数如果不是字母和数字的数据请求,响应码就是400

5、针对需求2,用户名必须是在数据库中存在的,密码必须是错误的,响应码就是 403,且该用户条目中Failed_count字段值加1(必须结合数据库,进行数据的比对)

6、针对需求3,请求参数正确,数据和数据库比对正确了,响应码:200,Body信息为36位加密的token。该用户对应的Failed字段设置为0,最后登录日期为当天日期。

7、通过上面的分析,我们还有可能发现需求中有不完善之处。用户名符合要求、密码也符合要求,但是用户名不存在时,系统的响应是什么,这个在需求里面没有提及和说明。

8、int类型是有取值范围:-2147483648------2147483647.,int型会不会在最大值再加1的情况下,变成最小值,然后继续增长,直到又变成0,Failed_count为0,但是last_login_date没有对应的数值存在?。(这是测试中数据类型的边界值的应用,我们应该不仅从业务的边界出发,还应该从技术、语言的角度出发考虑。)

9、用户名、密码的字符类型varchar,可变长度。过长怎么办?(测试中边界值的应用。)

10、性能方面,请求的频率可以有多快?请求的间隔时间是多长?请求的并发是多少?同一个IP能不能多账户请求?这些在接口需求中都没有。

做到了足够的分析后,我们就可以设计测试用例了:把我们所想的内容全都设计和编写出来。下面看几个相关的用例设计的案例:(其余的大家可以想一想)

软件测试工程师面试题:给你一个接口,如何进行测试?

最后,关于Bug提交需要什么信息?最基本的:缺陷标题、编号、 所属模块、缺陷类型、复现步骤(步骤、预期结果、实际结果)、前提条件、优先级、严重程度、接口系统版本、用到的接口工具及版本。

这个就不给例子了,因为也没有测试啊!

最后,大家想想,如果题目再来一个问题:使用你熟悉的编程语言,实现对上述接口的请求,并输出响应码。这个又该怎么去完成?

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: