zoukankan      html  css  js  c++  java
  • TEP自动化测试工具

    tep测试工具简介

    tep的定位是工具也是一种理念而不是框架,因为它是基于pytest框架,tep的作用:

    1.使目录更加规范化

    files: 存放脚本依赖的图片,数据,音频之类的文件

    fixture: 存放用例所需要的一些公共方法

    reports: 存放allure测试报告

    tests:存放测试用例

    conf.yaml: 配置文件,一般应用当前运行用例环境的区分

    conftest.py: 把fixture, 在conftest文件中进行封装,conftest 会遍历 fixtures 目录下面所有以fixture_ 开头 .py 结尾的文件.,把里面的 fixture进行自动导入

    pytest.ini: pytest配置

    2. 搭建方便

    tep已经收录到了pypi,使得tep拥有了可以快速的项目的能力,也就是脚手架,命令行 执行 pip install tep 进行安装

    执行 tep startproject project_name,就可以创建项目结构

    3. 公共方法存储简洁

    fixtures公用方法详情:

     

    fixture_admin.py: 管理员所需要维护的一些公用方法

    fixture_env_var.py: 存放全局环境变量,根据conf.yaml 内填写的环境 来进行判断拼接 需要请求的url,或用于其他的环境变量

    fixture_login.py: 登录接口

    fixture_your_name.py: 项目成员共享的一些fixture

    简洁的接口自动化运行示例:

    在tests目录下进行编写用例文件,接口用例运用的yaml进行存储,好处就是在于yaml文件支持数组,配置有序,简洁

     yaml 一个接口的用例结构:

    -
    name: 当前的用例名称
    case_id: 1
    request:
    method: post # 接口请求方法
    url: /*****/****/ # 接口名
    headers: # 请求头
    Content-Type: application/json
    authorization: Bearer 7209b501-0680-4a3e-be70-c20f0b64c941
    Cache-Control: no-cache
    User-AgentL: PostmanRuntime/7.26.8


    params: # 请求参数
    type: P
    department_id: []
    approve_start_date: "2021-06-10"

    check: # 需要校验的数据
    expected_result: test_all_examine_check.json # 由于需要校验接口响应的数据过大 可以单独创建一个json文件进行存储

     用例完成后,可以再写一个文件的取的公共方法

    # 查询yaml文件 并返回
    def read_yaml(yaml_name):
    '''
    读取yaml,将yaml反序列化,就是把yaml格式转换成dict格式
    :return:
    '''

    try:
    yaml_file = "../tests/test_case/" + yaml_name
    with open(yaml_file, encoding="utf-8") as f:
    value = yaml.load(f, Loader=yaml.FullLoader) # 文件流,加载方式

    return value

    except Exception as e:
    yaml_file = "./tests/test_case/" + yaml_name
    with open(yaml_file, encoding="utf-8") as f:
    value = yaml.load(f, Loader=yaml.FullLoader) # 文件流,加载方式

    return value

    接口用例编写:

    (用例支持日志存储,失败重跑,响应字段的键/值校验,报告定期删除)

    import pytest
    from fixtures.fixture_your_name import read_yaml, ys, cmp
    from tep.client import request
    from loguru import logger
    import time
    import decimal
    import json
    import allure
    @allure.description("""简介:此执行集只做调试使用""")
    class Test_Examine(object):

    yaml_data = read_yaml("test_all_examine.yaml") # 获取测试集文件内容

    @allure.description_html("""
    <h1>调试版本</h1>
    """)
    @pytest.mark.flaky(reruns=3, reruns_delay=3) # 失败重试 每3秒重试一次,共重试3次
    @pytest.mark.parametrize('yaml_case', yaml_data) # 数据驱动,读取用例执行集yaml文件中的列表,
    @allure.title('审核模块')
    def test_examine(self, yaml_case, env_vars, config):

    api = ys(yaml_case, "url")[0] # ys 只是封装了一个 jsonpath 查询的公共方法
    method = ys(yaml_case, "method")[0]
    params = ys(yaml_case, "params")[0]
    apinam = ys(yaml_case, "name")[0] # 接口名称
    headers = ys(yaml_case, "headers")[0]
    url = env_vars.domain + api # 完整url

    logger.info("当前请求用例:%s,URL:%s,请求方法:%s,params:%s,headers:%s"%(apinam, url, method, params, headers))

    # 起始时间
    start = time.process_time()

    # 接口请求
    response = request(method, url=url, headers=headers, json=params)

    # 请求结束时间
    end = time.process_time()

    # 接口耗时
    elapsed = str(decimal.Decimal("%.3f" % float(end - start))) + "s"
    logger.info(' 接口:%s,*************** 执行耗时:%s ***************' % (url, elapsed))

    ret = response.json() # 获取接口json 类型响应:ret
          case_id = str(ys(yaml_case, 'case_id')[0])  # 用例唯一c ase ID
    check_field = read_yaml(ys(yaml_case, "expected_result")[0]) # yaml用例需要校验id
    # 取出 当前用例需要校验的json响应:chek_data
    chek_data = None
    for check in check_field:
    if check.get(case_id):
    chek_data = check.get(case_id)
    break
    # 开始校验
    for r in ret:
    print('-'*50 )
    check_response = cmp(json.dumps(chek_data), json.dumps(r))
    if check_response == 0:
    print('当前校验json包含在响应列表中。'*10)

    if __name__ == '__main__':

    pytest.main(["-s", "-v", "examine_test.py"])
    # pytest --tep-reports 生成测试报告

    用例运行 pytest --tep-reports运行所有用例 或 pytest -文件名--tep-reports 运行一个执行集

    运行过后可在根目录生成测试报告目录 reports 以及allure测试报告

     

    一个简单的接口测试就完成了~

  • 相关阅读:
    C#Winform中treeView控件使用总结
    转:vs发布window应用程序时出错:未能签名 ...setup.exe
    C# 常见集合之前的转换
    开发者眼中的Spring与JavaEE
    运行库到底做了什么?
    C++, Java和C#的编译、链接过程解析
    转载一篇将C/C++ 与lua混合使用入门讲的比较好的文章
    路会越走越窄的
    [DBNETLIB][ConnectionOpen(Connect()).]SQL Server 不存在或拒绝访问 数据库错误 解决办法总结
    Linux学习路线指南
  • 原文地址:https://www.cnblogs.com/sunzzc/p/14919235.html
Copyright © 2011-2022 走看看