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 @   hanfe1  阅读(726)  评论(0编辑  收藏  举报
编辑推荐:
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)
历史上的今天:
2020-01-07 Python3.x在django中如何设置Content-Disposition,才能让浏览器正确保存中文命名的文件?
点击右上角即可分享
微信分享提示