接口自动化框架封装思想建立(全)

news2024/11/26 7:51:45

httprunner框架(上)

一、什么是Httprunner?

1.httprunner是一个面向http协议的通用测试框架,以前比较流行的是2.X版本。

2.他的思想是只需要维护yaml/json文件就可以实现接口自动化测试,性能测试,线上监控,持续集成。

3.架构图

接口自动化框架HttpRunner详细教程_httprunner 上传文件-CSDN博客

二、httprunner的设计理念

1.充分复用开源项目,不追求重复的造轮子,而是将市面上强大的轮子转成战车,降低框架的开发成本以及学习成本。

2.遵循约定大于临时配置的准则。(合同,考勤)

3.配置文件组织测试用例。

一文看懂 HttpRunner 测试用例分层机制 - 51ste.com

三、httprunner环境安装

1.python环境:3.6.2

2.安装httprunner:pip install httprunner

验证:hrun -V

3.必须知道的5个httprunner的命令:

        httprunner:主命令,用于所有功能

        hrun:用于运行yaml/json/pytest测试用例。

        hmake:用于将yaml/json测试用例转化成pytest文件。

        har2case:用于将har文件转化成yaml/json/pytest测试用例。

        locusts:用于性能测试

四、httprunner快速上手

1.使用抓包工具:fiddler、charles操作一遍抓包。导出har文件。

2.通过har2case命令把har文件转化成yaml/json/pytest文件格式。

        har2case get.har 生成pytest文件格式的测试用例

        har2case get.har -2y 生成yaml格式的测试用例

        har2case get.har -2j 生成json格式的测试用例

运行:

        hrun get.yml

        hrun get.json

        hrun get_test.py

发现运行完成之后py文件里面的断言自动的去掉了,说明不管是运行yml、json其实最终都会重新成py文件运行。

五、YAML测试用例结构分析

每一个测试用例都是一个list of dict(字典列表)结构,其中包括config【配置】和teststeps【步骤】

[{},{},{}]

yml文件内容介绍:

        cofig:配置

                name:用例名称

                variables:全局变量

                :是否开启https验证

        teststeps:步骤

                name: /cgi-bin/token 步骤名称

                request: 请求

                headers: 请求头

                        Accept: '*/*'

                        Accept-Encoding: gzip, deflate, br

                        Cache-Control: no-cache

                        Connection: keep-alive

                        Host: api.weixin.qq.com

                        Postman-Token: 50f8bb1a-7826-49f8-835e-ec889063b7cc

                        User-Agent: PostmanRuntime/7.28.0

                method: GET 请求方式

                params: 请求参数

                        appid: wx74a8627810cfa308

                        grant_type: client_credential

                        secret: e40a02f9d79a8097df497e6aaf93ab80

                url: https://api.weixin.qq.com/cgi-bin/token 请求路径

        validate:断言

        - eq:

                - status_code

                - 200

        eq:

                -headers.Content-Type

                -application/json; encoding=utf-8

六、接口关联

在request标签下加一个extract标签提取返回值,通过content或body提取。

extract:

        aaa: content.access_token

然后通过$变量名使用

params:

        access_token: $aaa

七、动态参数:通过debugtalk.py的热加载的方式实现。

第一步:创建一个debugtalk.py文件,然后再里面写一个函数。

第二步:在yaml文件中通过${函数名()}的方式调用。

八、环境变量

开发环境,测试环境,线上环境。预发布环境。

在config下加入:

base_url:

九、全局变量

config下的variables是全局变量

teststeps:下的variables是局部变量

- name: /cgi-bin/tags/update

有两种写法:

1.换行的键值对

2.{}的方式

十、生成HTML格式的报告

hrun httprunners --html=httprunners/report.html

就是pytest里面pytest-html插件的报告一模一样。

httprunner框架(中)

一、httprunner常规的关键字详解

httprunner测试用例的结构

        config:配置

                name:名称

                variables:全局变量

                verify:https协议

                base_url:环境变量

        teststeps:步骤

                name:步骤名称

                request:请求

                headers:请求头

                method:请求方式

                params:参数

                url:请求路径

                cookie:cookie信息

                json:用于发送http请求正文

                data:用于发送http请求正文

        extract:提取(通过content或body提取,json提取器。支持正则表达式提取。)

        validate:断言

                eq相等

                equals相等

                str_eq(str(a)=str(b))

                lt:小于

                le:小于或等于

                gt:大于

                ge:大于或等于

                contains:包含

        简化:

        name:接口名称

        request:请求

                headers:请求头

                method:请求方式

                data:参数

                url:请求路径

                cookie:cookie信息

        extract:提取(通过content或body提取,json提取器。支持正则表达式提取。)

        validate:断言

                equals相等

                str_eq(str(a)=str(b))

                contains:包含

二、httprunner接口自动化项目架构

先要切换到项目的根目录,使用:httprunner startproject 项目名(没有虚拟环境)

har:存放har文件

reports:存放报告

testcases:存放测试用例

api:存放yml文件,接口定义。

data:数据驱动

testsuites:测试套件

.env:存放环境变量

.gitignore 当你的项目使用git做版本控制的时候,添加在此文件中的文件不会被git管理。

debugtalk,py实现热加载。

分层架构:三层

        1.接口定义层(api):为了更好的管理接口描述,每个一个接口定义都应该尽量的能够单独运行。

        2.测试用例层(testcases)

        3.测试套件层(testsuites)

        关系:testcases调用api层(使用api关键字),testsuites调用testcases层(使用 testcase关键字)

三、环境变量

环境变量可以写入.env文件

然后在api接口定义层里面使用:${ENV(变量名)}获取环境变量。

httprunner框架(下)

一、httprunner如何实现数据驱动

3.X开始,使用parameters定义数据源。应用于测试用例层

第一种:直接在脚本里面指定参数列表,最简单。适合于参数比较少的情况。

1 config:
2  name: 测试用例
3  parameters:
4  appid‐grant_type‐secret‐assert_str:
5  ‐ ["wx74a8627810cfa308","client_credential","e40a02f9d79a8097df497e6aaf9
3ab80","access_token"]
6  ‐ ["","client_credential","e40a02f9d79a8097df497e6aaf93ab80","errcode"]
7  ‐ ["wx74a8627810cfa308","","e40a02f9d79a8097df497e6aaf93ab80","errmsg"]
8 teststeps:
9 ‐ name: 获得token鉴权码API
10  api: api/get_token.yml

第二种:使用CSV文件,适合于参数较大的情况。

1 config:
2  name: 测试用例
3  parameters:
4  appid‐grant_type‐secret‐assert_str: ${P(data/get_token_data.csv)}
5 teststeps:
6 ‐ name: 获得token鉴权码API
7  api: api/get_token.yml

csv文件内容:

1 appid,grant_type,secret,assert_str
2 "wx74a8627810cfa308","client_credential","e40a02f9d79a8097df497e6aaf93ab8
0","access_token"
3 "","client_credential","e40a02f9d79a8097df497e6aaf93ab80","errcode"
4 "wx74a8627810cfa308","","e40a02f9d79a8097df497e6aaf93ab80","errmsg"

注意:

        1.csv文件中第一行必须放参数名称,并且参数名称必须和测试用例里面的名称一致。

        2.csv文件第二行放数据,每一组数据占一行。

        3.parameters指定的参数顺序可以不一致,个数也可以不一致。

第三种:使用函数生成数据,适用于数据变化大的情况。

1 config:
2  name: 测试用例
3  parameters:
4  appid‐grant_type‐secret‐assert_str: ${get_token_data()}
5 teststeps:
6 ‐ name: 获得token鉴权码API
7  api: api/get_token.yml

函数代码:

1 #生成数据
2 def get_token_data():
3  return [
4
{"appid":"wx74a8627810cfa308","grant_type":"client_credential","secret":"e4
0a02f9d79a8097df497e6aaf93ab80","assert_str":"access_token"},
5  {"appid": "", "grant_type": "client_credential", "secret": "e40a02f9d79a
8097df497e6aaf93ab80","assert_str": "errcode"},
6  {"appid": "wx74a8627810cfa308", "grant_type": "", "secret": "e40a02f9d79
a8097df497e6aaf93ab80","assert_str": "errmsg"}
7  ]

二、httprunner文件上传

前提条件:需要安装如下两个包

        pip install requests_toolbelt filetype

        pip install "httprunner[upload]"

三、如何生成allure报告

第一步:

        1.官网下载allure文件:Releases · allure-framework/allure2 · GitHub

        2.下载之后解压到非中文的目录

        3.把bin路径配置到系统变量path中:D:\BaiduNetdiskDownload\allure-2.13.7\allure-2.13.7\bin(注意分号不要是中文的)

第二步:

        安装allure报告:pip install allure-pytest

        验证:allure --version

        注意:可能需要重启pycharm。

第三步:

        1.在reports目录下生成temps目录,并且在temps目录下生产临时的json格式的临时报告。

1 os.system("hrun testsuites/test_suites.yml ‐‐alluredir=reports/temps ‐‐clean‐alluredir") 

        加上--clean-alluredir表示:每执行一次把原来的清除。

        2.根据临时json报告生成allure报告

1 os.system("allure generate reports/temps ‐o reports/allures ‐‐clean") 

        加上--clean表示:每执行一次把原来的清除。

四、接口自动化框架文件对应关系

一个接口对应一个yaml文件,一个yaml文件对应一个csv文件。

        优点:相对来说比较成熟,唯一的,不需要写脚本。

        缺点:规则太难了,小心翼翼,报错机制不完善。有些功能不齐全。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1795523.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

elementplu父级页面怎么使用封装子组件原组件的方法

一、使用原因: 封装了el-table,表格中有多选,父级要根据指定状态,让其选择不上,需要用到elementplus中table原方法toggleRowSelection 附加小知识点:(el-tree刷新树后之前选中的保持高亮setCurr…

【荒原之梦考研数学】感谢 CSDN 的小伙伴们

自 2016 年在 CSDN 上开设账号至今,荒原之梦网获得了很多同学们的支持和肯定,以及意见或建议,荒原之梦网一路走来,是大家给予了我们不断前进的动力。 当前这个 CSDN 账号,是荒原之梦考研数学网目前在 CSDN 的第一个也…

css 中clip 属性和替代方案 clip-path属性使用

clip clip 属性概述 作用:clip 属性用于定义一个裁剪区域,该区域外的元素内容将不可见。适用元素:clip 属性只对绝对定位(position: absolute)或固定定位(position: fixed)的元素有效&#xf…

JVM学习-Arthas

Arthas Alibaba开源的Java诊断工具,在线排查问题,无需重启,动态跟踪Java代码,实时监控JVM状态Arthas支持JDK6,支持Linux/Mac/Windows,采用命令行交互模式,同时提供丰富的Tab自动补全功能&#…

MogoTemplate基本入门(Mongodb数据库基本增删改查)

nosql 因为没有标准的 sql,各有各的操作方式,所以学习成本比较高。实际应用也不会去命令行直接操作,而是用编程语言的 api。 所以我们可以简单了解一下Mongodb,然后用java的Api去操作就行了 没必要花很大功夫在命令行上操作执行…

创意SQL,高考祝福!一起为学子们加油助威!

📢📢📢📣📣📣 作者:IT邦德 中国DBA联盟(ACDU)成员,10余年DBA工作经验, Oracle、PostgreSQL ACE CSDN博客专家及B站知名UP主,全网粉丝10万 擅长主流Oracle、My…

rman恢复后,少部分数据文件状态为MISSING000**

客户有套一体机,每天晚上21点开始做rman完全备份,大约第2天上午9点多完成备份,rman备份保留策略保留一份完全备份 6月1日晚21点自动发起备份,6月2日上午10点15分完成备份,并生成了一个控制文件备份 c-4063271871-2024…

Navicat修改数据库主键

在MySQL数据库,主键ID默认自增(最大的数字自增),但是,在某些情况下,我们想将其从头开始………… 借助Navicat修改数据库主键即可! 1. 找到数据库,点击需要更改的表:点击…

二重,三重积分和曲面,曲线积分的关系和区别

这是我在学习完曲面曲线积分概念后容易和二重三重积分混淆而大概总结和区分了一下,如果有错误请大佬指出,多谢!!!

I2C通信外设

I2C外设介绍 主机,就是拥有主动控制总线的权利。从机,只能在从机允许的情况下,才能控制总线。 多主机模型可分为固定多主机和可变多主机。固定多主机就是总线上,有2个或2个以上固定的主机,上面固定为主机,下…

GIF录屏工具Gif123 v3.3.0单文件

软件介绍 GIF的优势是小、轻、快,适合时间短、画面小、需要嵌入其他页面,打开就自动循环播放的动画。Gif123可录制合成鼠标轨迹,可调整鼠标指针大小,可在设置中打开鼠标指针高亮光圈功能,高亮光圈可跟随鼠标移动以指示鼠标位置。软件极其简单&#xff0…

使用 IPSET 添加 CDN 节点 IP(IPv4/IPv6)到防火墙白名单

明月的服务器一直使用的是 iptables,随着近几年 IPv6 的普及,明月切身体会到还是 IPSET 最方便了,无论你是 IPv4 还是 IPv6 都可以方便的管理,无论你是加入白名单还是黑名单,都非常的简单高效!今天就参照明月自己的实操…

高校运维赛 2024 pyssrf

没有环境,简单过一遍思路吧 考点: pickle反序列化urllib库注入redis缓存 from flask import Flask,request from redis import Redis import hashlib import pickle import base64 import urllib app Flask(__name__) redis Redis(host127.0.0.1, port6379)def get_result(u…

安全测试 之 安全漏洞 CSRF

1. 背景 安全测试是在功能测试的基础上进行的,它验证软件的安全需求,确保产品在遭受恶意攻击时仍能正常运行,并保护用户信息不受侵犯。 2. CSRF 定义 CSRF(Cross-Site Request Forgery),中文名为“跨站请…

halo进阶-主题插件使用

开始捣鼓捣鼓halo,换换主题,加个页面 可参考:Halo 文档 安装/更新主题 主题如同壁纸,萝卜青菜各有所爱,大家按需更换即可; Halo好在一键更换主题,炒鸡方便。 安装/更新插件 此插件还扩展了插件…

神经网络 torch.nn---损失函数与反向传播

torch.nn - PyTorch中文文档 (pytorch-cn.readthedocs.io) torch.nn — PyTorch 2.3 documentation Loss Function的作用 每次训练神经网络的时候都会有一个目标,也会有一个输出。目标和输出之间的误差,就是用Loss Function来衡量的。所以,…

超简单白话文机器学习 - 模型检验与评估(含算法介绍,公式,源代码实现以及调包实现)

1. 模型检验 1.1 Holdout交叉验证 1.1.1 算法 在这种交叉验证技术中,整个数据集被随机划分为训练集和验证集。根据经验,整个数据集的近 70% 用作训练集,其余 30% 用作验证集。 优点:可以快速进行区分,仅仅通过一次区…

【cmake】cmake cache

cmake cache是什么 cmake cache是cmake在配置好后生成的一个CMakeCache.txt的文件,里面存储了一堆变量,这些变量一般都是关于项目的配置和环境的。 比如你用的什么编译器,编译器选项,还有项目目录。 例如(在cmakelist…

06- 数组的基础知识详细讲解

06- 数组的基础知识详细讲解 一、基本概念 一次性定义多个相同类型的变量,并且给它们分配一片连续的内存。 int arr[5];1.1 初始化 只有在定义的时候赋值,才可以称为初始化。数组只有在初始化的时候才可以统一赋值。 以下是一些示例规则: …

Vivado 设置关联使用第三方编辑器 Notepad++

目录 1.前言2.Vivado关联外部编辑器步骤3.Notepad的一些便捷操作 微信公众号获取更多FPGA相关源码: 1.前言 Vivado软件自带的编辑器超级难用,代码高亮对比不明显,而且白色背景看久了眼睛痛。为了写代码时有更加舒适的体验,可以…