导语
合格的自动化测试工程师 -> 接口自动化测试框架
入门条件 -> 设计-开发-重构框架
进阶之路:接口基础 -> 接口开发 -> Unittest与接口测试结合 -> 设计,开发框架
接口基础
HTTP接口熟悉
常见接口介绍
接口工具的使用
接口测试基础的面试
接口开发
- 使用Django,开发Get,Post请求
- 掌握Unittest与接口测试的结合
- Unittest使用,断言,HTMLTestRunner,Case的管理,Request的引入使用
接口自动化测试框架从设计到开发
接口基础面试
前后端解耦,需要一个桥梁,负责前后端传输数据
是功能测试的一种,功能测试的定义非常广泛
自动化属于功能测试,无论是接口还是自动化测试,都是模拟用户的操作
接口测试只是模拟用户发送数据,只是没有经过前端/客户端
自动化模拟用户操作,减去了手工操作,通过脚本去实现
在国内来说,技术能力可能会比功能测试好-含金量不同
- 常见的接口类型
Post,get,put,delete
- 接口是如何传递参数
Get请求?前方为URL地址,后方为消息主体/请求数据
Post请求是以WebFrom/表单的形式提交数据
- 如何测试一个接口?
Fiddler Postman soapUI Loadrunner Jmeter
工具只是一种实现方式而已
怎么简单怎么做(主要是效率)
模拟请求
解耦很重要
并行开发很重要(效率第一)
使用Fiddler模拟请求
步骤:进入Composer工具栏,传入对应headers,body
进入AutoResponder工具栏,传入对应url,以及对应的response数据
搭建Django框架-测试环境
开发web端是比较实用的
在线安装:pip install Django ==指定版本
离线安装:python setup.py install
- 官网下载所需版本
- 解压,然后在cmd中,进入存放目录,输入命令
- 在终端输入命令:django-admin startproject HelloWorld(项目名可修改)
项目的容器。它的名字对Django无关紧要。您可以将其重命名为您喜欢的任何名称。
一个命令行实用程序,可让您以各种方式与该Django项目进行交互。您可以manage.py在 django-admin和manage.py中 阅读有关的所有详细信息 。
是项目的实际Python包。它的名称是Python包名称,您需要使用它来导入其中的任何内容(例如HelloWorld.urls)。
一个空文件,告诉Python该目录应视为Python软件包。如果您是Python初学者,请在Python官方文档中阅读有关包的更多信息。
此Django项目的设置/配置。 Django设置将告诉您所有设置的工作方式。
此Django项目的URL声明;Django支持的网站的“目录”。您可以在URL调度程序中阅读有关URL的更多信息。
在根目录下,在终端中运行:python manage.py runserver 127.0.0.1:8000
在browser中,输入127.0.0.1:8000
创建工程应用app
回到根目录,进入终端:python manage.py startapp name
需要知道地址怎么到server的,访问urls.py中的方法,执行urlpatterns中的方法
创建的app中的views.py模块中,定义方法
![]()
在urls.py模块中,引入login方法,urlpatterns变量中,调用login方法
![]()
- 用户在敲下你的网址并回车,生成请求
- 请求传递到urls.py;Django去urlpatterns中匹配链接(Django会在匹配到的第一个就停下来)
- 一旦匹配成功,Django便会给出相应的view页面(该页面可以为一个Python的函数,或者基于view(Django内置的)的类),也就是用户看到的页面
- 若匹配失败,则出现错误的页面
- 一个工程项目,有很多个APP,每个APP都是工程组成的一部分
开发接口
都是基于代码
框架就是把所有的代码进行整合,写的简洁一些,逻辑是没有改变的
无非是多个中间服务商,Apache,Nginx之类的
只需要知道url跳转到哪儿,在哪儿解析,Response什么信息
真正的API在views模块里面
注意事项:
- 代理端口需区分,否则会冲突
- HTML中form表单,与from区分
- HTML中路径需以/斜杠结尾
断言–assert
Command Describe assertEqual x == y ?None : z assertNotEqual x != y ?None : z assertTrue type(x) == True ? None : z
创建容器
创建语法
Suite = unittest.TestSuite()
添加case
Suite.addTest(类名(casename))
可添加多个case
执行容器
unittest.TextTestRunner().run(容器名)
结合HTMLTestRunner,生成TestReport
搜索Python3 HTMLTestRunner,最好是GitHub上面的
创建HTMLTestRunner.py,移至Python->lib目录
在case文件中,引入HTMLTestRunner模块
Unittest之面试
如何使用Python开发测试框架
语言:Python
接口:使用requests第三方库
管理case:unittest框架-断言-skipcase-suite容器-依赖关系
报告:HTMLTestRunner
数据管理:Excel,MySql
Case执行:持续集成或批处理文件
建议
Unittest中,case是按照ascll码比较,进行升序执行
尽量减少依赖执行
GET请求URL与Data分离传参,无响应
Globals()[‘变量’] = data 下个case调用会报错
Mock服务
以代码来实现自动响应请求的功能,模拟返回数据
引入mock
import unittest.mock
使用方法
mock_name = mock.Mock(return_value=模拟数据) 请求方法 = mock_name(改变返回模拟数据)
示例
mock_data = mock.Mock(return_value=response_data) method = mock_data res = method(request_data, url, method)
重构封装mock
封装mock-method from unittest import mock def mock_test(mock_method, url, method, request_data=None, response_data=None): if response_data == None: res = mock_method(url, method, response_data) return res else: mock_data = mock.Mock(return_value=response_data) mock_method = mock_data res = mock_method(request_data, url, method) return res
设计接口自动化测试框架
Case过多,避免繁琐操作
不排除某些需求,设定特殊的值,而手动添加
编写接口测试用例
需要考虑的点
接口地址
请求数据
接口类型
预期结果
Header - cookie
数据依赖–接口自动化的难点
操作Excel
定义一个类
重构封装excel函数
封装request_data, header
封装调用类
封装request类
对response_data,进行格式化
Json.dumps(response, ensure_ascii=False, intent=2, sort_keys=True)
使用ensure_ascii的注意事项:
json_dumps(dict)时,如果dict包含有汉字,一定加上 ensure_ascii=False。否则按参数默认值True,意思是保证dumps之后的结果里所有的字符都能够被 ascii 表示,汉字在ascii的字符集里面,因此经过dumps以后的str里,汉字会变成对应的unicode。
写入excel测试结果
判断接口返回状态:
接口是否通畅
调用status_code方法:
引入jsonpath_rw 第三方库
从第三方库中引入jsonpath,parse 方法
B = {'foo': [{'baz': 'news'}, {'baz': 'music'}]}
赋予规则
A = parse(‘foo[*].data’)
解析数据
C = A.find(b)
使用列表推导式,获取数据
Data = [match.value for match in C][0] index get content