接口测试框架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. Python实验报告(第9章)

    实验9:异常处理及程序调试 一.实验目的和要求 1.了解代码异常知识: 2.掌握异常处理的try-except语句.try-except-else语句.try-except-finally语句.rai ...

  2. 数据分析中的SQL如何解决业务问题

    本文来自知乎问答. 提问:数据分析人员需要掌握sql到什么程度? 请问做一名数据分析人员,在sql方面需要掌握到什么程度呢?会增删改查就可以了吗?还是说关于开发的内容也要会?不同阶段会有不同的要求吗? ...

  3. python之路48 django 视图层、模板层

    视图层之必会三板斧 用来处理请求的视图函数都必须返回HttpResponse对象 完全正确 class HttpResponse: pass return HttpResponse() def ren ...

  4. [C++]vector内存的增长机制

    例子 #include <iostream> #include<vector> #include<algorithm> #include "CPPDemo ...

  5. CF1744B Even-Odd Increments

    简要题意 \(T\) 组数据,每组数据给定一个长度为 \(n\) 的数列,有 \(q\) 次操作,共有两种操作: \(\texttt{0 x}\),给数列中所有偶数加上 \(x\): \(\textt ...

  6. Java 进阶P-8.7+P-8.8

    异常遇到继承 异常声明遇到继承关系 当覆盖一个函数的时候,子类不能声明抛出比父类的版本更多的异常.因为我们有可能拿着子类的对象当作父类的对象来看待(向上造型),在通过父类的变量去调用子类的函数的时候, ...

  7. PV系统 Argus 8.4

    Oracle 最新版本PV系统 Argus 8.4 已经推出.这是一次中型的版本升级,此版本修复了此前的一些bug,并增加了几个新功能.对中国用户来说,最激动人心的当属增加了对中文WHODrug的支持 ...

  8. sync/atomic 原子操作使用与解析

    目录 前言 1. 引入 2. sync.atomic 原子操作 2.1 什么是原子操作 2.2 各种 API 的作用 2.2.1 Store 操作 2.2.2 Load 操作 2.2.3 Add 操作 ...

  9. FAQ docker进程启动失败处理案例分享

    docker进程启动失败处理 背景 有同学反馈在启动docker的时候遇到了如下问题:docker启动报错 [root@wuxianfeng ~]# systemctl start docker Jo ...

  10. Osx10.14升级watchman踩坑记

    背景 使用 watchman 检测文件变化通知非常的好用, 但有些时候会出现 watchman 占用内存和 CPU 特别疯狂, 通过 watch-del 也无济与事, 由于 watchman 的版本 ...