Python接⼝⾃动化浅析登录接⼝测试实战
⽬录
1、什么是接⼝?
那么,接⼝测试和功能测试的区别在哪呢?
2、如何开展接⼝测试?
3、如何设计接⼝⽤例?
1.获取接⼝⽂档
Fiddler
2.分析接⼝⽂档的接⼝,提取测试点
3.接⼝测试⽤例设计思路
4.接⼝测试其他范围
接⼝业务测试
接⼝的性能测试
接⼝安全测试
在项⽬下新建⼀个⽂件夹common
编写登录接⼝⽤例,调⽤封装的请求类。
对于⽤例的⼀些总结:
4、接⼝测试⽤例实战
在上⼀篇Python接⼝⾃动化测试系列⽂章:,主要介绍单元测试,unittest模块特性、⼤致流程、源码及实战例⼦。以下主要介绍接⼝概念、接⼝⽤例设计及登录接⼝测试实战。
1、什么是接⼝?
接⼝:检测外部系统与系统之间以及内部各个⼦系统之间的交互点。前端测试和后端测试的区别
通俗来说,接⼝就是连接前后端的桥梁,接⼝测试可以简单理解为脱离了前端的功能测试。
⼀个⼜⼀个的接⼝就对应功能测试内⼀个⼜⼀个的功能。
但注意,⼀个功能有可能不是⼀个接⼝就能实现。
那么,接⼝测试和功能测试的区别在哪呢?
其实功能测试就是在页⾯上输⼊我们的参数值,点点点;
⽽接⼝测试没有前端,⽽是通过接⼝⽂档上的调⽤地址、请求参数等,校验返回的结果值,
也就是说,接⼝可以看成没有界⾯的功能测试。
因此,可以分析,系统间的接⼝包含三部分:输⼊、处理逻辑、输出。
2、如何开展接⼝测试?
接⼝测试流程如下:
1.需求评审,熟悉业务和需求;
2.开发提供API接⼝⽂档;
3.根据开发交付的接⼝⽂档,编写接⼝测试⽤例;
4.接⼝测试⽤例评审;
5.开始执⾏接⼝测试;
6.提交测试报告;
3、如何设计接⼝⽤例?
1.获取接⼝⽂档
⼀般公司的开发会提供接⼝⽂档,没有接⼝⽂档的⾃⾏抓包吧(摸摸头),不知道怎么抓包的⼩伙伴,可以看看之前的Fiddler系列⽂章。
Fiddler
接⼝⽂档是我们测试时最重要的⼀个依据,⼀个规范的接⼝⽂档⾄少包括:
1.接⼝说明;
2.调⽤URL;
3.请求⽅法(get、post等);
4.请求参数、参数类型、请求参数说明等;
5.返回参数说明;
如下为⼀个简单的登录接⼝⽂档:
2.分析接⼝⽂档的接⼝,提取测试点
接⼝测试⽤例跟常规的功能测试⽤例基本⼀样,
可以从接⼝功能测试、接⼝业务测试、接⼝性能测试、接⼝安全测试等⾓度考虑。
接⼝的逻辑校验,可以参照接⼝流程图来进⾏设计,⼀个分⽀需要作为⼀个场景去进⾏测试,需要覆盖到流程图⾥⾯所有的逻辑分⽀。
接⼝的参数校验,可以参照接⼝⽂档中的参数定义去进⾏验证,需要覆盖到所有参数对应的枚举值以及错误码等信息。
3.接⼝测试⽤例设计思路
接⼝功能的关注点是:
1.接⼝参数正确与否:接⼝传⼊的参数是否有正确填写;
2.接⼝参数缺失:接⼝参数有必填、选填参数,传参时,测试参数缺失对结果的影响;
3.接⼝参数边界值:⽐如⽤户名、密码有长度限制,需要测试不同长度的参数对结果的影响;
4.接⼝参数类型:⽐如接⼝⽂档中⽤户名为String类型,测试传⼊其他数据类型对结果的影响。
4.接⼝测试其他范围
接⼝业务测试
主要是从业务的⾓度出发,把接⼝组合成⼀条业务链,⽐如登录之后充值,在数据库中⾦额是否正确等等
接⼝的性能测试
是指接⼝是否满⾜业务的要求,⽐如业务要求系统可以满⾜50个⼈同时下单,那么下单这个接⼝就要可以承担50 TPS,⽬前
业内⼀般使⽤JMETER去做接⼝性能测试,jmeter接⼝性能后续会单独在Jmeter系列⽂章⾥介绍。
接⼝安全测试
接⼝的安全性主要围绕Token、Timestamp和Sign三个机制展开设计,保证接⼝的数据不会被篡改和重复调⽤。
注意:本⽂主要涉及接⼝功能测试,相信做过功能测试的童鞋,设计接⼝测试⽤例也是没问题的。
4、接⼝测试⽤例实战
以下,我们以登录接⼝进⾏实战。
随着代码模块越来越多,混在⼀起,杂乱⽆章,这时我们考虑架构分层了,上篇⽂章:Python接⼝⾃动化之requests请求封装,封装的requests请求类,每个⽤例都要调⽤,可以放在公共模块⾥。
在项⽬下新建⼀个⽂件夹common
放⼊请求模块requests_handler.py
requests_handler.py
import requests
class RequestsHandler:
def __init__(self):
"""session管理器"""
self.session = requests.session()
def visit(self, method, url, params = None, data= None, json= None, headers= None):
result = quest(method,url,params=params,data=data,json=json,headers=headers)
try:
# 返回json结果
return result.json()
except Exception:
return 'not json'
def close_session(self):
self.session.close()
编写登录接⼝⽤例,调⽤封装的请求类。
登录⽤例,新建⼀个test_cases⽂件夹,⽤来存放⽤例模块。
test_Login.py
import unittest
quests_handler import RequestsHandler
class LoginTest(unittest.TestCase):
def setUp(self):
# 请求类实例化
def tearDown(self):
def test_login_success(self):
login_url = '127.0.0.1:8000/user/login'
payload = {
"mobile_phone": "1530272****",
"pwd": "12345678"
}
res = q.visit('post',login_url,json=payload)
self.assertEqual(0, res['code'])
if __name__ == '__main__':
unittest.main()
运⾏结果为:
Ran 1 test in 0.213s
OK
对于⽤例的⼀些总结:
setUp, tearDown
前置条件,后置条件,setUp实例化,在运⾏测试⽤例前获取session管理器, tearDown,在测试⽤例执⾏结束后关闭session管理器。
对于断⾔
⼩伙伴们可能不知道到底⽤返回结果中的哪个字段断⾔。个⼈意见,如果code、msg⽐较详细的话,可以利⽤code、msg其中⼀个来断⾔,当然code、msg⼀起做断⾔也可以,甚⾄你觉得返回结果中某个数据符合你的预期,也是可以拿来断⾔,断⾔⼿段是灵活多变的,⾃⾏选择最优⽅案。
⼩伙伴们看到总结,退出,打开王者荣耀,⼀⽓呵成,其实还没完呢,我们写了正向⽤例,还有异常⽤例也写两条,更多的异常⽤例可以⾃⾏扩展下。
import unittest
quests_handler import RequestsHandler
class LoginTest(unittest.TestCase):
def setUp(self):
# 请求类实例化
def tearDown(self):
# 关闭session
def test_login_success(self):
"""
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论