专栏首页IT测试前沿Python 3.7 + HttpRunner 初探

Python 3.7 + HttpRunner 初探

一、前言

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

import requests
url = "******"
header = "******"
params = "******"
response = reqeste.get(url,header,params)
jsondata = json.loads(response.text)
try:
    assert ******
except: 
    print(******)

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

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种,一种是测试用例分层结构,一种是测试用例不分层结构。

hrun --startproject demo  # 分层脚手架

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

2.3 接口实例

  • 访问地址: http://127.0.0.1:8000/atp/mock/sjjh/clwz
  • 请求类型: POST
  • 请求头部: application/json
  • 请求参数:
{"productid":"3100721","carid":"京A89561"}
  • 返回参数:
{"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格式脚本

- 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格式脚本

[{
        "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到脚本目录下,运行

hrun post_api.yaml

或者执行json文件

hrun post_api.json

执行结果如下

2.7 查看测试报告

请求

响应

检查点

统计

本文分享自微信公众号 - IT测试前沿(gh_a3e0fe8fdded),作者:Alon

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-09-23

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 前沿测试平台之mock接口实现及应用

    接口mock在自动化测试中非常常用,我们的自动化平台的mock简化了开发同学编写mock的麻烦,直接应用及编辑,灰常滴好用,下面我简单介绍一下

    muntainyang
  • ruby+watir UI测试(二)

    UI自动化测试的稳定性没有接口那么稳定,脚本在运行的过程中会出现这样那样的问题,虽然cucumber可以生成测试报告,但是有时候,不能很方便的从测试报告中定位到...

    muntainyang
  • 当Jenkins遇上Kubernetes

    Jenkins是大名鼎鼎的DevOps自动化平台,由于其开源,社区支持力度大,插件生态丰富等优势,成为持续开发,持续集成,持续测试和持续交付领域的王者。它的口号...

    muntainyang
  • 漫谈SLA

    纵观运维的各项技能,了解各种各样的中间件,tomcat,redis,mongo,nginx等等等,但是又有什么意思?

    SRE运维实践
  • 探讨下接口自动化测试的一些思路

    如果是测http接口,你需要至少需要调用一个发送http请求的库,例如httpclient来发送不同类型的请求给到待测的接口,如GET, POST, PUT, ...

    小老鼠
  • 接口测试基础

      测试人员通常所说的“接口测试”是针对系统各组件之间接口的一种测试,它属于功能测试。接口能测出普通界面操作难以发现的问题。如,我们都知道系统是由前端后端组成,...

    小老鼠
  • springboot项目自定义统一异常处理

    异常指的是在程序运行过程中发生的异常事件,通常是由外部问题(如硬件错误、输入错误)所导致的。在Java等面向对象的编程语言中异常属于对象

    许喜朝
  • 接口测试及常用接口测试工具

      系统对外的接口:比如你要从别的网站或服务器上获取资源或信息,别人肯定不会把数据库共享给你,他只能给你提供一个他们写好的方法来获取数据,你引用他提供的接口就能...

    小老鼠
  • 第四十五章:基于SpringBoot 设计业务逻辑异常统一处理

    恒宇少年
  • Spring使用Filter添加自定义header

    十毛

扫码关注云+社区

领取腾讯云代金券