Httprunner系列(六):httprunner内置函数使用

这篇具有很好参考价值的文章主要介绍了Httprunner系列(六):httprunner内置函数使用。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、httprunner命名规范

  • 类名开头必须是Test
  • 定义的测试类,需要继承httprunner
  • teststeps为测试步骤,每一个测试步骤叫做step
  • step里的RunRequest,是待测的API名字,可按照接口名称填写\
  • .py文件的尾缀,必须是_test

二、httprunner的模块引入

from httprunner import HttpRunner, Config, Step, RunRequest, RunTestCase

Httprunner:导入Httprunner类,后面的测试类,继承于Httprunner
Config:全局设置,可以设置全局变量,例-variables(**);可以忽略Request库的警告,例-verify(False)
Step:测试步骤,每一个的接口测试用例,对应着一个step
RunRequest:每一个测试步骤的接口名称命名,可以是中文
RunTestCase:每一个测试步骤的接口名称命名,可以是中文。不同于RunRequest的是,RunTestCase只可以用于调用其他hrun文件时使用

三、待测接口命名

Httprunner系列(六):httprunner内置函数使用

RunRequest("/app/common/login")

命名接口,这里可以写对应的业务接口名称
Httprunner系列(六):httprunner内置函数使用

比如,我这里命名为:登录

四、设置请求方式

.get,表明这是一个get请求方式的接口
.post,表明这是一个post请求方式的接口
后面需要跟上完整的API路径名
Httprunner系列(六):httprunner内置函数使用

可通过ctrl+鼠标左击,进入方法内
Httprunner系列(六):httprunner内置函数使用

httprunner支持:get、post、put、head、delete、options、patch等请求方式

五、.with_headers:headers入参传递

请求接口的headers入参放在这里,在with_headers方法内,需要加上**来读取。
例:

.with_headers(
                **{
                    "Host": "erp2.hzb-it.com",
                    "Content-Length": "27",
                    "Accept": "application/json, text/plain, */*",
                    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/99.0.4844.51 Safari/537.36",
                    "Content-Type": "application/x-www-form-urlencoded",
                    "Origin": "http://erp2.hzb-it.com",
                    "Referer": "http://erp2.hzb-it.com/",
                    "Accept-Encoding": "gzip, deflate",
                    "Accept-Language": "zh-CN,zh;q=0.9",
                    "Connection": "keep-alive",
                }
            )

Httprunner系列(六):httprunner内置函数使用

六、config:设置全局化参数

Httprunner系列(六):httprunner内置函数使用

config = Config("testcase description").verify(False).variables(**{
        "Host":"erp2.hzb-it.com",# todo:定义全局变量
    })

此时定义了一个名为Host的全局变量,整体的httprunner都可以调用
想要定义多个全局变量,也可以在这里设置
Httprunner系列(六):httprunner内置函数使用

1、.base_url():设置全局化项目地址

Httprunner系列(六):httprunner内置函数使用

七、.with_variables(**{ }):定义局部变量,仅在当前step可用

设置局部变量语法:
1、在RunRequest()后
2、在RunTestCase()后

.with_variables(**{"Content-Length":"27"})

Httprunner系列(六):httprunner内置函数使用

1、引用局部变量

Httprunner系列(六):httprunner内置函数使用

"Content-Length": "${Content-Length}",

八、${变量}:引用设置的变量

在需要使用的地方,填入:${变量名},就可以引用参数
Httprunner系列(六):httprunner内置函数使用

这里调用了Host、Accept全局参数

九、.with_cookies:设置cookie值

请求接口的cookies入参放在这里,在with_cookies方法内,需要加上**来读取。
Httprunner系列(六):httprunner内置函数使用

.with_cookies(
                **{
                    "access-token": "eyJhbGciOiJIUzI1NiJ9.eyJleHAiOjE2NDczNTk0NDEsInVzZXJEZXRhaWxzIjoie1wicm9sZXNcIjpbe1wiY29kZVwiOlwic3VwZXJhZG1pblwiLFwibmFtZVwiOlwi6LaF57qn566h55CG5ZGYXCIsXCJpZFwiOjF9LHtcImNvZGVcIjpcInhpbmd6aGVuZ1wiLFwibmFtZVwiOlwi6KGM5pS_XCIsXCJpZFwiOjExfV0sXCJwYXNzd29yZFwiOlwiJDJhJDEwJE5Fc3JOeUJJUEdFTHg5RHBJYm0veC5Wd0FNT3pobVg0Y09mTzRqendSSmY2WGl6WXJ4akkyXCIsXCJpZGVudGl0eVwiOjEsXCJuYW1lXCI6XCLnrqHnkIblkZhcIixcImlkXCI6MSxcInN0YXRlXCI6MSxcInVzZXJuYW1lXCI6XCJhZG1pblwifSJ9.xLw2cSbOIxQOWhXRgarGcI55U8B353_c0vDS7M-puJ8"
                }
            )

十、with_data:data参数传参

引言:指定HTTP请求正文。这对应于的data参数requests.request

Httprunner系列(六):httprunner内置函数使用

.with_data({"username": "admin", "password": "123"})

十一、with_json:json参数传参

在json中指定HTTP请求正文。这对应于的json参数requests.request。
但要记得在headers声明json传参:{‘Content-Type’:‘application/json;charset=utf8’}

.with_data({"username": "admin", "password": "123"})

Httprunner系列(六):httprunner内置函数使用

十二、extract().with_jmespath():拿到接口的response,用作后续接口使用

httprunner的响应集,整体被命名为:body
我是怎么知道的?可以通过运行hrun,来看下控制台呀
运行命令:pytest ERP_Project_test.py
它的最外面,就是body,所以,我们取值的时候,就要带上body
Httprunner系列(六):httprunner内置函数使用

1、 response body怎么取关联接口的响应值?

举例:我想取图中的data参数

extract().with_jmespath("body.data","data")

这样就可以取到参数了。body是最外层,data处于body的下一级,所以用的是body.data
第二个参数是命名取到的变量为:data

2、 response headers怎么取值?

extract().with_jmespath('headers.Server', 'cookies')

3、 response cookies怎么取值?

extract().with_jmespath(cookies."key","edit-key")

4、 怎么确保取的值正确?

运行一遍httprunner:

pytest -s ERP_Project_test.py

在下图,就可以清晰的看到,data参数被取出来了
Httprunner系列(六):httprunner内置函数使用

5、 如果response清单返回列表数据,该怎么取值?

可以通过数组下标的方式取值
比如下面,就是取的body下的data下的list下标为0的quantity数据

extract().with_jmespath("body.data.list[0].quantity","quantity")

十三、取出的参数,如何运用到其他step中

${变量名}就可以使用,举例

"access-token": "${data}"

Httprunner系列(六):httprunner内置函数使用

十四、.validate():httprunner内置的断言功能

httprunner的断言信息会自动生成:断言响应状态码、断言响应body的文本信息等
.assert_equal():断言文本信息是否相等,也可以自定义断言

比如:取出响应状态码进行断言

.assert_equal("status_code", 200)

取出响应headers参数进行断言

.assert_equal('headers."Content-Type"', "application/json")

取出响应body参数,与预期的匹配的文本信息进行断言

.assert_equal("body.name", "管理员")

.assert_greater_than():断言获取到的值,是否大于预期设定的值

断言取出的值,是否大于20

.assert_greater_than("body.data.totalCount", 20) 

.assert_endswith():断言获取到的值,在字符串末尾是否与预期设定的值一致

断言ss 是否在字符串末尾

.assert_endswith("body.message", "ss")

.assert_startswith():断言获取到的值,在字符串开始是否与预期设定的值一致

断言su 是否在字符串开始

.assert_startswith("body.message", "su")

查看更多的断言方式
按住ctrl+鼠标左键,查看
Httprunner系列(六):httprunner内置函数使用
Httprunner系列(六):httprunner内置函数使用

十五、RunTestCase、call():业务解耦和调用方法

A文件:ERP_Login_test.py,只有一个login的step

# NOTE: Generated By HttpRunner v3.1.6
# FROM: testcases\ERP_PROJECT.har
from httprunner import HttpRunner, Config, Step, RunRequest, RunTestCase
class TestCaseErpProject(HttpRunner):

    config = Config("testcase description").base_url("http://erp2.hzb-it.com/").verify(False).variables(**{  # todo: .base_url()设置项目全局地址
        "Host":"erp2.hzb-it.com",
        "Accept":"application/json, text/plain, */*" # todo:定义全局变量
    })

    teststeps = [
        Step(
            RunRequest("登录")
            .with_variables(**{"Content-Length":"27"})  #todo:定义局部变量
            .post("app/common/login")
            .with_headers(
                **{
                    "Host": "${Host}",  # todo: 引用Host变量
                    "Content-Length": "${Content-Length}",   # todo:引用局部变量
                    "Accept": "${Accept}",  # todo: 引用Accept变量
                    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/99.0.4844.51 Safari/537.36",
                    "Content-Type": "application/x-www-form-urlencoded",
                    "Origin": "http://erp2.hzb-it.com",
                    "Referer": "http://erp2.hzb-it.com/",
                    "Accept-Encoding": "gzip, deflate",
                    "Accept-Language": "zh-CN,zh;q=0.9",
                    "Connection": "keep-alive",
                }
            )
            .with_data({"username": "admin", "password": "123"})
            .extract().with_jmespath("body.data","data")
            .validate()
            .assert_equal("status_code", 200)
            .assert_equal('headers."Content-Type"', "application/json;charset=UTF-8")
            .assert_equal("body.msg", "提交成功")
            .assert_equal("body.errCode", 0)
        ),
    ]

if __name__ == "__main__":
    TestCaseErpProject().test_start()

Httprunner系列(六):httprunner内置函数使用
B文件: ERP_Project_test.py,是登录后的操作,依赖于A文件

RunTestCase()和call()使用语法:

1、RunTestCase()是只有在调用A文件的时候,才可以使用(业务解耦、login解耦等)
2、call():call,调用另一个.py文件的内容。在导入模块时,需要注意,使用别名,不然的话,hrun会识别成两条case

# NOTE: Generated By HttpRunner v3.1.6
# FROM: testcases\ERP_PROJECT.har


from httprunner import HttpRunner, Config, Step, RunRequest, RunTestCase
from ERP_Project.testcases.ERP_Login_test import TestCaseErpProjects as Login

class TestCaseErpProject(HttpRunner):

    config = Config("testcase description").base_url("http://erp2.hzb-it.com/").verify(False).variables(**{  # todo: .base_url()设置项目全局地址
        "Host":"erp2.hzb-it.com",
        "Accept":"application/json, text/plain, */*" # todo:定义全局变量
    })
    teststeps = [
        Step(
            RunTestCase("login")
                .call(Login)
                .export("data")
        ),
        Step(
            RunRequest("/app/common/base/enumList")
                .get("http://erp2.hzb-it.com/app/common/base/enumList")
                .with_headers(
                **{
                    "Host": "erp2.hzb-it.com",
                    "Accept": "application/json, text/plain, */*",
                    "access-token": "${data}",
                    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/99.0.4844.51 Safari/537.36",
                    "Referer": "http://erp2.hzb-it.com/",
                    "Accept-Encoding": "gzip, deflate",
                    "Accept-Language": "zh-CN,zh;q=0.9",
                    "Cookie": "access-token=${data}",
                    "Connection": "keep-alive",
                }
            )
                .with_cookies(
                **{
                    "access-token": "${data}"
                }
            )
                .validate()
                .assert_equal("status_code", 200)
                .assert_equal('headers."Content-Type"', "application/json")
        ),
    ]
if __name__ == "__main__":
    TestCaseErpProject().test_start()

1、如果用例运行报错,如下:

当使用pytest -s xx.py 运行文件时,报错提示
Httprunner系列(六):httprunner内置函数使用
解决办法:
在运行文件的根目录下,新建一个conftest.py,内容为:

import os

import sys

sys.path.insert(0, os.path.abspath(os.path.join(os.path.dirname(__file__),'..')))

Httprunner系列(六):httprunner内置函数使用文章来源地址https://www.toymoban.com/news/detail-412203.html

到了这里,关于Httprunner系列(六):httprunner内置函数使用的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • HttpRunner3.x 源码解析(5)-runner.py

    首先看下生成的pytest文件 首先类继承了HttpRunner类 主要包括config和teststeps两部分 函数的入库是test_start()方法 首先调用了__init_tests__()方法  teststeps是pytest文件中的Step列表,示例只有1个步骤。   config.perform方法返回了一个Tconfig对象,这个对象定义了testcase的config中的和

    2023年04月15日
    浏览(23)
  • HttpRunner v4 一条用例是怎么被执行的

    HttpRunner 4.0版本,支持多种用例的编写格式:YAML/JSON/go test/pytest,其中后面两种格式我们都知道通过调用测试函数执行,那YAML/JSON这两种用例格式到底是怎样被运行的呢?下面我们一起分析一下 注意:以下代码被缩略过,只保留核心代码,框架版本:4.3.0 hrp run case1 case2 在执

    2024年02月10日
    浏览(25)
  • python django vue httprunner 实现接口自动化平台(最终版)

    后端地址: GitHub - 18713341733/test_platform_service: django vue 实现接口自动化平台 前端地址: GitHub - 18713341733/test_platform_front: Django vue实现接口自动化平台 1.2.1 环境准备 Python = 3.8.0 (推荐3.9+版本) nodejs = 14.0 (推荐最新) 或者 16,千万不要使用18(会报错) Mysql = 5.7.0 (可选,默认数据库

    2024年02月10日
    浏览(25)
  • 以效率为导向:用ChatGPT和HttpRunner实现敏捷自动化测试(二)

    在上一篇文章: 利用ChatGPT提升测试工作效率——测试工程师的新利器(一)中,我们提到了如何通过chatGPT生成单接口测试用例,然后再让chatGPT去根据测试用例去生成接口自动化脚本。本篇文章将详细讲解一下我们团队内部在遇到业务痛点时如何利用Httprunner框架进行接口自动化

    2024年02月08日
    浏览(36)
  • 基于 HttpRunner + Django + Vue + Element UI 的接口自动化测试平台

    https://github.com/tahitimoon/LunarLink https://lunar-link-docs.fun 基于HttpRunner + Django + Vue + Element UI 的接口自动化测试平台,生产可用。 此外,非常感谢 花菜。没有 AnotherFasterRunner 就不会有 LunarLink 😃 🎨 Django 🎶 Django Rest framework 🎉 Vue.js 🎃 Element UI 🏐 django-celery-beat(定时任务) 🎲

    2024年04月11日
    浏览(32)
  • HttpRunner3.x 源码解析(2)-main_run执行用例

    当在终端运行输入httprunner run 目录或者文件名,则会调用main_run函数,并传入目录/文件名来执行测试用例。 对于extra_args中的值,如果在os.path.exists不存在,则将其加入extra_args_new中。 如果存在,则将其加入用例列表  tests_path_list 1)如果列表  tests_path_list长度为0,说明用例文

    2023年04月09日
    浏览(23)
  • HttpRunner自动化测试工具之获取响应数据&extract提取值到变量

    获取响应数据 extract: 提取 注: extract 应与request保持同一层级 1、响应行,响应头;通过 extract 提取响应的数据并存储到变量中,如下图: 注:变量名的前面要有 -  # 获取响应数据: 响应行(200,ok)响应头 - config:     name: 测试百度网站     base_url: https://www.baidu.com - test:

    2024年02月02日
    浏览(49)
  • 【MySQL系列】MySQL内置函数的学习

    「前言」文章内容大致是对MySQL内置函数的学习。 「归属专栏」MySQL 「主页链接」个人主页 「笔者」枫叶先生(fy) 常见的日期函数如下: 函数名称 描述 current_date() 获取当前日期 current_time() 获取当前时间 current_timestamp() 获取当前时间戳 now() 获取当前日期时间 date(datetime) 获取

    2024年02月12日
    浏览(31)
  • 在 Less 中使用与 Less 内置函数同名的原生 CSS 函数

    calc() - CSS:层叠样式表 | MDN Getting started - Escaping | Less.js Using The CSS Function calc() Inside The LESS CSS Preprocessor 在原生 CSS 中有以下的函数: calc() 、 max() 、 min() 等,而在 Less 中也有同名的函数,使用的时候可能会冲突,无法得到需要的结果。 对于 calc() ,Less 进行了处理,不会对数

    2024年02月08日
    浏览(46)
  • 匿名函数和常见是内置函数(配合匿名使用)和for循环的原理,异常的捕获

    匿名函数 常见的内置函数(配合匿名函数使用) 可迭代对象 迭代器对象 for循环内部原理 异常捕获

    2024年02月09日
    浏览(38)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包