Python 3.7 + HttpRunner 初探

2020-10-23 11:32:22 浏览数 (1)

一、前言

一天,你的领导要你对某上游供应商接口做测试,你一听,接口测试,用什么做好呢 ? Postman ? Jmeter ? balabala。。。优秀的你,肯定想到了一大堆工具。当然也包括用python写。为了凸显B格,你选择了python。新建一个 xx供应商_case_1.py 文件,然后一顿猛如虎的撸代码,就好像上次文章写道:Python 3.7 自动化接口测试简单实例

代码语言:javascript复制
import requests
url = "******"
header = "******"
params = "******"
response = reqeste.get(url,header,params)
jsondata = json.loads(response.text)
try:
    assert ******
except: 
    print(******)

领导又给你派N个上游供应商接口,你开始依葫芦画瓢,流水账代码走起。完事你仔细想想总觉得不对,于是你将每个请求都封装起来,大概长这样:

代码语言:javascript复制
def jk_2ys():          # V1.2.4

url = "***"

...

def jk_3ys():          # V1.2.4

url = "***"

...

def scm_location():          # V1.2.7

url = "***"

...

逐渐越积越多,领导希望你输出报告。你:“exm?”,改改改。于是你引入了Unittest单元测试框架、HTMLTestRunner等等。正打算将各个测试用例分类重新规整,你领导又来了。如果世界上有真爱这种东西存在的话,那你领导对你的爱便是了。

“我又从开发那里帮你要了100个接口过来测,开不开心?”

“你的脚本给我看下,这个是啥意思?可以在我那边运行吗?”

“你的脚本怎么这么多啊,好乱啊”

“这几个接口是串联起来的,你处理下”

幸好,你并没有放弃,你在某个机缘巧合下发现了一个叫HttpRunner的测试框架,这个框架使用的是yaml/json格式的文本来描述脚本,只需一行命令即可进行接口测试。在连夜研究完这个框架后,你发出慨然长叹:“原来接口测试可以这么优雅的写啊!”

二、实现

2.1 开发环境

  1. Python 3.7
  2. HttpRunner 2.2.5 # pip install httprunner hrun -V 查看版本,代表安装成功 hrun -h 查看帮助信息

2.2 项目文件结构

项目文件结构分为2种,一种是测试用例分层结构,一种是测试用例不分层结构。

代码语言:javascript复制
hrun --startproject demo  # 分层脚手架

利用项目脚手架直接创建测试用例分层结构,一个基本的测试用例分层结构就搞定了(懒人专用)

2.3 接口实例

  • 访问地址: http://127.0.0.1:8000/atp/mock/sjjh/clwz
  • 请求类型: POST
  • 请求头部: application/json
  • 请求参数:
代码语言:javascript复制
{"productid":"3100721","carid":"京A89561"}
  • 返回参数:
代码语言:javascript复制
{"biz_code":"200","biz_msg":"业务处理成功","code":200,"data":{"adr":"山东省枣庄市滕州市红荷大道与善国路红绿灯交汇处东600米路北冯河小院,东方向,220.7米","city":"枣庄市","country":"滕州市","drc":"0","lat":"21075184","lon":"70300750","province":"山东省","spd":"0.0","state":"1001","utc":"1568102254000"},"data_total":null,"msg":"请求成功","result_id":"201909100357000467d44922d2c9845f2a13fd9ea5fa92ce9","z1":null,"z2":null}

2.4 编写Yaml格式脚本

代码语言:javascript复制
- config:    # config模块
    name: testcase location_mock    # 用例集名称
    variables: {}  # 声明变量关键字

- test:      # test模块
    name: /api/carlocation_mock    # 测试用例名
    request:    #  请求体
        url: http://10.8.18.161:8080/atp/mock/sjjh/clwz  # 请求路径
        method: POST  # 请求方式
        headers:    # 请求头
            Content-Type: "application/json"
        json:    #  请求参数
            productid: 3100721
            carid: "京A89561"
    validate:    # 校验点
        - eq: [status_code, 200]
        - eq: [content.biz_code, "200"]
        - eq: [content.biz_msg, 业务处理成功]

2.5 编写Json格式脚本

代码语言:javascript复制
[{
        "config": {
            "name": "testcase location_mock",
            "variables": {}
        }
    },
    {
        "test": {
            "name": "/api/carlocation_mock",
            "request": {
                "url": "http://10.8.18.161:8080/atp/mock/sjjh/clwz",
                "method": "POST",
                "headers": {
                    "Content-Type": "application/json"
                },
                "json": {
                    "productid": "3100721",
                    "carid": "京A89561"
                }
            },
            "validate": [{
                    "eq": ["status_code", 200]
                },
                {
                    "eq": ["content.biz_code", "200"]
                },
                {
                    "eq": ["content.biz_msg", "业务处理成功"]
                }
            ]
        }
    }
]

2.6 运行脚本

运行用例很简单,直接在cmd里面,cd到脚本目录下,运行

代码语言:javascript复制
hrun post_api.yaml

或者执行json文件

代码语言:javascript复制
hrun post_api.json

执行结果如下

2.7 查看测试报告

请求

响应

检查点

统计

0 人点赞