zoukankan      html  css  js  c++  java
  • 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:pycharm2018projectauto_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. 对于依赖的字段设置规则:
      • {"user":"admin", "token":"xxxxadsasdads"}
      • {"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#示例

  • 相关阅读:
    原型和原型链
    面向对象
    git在idea中的使用,如何构远程git方仓库
    java maven 安装
    Kafka消费者APi
    Kafka生产者APi
    kafka基本概念
    redis常用命令
    redis.conf配置文件参数说明
    Redis.RedisNativeClient的方法get_Db 没有实现
  • 原文地址:https://www.cnblogs.com/hanfe1/p/14246813.html
Copyright © 2011-2022 走看看