前言

使用go语言做开发差不多快一年了,主要用来写后端Web服务,从一开始吐槽他的结构体,比如创建个复杂的JSON格式数据,那是相当的痛苦。还有 err 处理写的巨麻烦。

当然,go 也有爽的地方,创建个线协程简直太简单了。

到后来慢慢接受,觉得效率还行,因为是静态强类型语言,在修改完项目代码之后,反而很有信心(如果出现低级的类型错误,直接编译出错了),相比 Python 就要反复检查两边,对修改的代码总时心里发虚。

go语言测试相关的东西都不咋地,比如自带的测试框架相比较 pytest 那是相当的简陋。今年开始给后端写单元测试(其实应该叫接口测试),发现 apitest库 眼前一亮。采用链式调用,和 HttpRunner 3.x 的链式调用颇有几分相似。

HttpRunner 3.x

# httprunner 3.x

from httprunner import HttpRunner, Config, Step, RunRequest, RunTestCase

class TestCaseTestCase(HttpRunner):

config = Config("basic test config").base_url("http://127.0.0.1:8000/api")

teststeps = [

Step(

RunRequest(" test_add_event_all_null")

.post("/add_event/")

.with_data({"eid": "", "limit": "", "address": "", "start_time": ""})

.validate()

.assert_equal("body.status", 10021)

.assert_equal("body.message", "parameter error")

)

]

if __name__ == "__main__":

TestCaseTestCase().test_start()

apitest 测试库

一个简单且可扩展的行为测试库。

测试库: https://github.com/steinfletcher/apitest jsonpath库: github.com/steinfletcher/apitest-jsonpath

•简单的get接口

package api

import (

"net/http"

"testing"

"time"

"github.com/steinfletcher/apitest"

)

func Client() http.Client {

cli := &http.Client{

Timeout: time.Second * 10,

}

return *cli

}

func TestGetSample(t *testing.T) {

cli := Client()

apitest.New().

EnableNetworking(&cli).

Get("http://httpbin.org/get").

Expect(t).

Status(http.StatusOK).

End()

}

New(): 创建一个新的API测试。

EnableNetworking(): EnableNetworking为提供的客户端启用网络,需要一个 http.Clinet。

Get() 发送get 请求,需要一个URL。

Expect(): Expect将请求规范标记为完整。

Status(): 断言http状态。http.StatusOK = 200

End(): End运行测试,将结果返回给调用者。

•get接口带参数

import (

...

jsonpath "github.com/steinfletcher/apitest-jsonpath"

)

...

func TestGetParams(t *testing.T) {

cli := Client()

apitest.New().

EnableNetworking(&cli).

Intercept(func(req *http.Request) {

req.URL.RawQuery = "id=1&name=jack"

}).

Get("http://httpbin.org/get").

Expect(t).

Assert(

jsonpath.Contains(`$.args.id`, "1")).

Assert(

jsonpath.Equal(`$.args.name`, "jack")).

End()

}

req.URL.RawQuery: 用于定义get请求参数。

Assert() ,方法用于断言。

jsonpath 提供了断言方法,Contains判断包含,Equal判断相等。

•post接口Form-data参数

...

func TestPostFormData(t *testing.T) {

cli := Client()

apitest.New().

EnableNetworking(&cli).

Post("http://httpbin.org/post").

FormData("key1", "value1").

FormData("key2", "value2").

Expect(t).

Assert(

jsonpath.Chain().

Equal(`$.form.key1`, "value1").

Equal(`$.form.key2`, "value2").

End()).

End()

}

FormData() 用于设置form-Data格式的参数。

jsonpath 提供的断言同样支持链式调用。

•post接口JSON参数

...

func TestPostJson(t *testing.T) {

cli := Client()

apitest.New().

EnableNetworking(&cli).

Post("http://httpbin.org/post").

JSON(`{"message": "hi"}`).

Expect(t).

Assert(

jsonpath.Chain().

Contains(`$.data`, "message").

Contains(`$.data`, "hi").

End()).

End()

}

JSON() 用于设置JSON()请求方法。

apitest 评价

官网:https://apitest.dev/

apitest 在完成http接口测试方面还是非常方便的,如果你被 go语言的 http 库蹂躏过一段时间之后感触更深;怎么说了,比如你经常被老板PUA,突然有一天老板居然当面表扬了你,大概就这种感觉。

apitest 还提供了mock 和 report 报告,这个后续再更新吧!

              【下面是我整理的2023年最全的软件测试工程师学习知识架构体系图】

一、Python编程入门到精通

二、接口自动化项目实战

三、Web自动化项目实战

四、App自动化项目实战

五、一线大厂简历

六、测试开发DevOps体系

七、常用自动化测试工具

八、JMeter性能测试

九、总结(尾部小惊喜)

生命不息,奋斗不止。每一份努力都不会被辜负,只要坚持不懈,终究会有回报。珍惜时间,追求梦想。不忘初心,砥砺前行。你的未来,由你掌握!

生命短暂,时间宝贵,我们无法预知未来会发生什么,但我们可以掌握当下。珍惜每一天,努力奋斗,让自己变得更加强大和优秀。坚定信念,执着追求,成功终将属于你!

只有不断地挑战自己,才能不断地超越自己。坚持追求梦想,勇敢前行,你就会发现奋斗的过程是如此美好而值得。相信自己,你一定可以做到!

最后感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:

这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你!

文章链接

评论可见,请评论后查看内容,谢谢!!!
 您阅读本篇文章共花了: