当前位置: 首页 > news >正文

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

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文件。

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

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

相关文章:

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

httprunner框架(上) 一、什么是Httprunner? 1.httprunner是一个面向http协议的通用测试框架,以前比较流行的是2.X版本。 2.他的思想是只需要维护yaml/json文件就可以实现接口自动化测试,性能测试,线上监…...

char [] 赋新值

在C语言中,字符数组(char [])的值可以通过多种方式进行赋值。以下是一些常见的方法: 1、直接初始化: char str[50] "Hello, World!";2、使用strcpy()函数: char str[50]; strcpy(str, "…...

matlab计算图像信噪比SNR

直接上源码: close all clear all clc% 读取图像 I = imread(lena.bmp);I = rgb2gray(I); J =imnoise(I, salt & pepper, 0.001);...

DP读书:如何使用badge?(开源项目下的标咋用)

最近在冲论坛,很少更一些内容了。但遇到了一个真的有趣的: 开源项目下,蓝蓝绿绿的标是怎么用的呢? 这是我的主页Readme,在看一些NXP的主仓时,突然发现没有这个玩,就自己整了个 再比如我的CSDN专…...

使用JavaScript实现网页通知功能

如何使用js来实现网页通知功能。即使在用户浏览其他页面时,也能向他们推送通知信息。 废话不多说直接上代码 function showAutoNotification() {if ("Notification" in window) {Notification.requestPermission().then(function(permission) {if (permis…...

前端--导出

这边记录我们公司后端做的导出接口和前端是如何对接的 这边的技术栈是: 1: react 2: fetch 第一步:简单封装--导出界面 import { DrawerForm } from ant-design/pro-components; import { CloseOutlined } f…...

【数据库系统概论】触发器

【数据库系统概论】触发器 概述 在数据库系统中,触发器(Trigger)是一种特殊的存储过程,当特定事件在数据库表上发生时,会自动执行。触发器主要用于确保数据的完整性、一致性和实现复杂的业务规则。触发器是由用户定义…...

小白跟做江科大32单片机之按键控制LED

原理部分 1.LED部分使用的是这样的连接方式 2.传感器模块的电路图 滤波电容如果接地,一般用于滤波,在分析电路时就不用考虑。下面这个电路就是看A端和B端哪端的拉力大,就能把电压值对应到相应的电压值 比较器部分 如果A端电压>B端电压&am…...

每天写java到期末考试(6.6)-java文件输入输出流实验

1、用字节流读写二进制文件 要求:用DataOutputStreamFileOutputStream类将1,2,…,100,这100个数字写入到文件 d:\out1.bin里,然后再用DatalnputStreamFilelnputStream类将d:\out1.bin的内读出来,并输出到屏幕上。 用DataOutputStreamFileOutputStream写入二进制数据时,直接调…...

Word2021中的The Mathtype DLL cannot be found问题解决(office 16+mathtype7+非初次安装)

问题描述,我的问题发生在word中无法使用自定义功能区中的mathtype 我的环境是:W11Word2021mathtype7 因为我是第二次安装mathtype7,所以我怀疑是因为没有卸载干净,于是我参考了下面这篇文章的做法 参考文章 1.首先重新卸载当前的…...

【Android面试八股文】在Java中传参数时是将值进行传递,还是传递引用?

在Java中传参数时是将值进行传递,还是传递引用? 这道题想考察什么? 是否了解什么是值传递和引用传递与真实场景使用,是否熟悉什么是值传递和引用传递在工作中的表现是什么? 考察的知识点 什么是值传递和引用传递的概念,两者对开发中编写的代码的影响 考生应该如何回…...

神经网络 torch.nn---Linear Layers(nn.Linear)

torch.nn - PyTorch中文文档 (pytorch-cn.readthedocs.io) torch.nn — PyTorch 2.3 documentation nn.Linear torch.nn.Linear(in_features, out_features, biasTrue, deviceNone, dtypeNone) 参数: in_features - 每个输入样本的大小out_features - 每个输出…...

PPT视频如何16倍速或者加速播放

有两种方式,一种是修改PPT本身,这种方式非常繁琐,不太推荐,还有一种就是修改视频本身,直接让视频是16倍速的视频即可。 如何让视频16倍速,我建议人生苦短,我用Python,几行代码&…...

【ai】DeepStream 简介

NVIDIA Metropolis 平台。 NVIDIA 大都会 利用视觉 AI 将来自数万亿物联网设备的数据转化为有价值的见解。 NVIDIA Metropolis 是一个应用程序框架、一套开发工具和合作伙伴生态系统,它将视觉数据和 AI 结合在一起,以提高各行各业的运营效率和安全性。它有助于理解数万亿个…...

如何学习使用淘宝API?淘宝API运营场景

学习使用淘宝API涉及对其功能、分类、调用方法及实际应用的综合理解。下面按部分详细解释如何系统地学习和掌握淘宝API的使用: 淘宝API接口入门 了解淘宝开放平台:淘宝开放平台为开发者提供了一个可以与淘宝数据进行交互的平台,涵盖了丰富的A…...

Java 面试题:Java 的动态代理是基于什么原理?

编程语言通常有各种不同的分类角度,动态类型和静态类型就是其中一种分类角度,简单区分就是语言类型信息是在运行时检查,还是编译期检查。 与其近似的还有一个对比,就是所谓强类型和弱类型,就是不同类型变量赋值时&…...

Python logging 模块详解

Python 的 logging 模块提供了一个强大而灵活的日志系统。它是 Python 标准库的一部分,因此可以在任何 Python 程序中使用。logging 模块提供了许多有用的功能,包括日志消息的级别设置、日志消息的格式设置、将日志消息输出到不同的目标,以及…...

http://account.battlenet.com.cn

http://account.battlenet.com.cn 魔兽战网 短信验证 查了下,我老早以前账号还在,纪念下,少玩游戏。...

java第二十课 —— 面向对象习题

类与对象练习题 编写类 A01,定义方法 max,实现求某个 double 数组的最大值,并返回。 public class Chapter7{public static void main(String[] args){A01 m new A01();double[] doubleArray null;Double res m.max(doubleArray);if(res !…...

Flask的模块化实践

既作为前端,又作为后端的我,写flask写了那么多行了,其实它们属于不同的模块,比如登录,注册,聊天,用户画像,那我觉得有必要分一下了,系统化的处理一下,不然找个…...

Cesium1.95中高性能加载1500个点

一、基本方式&#xff1a; 图标使用.png比.svg性能要好 <template><div id"cesiumContainer"></div><div class"toolbar"><button id"resetButton">重新生成点</button><span id"countDisplay&qu…...

Golang dig框架与GraphQL的完美结合

将 Go 的 Dig 依赖注入框架与 GraphQL 结合使用&#xff0c;可以显著提升应用程序的可维护性、可测试性以及灵活性。 Dig 是一个强大的依赖注入容器&#xff0c;能够帮助开发者更好地管理复杂的依赖关系&#xff0c;而 GraphQL 则是一种用于 API 的查询语言&#xff0c;能够提…...

postgresql|数据库|只读用户的创建和删除(备忘)

CREATE USER read_only WITH PASSWORD 密码 -- 连接到xxx数据库 \c xxx -- 授予对xxx数据库的只读权限 GRANT CONNECT ON DATABASE xxx TO read_only; GRANT USAGE ON SCHEMA public TO read_only; GRANT SELECT ON ALL TABLES IN SCHEMA public TO read_only; GRANT EXECUTE O…...

Spring AI 入门:Java 开发者的生成式 AI 实践之路

一、Spring AI 简介 在人工智能技术快速迭代的今天&#xff0c;Spring AI 作为 Spring 生态系统的新生力量&#xff0c;正在成为 Java 开发者拥抱生成式 AI 的最佳选择。该框架通过模块化设计实现了与主流 AI 服务&#xff08;如 OpenAI、Anthropic&#xff09;的无缝对接&…...

听写流程自动化实践,轻量级教育辅助

随着智能教育工具的发展&#xff0c;越来越多的传统学习方式正在被数字化、自动化所优化。听写作为语文、英语等学科中重要的基础训练形式&#xff0c;也迎来了更高效的解决方案。 这是一款轻量但功能强大的听写辅助工具。它是基于本地词库与可选在线语音引擎构建&#xff0c;…...

C#中的CLR属性、依赖属性与附加属性

CLR属性的主要特征 封装性&#xff1a; 隐藏字段的实现细节 提供对字段的受控访问 访问控制&#xff1a; 可单独设置get/set访问器的可见性 可创建只读或只写属性 计算属性&#xff1a; 可以在getter中执行计算逻辑 不需要直接对应一个字段 验证逻辑&#xff1a; 可以…...

PHP 8.5 即将发布:管道操作符、强力调试

前不久&#xff0c;PHP宣布了即将在 2025 年 11 月 20 日 正式发布的 PHP 8.5&#xff01;作为 PHP 语言的又一次重要迭代&#xff0c;PHP 8.5 承诺带来一系列旨在提升代码可读性、健壮性以及开发者效率的改进。而更令人兴奋的是&#xff0c;借助强大的本地开发环境 ServBay&am…...

springboot 日志类切面,接口成功记录日志,失败不记录

springboot 日志类切面&#xff0c;接口成功记录日志&#xff0c;失败不记录 自定义一个注解方法 import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target;/***…...

Sklearn 机器学习 缺失值处理 获取填充失值的统计值

💖亲爱的技术爱好者们,热烈欢迎来到 Kant2048 的博客!我是 Thomas Kant,很开心能在CSDN上与你们相遇~💖 本博客的精华专栏: 【自动化测试】 【测试经验】 【人工智能】 【Python】 使用 Scikit-learn 处理缺失值并提取填充统计信息的完整指南 在机器学习项目中,数据清…...

sshd代码修改banner

sshd服务连接之后会收到字符串&#xff1a; SSH-2.0-OpenSSH_9.5 容易被hacker识别此服务为sshd服务。 是否可以通过修改此banner达到让人无法识别此服务的目的呢&#xff1f; 不能。因为这是写的SSH的协议中的。 也就是协议规定了banner必须这么写。 SSH- 开头&#xff0c…...