全网最全httpruner自动化测试教程 全是干货

简介: 全网最全httpruner自动化测试教程 全是干货

一、安装

1.1python环境

建议安装3.x版本,贴一个国内镜像地址,可以自行选择

淘宝镜像链接

1.2httprunner安装

执行以下命令pip install httprunner默认安装最新版本,笔者安装的2.4的版本,可以使用这条命令指定版本pip install httprunner==版本号

安装之后使用hrun -V查看版本号,打印版本号则安装成功

二、脚手架介绍

2.1 安装脚手架

2.x版本执行hrun --startproject 项目名称

3.x和4.x请执行httprunner --startproject 项目名称

2.2脚手架项目介绍

脚手架类似vue的脚手架,默认给了一个最基本的项目格式

文件/夹 意义
api 独立定义的接口 yml/json 文件
reports 执行后自动生成的测试报告文件
testcases 测试用例文件
testsuites 测试用例集文件
.env 定义环境变量
.gitgnore 定义托管到git时忽略的文件
debugtalk.py 编写外部处理函数,可以在用例子中被调用

三、项目实践

3.1 api文件实践

默认的yml如下

name: demo api # 接口名称
variables: # 这个文件下的全局参数
    var1: value1 # 自定义的参数 自定义的key-value模式 在后面可以引用 ${key}
    var2: value2
request: #一个请求
    url: /api/path/$var1 # ip+端口+地址
    method: POST # 请求方法 get post delet put ...
    headers: # 定义请求头
        Content-Type: "application/json" # 请求头参数
    json: # post请求的body
        key: $var2
validate: # 断言request的请求响应状态是否为200
    - eq: ["status_code", 200]

这里我们自定义一个,此接口是笔者的网站接口,读者需要自行准备接口,直接用百度的也可以

login.yml文件

name: 登录接口-正向用例
variables: # 全局变量 只能在这个yml中使用
    password: zz102073
    id: 102073
    login_url: http://47.92.52.220:8088/login/login
base_url: ip+端口
request: # 参数信息
    # 可以使用全局变量写法
    # url: $login_url
    # url: /login/login
    url: /login/login
    # 调用py的函数
    # User-Agent: ${get_user_agent()}
    method: POST
    headers:
        Content-Type: "application/json"
    json:
        id: $id # 环境变量 在.env文件中创建 标准写法为大写 调用格式${ENV(变量名)}
        password: $password # 全局变量
validate: # 断言使用
    - eq: ["status_code", 200]
#    - {"check":"status_code","comparator":"eq","expect":200}
#    - {"check":"content","comparator":"contains","expect":"msg"}

.env文件

ID=2021102073
PASSWORD=zz102073

debugtalk.py

def get_user_agent():
    user_agent = ["测试1","测试2","测试3"]
    return random.choice(user_agent)

可以看见一些新的用法

  1. 定义了base_url之后可以在后文中使用
  2. ${ENV(变量名)}可以引用全局变量
  3. 如果要使用自定义的py函数,直接${get_user_agent()}就可以,

执行hrun api/login.yml,后面是相对路径的地址,可以看见打印了相关信息

测试报告

3.2 testcase场景串联案例

实际测试中,很多接口可能要使用前面接口的参数,这里演示一个

config:
    name: "获取题目信息配置"
# 就近覆盖 不以api中为基准
base_url: ip+端口
teststeps:
-
    name: 登录
    api: api/login.yml
    extract:
        #会覆盖后面api中的token
        - token: headers.Authorization
-
    name: 获取题目列表信息
    api: api/get_problem_list.yml

注意

  1. 上面的base_url会就近覆盖
  2. teststeps下面的每一个短横线就是一个api文件中的接口
  3. extract表示下面的参数会保存下来,在获取题目列表信息的接口中会引用他,如下

    同样执行hrun 相对路径可以得到测试报告

3.3 testsuites案列

login.yml

config:
    name: "登录接口套件"
    base_url: "http://47.92.52.220:8088"
testcases:
-
    name: 登录接口套件
    testcase: testcases/login.yml
    parameters:
        #方式一 直接在当前文件添加
#        - title-id-password-status_code:
#              - ["正常登录","2021102073","zz102073",200]
#              - ["密码错误","2021102073","z102073",200]
        #方式二 用csv文件 默认全部是str类型,数据转换有问题
#        - title-id-password-status_code: ${P(datas/account.csv)}
        #方式三 最佳实践 使用函数
        - title-id-password-status_code: ${get_accounts()}

代码解释: 介绍了三种引入测试用例的方法,因为每个接口的测试用例可能存在几十个,parameters表示下面的是参数,用短横线分割

方式一

直接在当前文件添加,一眼懂,不解释

方式二

引用csv文件 默认全部是str类型,如果你的数据是int或者其他类型会报错

这里在项目里新建了一个data目录,一个account.cvs文件,这个格式可以引用${P(datas/account.csv)}

title,id,password,status_code
正常登录,2021102073,zz10273,200
密码错误,2021102073,z10273,200

方式三

使用py代码,实际操作中应该使用代码生成测试用例

def get_accounts():
    # 嵌套字典的列表 可以通过程序自动生成
    accounts = [
        {"title":"正常登录","id":"2021102073","password":"zz102073","status_code":200}
    ]
    return accounts

四、补充说明

fidder使用

如果有大量接口需要自动化测试,手动编写yml文件十分繁琐,可以使用抓包工具得到har文件,通过har2case 目标文件 -2y将har文件转换为yml文件

debug打印

可以使用hrun 目标文件 --log-level debug将打印级别调为debug模式,看见更多信息

httprunner官方

https://httprunner.com/docs/quickstart/详细可以阅读官方文件,以及更多断言写法

相关文章
|
9天前
|
Java 测试技术 Python
《手把手教你》系列基础篇(八十)-java+ selenium自动化测试-框架设计基础-TestNG依赖测试-番外篇(详解教程)
【6月更文挑战第21天】本文介绍了TestNG中测试方法的依赖执行顺序。作者通过一个实际的自动化测试场景展示了如何设计测试用例:依次打开百度、搜索“selenium”、再搜索“selenium+java”。代码示例中,`@Test`注解的`dependsOnMethods`属性用于指定方法间的依赖,确保执行顺序。如果不设置依赖,TestNG会按方法名首字母排序执行。通过运行代码,验证了依赖关系的正确性。
31 4
|
6天前
|
Java 测试技术 Python
《手把手教你》系列基础篇(八十一)-java+ selenium自动化测试-框架设计基础-TestNG如何暂停执行一些case(详解教程)
【6月更文挑战第22天】本文介绍了如何在TestNG中不执行特定测试用例。当部分模块未准备好时,可以通过以下方式暂停测试:③使用`@Test(enabled=false)`注解来禁用测试用例。作者提供了一个Java Selenium自动化测试的示例,展示如何通过修改`enabled`参数控制测试方法的执行。代码中,`testSearch2()`方法被禁用,因此在测试运行时不执行。文章还包含了测试报告和执行过程的截图。
36 7
|
3天前
|
安全 Linux 测试技术
Kali Linux渗透测试教程:解锁黑客之门
Kali Linux渗透测试教程:解锁黑客之门
|
10天前
|
Java 测试技术 Python
《手把手教你》系列基础篇(七十九)-java+ selenium自动化测试-框架设计基础-TestNG依赖测试-下篇(详解教程)
【6月更文挑战第20天】TestNG是一个Java测试框架,提供两种测试方法依赖机制:强依赖(所有前置方法成功后才运行)和弱依赖(即使前置方法失败,后置方法仍运行)。文中通过代码示例展示了这两种依赖如何实现,并解释了当依赖方法失败时,如何影响后续方法的执行。文章还包含了TestNG Suite的运行结果截图来辅助说明。
32 8
|
6天前
|
XML Java 测试技术
《手把手教你》系列基础篇(八十二)-java+ selenium自动化测试-框架设计基础-TestNG测试报告-上篇(详解教程)
【6月更文挑战第23天】TestNG 是一个用于自动化测试的 Java 框架,它自动生成测试报告,包括 HTML 和 XML 格式。报告可在 `test-output` 文件夹中找到。要创建测试用例,可创建一个实现了 `@Test` 注解的方法。通过 `testng.xml` 配置文件来组织和执行测试。默认报告包括测试结果、失败点和原因。用户还能实现 `ITestListener` 和 `IReporter` 接口来自定义报告和记录器。
22 2
|
11天前
|
测试技术 Python
Python教程:利用timeit模块对代码进行性能测试
在Python中,了解代码的性能是优化和改进的关键。timeit模块是Python标准库中的一个工具,用于测量代码片段的执行时间。本文将介绍timeit模块的各种接口、命令行使用方法以及如何对代码中的函数或类进行性能测试。
21 3
|
11天前
|
XML Web App开发 测试技术
《手把手教你》系列基础篇(七十八)-java+ selenium自动化测试-框架设计基础-TestNG依赖测试- 中篇(详解教程)
【6月更文挑战第19天】本文介绍了使用TestNG框架配置XML文件来管理测试用例的分组和依赖关系。
37 2
|
3天前
|
XML 测试技术 数据格式
软件测试之 自动化测试 基于Python语言使用Selenium、ddt、unitTest 实现自动化测试(下)
软件测试之 自动化测试 基于Python语言使用Selenium、ddt、unitTest 实现自动化测试(下)
10 3
|
3天前
|
Java 测试技术 程序员
软件测试之 自动化测试 基于Python语言使用Selenium、ddt、unitTest 实现自动化测试(上)
软件测试之 自动化测试 基于Python语言使用Selenium、ddt、unitTest 实现自动化测试(上)
14 1
|
12天前
|
Java 测试技术 Python
《手把手教你》系列基础篇(七十七)-java+ selenium自动化测试-框架设计基础-TestNG依赖测试- 上篇(详解教程)
【6月更文挑战第18天】TestNG是一个Java测试框架,它允许在测试方法间定义执行顺序和依赖关系。当不指定依赖时,TestNG默认按方法名首字母排序执行。`@Test`注解的`dependsOnMethods`属性用于指定方法依赖,如`test1`依赖`test4`,则实际执行顺序为`test4`、`test2`、`test3`、`test1`。如果依赖的方法失败,后续依赖的方法将被跳过。此外,`dependsOnGroups`属性通过组名指定依赖,方便管理多个相关测试方法。通过`groups`定义方法所属组,然后在其他方法中用`dependsOnGroups`引用这些组。
25 5