Django实现接口自动化平台(五)httprunner(2.x)基本使用【持续更新中】

 上一章:

Django实现接口自动化平台(四)解决跨域问题【持续更新中】_做测试的喵酱的博客-CSDN博客

下一章:

Django实现接口自动化平台(六)httprunner(2.x)基本使用【持续更新中】_做测试的喵酱的博客-CSDN博客

一、参考地址:

使用说明_httprunner2.0 概述及使用说明

二、介绍

HttpRunner是一款面向 HTTP(S) 协议的通用测试框架,只需编写维护一份 YAML/JSON 脚本,即可实现自动化测试、性能测试、线上监控、持续集成等多种测试需求。

三、安装

# 安装稳定版本

pip install httprunner==2.5.7

 查看是否安装成功

(venv) zhaohui@zhaohuideMBP miaostudydjango % httprunner -V
2.5.7

四、创建项目

hrun --startproject apitset

或者

httprunner --startproject apitest

五、虚拟环境配置

Pycharm创建虚拟环境_做测试的喵酱的博客-CSDN博客

 1、创建虚拟环境

2、进入虚拟环境

3、在虚拟环境中,再次安装httprunner

# 安装稳定版本

pip install httprunner==2.5.7

六、执行测试demo

创建完的项目中默认有测试用例,我们可以直接运行测试并生成报告。

hrun api/demo_api.yml --report-dir=reports

注意:

case路径:使用绝对路径与相对路径都可以。相对路径,是相对于跟目录的路径

生成报告的路径: 使用绝对路径与相对路径都可以。相对路径,是相对于跟目录的路径

报告样式:

七、工程结构介绍

 

 说明:
(1)api 文件夹:存储接口定义描述
(2)testcases 文件夹:存储测试用例,文件夹也可以使用其它名称
(3)testsuites 文件夹:测试测试场景,文件夹也可以使用其它名称
(4)reports 文件夹:存储 html 测试报告
(5).env文件:存储项目环境变量,通常用于存储项目敏感信息
(6)debugtalk.py:存储项目中逻辑运算辅助函数
·该文件存在时,将作为项目根目录定位标记,其所在目录即被视为项目工程根目录
·该文件不存在时,运行测试的所在路径(CWD)将被视为项目工程根目录
·测试例文件中的相对路径(例如.csv)均需基于项目工程根目录
·运行测试后,测试报告文件夹(reports)会生成在项目工程根目录

八、编写yaml case

8.1 yaml语法

yaml语法_yaml在线语法_做测试的喵酱的博客-CSDN博客

case使用yaml编写的,所以学习yanl语法很重要

1、yaml是数据格式,不是数据类型(结构)
 2、yaml配置文件的后缀为.yml或者.yaml
 3、yaml中使用#作为注释,注释只能在某一行的前后,不能与key\value在同一行
 4、yaml中有两种结构,一种是key: value,value与冒号之间必须有空格
   另一种是 - key: value,“-”为列表结构
 5、yaml文件中嵌套的同一级条目前缩进必须一致(一般缩进2个空格)
 6、yaml中如果value使用引号(单引号或者双引号),那么该value为字符串类型
 7、如果value中只要有字母,哪怕没有添加引号,一般也会识别为字符串类型(false、true、on、off、null除外)
 8、value为false、true、on、off,是布尔类型,null为空
 9、value中为纯数字或者小数,会被识别为int或float类型 

8.2 编写case

yaml case格式,与python requests的传参一摸一样。

 api/baidu_api.yml

name: 百度接口
variables:
    var1: value1
    var2: value2
request:
    url: https://ug.baidu.com/mcp/pc/pcsearch
    method: POST
    headers:
        Content-Type: "application/json"
    json:
        invoke_info: {"pos_1":[{}],"pos_2":[{}],"pos_3":[{}]}
validate:
    - eq: ["status_code", 200]

 执行case:

hrun api/baidu_api.yml --report-dir=reports

8.3 请求体 格式json或者form或者查询字符串参数

请求体为json参数:

    headers:
        Accept: "application/json"
    json:
        size: 3
        page: 2

请求体为form表单参数:

    headers:
        Content-Type: "application/x-www-form-urlencoded"

    data:
        username: "root"
        password: "123456"

请求体为查询字符串参数(get请求):

    params:
        size: 3
        page: 2

8.4 断言

8.4.1 断言类型

断言类型可太多 了,我们这里放源码。

def get_uniform_comparator(comparator):
    """ convert comparator alias to uniform name
    """
    if comparator in ["eq", "equals", "==", "is"]:
        return "equals"
    elif comparator in ["lt", "less_than"]:
        return "less_than"
    elif comparator in ["le", "less_than_or_equals"]:
        return "less_than_or_equals"
    elif comparator in ["gt", "greater_than"]:
        return "greater_than"
    elif comparator in ["ge", "greater_than_or_equals"]:
        return "greater_than_or_equals"
    elif comparator in ["ne", "not_equals"]:
        return "not_equals"
    elif comparator in ["str_eq", "string_equals"]:
        return "string_equals"
    elif comparator in ["len_eq", "length_equals", "count_eq"]:
        return "length_equals"
    elif comparator in ["len_gt", "count_gt", "length_greater_than", "count_greater_than"]:
        return "length_greater_than"
    elif comparator in ["len_ge", "count_ge", "length_greater_than_or_equals",
                        "count_greater_than_or_equals"]:
        return "length_greater_than_or_equals"
    elif comparator in ["len_lt", "count_lt", "length_less_than", "count_less_than"]:
        return "length_less_than"
    elif comparator in ["len_le", "count_le", "length_less_than_or_equals",
                        "count_less_than_or_equals"]:
        return "length_less_than_or_equals"
    else:
        return comparator

eq 是相等断言。

validate:
    - eq: ["status_code", 200]

contains:实际值是否包含期望值 

contains_by:期望值是否包含实际值。

注意:这里的包含,指的是返回值字典中的key,不是value。

其他断言类型,看上面的源码。  

8.4.2 断言--实际值

validate:
    - eq: ["status_code", 200]

方括号中,第一个参数为 实际值,第二个参数为期望值。

响应状态码:status_code

响应体数据:

  • content
  • text
  • json 

当返回值为json数据时,可以使用content、text、json 任意一个。获取的值都为字典格式。

获取返回值字典中的某一个key的值。直接用.

比如:获取返回值字典中的username的值。json.username

validate:
    - eq: ["json.username", "张三"]

 返回值value为列表时,用下标取值,如返回值为

{"username":["张三","李四","王武"]}

实际值,提取张三

json.username.0 

8.5 设置请求host 

在yaml文件中,设置base_url 的值,在request模块下,的url 只设置uri就可以了。

如:

base_url: "http:127.0.0.1:8000"
request:
    url: "/user/login/"

九、局部变量&环境变量(全局变量)

9.1 局部变量

设置局部变量,只在当前yml文件中生效。

1、在variables 下,以key:value的形式定义变量

2、引用变量,使用$变量名进行调用

举例:


variables:
    my_name: "zhangsan"
    my_password: "123456"

request:
    url: "/user/login/"
    method: POST
    data:
        username: "$my_name"
        password: "$my_password"

9.2 环境变量(全局变量)

环境变量(全局变量)在所有yml文件中都生效。

1、在项目的跟路径下的.env文件中,设置环境变量

定义: 环境变量名=环境变量值

注意:等号两边不需要有空格

2、引用变量

使用${ENV(环境变量名)}

3、举例,设置全局host

a、在项目的跟路径下的.env文件中,设置环境变量BASE_URL

BASE_URL=http://127.0.0.1:8000

b、在yml文件中,引用环境变量

base_url: "${ENV(BASE_URL)}"
request:
    url: "/user/login/"
    method: POST

猜你喜欢

转载自blog.csdn.net/qq_39208536/article/details/131119886