美文网首页
golang分层测试之http压测脚本编写(1)

golang分层测试之http压测脚本编写(1)

作者: 周学习的名字被占了 | 来源:发表于2020-04-28 19:27 被阅读0次

前言

  • 过了很长一段时间,最近终于有空续编golang分层测试,前面的一些文章已经讲述过关于golang的单元测试和http的接口测试,从本文就开始讲关于如何使用golang进行http接口压测,从自己编码到使用一些压测工具来讲述

多线程并发-Goroutines

  • Goroutines 可以理解为golang的微小轻量级线程,创建一个 goroutine ,只需要把 go 关键字放在函数调用语句前,就像创建了一个线程一样,但是它比线程更小,十几个goroutine可能体现在底层就是五六个线程。执行goroutine只需极少的栈内存(大概是4~5KB),当然会根据相应的数据伸缩。也正因为如此,可同时运行成千上万个并发任务。goroutine比thread更易用、更高效、更轻便
    代码如下:
package main


import (
    "fmt"
    "time"
)

//并发执行的方法
func compute(value int) {
    for i := 0; i < value; i++ {
        time.Sleep(time.Second)
        fmt.Println(i)
    }
}

func main() {
    fmt.Println("Goroutine Println")

    //启动两个goroutines 

    go compute(10)
    go compute(10)

   time.Sleep(time.Second * 1)
}
  • 这样可以尝试查看一下输出,就可以看到并行的效果,同时主线程为了等待goroutine都运行完毕,不得不在程序的末尾使用time.Sleep() 来睡眠一段时间,等待其他线程充分运行。对于简单的代码,100个for循环可以在1秒之内运行完毕,time.Sleep() 也可以达到想要的效果

使用Goroutines编写压测脚本

  • 大概了解了Goroutines之后我们就可以尝试一下编写http的并发脚本
package main

import (
    "fmt"
    "net/http"
    "strings"
    "time"
)

var(
        no =0
        ok =0 //记录请求成功失败数
        useTime = 0.0 //使用时间
        num=100 //并发个数
)

func main() {
        startTime := time.Now().UnixNano()//记录并发开始时间
        goroutinetest(num)
        endTime := time.Now().UnixNano()
        useTime = float64(endTime-startTime) / 1e9 //记录所有请求完成时间
        fmt.Println("响应成功数:",ok)
        fmt.Println("相应失败数:",no)
        fmt.Println("qps :", fmt.Sprintf("%.4f", float64(num)/useTime))
}

func goroutinetest(num int) {
        for i := 0; i < num; i++ {
            go postdata()
        }
        time.Sleep(time.Second * 1)
}

func postdata(){
    resp, err := http.Post("http://www.baidu.com", "application/x-www-form-urlencoded", strings.NewReader("id=1"))
    if err != nil {
        panic(err)
    }
    //关闭连接
    defer resp.Body.Close()

    if resp.StatusCode != 200 {no += 1}//使用响应吗作为断言
    else{ok += 1}
}
  • 使用上面的代码执行查看一下效果
go run godemotest3.go
响应成功数: 100
相应失败数: 0
qps : 99.9300
  • 简单地通过使用goroutines就能起到并发发起请求,从而起到压测的效果,goroutines作为golang并发编程的一个很核心的组件,除了我们可以使用来做压测,还有需要场景可以应用到,大家可以后期继续探究

小结

  • 压测的核心就是懂得怎么使用并发和做好阻塞,golang中goroutines是并发的扛把子,接下来的一篇文章将会讲述怎么场景化的通过golang写压测脚本,敬请期待

相关文章

  • golang分层测试之http压测脚本编写(1)

    前言 过了很长一段时间,最近终于有空续编golang分层测试,前面的一些文章已经讲述过关于golang的单元测试和...

  • golang分层测试之http压测脚本编写(2)

    前言 前一篇文已经简单讲解怎么通过goroutines的能力编写并发http压测脚本,但前文有提到过,主线程为了等...

  • 3.jmeter完成简单压测

    步骤: 1.准备压测脚本+压测数据现在测试环境调试通过,最后再上正式环境,试1条并发(保证脚本和数据没问题); 2...

  • 2018-08-30性能测试--三方协作

    测试准备-脚本和监控界面 1.环境准备: 测试工程师准备压测脚本-查询接口 找运维人员看监控数据 找研发根据压测数...

  • 性能压测学习大纲

    一、压测的目的 二、压测的完整流程 三、压测场景分析/组织测试脚本 四、压测数据准备 五、压测指标监控 七、压测结...

  • Locust压测框架实战:HTTP脚本编写

    每天进步一点点,关注我们哦,每天分享测试技术文章 本文章出自【码同学软件测试】 码同学公众号:自动化软件测试 码同...

  • Locust压测框架实战:HTTP脚本编写

    每天进步一点点,关注我们哦,每天分享测试技术文章 本文章出自【码同学软件测试】 码同学公众号:自动化软件测试 码同...

  • zookeeper-测试

    python脚本测试 压测 1.运行一个zk的压力测试容器 2.编辑配置文件 3.运行测试工具 robot脚本

  • golang分层测试之http接口测试入门

    前言 前几话主要讲解关于使用golang进行单元测试,在单元测试的上一层就是接口测试,本节主要讲使用golang进...

  • golang分层测试之http接口测试入门

    前言 本节主要讲使用golang进行接口测试,其中主要以http协议的接口测试来讲 golang中的http请求 ...

网友评论

      本文标题:golang分层测试之http压测脚本编写(1)

      本文链接:https://www.haomeiwen.com/subject/xndufhtx.html