httprunner3.0接口测试框架说明文档

一、接口自动化测试框架

httprunner3.0接口自动化测试框架

二、项目

2.1 配置层

2.1.1 环境变量:通过加载.env的方式

建议数据库相关配置、base_url、常用用户数据等配置在环境变量中

  1. 在自动化测试项目的根目录中,创建 .env 文件,将敏感数据信息放置到其中,存储采用 name=value 的格式
DB_HOST=×××
DB_USER=×××
DB_PASSWORD=×××
USERNAME=×××
BASE_URL=×××
  1. 引用方式分为两种,一种是直接在yaml中引用,一种在debugtalk.py中引用
# 直接在yaml中引用
config:
    name: ×××
    variables:
        username: ${ENV(USERNAME)}
    base_url: ${ENV(BASE_URL)}

teststeps:
    -   name: checkUserRole
        request:
            json:
                oaAccount: $username
            method: POST
            url: ×××
# 配置在debugtalk中
def base_url():
    """
    base_url
    :return:
    """
    return os.environ['BASE_URL']

2.1.2 测试数据

秉持维护成本最小的原则,测试数据要与测试用例分离,后续如果接口api不发生变化,直接修改测试数据即可

  1. 测试数据可以和测试用例分开存放,测试用例放在testcase下,测试数据建议放在testdata下
  2. 测试数据建议通过redis、数据库或者上下级用例关联获取,不要写死

2.2 用例层

官方文档给出的用例模板如下所示,建议在此基础上进行优化,按照数据分离的原则,参数化配置用例,维护成本越小越好。

config:
    name: xxx
    variables:              # config variables
        varA: "configA"
        varB: "configB"
        varC: "configC"
    parameters:             # parameter variables
        varA: ["paramA1"]
        varB: ["paramB1"]

teststeps:
-
    name: step 1
    variables:              # step variables
        varA: "step1A"
    request:
        url: /$varA/$varB/$varC # varA="step1A", varB="paramB1", varC="configC"
        method: GET
    extract:                # extracted variables
        varA: body.data.A   # suppose varA="extractVarA"
        varB: body.data.B   # suppose varB="extractVarB"
-
    name: step 2
    varialbes:
        varA: "step2A"
    request:
        url: /$varA/$varB/$varC # varA="step2A", varB="extractVarB", varC="configC"
        method: GET

优化后:

config:
    name: xxx
    base_url: ${base_url()}           # 为方便后续多环境配置
    variables:
        varA: "configA"                  # 建议此处的数据通过debugtalk.py读取,不要写死

teststeps:
-   name: xxx
    request:
        method: POST
        url: xxx
        json:
          field: $varA
    setup_hooks:
        - ${headers($request)}           # 建议此处的数据通过debugtalk.py读取,方面后续灵活配置
    extract:                # 提取返回结果
        varB: body.data.B      # suppose varB="extractVarB"
    validate:                                # 断言
        -   eq: ["status_code", 200]
        -   eq: [json.code, "200"]
        -   eq: [json.message, 查询成功]

-   name: step 2
    varialbes:
        varA: "step2A"
    request:
        url: /$varA/$varB/$varC # varA="step2A", varB="extractVarB", varC="configC"
        method: GET
    validate:                                # 断言
        -   eq: ["status_code", 200]

2.3 测试报告

2.3.1 pytest内置html测试报告

使用方法: --html=path create html report file at given path.

# 终端执行
hrun testcases --html==/report/0422.html                     
image.png

2.3.2 allure测试报告

终端执行

hrun testcases --alluredir=allure_results
allure generate --clean   allure_results -o report/html

或者创建run.py文件

# _._ coding: utf-8 _._

import subprocess

subprocess.call("hrun testcases --alluredir=allure_results", shell=True)
subprocess.call("allure generate --clean   allure_results -o report/html", shell=True)
image.png

三、最后附上项目的目录结构图及说明

image.png
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容