python接口自动化基本流程

接口自动化

本质:通过requests和Excel(数据库)对用例进行批量的自动化回归测试。

接口自动化测试基本流程:

  • 读取execl 处理数据
  • 数据驱动测试,传入数据(pytest中的参数化)
  • 处理请求,处理数据依赖
  • 断言 用到deepdiff
  • 生成测试报告/打包
  • 加日志
  • 发送测试报告 allure

环境:

Test session starts (platform: win32, Python 3.6.0, pytest 4.6.11, pytest-sugar 0.9.4)
rootdir: D:\pycharm2018\project\auto_tests, inifile: pytest.ini, testpaths: ./scripts
plugins: allure-pytest-2.8.29, cov-2.10.1, html-3.1.1, metadata-1.11.0, sugar-0.9.4

测试报告实现效果:

关于Excel

操作Excel:https://www.cnblogs.com/Neeo/articles/11650149.html

import xlrd
from conf import settings

book = xlrd.open_workbook(settings.FILE_PATH)
sheet = book.sheet_by_index(0)
# book.sheet_by_name('通用接口')
# print(sheet.nrows, sheet.ncols)  # 获取所有行和列数

# 获取指定行

# print(sheet.row_values(0))
# print(sheet.row_values(1))

# 获取指定列
# print(sheet.col_values(0))


l = []
title = sheet.row_values(0)
print(title)
for row in range(1, sheet.nrows):
    l.append(dict(zip(title, sheet.row_values(row))))

print(l)

如何处理数据依赖

在Excel中编写测试用例的时候:

  1. 被依赖的接口用例写在上面
  2. 对于依赖的字段设置规则:
    • {"token":"${case_001>request_data>token}$"} #用例名/数据源/具体数据字段

jsonpath-rw

根据规则 token.data.xx 从字典中找到具体的值value。

  • 前提:接口自动化测试中,存在依赖情况:test_02的某个请求参数的值,需要依赖test_01返回结果中某个字段的数据,所以就先需要拿到返回数据中特定字段的值。这里使用到python中jsonpath-rw库

    官方文档:https://pypi.python.org/pypi/jsonpath-rw (更多jsonpath的语法请点击链接)

1.下载安装

pip install jsonpath-rw

2.导入

from jsonpath_rw import jsonpath,parse

3.例子介绍

1.返回的match数据,但我们想要的是value数据

jsonpath_expr = parse('foo[*].baz')
data = {'foo': [{'baz': 'news'}, {'baz': 'music'}]}
print([match for match in jsonpath_expr.find(data)])

运行结果:
[DatumInContext(value='news', path=Fields('baz'), context=DatumInContext(value={'baz': 'news'}, path=<jsonpath_rw.jsonpath.Index object at 0x025CA850>, context=DatumInContext(value=[{'baz': 'news'}, {'baz': 'music'}], path=Fields('foo'), context=DatumInContext(value={'foo': [{'baz': 'news'}, {'baz': 'music'}]}, path=This(), context=None)))), DatumInContext(value='music', path=Fields('baz'), context=DatumInContext(value={'baz': 'music'}, path=<jsonpath_rw.jsonpath.Index object at 0x025CA770>, context=DatumInContext(value=[{'baz': 'news'}, {'baz': 'music'}], path=Fields('foo'), context=DatumInContext(value={'foo': [{'baz': 'news'}, {'baz': 'music'}]}, path=This(), context=None))))]

2.获取匹配的数据match.value

jsonpath_expr = parse('foo[*].baz')
data = {'foo': [{'baz': 'news'}, {'baz': 'music'}]}
print([match.value for match in jsonpath_expr.find(data)])运行结果:['news', 'music']

3.match.value返回数据是一个list,我们要获取特定的值

jsonpath_expr = parse('foo[*].baz')
data = {'foo': [{'baz': 'news'}, {'baz': 'music'}]}
print([match.value for match in jsonpath_expr.find(data)][0])

运行结果:
news 

单元测试框架

pytest

关于cookies处理

第一种

借鉴postman的cookies管理器,即每个请求都监测响应结果是否有cookies返回,如果有,就保存,以域名的形式保存该cookies

如果有同域名的请求,就自动在headers中携带该cookies

第二种

我们在请求中,判断响应结果中是否返回了cookis,如果返回了,就保存到当前的用例对象中,该对象就是一个大的字典。将cookies和值保存为一个key value
谁要用,就来拿该参数

关于urllib

参考:https://www.cnblogs.com/Neeo/articles/11520952.html

如何删除一个非空目录

用shuitil

import shutil
'''
shutil模块对文件和文件集合提供了许多高级操作。特别是,提供了支持文件复制和删除的功能
'''

# shutil.copy(src, dst)   # 拷贝文件
# shutil.move(src, dst)  # 移动目录或者文件

# shutil.rmtree(path)   # 递归删除目录,无法直接删除文件
# shutil.make_archive(base_name, format('zip'))   # 将目录或者文件以指定格式压缩
# shutil.unpack_archive(filename, extract_dir)  # 解压缩

# see also: https://docs.python.org/3/library/shutil.html

关于生成测试报告的命令

参考:https://docs.python.org/zh-cn/3/library/subprocess.html

关于打包

参考:https://www.cnblogs.com/Neeo/articles/11934072.html

日志

参考:https://www.cnblogs.com/Neeo/articles/10951734.html#示例

定时任务APScheduler

https://www.cnblogs.com/geogre123/p/11174187.html

posted @ 2021-01-07 15:39  hanfe1  阅读(717)  评论(0编辑  收藏  举报