一文教会你:如何使用 HttpRunner v4.0 开展性能测试

2023-10-27

在 HttpRunner v4.0 全新发布 中我们有介绍过,HttpRunner v4.0 期望成为一款专业级的一体化 API 测试工具,特别是针对性能测试能力进行了重大升级。相比于之前的版本,HttpRunner v4.0 在性能测试部分最大的优化包括如下 4 个方面:

  • 使用 Golang 重新实现了脚本执行引擎(基于 Boomer),相比于 Python Locust 极大地提升了发压能力
  • 对标 LoadRunner 新增实现了丰富的性能测试机制,包括事务、集合点、思考时间等
  • 对压测结果进行了严格的 benchmark 测试和数据校准,确保测试结果真实可靠
  • 集成了 Prometheus 性能采集能力,配合 Grafana 可实现丰富的性能指标看板

涉及的内容比较多,因此我们针对 HttpRunner v4.0 的性能测试能力规划了一系列专题文章,包括性能测试工具使用、多机负载分布式加压、监控配置、benchmark 数据比对、竞品工具对比、原理解析等等。

本文作为性能测试专题的第一篇文章,将结合一个简单的案例整体介绍如何使用 HttpRunner v4.0 开展性能测试,帮助大家快速上手使用工具。

案例介绍

为了方便大家理解,本文挑选了一个非常简单的案例场景,但同时会尽量多地覆盖常用的性能测试特性。

案例设计如下:

  • 压测目标为 3 个接口:API1/API2/API3
  • 业务层面期望整体关注 API1 + API2 的性能情况,即「事务」特性
  • 在真实场景中,API1 和 API2 请求之间需要有一个间隔时间,即「思考时间」特性
  • 期望重点关注 API3 的并发性能,即所有用户同一时间请求的情况,即「集合点」特性

接下来,我们将对这些特性进行具体介绍,并对使用方法进行演示说明。

编写测试用例

在性能测试之前,我们需要先准备好性能测试用例。在 HttpRunner 中,得益于「一体化」的特性优势,我们可以在无需对已有接口测试用例做任何修改的情况下,直接运行性能测试。

针对本文中的案例,接口测试用例如下所示:

config:
  name: load test demo
  variables:
    app_version: v1
    user_agent: iOS/10.3
  base_url: 'http://httpbin.org'
  verify: false
teststeps:
  - name: get with params
    request:
      method: GET
      url: /get
      headers:
        User-Agent: '$user_agent/$app_version'
    validate:
      - check: status_code
        assert: equals
        expect: 200
        msg: check status code
  - name: post with params
    request:
      method: POST
      url: /post
      headers:
        User-Agent: '$user_agent/$app_version'
    validate:
      - check: status_code
        assert: equals
        expect: 200
        msg: check status code
  - name: post with params 2
    request:
      method: POST
      url: /post
      headers:
        User-Agent: '$user_agent/$app_version'
    validate:
      - check: status_code
        assert: equals
        expect: 200
        msg: check status code

我们只需将测试命令从 hrp run 改为 hrp boom,即可启动性能测试,具体的参数配置后面会详细介绍。

需要说明的是:

  • HttpRunner v4.0 做性能测试时,测试用例格式只能选择 YAML/JSON/GoTest;PyTest 格式的底层引擎基于
    pytest 执行引擎,不支持性能测试;
  • 如果我们在性能测试中期望实现「事务」、「集合点」、「思考时间」等机制,需要在接口测试用例基础上添加特定的步骤。

添加「事务」机制

事务可以将多个接口的测试结果进行聚合统计,性能指标更加贴合真实业务场景。

事务的数据结构如下:

type Transaction struct {
   Name string          `json:"name" yaml:"name"` 
// 事务名称,可定义为任意字符串

   Type transactionType `json:"type" yaml:"type"` 
// 事务类型,仅包括 2 种类型,start(事务开始)和 end(结束事务)

}

事务使用示例:

config:
  ...
teststeps:
  ...
  - name: transaction 1 start
    transaction:
      name: tran1
      type: start
  ...
  - name: transaction 1 end
    transaction:
      name: tran1
      type: end
  ...

针对「事务」机制,有 2 个需要特别注意的点:

使用 HttpRunner v4.0 执行性能测试时,会自动添加名称为 Action 的事务,该事务包含整个测试用例的所有测试步骤(参考了 LoadRunner 的做法)

在测试用例中,transaction 应该成对出现,即必须同时定义 start 和 end;如果存在配对缺失的情况,会按照如下逻辑进行处理:

仅设置开始事务,则会在测试用例最后一个测试步后添加结束事务

仅设置结束事务,则会在测试用例第一个测试步前添加开始事务

添加「集合点」机制

集合点可以确保指定的虚拟用户在同一时刻发起请求,实现类似” 秒杀 “的真实业务场景。

集合点的数据结构如下:

type Rendezvous struct {
   Name           string  `json:"name" yaml:"name"`
   Percent        float32 `json:"percent,omitempty" yaml:"percent,omitempty"`
   Number         int64   `json:"number,omitempty" yaml:"number,omitempty"`
   Timeout        int64   `json:"timeout,omitempty" yaml:"timeout,omitempty"`
}

集合点数据结构参数说明如下:

  • name: 集合点名称,可定义为任意字符串
  • percent: 触发集合点释放的虚拟用户百分比,范围为 (0, 1],默认为 1,即全部用户
  • number: 触发集合点释放的虚拟用户数量,范围为 (0, N],N 为当前性能测试的所有并发用户数
  • timeout:
    虚拟用户到达集合点之间的间隔时间的最大值,单位为毫秒;当最近两个虚拟用户达到集合点的时间间隔大于最大值,则立即释放所有虚拟用户,如果没有指定,默认值为
    5000 ms

集合点使用示例:

config:
  ...
teststeps:
  ...
  - name: rendezvous 1
    rendezvous:
      name: rendezvous1
      number: 50
      timeout: 3000
  ...
  - name: rendezvous 2
    rendezvous:
      name: rendezvous2
      percent: 0.8
      timeout: 3000
  ...

针对「集合点」机制,有 2 个需要特别注意的点:

number 和 percent 参数需要二选一并且保证合法;如果没有指定参数、同时指定了两个参数、或者参数不合法,则默认为需要全部虚拟用户到达集合点。

集合点仅在虚拟用户全部加载完之后的稳定阶段生效。

可以看出,HttpRunner v4.0 的「集合点」机制也跟 LoadRunner 保持了一致,功能特性和参数配置方法完全相同。

添加「思考时间」机制

思考时间可以模拟用户在不同操作间的停顿时间,最大程度还原用户真实的操作行为。

思考时间的数据结构如下:

type ThinkTimeConfig struct {
   Strategy thinkTimeStrategy `json:"strategy,omitempty" yaml:"strategy,omitempty"`
   Setting  interface{}       `json:"setting,omitempty" yaml:"setting,omitempty"`
   Limit    float64           `json:"limit,omitempty" yaml:"limit,omitempty"`
}

type ThinkTime struct {
   Time float64 `json:"time" yaml:"time"`
}

其中,ThinkTimeConfig 作为「思考时间」的整体策略,需要在测试用例的 Config 中配置,参数说明如下:

Strategy (支持如下四种策略)

default: 默认策略,会保持测试用例中设置的思考时间

random_percentage: 测试用例中设置的思考时间在指定放缩区间中随机选值

multiply: 对测试用例中设置的思考时间进行放缩

ignore: 忽略测试用例中设置的思考时间

Setting (仅需 random_percentage、multiply 策略下配置,其他模式自动忽略此设置)

random_percentage:此策略下,需设置思考时间的最小最大放缩比:min_percentage、max_percentage(设置类型为 map),默认: [0.5, 1.5]

multiply:此策略下,直接设置放缩比例(设置类型为 float),默认: 1

Limit

对所有策略有效,如果设置且大于 0,则限制最终的思考时间<=设定值,默认: -1(无限制)

ThinkTime 作为具体步骤间的「思考时间」配置,以单独的 step 存在,参数说明如下:

time: 不同测试步间的思考时间,单位为秒(second)

思考时间使用示例如下:

config:
  ...
  think_time:
    strategy: random_percentage
    setting:
      min_percentage: 1
      max_percentage: 1.5
    limit: 4
  ...
teststeps:
  ...
  - name: think time 1
    think_time:
      time: 2
  ...
  - name: think time 2
    think_time:
      time: 3
  ...

在该示例中,思考时间策略为随机比例(random_percentage),介于 100% ~ 150% 之间;limit 设置为 4s。经过换算,测试步骤中的 think time 1 的最终值在 [2, 3] s 之间,think time 2 的最终值在 [3, 4] s 之间。

用例格式示例
经过对已有的接口测试用例进行增强,我们获得了包含「事务」、「集合点」、「思考时间」机制的性能测试用例。

YAML 用例格式的示例如下所示:

config:
  name: load test demo
  variables:
    app_version: v1
    user_agent: iOS/10.3
  base_url: 'http://httpbin.org'
  think_time:
    strategy: random_percentage
    setting:
      min_percentage: 1
      max_percentage: 1.5
    limit: 2
  verify: false
teststeps:
  - name: transaction 1 start
    transaction:
      name: tran1
      type: start
  - name: get with params
    request:
      method: GET
      url: /get
      headers:
        User-Agent: '$user_agent,$app_version'
    validate:
      - check: status_code
        assert: equals
        expect: 200
        msg: check status code
  - name: transaction 1 end
    transaction:
      name: tran1
      type: end
  - name: think time 1
    think_time:
      time: 1.5
  - name: post with params
    request:
      method: POST
      url: /post
      headers:
        User-Agent: '$user_agent,$app_version'
    validate:
      - check: status_code
        assert: equals
        expect: 200
        msg: check status code
  - name: rendezvous 1
    rendezvous:
      name: rendezvous1
      percent: 0.8
      timeout: 3000
  - name: post with params 2
    request:
      method: POST
      url: /post
      headers:
        User-Agent: '$user_agent,$app_version'
    validate:
      - check: status_code
        assert: equals
        expect: 200
        msg: check status code

对应的 GoTest 用例格式示例如下:

package tests

import (
   "testing"
   "time"

   "github.com/httprunner/httprunner/v4/hrp"
)

func TestLoadTestDemo(t *testing.T) {
   testcase1 := &hrp.TestCase{
      Config: hrp.NewConfig("Load Test Demo").
         SetBaseURL("http://httpbin.org").
         SetThinkTime(
            "random_percentage",
            map[string]float64{"min_percentage": 1, "max_percentage": 1.5},
            4),
      TestSteps: []hrp.IStep{
         hrp.NewStep("transation 1 start").
            StartTransaction("trans1"),
         hrp.NewStep("headers").
            GET("/headers").
            Validate().
            AssertEqual("status_code", 200, "check status code").
            AssertEqual("headers.\"Content-Type\"", "application/json", "check http response Content-Type"),
         hrp.NewStep("transation 1 end").
            EndTransaction("trans1"),
         hrp.NewStep("think time1").
            SetThinkTime(3),
         hrp.NewStep("user-agent").
            GET("/user-agent").
            Validate().
            AssertEqual("status_code", 200, "check status code").
            AssertEqual("headers.\"Content-Type\"", "application/json", "check http response Content-Type"),
         hrp.NewStep("rendezvous 1").
            SetRendezvous("rend1").
            WithUserPercent(0.8).
            WithTimeout(3000),
         hrp.NewStep("TestCaseRef").
            CallRefCase(&hrp.TestCase{Config: hrp.NewConfig("TestCase2")}),
      },
   }

   b := hrp.NewStandaloneBoomer(1000, 100) 
//spawn_count: 1000, spawn_rate: 100

   go b.Run(testcase1)
   time.Sleep(1000 * time.Second) 
//expected running time

   b.Quit()
}

性能测试参数配置

准备好性能测试用例后,我们就可以开始执行性能测试了。

当前 HttpRunner v4.0 支持多种性能测试策略,我们可以在命令行参数中进行指定。

关于性能测试的参数信息,可以通过 hrp boom -h 进行查看。

$ hrp boom --help
run yaml/json testcase files for load test

Usage:
  hrp boom [flags]

Examples:
  $ hrp boom demo.json        # run specified json testcase file
  $ hrp boom demo.yaml        # run specified yaml testcase file
  $ hrp boom examples/        # run testcases in specified folder

Flags:
      --cpu-profile string              Enable CPU profiling.
      --cpu-profile-duration duration   CPU profile duration. (default 30s)
      --disable-compression             Disable compression
      --disable-console-output          Disable console output.
      --disable-keepalive               Disable keepalive
  -h, --help                            help for boom
      --loop-count int                  The specify running cycles for load testing (default -1)
      --max-rps int                     Max RPS that boomer can generate, disabled by default.
      --mem-profile string              Enable memory profiling.
      --mem-profile-duration duration   Memory profile duration. (default 30s)
      --prometheus-gateway string       Prometheus Pushgateway url.
      --request-increase-rate string    Request increase rate, disabled by default. (default "-1")
      --spawn-count int                 The number of users to spawn for load testing (default 1)
      --spawn-rate float                The rate for spawning users (default 1)

Global Flags:
      --log-json           set log to json format
  -l, --log-level string   set log level (default "INFO")

如果你之前使用过 Locust/Boomer,你会发现参数名称很眼熟。是的,我们直接复用了 Locust/Boomer 的参数名称,虽然底层实现进行了比较大的改造,但用法基本保持了一致,你可以对比查看下 Boomer 的参数文档。

参数看上去比较多,接下来对其按照用途进行分组介绍。

设置 RateLimiter

有时我们需要在性能测试时对发压流量进行限流,例如期望设置最大 RPS,或者在初始化并发用户时限定增加数率。这就需要使用到 --max-rps 和 --request-increase-rate。

  • max-rps:限制 hrp 发压的最大 rps,默认不限制
  • request-increase-rate:限制 hrp 每秒的请求增加速率,默认不开启,支持两种格式:“1”、“1/1s”

具体示例如下所示:

$ hrp boom testcase.yml --spawn-count 100 --spawn-rate 100 --max-rps 1000 --request-increase-rate 100
在该示例中,我们指定了 100 并发用户,按照每秒 100 个的速率初始化用户,预计在 1s 后可完成初始化。同时,我们限制在整个压测过程中,hrp 最高只能发压 1000 RPS,同时限定每秒增加的速率为 100 RPS。

如果你对这块儿感到比较懵,没有关系,你暂时只需要知道这里使用了「令牌桶」的算法对发压流量实现了限流处理。后面我们会专门写一篇文章详细介绍这部分的使用方法和机制原理。

设置循环次数

除了手动控制压测时长外,HttpRunner v4.0 还支持按照指定的循环次数执行压测,可通过 --loop-count 参数进行指定。

需要说明的是,HttpRunner v4.0 执行循环次数的逻辑参考的是 JMeter,所有虚拟用户均会运行指定的循环次数,即当次压测的整体运行次数为:spawn-count * loop-count。

执行如下命令,执行完指定循环次数后,HttpRunner 将结束运行并打印整体测试数据。

$ hrp boom testcase.yml --spawn-count 100 --spawn-rate 10 --loop-count 1000

在该示例中,我们指定了 100 个并发用户,每个用户循序运行 1000 次,预计总共运行 100*1000=10w 次。

执行性能测试

配置好命令行参数后,即可开始执行性能测试。在性能测试过程中,我们可以通过两种方式查看到性能测试结果数据。

命令行终端

性能测试过程中,hrp 每隔 3s 会打印一次性能数据,其中汇总了 3s 内的所有请求情况。结果样式如下:

Current time: 2022/05/16 03:33:26, Users: 1000, State: running, Total RPS: 533.7, Total Average Response Time: 436.8ms, Total Fail Ratio: 0.0%
Accumulated Transactions: 16176 Passed, 3 Failed
+--------------+--------------------+------------+---------+--------+---------+------+-------+--------------+------------+-------------+
|     TYPE     |        NAME        | # REQUESTS | # FAILS | MEDIAN | AVERAGE | MIN  |  MAX  | CONTENT SIZE | # REQS/SEC | # FAILS/SEC |
+--------------+--------------------+------------+---------+--------+---------+------+-------+--------------+------------+-------------+
| request-GET  | get with params    |        799 |       0 |    320 |  432.20 |  273 |  1854 |          266 |     266.33 |        0.00 |
| request-POST | post with params   |        156 |       0 |    280 |  388.44 |  272 |  3633 |          358 |      52.00 |        0.00 |
| request-POST | post with params 2 |        799 |       1 |    400 |  594.02 |  275 | 30000 |          357 |     266.33 |        0.33 |
| transaction  | tran1              |        799 |       0 |    320 |  432.37 |  273 |  1854 |            0 |     266.33 |        0.00 |
| transaction  | Action             |        799 |       1 |   4100 | 4939.17 | 3198 | 35450 |            0 |     266.33 |        0.33 |
+--------------+--------------------+------------+---------+--------+---------+------+-------+--------------+------------+-------------+

针对打印的指标说明如下:

在这里插入图片描述
注:表格内皆为统计间隔 (3s) 内的性能指标数据

完成性能测试时,会打印整体测试数据,结果样式如下:

=========================================== Statistics Summary ==========================================
Current time: 2022/05/16 03:33:38, Users: 1000, Duration: 57s, Accumulated Transactions: 20947 Passed, 3 Failed
+-------+------------+---------+--------+---------+-----+-------+--------------+------------+-------------+
| NAME  | # REQUESTS | # FAILS | MEDIAN | AVERAGE | MIN |  MAX  | CONTENT SIZE | # REQS/SEC | # FAILS/SEC |
+-------+------------+---------+--------+---------+-----+-------+--------------+------------+-------------+
| Total |      31182 |       2 |    300 |  436.70 | 268 | 30003 |          325 |     547.05 |        0.04 |
+-------+------------+---------+--------+---------+-----+-------+--------------+------------+-------------+

Statistics Summary 展示的是性能测试整个过程中的总体指标数据;指标说明与上面表格一致,只额外增加了一个指标。

在这里插入图片描述

查看性能监控

除了在终端中查看性能测试过程和结果汇总数据之外,我们还可以通过配置 Prometheus + Grafana 看板,实现 Web 化的实时监控指标展示。

效果如下所示:

在这里插入图片描述

限于篇幅,关于 Prometheus + Grafana 的性能监控配置方面的内容,将在下一篇文章《如何使用 HttpRunner v4.0 开展性能监控》中详细进行介绍。

结语

通过以上示例,我们使用 HttpRunner v4.0 完成了一次性能测试操作实践,相信大家应该对 HttpRunner v4.0 的性能测试使用方法有了一个整体的认识。

欢迎大家多多实践,如果在使用过程中遇到任何问题,欢迎通过各种渠道进行反馈,我们将及时进行跟进和解答,并基于大家的反馈进行迭代优化。

接下来,我们将连载介绍 HttpRunner v4.0 的更多性能测试功能特性,敬请期待。

最后: 可以在公众号:伤心的辣条 ! 自行领取一份216页软件测试工程师面试宝典文档资料【免费的】。以及相对应的视频学习教程免费分享!,其中包括了有基础知识、Linux必备、Shell、互联网程序原理、Mysql数据库、抓包工具专题、接口测试工具、测试进阶-Python编程、Web自动化测试、APP自动化测试、接口自动化测试、测试高级持续集成、测试架构开发测试框架、性能测试、安全测试等。

学习不要孤军奋战,最好是能抱团取暖,相互成就一起成长,群众效应的效果是非常强大的,大家一起学习,一起打卡,会更有学习动力,也更能坚持下去。你可以加入我们的测试技术交流扣扣群:914172719(里面有各种软件测试资源和技术讨论)

喜欢软件测试的小伙伴们,如果我的博客对你有帮助、如果你喜欢我的博客内容,请 “点赞” “评论” “收藏” 一键三连哦!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

一文教会你:如何使用 HttpRunner v4.0 开展性能测试 的相关文章

  • RF自动化环境安装+自动化实例解析

    RF定义 通用型的 自动测试框架 绝大部分的软件的的自动化系统都可以采用它 特点 测试数据文件 Test Data 对应一个个的测试用例 测试数据文件里面使用的功能小模块叫关键字 由测试库 Test Library Robot Framew
  • 测试开发必知:有Tomcat,为什么还要Nginx?

    只用Tomcat 不用Nginx搭建Web服务 行不行 我曾经提出的愚蠢问题 今天详细给自己解释下 为什么必须用Nginx 不用Nginx 只用Tomcat的Http请求流程 浏览器处理一个Http请求时 会首先通过DNS服务器找到域名关联
  • 软件测试|使用Python轻松裁剪视频

    简介 裁剪视频是在视频编辑和处理中常见的任务之一 Python提供了多种库和工具 可以用来裁剪视频 在本文中 我们将详细讨论如何使用Python来裁剪视频 并提供示例代码 步骤1 环境准备 首先 我们要安装必要的Python库 我们将使用
  • 软件测试|使用matplotlib绘制平行坐标系图

    简介 绘制平行坐标系图 Parallel Coordinates Plot 是一种用于可视化多维数据的强大方法 在这篇文章中 我们将介绍如何使用Matplotlib库创建平行坐标系图 以及如何解释和定制这种图表 我们将使用一个示例数据集来演
  • 软件测试|sqlalchemy relationship

    简介 SQLAlchemy是一个流行的Python ORM 对象关系映射 库 它允许我们以面向对象的方式管理数据库 在SQLAlchemy中 relationship 是一个重要的功能 用于建立表之间的关系 在本文中 我们将详细探讨 rel
  • 软件测试|教你如何使用Python绘制出奥运五环旗

    简介 我们之前介绍过使用turtle来绘制正多边形 但是绘制正多边形只是turtle模块最基础的使用 我们可以使用turtle模块绘制出更多不一样的精彩图形 本文就来给大家介绍一个比较简单的turtle绘图实例 绘制奥运五环旗 初始化参数
  • 盲猜你不懂H5架构和原生架构的区别

    2024软件测试面试刷题 这个小程序 永久刷题 靠它快速找到工作了 刷题APP的天花板 CSDN博客 文章浏览阅读2 3k次 点赞85次 收藏11次 你知不知道有这么一个软件测试面试的刷题小程序 里面包含了面试常问的软件测试基础题 web自
  • Python自动化测试 | 如何使用Robot Framework进行自动化测试?

    2024软件测试面试刷题 这个小程序 永久刷题 靠它快速找到工作了 刷题APP的天花板 CSDN博客 文章浏览阅读2 3k次 点赞85次 收藏11次 你知不知道有这么一个软件测试面试的刷题小程序 里面包含了面试常问的软件测试基础题 web自
  • 跨平台UI自动化框架:Airtest,游戏开发和应用测试的利器

    2024软件测试面试刷题 这个小程序 永久刷题 靠它快速找到工作了 刷题APP的天花板 CSDN博客 文章浏览阅读2 3k次 点赞85次 收藏11次 你知不知道有这么一个软件测试面试的刷题小程序 里面包含了面试常问的软件测试基础题 web自
  • Jmeter 性能-阶梯负载最终请求数

    2024软件测试面试刷题 这个小程序 永久刷题 靠它快速找到工作了 刷题APP的天花板 CSDN博客 文章浏览阅读2 3k次 点赞85次 收藏11次 你知不知道有这么一个软件测试面试的刷题小程序 里面包含了面试常问的软件测试基础题 web自
  • 摸爬滚打多年的打工人,总结了三条职场真理,绝不假大空!

    2024软件测试面试刷题 这个小程序 永久刷题 靠它快速找到工作了 刷题APP的天花板 CSDN博客 文章浏览阅读2 3k次 点赞85次 收藏11次 你知不知道有这么一个软件测试面试的刷题小程序 里面包含了面试常问的软件测试基础题 web自
  • 探索自动化测试断言:提升测试效率与质量的关键!

    前言 断言在自动化测试中起着关键的作用 它是验证测试结果是否符合预期的重要手段 如果在自动化测试过程中忽视了断言 那么这个测试就失去了其本质的意义 因为我们无法得知测试结果是否达到了预期的效果 因此 断言在自动化测试中的重要性不言而喻 那么
  • 2024拒绝行业内卷!八年软件测试20K*16薪行业心得 想入行必看

    目前工作做软件测试工作8年 属于高级测试员那个级别吧 现在看到各行各业的人都在转行学习软件测试 想给大家一些学习建议和忠告 很多粉丝都跟我说今年行情很差 找不到工资 真的找不到工作了吗 我们常在网上看到的 程序员饱和 程序员过剩 其实一般是
  • 如何打赢稳定性之战?

    文章目录 前言 为什么总会出现问题呢 如何证明你的稳定性做的有效果 既是持久战 也是防御战 1 提前建筑好防御工事 2 以攻为守 3 找外部支援和配合 前言 随着23年年末期间 各大厂争先恐后的出现的各种线上
  • 一文让你了解UI自动化测试

    测试都起什么作用 是项目的保险 但不是项目的救命草 测试无实际产出 但作用远大于实际产出 测试是从项目维度保证质量 而不是测试阶段 UI自动化 下面简称自动化 基于UI进行自动功能测试 以Web端作为例子 一般的UI功能自动化都是基于HTM
  • 外包干了2个月,技术倒退2年。。。

    先说一下自己的情况 本科生 20年通过校招进入深圳某软件公司 干了接近4年的 功能测试 今年国庆 感觉自己不能够在这样下去了 长时间呆在一个舒适的环境会让一个人堕落 而我已经在一个企业干了四年的功能测试 已经让我变得不思进取 谈了3年的女朋
  • UI自动化测试之Jenkins配置

    背景 团队下半年的目标之一是实现自动化测试 这里要吐槽一下 之前开发的测试平台了 最初的目的是用来做接口自动化测试和性能测试 但由于各种原因 接口自动化测试那部分功能整个废弃掉了 其中和易用性有很大关系 另外 也和我们公司的接口业务也有关
  • C# Break 和 Continue 语句以及数组详解

    C Break 它被用于 跳出 switch 语句 break 语句也可用于跳出循环 以下示例在 i 等于 4 时跳出循环 示例 for int i 0 i lt 10 i if i 4 break Console WriteLine i
  • 软件测试面试:还没有自动化测试项目经验,3个项目帮你走入软测职场!

    2024软件测试面试刷题 这个小程序 永久刷题 靠它快速找到工作了 刷题APP的天花板 CSDN博客 文章浏览阅读2 3k次 点赞85次 收藏11次 你知不知道有这么一个软件测试面试的刷题小程序 里面包含了面试常问的软件测试基础题 web自
  • 用Python实现高效数据记录!Web自动化技术助你告别重复劳动!

    自动化关键数据记录 简介 关键数据记录是 Web 自动化测试中的关键部分 它们提供了关于系统行为和执行过程的详细信息 有助于验证用例的正确性 排查问题和确保应用程序的质量 行为日志 行为日志是一种用于记录系统或应用程序的操作和事件的技术 它

随机推荐

  • Cannot read properties of undefined (reading ‘install‘)

    把vue rotuer的版本降低 我降低为了 3 5 4 然后终端重新跑代码
  • 对于开源软件的审查(有无后门等)

    最近公司申请安服资质 让我帮忙写个对开源软件的审查方法 就随便编了以下 如有补充还请各位扶正 其实我觉得他们为啥不怀疑windows有问题呢 非黑客攻击行为安全工具 此类工具通常为辅助测试工具 不具备直接攻击行为 且通常具有官方来源 例如
  • 开源SOLOv2,让动态实例分割更快更强更精准

    作者 介绍 作者建立一个性能强大的简单 通过动态学习对象分割器的蒙版头 使蒙版头以位置为条件 进一步提升性能 具体来说 将遮罩分支解耦为遮罩内核分支和遮罩特征分支 分别负责学习卷积内核和卷积特征 利用矩阵NMS 非最大抑制 以显着减少由于掩
  • 【七夕特辑】用python来实现跳动爱心+爱心心电图+玫瑰花+.....

    前言 什么 明天七夕 学了这么久的python 还写不出来给 对象或者心动Crush 的一个表白代码 还得是我来帮你们准备几个吧 有去年比较火的跳动爱心 也有其他的 来看看 挑选一下 领取代码后 不要忘记发给人家了 emmm先来给你们都看一
  • selenium4 自动化测试--环境安装和基础操作

    最近也有很多人私下问我 selenium学习难吗 基础入门的学习内容很多是3以前的版本资料 对于有基础的人来说 3到4的差别虽然有 但是不足以影响自己 但是对于没有学过的人来说 通过资料再到自己写的代码 发现有些东西没有 有些方法又不相同
  • html给后台发送请求,10分钟学会——前端如何通过AJAX向后端发送请求

    AJAX 基于现有的internet标准 XMLHttpRequest 对象 异步的与服务器交换数据 JavaScript DOM 信息显示 交互 CSS 给数据定义样式 XML 作为转换数据的格式 GET请求 异步请求 来自服务器的响应并
  • 热门前端工具链宣布放弃 TypeScript!

    近日 前端工具链 Turbo 宣布将在 8 0 版本放弃 TypeScript 三个月前 前端框架 Svelte 宣布将在 4 0 版本从 TypeScript 切换到使用 JSDoc 的 JavaScript 如今 又一大前端工具 Tur
  • 安装了pyintaller后出现:‘pyinstaller‘ 不是内部或外部命令,也不是可运行的程序或批处理文件。

    2023年7月31日 周一上午 我昨天晚上也遇到了这个问题 后来解决了 目录 出错原因 解决方法 怎么找到Scripts文件夹 出错原因 出现这个错误是因为你没给python的Scripts文件夹添加环境变量 Scripts存放着pip安装
  • git提交代码

    1 先决条件 代码是repo下来的 代码修改完毕 进入自己修改代码的模块下 git checkout b sprdroid2 3 vlx 3 0 korg 分支名 每个git仓库只用执行一次此命令 以后提交时不用敲此命令 git statu
  • linux中用crontab命令定时执行scrapy项目

    进入文件所在目录 为了保证此方法可行 我先在所在的目录创建一个测试小demo的脚本 想知道如何执行scrapy项目可以直接跳到后面 vi test sh 编写一个每分钟往当前文件中的test txt中写入111的脚本 编写crontab命令
  • Flutter实现圆形头像的几种方法

    Flutter的ClipRect的使用场景 ClipRect可以用来裁剪容器内部的子元素 以避免超出容器的范围而溢出 常见的应用场景有 将一个图像裁剪成不同形状 如圆形 方形 椭圆等 将一个复杂的控件裁剪成更容易理解的形状 裁剪过大的图片或
  • 基于Transformers的自然语言处理入门【十】-机器翻译

    基于Transformers的自然语言处理入门 十 机器翻译 1 机器翻译背景 2 机器翻译模型训练 1 机器翻译背景 机器翻译 是指使用计算机将一种自然语言转换为另一种自然语言的过程 这里 自然语言是指日常使用的人类语言 如中文 英语 区
  • Java反射的底层原理,以及Java反射的性能分析及优化

    java的反射技术 号称是编程界的九阳神功 也可以说是框架的灵魂 也正是这种反射机制使静态语言的java具备了动态语言的某些特质 就是有了反射 才让java动态 编程的时候更加灵活 能够动态获取信息以及动态调用对象方法 其实 Java基础技
  • 27. 生成CSV文件

    CSV Comma Separated Values 文件中文件字符分隔值 CSV文件以纯文本形式存储表格数据 数字和文本 可以被常见制表工具 excel等 直接读取 目录 1 生成CSV 2 结合django使用csv 2 1 方案1 2
  • vue预渲染prerender-spa-plugin-next 和 vue-meta-info

    prerender spa plugin next实现方法 const defineConfig require vue cli service const PrerenderSPAPlugin require prerender spa
  • 人脸人体同时检测

    from os path import join 6 sets train test trainval val head person glasses hat face mask face 7 classes head person gla
  • SpringMVC常用注解笔记

    SpringMVC常用注解 1 请求映射注解 1 1 Controller注解 6 2 RequestMapping注解 1 3 GetMapping和 PostMapping注解 2 参数绑定注解 2 1 RequestParam注解 2
  • storybook添加全局样式与sass全局变量设置

    storybook组件需要全局样式 只需在 storybook preview js 增加全局样式即可 import src style index scss export const parameters actions argTypes
  • 微型计算机控制理论基础答案,微型计算机控制技术试卷c

    微型计算机控制技术试卷a 潘新民 微型计算机控制技术实用教程 微型计算机控制技术试卷C 一 选择题 本题共10小题 每小题 1 5分 共15分 1 DAC0832的VREF接 5V IOUT1接运算放大器异名端 输入为1000000B 输出
  • 一文教会你:如何使用 HttpRunner v4.0 开展性能测试

    在 HttpRunner v4 0 全新发布 中我们有介绍过 HttpRunner v4 0 期望成为一款专业级的一体化 API 测试工具 特别是针对性能测试能力进行了重大升级 相比于之前的版本 HttpRunner v4 0 在性能测试部