接口自动化基础
1、接口自动化测试
- 接口自动化:使用工具或代码代替人对接口进行测试的技术
- 测试目的: 防止开发修改代码时引入新的问题
- 测试时机:
- 开发进行系统测试转测前,可以先进行接口自动化脚本的编写
- 开发进行系统测试转测后,优先进行系统测试用例的执行,再进行接口自动化脚本的编写
2、接口自动化测试流程
1)选取自动化测试用例
- 优先级高(先实现业务流程用例、后实现单接口用例)
- 功能稳定
2)搭建自动化测试环境
- 核心技术
- 编程语言:Python
- 测试框架:pytest
- 接口请求:requests
- 安装:
pip3 install requests
- 验证:
pip3 show requests
- 安装:
3)搭建自动化测试框架
4)代码实现自动化
5)输出测试报告
6)实现持续集成
3、接口自动化测试框架
1)接口自动化框架
接口自动化框架就是基于应用服务器和数据库进行case管理,具体包含API封装、数据库封装、测试数据参数化和代码优化断言封装等
2)接口自动化框架设计思路
- 搭建集成框架——定义项目目录结构
- 通用功能类封装——封装通用功能如:数据库工具等
- 接口对象封装与调用——封装接口API对象+PyTest框架编写测试脚本
- 测试数据参数化——测试数据json文件设计、参数化实现
- 用例组织运行——组织测试用例运行,生成测试报告
3)搭建基础框架—定义项目目录结构
- api——封装接口信息
- scripts——编写测试脚本
- data——存放测试数据
- report——存放测试报告
- common——存放通用工具类
- config.py——定义项目配置信息
- pytest.ini——pytest配置文件
Requests库
1.介绍
- requests库:python中的“浏览器”,基于urllib的HTTP库
- 安装:
pip install requests
- 操作步骤
- 导包
- 发送接口请求
- 查看响应数据
2.Requests发送请求
1)requests处理json类型
requests.请求方法(url, params=None, data=None, json=None, headers=None)
- 常见方法:get,post,put,delete
- url:请求的url地址
- params:请求的查询参数
- data:请求体为form表单参数
- json:请求体为json参数
- headers:请求头参数
2)requests处理multipart/form-data类型
requests.请求方法(url, data=None, json=None, headers=None, files=None)
- files:上传的文件
3.Requests查看响应
属性/方法 | 说明 |
---|---|
response.status_code | 状态码 |
response.json() | json形式的响应内容 |
response.text | 文本形式的响应内容 |
response.url | 请求url |
response.encoding | 查看响应头部字符编码 |
response.headers | 头信息 |
response.cookies | cookies信息 |
登录接口调试-登录
- 需求:使用requests访问登录接口,并查看响应结果
- 接口信息
- url:http://kdtx-test.itheima.net/api/login
- 方法:post
- 请求数据
- 请求头:Content-Type:application/json
- 请求体:{“username”:“admin”,“password”:“HM_2023_test”,“code”:“2”,“uuid”:“验证码接口返回结果中的数据值”}
# 需求:登录成功
# 导包
import requests
# 发送请求
url = "http://kdtx-test.itheima.net/api/login"
header_data = {
"Content-Type": "application/json"
}
login_data = {
"username": "admin",
"password": "HM_2023_test",
"code": 2,
"uuid": "26bdc08fac934d6b805e49645b2701ae"
}
response = requests.post(url=url, headers=header_data, json=login_data)
# 查看响应
print(response.status_code)
print(response.json())
接口对象封装
1、接口自动化代码核心思想?
核心思想:代码分层思想
- 测试脚本层
- 重点关注测试数据准备和断言
- 重点关注业务流程的处理
- 直接调用接口对象层发送请求
- 接口对象层
- 根据接口API文档封装
- 重点关注如何调用接口
- 请求参数从测试脚本层传递
- 接口响应结果返回给脚本层
2、代码中如何解决接口之间的数据依赖?
使用python中变量或属性传递接口依赖数据
例如:
#提取登录成功之后的token数据并保存在类的属性中TestContractBusniess.token = res_l.json().get("token")
3、Requests中如何处理multipart/form-data请求数据?
# 读取文件
f = open("test.pdf", "rb")
# 设置请求数据
response = requests.post(url=xxx, files={"file": f}
数据驱动
数据驱动:以测试数据驱动脚本执行,维护焦点从脚本转向测试数据的一种自动化测试设计模式
好处:代码与测试数据分离,增强代码的可维护性
如何实现?
pytest中parametrize装饰器
- 作用:遍历所有测试数据并运行测试方法
- 语法
- @pytest.mark.parametrize(②保存数据参数名, ①测试数据)
def test_method(self, ③参数名)
pass
- @pytest.mark.parametrize(②保存数据参数名, ①测试数据)
- 示例
- test_data=[(“manager”, “123456),(”",“123456”),(“itheima”,“123456”)]
- @pytest.mark.parametrize(“mobile, password”, test_data)
def test_method(self, mobile, password)
pass
json文件实现数据驱动
1)json文件记录测试数据
[
{
"username": "admin",
"password": "HM_2023_test",
"status": 200,
"message": "成功",
"code": 200
},
{
"username": "",
"password": "HM_2023_test",
"status": 200,
"message": "错误",
"code": 500
},
{
"username": "admin111",
"password": "HM_2023_test",
"status": 200,
"message": "错误",
"code": 500
}
]
2)封装读取json文件
# 读取json文件
def build_data(json_file):
# 定义一个空列表
test_data = []
# 打开json文件
with open(json_file, "r", encoding="utf-8") as f:
# 加载json文件数据
json_data = json.load(f)
# 循环遍历测试数据
for case_data in json_data:
# 转换数据格式[{}, {}, {}] ==> [(), (), ()]
username = case_data.get("username")
password = case_data.get("password")
status = case_data.get("status")
message = case_data.get("message")
code = case_data.get("code")
test_data.append((username, password, status, message, code))
# 返回处理后的测试数据
return test_data
3)测试用例方法中利用参数化取出测试数据
# 登录成功
@pytest.mark.parametrize("username, password, status, message, code", build_data(json_file=config.BASE_PATH + "/data/login.json"))
def test01_login_success(self, username, password, status, message, code):
login_data = {
"username": username,
"password": password,
"code": 2,
"uuid": TestLoginAPI.uuid
}
response = self.login_api.login(test_data=login_data)
# 断言响应状态码为200
assert status == response.status_code
# 断言响应数据包含’成功‘
assert message in response.text
# 断言响应json数据中的code值
assert code == response.json().get("code")
项目配置文件
用于维护项目相关的基本信息,如:URL、项目路径等
# 导包
import os
# 定义环境域名
BASE_URL = "http://kdtx-test.itheima.net"
# 统一文件路径
BASE_PATH = os.path.dirname(__file__)
print(BASE_PATH)
当测试用例代码中需要用到url或项目路径时,如:
self.url_verify = config.BASE_URL + "/api/captchaImage"
json_file=config.BASE_PATH + "/data/login.json"
Allure测试报告
- 介绍
- 能生成美观易读的报告
- 支持多种开发语言,如java、python等
- 能快速上手
- 操作步骤
- 生成测试结果文件(json文件)
- 使用allure命令生成在线报告
- 帮助文档:https://docs.qameta.io/allure
1)生成测试结果文件
使用步骤:
-
将pytest配置文件中的命令行参数加上如下代码
--alluredir report
-
编写好测试脚本后,在命令行行中运行pytest
[pytest] addopts =-s --alluredir report testpaths=./scripts python_files = test*.py python_classes = Test* python_functions = test*
-
程序运行结束后,会在项目的report目录中生成一些json文件
2)使用allure命令生成在线报告
安装:
1.https://github.com/allure-framework/allure2/releases 下载 allure
2.解压缩安装包到一个不包含中文路径的目录
3.将压缩包内的 bin 目录配置到 path 系统环境变量
4.右键我的电脑 - 属性 - 高级设置 - 环境变量 - 找到系统环境变量的path项 - 增加 allure到bin目录
5.在命令行中输入 allure--version
命令,能显示allure版本信息,即为成功
总结:
1)终端输入 pytest 运行
2)终端输入 allure serve report 命令 得到报告
一些问题:
①allure依赖于jdk环境,需要先安装jdk1.8.0并配置环境变量(按照csdn上的文章配置了半天都没用,最后是直接将bin文件的绝对路径添加到path环境变量中才成功)
②如果在pycharm终端输入allure serve report 报错提示“allure不是内部或外部命令”,可以直接使用allure路径+serve report,即D:\software\allure-2.30.0\bin\allure serve report