前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >面试官:你了解接口测试吗?

面试官:你了解接口测试吗?

作者头像
一个正经的测试
发布2024-01-22 16:56:29
1280
发布2024-01-22 16:56:29
举报

面试官:你了解接口测试吗?

一、前端和后端

在谈论接口测试之前,让我们先明确前端和后端这两个概念。在互联网开发中,前端和后端经常一起工作以完成一个任务。前端通常负责用户交互和数据的呈现,后端则负责数据的处理和存储。

前端,也称为客户端,它是用户可以直接看到和交互的部分,例如用户界面。典型的前端技术包括HTML、CSS和JavaScript等。

后端,也称为服务器端,它主要处理前端发送的请求,从数据库获取数据并返回给前端。后端通常用各种服务端语言编写,例如Java、Python、PHP等。

虽然这些概念可能有点抽象,但你只需要记住:

前端负责让页面看起来漂亮,后端负责实现网页的功能。

二、接口

“接口”在计算机科学中是一个非常重要的概念。简单来说,接口就是两个不同系统或模块之间进行通信的方式。在前后端开发中,接口是后端程序向前端展示其功能的一个"窗口"。前端可以通过调用这些接口来获取需要的数据或者实现某种功能。

前端就像提问者,而后端则像回答者。当前端需要某些信息或执行某些任务时,它会通过一个接口向后端发送请求。这个请求就像是一个问题,告诉后端需要做什么。后端则会根据请求执行相应的操作,并将结果返回给前端。这个结果就像是答案,告诉前端完成了什么任务或提供了哪些信息。

这种交互就像一个问答游戏,前端和后端通过接口不断地问答,从而实现应用程序的功能和数据交换。例如,当你在购物网站上点击“加入购物车”按钮时,前端会向后端发送一个请求,告诉它要将该商品添加到购物车中。后端将执行相应的操作,并将结果返回给前端,告诉它是否成功添加了商品

总之,接口就像是前端和后端之间的“对话”,用于交换信息和执行任务。

三、接口测试

大家都知道,接口是用于前端页面或应用与后端交互的。所以很多人会问:“我已经测试了功能,为什么还需要测试接口?”在回答这个问题之前,我们来举个例子:

例如,在测试用户注册功能时,用户名必须是 6-12 个字符,包括字母(区分大小写)、数字和下划线。在功能测试中,用户名规则肯定会进行测试,例如输入 20 个字符或特殊字符等。但这些可能仅在前端进行验证,而后端则没有进行验证。如果有人绕过前端验证并直接发送信息到后端,会发生什么呢

比如,你拿到了微信的注册接口,用 工具直接模拟客户端访问,发送一个注册请求。如果后端没有验证用户名和密码,那就意味着任何人都可以输入任何他们喜欢的用户名和密码,用户名设成多长都可以,跟什么人重复都可以。

而对于登录功能,如果没有进行完善的接口测试,也许会出现可以使用 SQL 注入的方式登录的漏洞,甚至获得管理员权限。这不是很可怕吗?

因此,接口测试的必要性体现在:

  • 发现很多在页面操作中无法发现的错误。
  • 检查系统处理异常的能力。
  • 检查系统的安全性和稳定性。
  • 只要接口测试得好,如果前端进行更改,后端就不需要更改。
  • 在接口测试的基础上,可以进行接口自动化测试,大大提升测试的效率。

四、如何进行接口测试 (Python)

Python是一种流行的编程语言,它因为其优秀的库支持和易于上手,成为了许多测试人员的首选语言。以下是一个简单的Python接口测试示例:

代码语言:javascript
复制
import requests
import json

# 请求的URL
url = 'http://your_backend_api'

# 如果要传递的参数是JSON格式,可以使用json模块进行编码
data = {
'key1': 'value1',
'key2': 'value2'
}

# 将字典转换为JSON格式字符串
json_data = json.dumps(data)

# 设置请求头部,告诉服务器我们发送的是JSON类型的数据
headers = {'Content-type': 'application/json'}

# 使用post方法发送请求,data参数是我们要传递的数据
response = requests.post(url, data=json_data, headers=headers)

# 检查状态码,确认请求成功
assert response.status_code == 200

# 输出返回的数据
print(response.json())

那么如何进行接口测试,需要测试哪些内容测试前的准备工作:

  • 测试前的准备工作:对于接口测试,首先需要对需要测试的接口功能有一个清晰的理解,比如接口的请求方式(比如GET、POST等),请求需要的参数,以及正常返回的结果等等。
  • 编写测试用例:然后,根据接口的具体情况,编写测试用例。测试用例应包含所有可能的情况,包括正常的业务流程和可能的异常情况。
  • 执行测试用例:用专门的接口测试工具(如Postman等)或者编程语言(如Python等)执行测试用例,并记录返回的结果。
  • 验证测试结果:根据返回的结果验证测试是否通过。查看返回的状态码是否符合预期,返回的数据是否正确。
  • 报告测试结果:在执行完所有测试用例后,将测试的结果整理成报告并反馈给相关人员。

一般来说,接口测试主要关注以下几个方面的内容:

  • 功能性测试:验证接口是否能实现预期的功能。比如,一个用户登录的接口是否能在用户提供正确的用户名和密码时,返回正确的用户信息。
  • 性能测试:测试接口的响应时间,以及在高并发环境下的表现。
  • 异常处理测试:模拟异常情况,看接口的异常处理能力是否强。例如,当网络不稳定,接口请求参数错误,或者服务器内部错误时,接口是否能返回清晰明了的错误信息。
  • 安全性测试:检查接口是否存在安全漏洞,比如,是否能防止SQL注入攻击,是否对敏感信息加以保护等。
  • 兼容性测试:验证接口在不同环境和设备下的兼容性。

如何编写有效的接口测试用例?

编写有效的接口测试用例是接口测试的关键步骤。好的测试用例可以用来验证系统的各种功能,性能和安全等因素。以下是一些编写有效测试用例的方法:

  • 深入理解需求:明确接口的目标,理解接口的核心需求。例如,接口的功能,输入/输出数据的格式等。
  • 考虑正常和边界情况:正常情况下的输入可能很简单,但是边界情况则需要更多的考虑。这可能包括输入或输出参数的上限、下限。
  • 考虑失败和异常情况:务必编写失败和异常情况的测试用例。比如,无效的输入参数,网络问题等。
  • 考虑性能需求:如果接口需要处理高并发请求,那么测试用例就应该包括性能和并发测试。
  • 验证数据的一致性和完整性:验证接口返回的数据是否符合预期,是否包含需要的所有信息。
  • 安全性测试:包括验证接口的授权和认证,以及防止SQL攻击,跨站脚本攻击等。

那么接口测试代码如下

代码语言:javascript
复制
import requests

# 用户正常登录
def test_valid_login():
    url = "http://your_api_url/login"
    data = {"username": "valid_user", "password": "valid_password"}
    response = requests.post(url, data=data)
assert response.status_code == 200
assert "登陆成功,返回用户信息和Token" in response.text

# 用户登录,账号错误
def test_invalid_username():
    url = "http://your_api_url/login"
    data = {"username": "invalid_user", "password": "valid_password"}
    response = requests.post(url, data=data)
assert response.status_code == 401
assert "用户名或者密码错误" in response.text

# 用户登录,密码错误
def test_invalid_password():
    url = "http://your_api_url/login"
    data = {"username": "valid_user", "password": "invalid_password"}
    response = requests.post(url, data=data)
assert response.status_code == 401
assert "用户名或者密码错误" in response.text


# 用户名和密码为空
def test_empty_username_password():
    url = "http://your_api_url/login"
    data = {"username": "", "password": ""}
    response = requests.post(url, data=data)
assert response.status_code == 401
assert "用户名和密码不能为空" in response.text

# 用户名为空,密码不为空
def test_empty_username():
    url = "http://your_api_url/login"
    data = {"username": "", "password": "non_empty_password"}
    response = requests.post(url, data=data)
assert response.status_code == 401
assert "用户名不能为空" in response.text

# 用户名不为空,密码为空
def test_empty_password():
    url = "http://your_api_url/login"
    data = {"username": "non_empty_username", "password": ""}
    response = requests.post(url, data=data)
assert response.status_code == 401
assert "密码不能为空" in response.text

# 执行测试
test_empty_username_password()
test_empty_username()
test_empty_password()

# 执行测试
test_valid_login()
test_invalid_username()
test_invalid_password()

此外,真实情况下,这样的测试通常会放在一整套自动化测试流程中运行,而不只是单独运行这一段代码。因此,你可能需要使用像unittest或pytest的Python测试框架来组织你的测试代码。

如果你还有什么疑问,请从下方留言吧~

本文参与?腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2024-01-05,如有侵权请联系?cloudcommunity@tencent.com 删除

本文分享自 一个正经的测试 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与?腾讯云自媒体分享计划? ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、前端和后端
  • 二、接口
  • 三、接口测试
  • 四、如何进行接口测试 (Python)
相关产品与服务
腾讯云服务器利旧
云服务器(Cloud Virtual Machine,CVM)提供安全可靠的弹性计算服务。 您可以实时扩展或缩减计算资源,适应变化的业务需求,并只需按实际使用的资源计费。使用 CVM 可以极大降低您的软硬件采购成本,简化 IT 运维工作。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
http://www.vxiaotou.com