接口测试框架Python:Requests、HttpRunner

文章目录

以前不了解httpRunner实现机制很不喜欢它,认为就是简单的接口录制与回放,只适合处理简单的接口逻辑。随着最近对httpRunner再次解读,发现它也能实现复杂接口的自动化用例,而且对于场景类的实现很快(不涉及特殊处理的,只要做好参数管理)。对于特殊处理的接口,针对特殊部分可以通过封装方法实现调用,如接口的加密,cookie失效等等。

httprunner源码:https://github.com/httprunner/httprunner

环境准备

涉及多个项目且项目接口实现的机制差距大,建议创建多个自动化项目且环境配置虚拟化以便解决包之间的冲突问题。

创建虚拟化环境步骤

1 创建虚拟环境:C:\py_workspace>python -m venv /venv
2 进入\venv\Scripts目录,激活虚拟环境:activate
3 返回上2级目录
4 安装虚拟安装包:pip install httprunner==3.1.6 (hrun3 低版本支持创建项目,高版本不支持)
5 查看httprunner版本:httprunner -V
6 查看帮助文档: httprunner -h
7 创建项目:httprunner startproject baseProduct

录制接口

Charles或fiddler或浏览器抓包,过滤需要使用的host接口,另存为.har文件,把录制的接口放置在创建的项目的har目录下。

生成用例

 查看用例生成命令:har2case -h

   用例生成命令:har2case  xxx.har 默认生成py文件,也可以指定生成yml文件-->har2case  xxx.har  -2y

转换用例格式

  查看用例格式生成命令:hmake -h

    把默认用例格式转换为pytest默认格式:hmake testcases

备注:转换过程中可能出现click包依赖异常(black是python中用来格式化代码等库,但是本地安装完成后,遇到了这个报错,需要重新安装低版本),具体见截图

解决:pip install click==8.0.2

 

运行用例

hrun testcases
hrun -s testcases  打印运行日志

设置变量

全局变量:定义在类变量config

1 config = Config("testcase description").verify(False).variables(
2 **{
3 "uuid": "VJ7N5NBw",
4 'cookies': "${get_online_cookie()}"
5 }
6 )

base_url 特殊的全局变量:

  主域名设置,一个文件设置一个,引用方式:请求方法对应的URL参数,只要写路径即可

局部变量:

 1、定义在每个step里 .with_variables({'courseId':'1000'})

    2、引用: 每个请求对应的请求参数 .with_params(**{"time": "1670292083257",'course': '$courseId'}

提取响应字段

  提取字段语法:数据来源父级,如body、headers、cookies

.extract().with_jmespath('body.result.uuid', 'uid')
.extract().with_jmespath('headers.origin', 'origin')
.extract().with_jmespath('cookies.“set-cookie“', 'cookie')

  引用变量:

  1、不涉及边界的变量引用

Step(
RunRequest("/gateway/xxx/userInfo")
.get(
"/gateway/xxx/userInfo"
)
.with_params(**{"time": "1670292083257"})
.with_headers(
**{
"Cookie": "$cookies"
}
)

  2、涉及边界变量引用:

Step(
RunRequest("/gateway/xxx/userInfo")
.get(
"/gateway/xxx/userInfo"
)
.with_params(**{"time": "1670292083257"})
.with_headers(
**{
"Cookie": "${cookies}testor"
}
)

  3、动态引入函数变量

config = Config("testcase description")\
.verify(False)\
.variables(
**{
"uuid": "V...w",
'cookies': "${get_online_cookie()}"
}
)

hook机制

HttpRunner中,我们可以通过hook机制来实现 setUp() 和 tearDown(),其对应的实现函数可以封装在其他模块

setup_hook:主要用于处理接口的前置的准备工作
teardown_hook:主要用于后置清理工作

用例分层

用例分层需要考虑用例的调用与参数调用。用例调用通过RunTestCase类的call方法实现,模块间的参数可以通过export实现传递。特别需关注call调用的用例文件名不要含有test,不然会被当作测试文件执。

用例分层demo截图

导出变量:Config()配置 .export("",)

引用上面导出的变量

用例的参数化

先在需要参数化测试类名下定义参数化字段,这样整个文件都可使用定义的参数。HttpRunner3.x支持3种参数化规则:

  1、自己定义的变量数组

  2、debugtalk.py函数返回值中

  3、外部文件中

参数化是固定格式,不能修改否则报错。一般自动化用例涉及参数化的使用很少,如果需要参数化会把整个信息配置化便于遍历和断言。

 1 @pytest.mark.parametrize(
2 "param",
3 Parameters(
4 {
5 "user_agent": ["iOS/10.1", "iOS/10.2"], ##自定义参数
6 "username-password": "${parameterize(request_methods/account.csv)}",##外部文件
7 "app_version": "${get_app_version()}",##debugtalk.py 定义函数
8 }
9 ),
10 )
11 def test_start(self, param):
12 super().test_start(param)

报告

  pytest自带报告:hrun testcases/origin_test.py -s --html=origin.html

  allure报告:hrun testcases/origin_test.py  --alluredir=allurereports/

  打开报告:open report文件名

性能

  locust是python语言开发的一款的开源的的性能测试框架,他比jmeter更加的轻量级,主要是通过协程(gevent)的方式去实现并发,通过协程的方式可以大幅提高单机的并发能力,同时避免系统级的资源调度。locust具有开源性、分布式、支持高并发,支持webUI的操作方式。我推荐locus主要是集成好的压测工具,不需要额外在写压测脚本可实现用例的高复用。而且配合用例管理平台,不论功能测试还是开发都可以根据自己的需要执行对应的接口要求。

命令:locusts -f testcases/online_origin_test.py,执行命令会唤起locusts服务,通过web访问地址:http://localhost:8089/(请用Chrome浏览器)

locusts 参考链接:https://www.jb51.net/article/207182.htm

httpRunner使用汇总的更多相关文章

  1. 一、HttpRunner学习汇总

    HttpRunner是一款面向Http和HTTPS协议的通用测试框架,只需编写维护一份YAML/JSON脚本即可实现自动化测试.性能测试.线上监控.持续集成等多种测试需求,是基于关键字驱动的框架,基于 ...

  2. 【HttpRunner v3.x】笔记—8.运行testcase的几种方式

    在之前的demo过程中,已经运行过testcase了,那这篇就也来汇总一下,运行case相关的知识点. 一.运行testcase的几种场景 1. 运行单个case 通常单个case的话我会在编辑器里用 ...

  3. 常用 Gulp 插件汇总 —— 基于 Gulp 的前端集成解决方案(三)

    前两篇文章讨论了 Gulp 的安装部署及基本概念,借助于 Gulp 强大的 插件生态 可以完成很多常见的和不常见的任务.本文主要汇总常用的 Gulp 插件及其基本使用,需要读者对 Gulp 有一个基本 ...

  4. 异常处理汇总 ~ 修正果带着你的Net飞奔吧!

    经验库开源地址:https://github.com/dunitian/LoTDotNet 异常处理汇总-服 务 器 http://www.cnblogs.com/dunitian/p/4522983 ...

  5. UWP开发必备:常用数据列表控件汇总比较

    今天是想通过实例将UWP开发常用的数据列表做汇总比较,作为以后项目开发参考.UWP开发必备知识点总结请参照[UWP开发必备以及常用知识点总结]. 本次主要讨论以下控件: GridView:用于显示数据 ...

  6. Oracle手边常用70则脚本知识汇总

    Oracle手边常用70则脚本知识汇总 作者:白宁超 时间:2016年3月4日13:58:36 摘要: 日常使用oracle数据库过程中,常用脚本命令莫不是用户和密码.表空间.多表联合.执行语句等常规 ...

  7. Oracle 数据库知识汇总篇

    Oracle 数据库知识汇总篇(更新中..) 1.安装部署篇 2.管理维护篇 3.数据迁移篇 4.故障处理篇 5.性能调优篇 6.SQL PL/SQL篇 7.考试认证篇 8.原理体系篇 9.架构设计篇 ...

  8. Vertica 数据库知识汇总篇

    Vertica 数据库知识汇总篇(更新中..) 1.Vertica 集群软件部署,各节点硬件性能测试 2.Vertica 创建数据库,创建业务用户测试 3.Vertica 数据库参数调整,资源池分配 ...

  9. 读书笔记汇总 - SQL必知必会(第4版)

    本系列记录并分享学习SQL的过程,主要内容为SQL的基础概念及练习过程. 书目信息 中文名:<SQL必知必会(第4版)> 英文名:<Sams Teach Yourself SQL i ...

  10. 关于DDD的学习资料汇总

    DDD(Domain-Driven Design)领域驱动设计,第一次看到DDD是在学习ABP时,在其中的介绍中看到的.what,DDD是个什么鬼,我不是小白,是大白,没听过.于是乎,度娘查查查,找到 ...

随机推荐

  1. 基于K-means聚类算法进行客户人群分析

    摘要:在本案例中,我们使用人工智能技术的聚类算法去分析超市购物中心客户的一些基本数据,把客户分成不同的群体,供营销团队参考并相应地制定营销策略. 本文分享自华为云社区<基于K-means聚类算法 ...

  2. 【转载】EXCEL VBA 同时选择多个工作表的方法

    如果要用VBA同时选择多个工作表,可以利用数组或设置"Select"方法的参数为"False"来扩展所选择的内容,如下面的一些代码:   1.用工作表名称:   ...

  3. 能将三次握手讲到这个程度,不给你offer给谁!

    摘要:在后端相关岗位的入职面试中,三次握手的出场频率非常的高,甚至说它是必考题也不为过. 本文分享自华为云社区<能将三次握手理解到这个深度,面试官拍案叫绝~>,作者:龙哥手记. 在后端相关 ...

  4. Hadoop详解(07) - Hdfs数据压缩

    Hadoop详解(07) - Hdfs数据压缩 概述 压缩技术能够有效减少底层存储系统(HDFS)读写字节数.压缩提高了网络带宽和磁盘空间的效率.在运行MR程序时,I/O操作.网络数据传输. Shuf ...

  5. 【SpringBoot实战专题】「开发实战系列」从零开始教你舒服的使用RedisTemplate操作Redis数据

    SpringBoot快速操作Redis数据 在SpringBoot框架中提供了spring-boot-starter-data-redis的依赖组件进行操作Redis服务,当引入了该组件之后,只需要配 ...

  6. 大数据分析新玩法之Kusto宝典 - 新书发布,免费发行

    我很高兴地跟大家分享,我在元旦期间编写的一本新书今天上线,并且免费发行,大家可以随时通过 https://kusto.book.xizhang.com 这个地址访问,也可以下载 PDF 的版本, 这本 ...

  7. ElasticSearch必知必会-进阶篇

    京东物流:康睿 姚再毅 李振 刘斌 王北永 说明:以下全部均基于elasticsearch8.1 版本 一.跨集群检索 - ccr 官网文档地址: https://www.elastic.co/gui ...

  8. ORM执行SQL语句,神奇的双下划线查询,ORM外键字段的创建,外键字段数据的操作,多表查询

    ORM执行SQL语句,神奇的双下划线查询,ORM外键字段的创建,外键字段数据的操作,多表查询 一.ORM执行SQL语句 有时候ORM的操作效率较低,我们是可以自己来编写SQL语句的 方式一: res ...

  9. djiango框架推导过程,jinja2模板语法,jiango简介,基本操作命令

    djiango框架推导过程,jinja2模板语法,jiango简介,基本操作命令 一.web框架前戏 web 框架可以理解为是基于会联网的web服务端>>>socket服务端 1.w ...

  10. 基于NOSTR协议的“公有制”版本的Twitter,去中心化社交软件Damus用后感,一个极端走向另一个极端

    最近,一个幽灵,Web3的幽灵,在网络游荡,它叫Damus,这玩意诠释了什么叫做病毒式营销,滑稽的是,一个Web3产品却在Web2的产品链上疯狂传销,各方大佬纷纷为其背书,到底发生了什么?Damus的 ...