Bull's blog Bull's blog
首页
工作
  • 分类
  • 标签
  • 归档
关于

Bull

首页
工作
  • 分类
  • 标签
  • 归档
关于
  • 马上消费

  • 斗虫

    • 基础课件

      • python基础和条件语句
      • 基础数据类型_改
      • 函数
      • 1 函数练习
      • 32文件操作
      • 3 异常
      • 面向对象
      • 1面向对象案例-学生管理系统
      • 1Python基础练习题
      • 自动化测试理论
      • 2 接口测试基础
      • 3 requests
      • 4 代码
      • 5 简单封装
      • 1 pytest
      • 签名的设计
      • 接口case设计
      • 3 新建一个接口
      • x装饰器语法
      • httprunner2.x工具快速入门
      • httprunner3.x的简介
        • 简介:
        • 参考资料:
        • 框架的优点
        • 安装及创建项目
        • 录制接口请求
        • 执行方式
          • 使用hrun命令:
          • 使用pytest命令:
          • pytest脚本在编译器中执行:
        • 修改自动生成的脚本
          • 特性:
          • 知识点:
        • config属性能做什么?
          • name(必填)
          • base_url(可选)
          • variables(可选)
          • verify (可选)
          • export (可选)
        • teststep能做什么?
          • 1.对于测试步骤而言
          • RunRequest(名称)
          • .name
          • .with_variables
          • method(url)
          • .with_params
          • .with_headers
          • .with_cookies
          • .with_data
          • .with_json
          • extract(数据提取)
          • validate
        • 2.引用其他case的情况
          • RunTestCase(名称)
          • .name
          • .with_variables
          • .call
          • .export
        • 什么是脚手架
        • 项目架构
        • 参数化
        • 测试报告和命令行执行
          • 1.pytest-html和pytest普通用法一致
      • Flask框架
      • 了解任务
      • mock服务
      • UI自动化策略
      • PageObject模式
      • pytest参数化进阶
      • pytest框架生成报告
      • Yaml运用
      • 日志类模板
      • 持续集成
      • jdk配置
      • Linux基础
      • Jenkins主从测试任务
      • conda管理项目环境
      • 面试题-栈结构
      • 面试题-找众数
      • 正交测试法
      • 装饰器
      • 综合面试题_原版
    • RF

  • 天眼查

  • 某米

  • 工作经历
  • 斗虫
  • 基础课件
wangyang
2023-09-02
目录

httprunner3.x的简介

# httprunner3.x的简介

# 简介:

HttpRunner是一款面向HTTP(s)协议的通用测试框架,只需编写维护一份 测试脚本,即可实现自动化测试、性能测试、持续集成等多种测试需求。

# 参考资料:

github地址:https://github.com/HttpRunner/HttpRunner 3.x用户手册:https://docs.httprunner.org/user/gen_tests/

# 框架的优点

  • 继承 Requests 的全部特性,轻松实现 HTTP(S) 的各种测试需求
  • 测试用例与代码分离,采用YAML/JSON/Pytest的形式描述测试场景,保障测试用例具备可维护性
  • 测试用例支持分层机制,充分实现测试用例的复用
  • 测试用例支持参数化和数据驱动机制
  • 使用 skip 机制实现对测试用例的分组执行控制
  • 测试请求支持完善的hook机制
  • 支持热加载机制,在文本测试用例中轻松实现复杂的动态计算逻辑
  • 基于 HAR 实现接口录制和用例生成功能(har2case)
  • 结合 Locust 框架,无需额外的工作即可实现分布式性能测试
  • 执行方式采用 CLI 调用,可与 Jenkins 等持续集成工具完美结合
  • 测试结果统计报告简洁清晰,附带详尽统计信息和日志记录
  • 具有可扩展性,便于扩展实现 Web 平台化(HttpRunnerManager)

# 安装及创建项目

pip install httprunner==3.1.4 
1

可以通过以下命令验证是否成功

hrun -V
1

首先cd到你想要创建项目的目录下面,然后通过下面的命令行创建项目

httprunner startproject 项目名称
1

# 录制接口请求

如果不知道如何去写单独api的自动化脚本,那么可以通过录制功能去实现,首先下载

pip install har2case

然后通过fiddler去抓取对应的接口,选中对应的接口,然后导出成HTTPArchive v1.2,选中这个,然后导出保存为demo.har,再用以下命令转换成测试脚本

默认生成pytest测试脚本

har2case demo.har
1

以下命令可以生成yml文件

har2case -2y demo.har
1

运行测试用例用如下命令,即

hrun demo.json/demo.yml
1

*httprunner中的三种case形式

HttpRunner v3.x支持三种测试用例格式pytest,YAML和JSON。强烈建议以pytest格式而不是以前的YAML/JSON格式编写和维护测试用例。

相互转换格式关系如下图所示:

img

# 执行方式

# 使用hrun命令:

hrun interfaceDemo

# 使用pytest命令:

pytest interfaceDemo

# pytest脚本在编译器中执行:
from httprunner import HttpRunner, Config, Step, RunRequest, RunTestCase

class TestCaseString(HttpRunner):...

if __name__ == "__main__":
    TestCaseString().test_start()
1
2
3
4
5
6

# 修改自动生成的脚本

# 特性:
  • 每个testcase都是HttpRunner的子类
  • 必须有两个类属性:config和teststeps。
  • 单个teststeps列表中的单个Step内部通过链式调用(RunRequest().get().with_params().with_header().with_cookies().validate().assert_equal())
# 知识点:
  1. config:配置测试用例级设置,包括基础url、验证、变量、导出。
  2. teststeps:teststep的列表(list[Step]),每个步骤对应于一个API请求,也可以调用另一个testcase。此外,还支持variables/extract/validate/hooks机制来创建极其复杂的测试场景。
  3. 链调用:可以看到一个case的请求,经过了各个环节的调用,这也是httprunner 3.x版本一大亮点。现在的ide编辑器越来越强大,比如你使用pycharm的话,都不用你怎么记忆用例的格式,顺手就...(点)出来了,这或许也是官方推荐使用pytest的另一个原因吧,

# config属性能做什么?

每个测试用例都应该有一个config部分,您可以在其中配置测试用例级别的设置。

# name(必填)

指定测试用例名称。这将显示在执行日志和测试报告中。

# base_url(可选)

指定SUT的通用架构和主机部分,例如https://postman-echo.com。如果base_url指定,则teststep中的url只能设置相对路径部分。如果要在不同的SUT环境之间切换,这将特别有用。

# variables(可选)

指定测试用例的公共变量。每个测试步骤都可以引用未在步骤变量中设置的配置变量。换句话说,步骤变量比配置变量具有更高的优先级。

# verify (可选)

指定是否验证服务器的TLS证书。如果我们想记录测试用例执行的HTTP流量,这将特别有用,因为如果没有设置verify或将其设置为True,则会发生SSLError。

SSLError(SSLCertVerificationError(1,'[SSL:CERTIFICATE_VERIFY_FAILED]证书验证失败:证书链中的自签名证书(_ssl.c:1076)')

# export (可选)

指定导出的测试用例会话变量。将每个测试用例视为一个黑盒,config variables是输入部分,而config export是输出部分。特别是,当一个测试用例在另一个测试用例的步骤中被引用,并且将被提取一些会话变量以在后续测试步骤中使用时,则提取的会话变量应在配置export部分中进行配置。将测试用例的某些变量指定为全局变量。(PS:不配置export在另一个引用类中进行该累的变量调用时,直接export也是可以的,最好还是配置一下)

# teststep能做什么?

先说一下,这里分为测试步骤 和 外部case依赖两种情况

# 1.对于测试步骤而言

# RunRequest(名称)

RunRequest 在一个步骤中用于向API发出请求,并对响应进行一些提取或验证。

# .name

RunRequest 的参数用于指定测试步骤名称,该名称将显示在执行日志和测试报告中。

# .with_variables

指定测试步骤变量。每个步骤的变量都是独立的,因此,如果要在多个步骤中共享变量,则应在配置变量中定义变量。此外,步骤变量将覆盖配置变量中具有相同名称的变量。(PS:注意参数传递的格式使用**{},使用关键字参数解包的方式进行参数传递给with_variables),参数引用使用"$变量名",如果是函数引用使用"${函数名()}"

# method(url)

指定HTTP方法和SUT的URL。这些对应于method和url参数requests.request (opens new window)。

如果base_url在config中设置,则url只能设置相对路径部分。如果在Config中设置了baseurl,method中只能设置相对路径,可选参数为get/post/put/delete/等。

# .with_params

指定请求网址的查询字符串。这对应于的params参数requests.request (opens new window)。

# .with_headers

为请求指定HTTP标头。这对应于的headers参数requests.request (opens new window)。

# .with_cookies

指定HTTP请求cookie。这对应于的cookies参数requests.request (opens new window)。

# .with_data

指定HTTP请求正文。这对应于的data参数requests.request (opens new window)。

# .with_json

在json中指定HTTP请求正文。这对应于的json参数requests.request (opens new window)。

# extract(数据提取)

.WITH_JMESPATH

使用jmespath (opens new window)提取JSON响应主体。

with_jmespath(jmes_path:文字,var_name:文字)

  • jmes_path:jmespath表达式,有关更多详细信息,请参考JMESPath教程 (opens new window)
  • var_name:存储提取值的变量名,可以在后续测试步骤中引用它

# validate

.ASSERT_XXX

使用jmespath (opens new window)提取JSON响应主体并使用期望值 (opens new window)进行验证。

assert_XXX(jmes_path:文本,期望值:任何,消息:文本=“”)

  • jmes_path:jmespath表达式,有关更多详细信息,请参考JMESPath教程 (opens new window)
  • Expected_value:指定的期望值,变量或函数引用也可以在此处使用
  • 消息(可选):用于指示断言错误的原因

# 2.引用其他case的情况

# RunTestCase(名称)

RunTestCase 在一个步骤中用于引用另一个测试用例调用。

# .name

RunTestCase 的参数用于指定测试步骤名称,该名称将显示在执行日志和测试报告中。

# .with_variables

指定测试步骤变量。每个步骤的变量都是独立的,因此,如果要在多个步骤中共享变量,则应在配置变量中定义变量。此外,步骤变量将覆盖配置变量中具有相同名称的变量。

# .call

指定引用的测试用例类。你在引用另一个测试用例的step中的参数时,需要先指定引用的测试用例类

# .export

指定会话变量名称以从引用的测试用例中导出。导出的变量可以通过后续测试步骤step进行引用。导出的是step中的jmespath提取的变量,export之后,这个变量是全局变量,但是不能再confg中进行设置,因为测试类的引用是在step中进行的,而类的初始化是先初始化config,然后初始化teststeps,所以参数的传递在step之间

# 什么是脚手架

在软件开发上(当然也包括前端开发)的脚手架指的就是:有人帮你把这个开发过程中要用到的工具、环境都配置好了,你就可以方便地直接开始做开发,专注你的业务,而不用再花时间去配置这个开发环境,这个开发环境就是脚手架。

# 项目架构

各个目录代表的含义:

  • debugtalk.py 放置在项目根目录下(借鉴了pytest的conftest文件的设计)
  • .env 放置在项目根目录下,可以用于存放一些环境变量
  • reports 文件夹:存储 HTML 测试报告
  • testcases 用于存放测试用例
  • har 可以存放录制导出的.har文件
  • .gitignore 设置上传到git时需要忽略那些文件信息

# 参数化

参数化有三种方式,具体内容如下:

第一种,使用httprunner改造过的pytest参数化,通过parameters这个字段去引用

@pytest.mark.parametrize(
    "param",
    Parameters(
        {
            "first": ["first", "second"],
            "second":['random string','string number']
        }
    ),
)
1
2
3
4
5
6
7
8
9

第二种,通过csv文件httprunner可以读取同目录下的csv文件

#代码中如此书写
@pytest.mark.parametrize("param", Parameters(
    {"username-password":"${parameterize(data.csv)}"}
))

#使用csv文件进行参数化的时候,Parameters的键里每一个-代表一个参数分割。例如username 和 password是两个参数
# 相应的,csv文件中的列名应该和参数名一致
1
2
3
4
5
6
7

数据文件

username,password
name1,1212
name2,4545
1
2
3

第三种,通过debugtalk.py进行构建

代码中这样调用:

@pytest.mark.parametrize("param", Parameters(
    {"username": "${get_username()}"}
))
#以上方式是使用debugtalk中的方法返回值
1
2
3
4

在debugtalk里面定义:

# @File: debugtalk.py
# ---

def get_username():
    return [
        {"username": "111111"},
        {"username": "222222"},
        {"username": "333333"},
        {"username": "444444"},
        {"username": "555555"},
        {"username": "666666"},
    ]
1
2
3
4
5
6
7
8
9
10
11
12

# 测试报告和命令行执行

3.x版本httprunner可以使用两种测试报告(本质上是用的pytest)

# 1.pytest-html和pytest普通用法一致

pytest case文件.py --html=report.html

pytest case文件.py --html=report.html --self-contained-html

2.使用allure需要安装httprunner插件

pip install httprunner[allure]

执行命令:

pytest case名称.py --alluredir ./预计存放数据的路径

allure generate 数据存放路径 -o 报告输出路径 --clean

#python自动化#自动化入门
上次更新: 2023/09/05, 02:16:11
httprunner2.x工具快速入门
Flask框架

← httprunner2.x工具快速入门 Flask框架→

最近更新
01
30.快速实现接口重构测试---deepdiff库使用
09-21
02
概述
09-07
03
概述
09-07
更多文章>
Theme by Vdoing | Copyright © 2018-2025 Evan Xu | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式