Python接口自动化测试理论知识以及框架源码
一、什么是接口测试、为什么要做接口测试
1、什么是接口测试
接口测试是测试系统组件间接口的一种测试。接口测试主要用于检测外部系统与系统之间以及内部各个子系统之间的交互点。测试的重点是要检查数据的交换,传递和控制管理过程,以及系统间的相互逻辑依赖关系等。
一般来说,测试接口,就是指测试接口的功能,性能和稳定性测试,当然可能还有安全性测试。一般,来说我们听说到的接口基本上都是指HTTP或者HTTPS协议的接口测试,也就是一些web服务请求。一个软件项目中,
有很多接口,少的有几十个,多的有几百上千个接口。这个时候,我们没有软件界面,没有具体的测试场景,只有一个接口描述文档。我们需要把接口这样抽象的东西,通过软件测试的理论和方法去测试接口,找出接口的功能和安全性的缺陷。接口有内部接口和外部接口。内部接口就是开发人员自己开发的接口。外部接口,好比网站调用微信支付和支付宝支付接口。还有一些模块与模块之间的接口。【转至 北京宏哥】
2、为什么要做接口测试
1、现在很多系统前后端架构是分离的,因为不同端(前段,后端)的工作进度不一样,所以我们要针对最开始出来的接口,以及需要调用其他公司的(银行,支付宝,微信,qq等)一些接口进行接口测试及验证数据,从安全层面来说,只依赖前端进行限制已经完全不能满足系统的安全要求(绕过前端太容易了), 需要后端同样进行控制,在这种情况下就需要从接口层面进行验证。在这种情况下就需要从接口层面进行验证。前后端传输、日志打印等信息是否加密传输也是需要验证的,特别是涉及到用户的隐私信息,如身份证,银行卡等。【转至 北京宏哥】
2、如今系统越来越复杂,传统的靠前端测试已经大大降低了效率,而且现在我们都推崇测试前移也叫测试左移,希望测试能更早的介入测试,那接口测试就是一种及早介入的方式。例如传统测试,需要等前后端都完成才能进行测试,才能进行自动化代码编写。 而如果是接口测试,只需要前后端定义好接口,那这时自动化就可以介入编写接口自动化测试代码,手工测试只需要后端代码完成就可以介入测试后端逻辑而不用等待前端工作完成。【转至 北京宏哥】
二、接口测试的流程
1、接口测试的流程
接口测试也是属于功能测试,所以跟我们以往的功能测试流程并没有太大区别,测试流程依旧是:
a.测试接口文档(需求文档).
b.根据接口文档编写测试用例(用例编写完全可以按照以往规则来编写,例如等价类划分,边界值等设计方法)
c. 执行测试,查看不同的参数请求,接口的返回的数据是否达到预期。
接口测试和功能测试一样,流程也大致遵守V模型:
一般来说,接口测试左边的每个阶段,每个公司可能都侧重点不同,例如有些公司就没有需求讨论和需求评审这个阶段。不管如何,用例设计,这个是少不了,而且是重点,要花时间的阶段。只有覆盖全面的接口测试用例,才能有比较好的测试接口覆盖率,才会找出更多的接口的Bug,后期接口才能越稳定。
2、为什么要写测试用例
a.理清思路,避免漏测和重复测
b.提高测试效率
c.跟进测试进度
d.告诉领导做过
e.跟进重复性工作
f.更好的记录问题,发现问题,复现问题
3、接口测试设计要点
主要从四个方面来设计接口用例:功能,逻辑业务,异常,安全
功能:
功能是否正常;
功能是否按照接口文档实现
逻辑业务:
是否依赖业务,比如接口调用之前,需要调用登录接口,如果不登录也能请求数据,不符合业务规则。
异常:
参数异常和数据异常
参数异常:关键字参数,参数为空,多,少参数,错误参数
数据异常:关键字数据,数据为空,长度不一致,错误数据
安全:
cookie:有cookie才能获取数据,如果不带cookie还有信息返回,说明有问题
header:正常接口带header信息,删除header看是否能够返回数据。
唯一识别码:app手机识别码,一般是唯一的。
以上测试理论均转至博客园 北京-宏哥
https://www.cnblogs.com/du-hong/p/10508736.html
三、python接口自动化-requests的应用
1、requests简介
如果想用python做接口测试,我们首先有不得不了解和学习的模块。
它就是python的第三方模块:Requests。
虽然Python内置有urllib模块用于访问网络资源。但是,它用起来比较麻烦,而且,缺少很多实用的高级功能。
所以呢更好的方案是使用requests。它也是目前应用最广泛、最方便、功能最强大的一个Python第三方库,
主要用于处理URL资源
ruquests的中文官网:http://cn.python-requests.org/zh_CN/latest/index.html
requests的英文官网:http://www.python-requests.org/en/master/
有兴趣的可以看一下它的很多实用的高级功能
2、requests安装
a.使用pip安装
pip install requests
如果下载比较慢,配置使用国内镜像进行下载 https://mirrors.tuna.tsinghua.edu.cn/help/pypi/
pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple
b.使用pycharm安装
步骤1:
步骤2:
步骤3:
步骤4:
3、requests-发送get请求
import requests # 请求的url,以小望之家的以id查企业接口为例 url = "https://endpoint.xiaowangtech.com/xw-moonlit/moonlit/enterprise/search-detail?enterpriseId=410417" # header信息 header = { "Access-Token": "6693dfed-bbbf-4163-9e59-e21a19ec7195", "Accept": "application/json, text/plain, */*", } # 使用requests发送get请求 r = requests.get(url=url, headers=header) # 以text格式打印出参 print(r.text) # 以json格式打印出参 print(r.json())
4、requests-发送post请求
import requests # 请求的url,以小望之家的获取企业列表为例 url = "https://endpoint.xiaowangtech.com/xw-moonlit/moonlit/enterprise/list" # header信息 header = { "Access-Token": "6693dfed-bbbf-4163-9e59-e21a19ec7195", "Accept": "application/json, text/plain, */*", } # 请求入参 json = { "enterpriseName": "", "current": 1, "size": 10 } # 使用requests发送post请求 r = requests.post(url=url, headers=header, json=json) # 以text格式打印出参 print(r.text) # 以json格式打印出参 print(r.json())
5、response的其他应用
-- r.status_code #响应状态码
-- r.content #字节方式的响应体,会自动为你解码 gzip 和deflate 压缩
-- r.headers #以字典对象存储服务器响应头,但是这个字典比较特殊,字典键不区分大小写,若键不存在则返回 None
-- r.json() #Requests 中内置的 JSON 解码器,requests的方便之处还在于,对于特定类型的响应,例如JSON,可以直接获取
-- r.url # 获取 url
-- r.encoding # 编码格式,requests自动检测编码
-- r.cookies # 获取 cookie
-- r.raw #返回原始响应体-- r.text #字符串方式的响应体,会自动根据响应头部的字符编码进行解码
-- r.raise_for_status() #失败请求(非 200 响应)抛出异常
四、python接口自动化-unittest的应用
1、unittest简介
java开发小伙伴应该都清楚常见的单元测试框架 Junit 和 TestNG。
python 里面也有单元测试框架,就是unittest,相当于是一个 python 版的 junit。
python 里面的单元测试框架除了 unittest,还有一个 pytest 框架,这个实际上用的比较少。
本次主要介绍unittest,unittest单元测试框架不仅可以适用于单元测试,还可以适用自动化测试用例的开发与执行,该测试框架可组织执行测试用例,
并且提供了丰富的断言方法,判断测试用例是否通过,最终生成测试结果。
查看其中文官网:https://docs.python.org/zh-cn/3/library/unittest.html
英文官网:https://docs.python.org/3/library/unittest.html
安装方法与requests相似,不过多描述。
2、unittest的简单应用
unittest结构代码:
# 导入unittest import unittest # 定义一个测试类,并集成unittest.TestCase这个类 class TestCase01(unittest.TestCase): # 类装饰器,作用为在用例开始前先执行此函数 @classmethod def setUpClass(cls): print("case类开始执行") # 类装饰器,作用为在用例结束后执行此函数 @classmethod def tearDownClass(cls): print("case类执行结束") # 每条用例开始前执行此函数 def setUp(self): print("case开始执行") # 每条用例结束后执行此函数 def tearDown(self): print("case执行结束") # 测试用例1 def test_01(self): print("case1") # 测试用例2 def test_02(self): print("case2") # 测试用例3 def test_03(self): print("case3") # 测试用例4 def test_04(self): print("case4") if __name__ == "__main__": # 运行用例 unittest.main()
运行结果分析:
标签:python,unittest,接口,基础知识,测试,print,requests From: https://www.cnblogs.com/laoyan666/p/16710650.html