searchusermenu
  • 发布文章
  • 消息中心
点赞
收藏
评论
分享
原创

自动化测试框架及简单实践

2023-06-16 07:09:18
127
0

一、自动化测试框架

1.1自动化测试与自动化测试框架

自动化测试是指通过自动化工具对软件应用程序进行各种测试。技术角度而言,自动化测试框架是一组定制的、用来执行脚本化测试和全面报告测试结果的交互式组件。

1.2测试级别

可以在不同的测试级别编写自动化测试,如单个函数或类、集成组件组、整个系统等。

单元测试(Unit Tests)是对单个功能或类进行测试,单元测试应该尽可能详尽并覆盖所有代码路径。单元测试通常是数据驱动的风格——定义多组输入参数和预期输出,再迭代测试每个输入/输出对。

集成测试(Integration Tests)是测试可独立工作的系统但愿与其他单元的代码交互。集成测试不用详尽测试输入输出,而是侧重于测试该单元如何通过事务流进行交互(单元间的依赖关系)。

系统测试(System Tests)是在类似生产环境中测试整个系统,用于发现仅在生产环境中才会出现的问题。

除此之外,还有性能测试/性能测试(Stress Tests)。

1.3自动化测试框架类型

二、Go自动化测试

2.1单元测试

testing标准库

Go语言提供了标准库testing用于单元测试和性能测试。在针对Go代码的单元测试中,主要有以下规则:

表 1 testing要点

名称

说明

依赖

import testing

命令

在待测脚本目录下执行go test命令

测试文件名

必须以_test.go结尾

功能测试用例函数

必须以Test开头,并且是大驼峰写法

性能测试用例函数

必须以Benchmark开头,并且是大驼峰写法

功能测试参数

*testing.T

性能测试参数

*testing.B

记录测试信息

命令go test默认情况不会记录,需要显式使用go test -v

测试控制

通过t.Error、t.Errorf、t.FailNow、t.Fatal、t.FatalIf等进行断言。

t.Log(“***”)、t.Logf(“***”):用于日志输出。

t.Fail():标记用例失败,但仍继续执行当前用例。

t.FailNow():标记用例失败并立即停止执行当前用例,执行下一个用例。

t.Error():等价于Log+Fail。

t.Errorf():等价于Logf+Fail。

t.SkipNow():标记跳过并停止执行该用例,继续执行下一用例。

t.Skip():等价于Log+SkipNow。

t.Skipf():等价于Logf+SkipNow。

t.Skipped():返回用例是否被跳过。

性能测试

命令go test默认情况不会进行性能测试,需要显式使用go test -test.bench

go test参数解读

go test [-c] [-i] [build/test flags] [packages] [build/test flags & test binary flags]

-c:编译go test为可执行二进制文件,但不测试。

-i:安装测试包依赖的package,但不测试。

build flags:编译运行过程中使用的参数,可以go help build查看。

packages:关于包管理,可以go help packages查看。

-test.v:输出全部单元用例测试记录。默认情况只输出失败的单元测试用例。

-test.run pattern:只跑哪些单元测试用例。

-test.bench pattern:只跑哪些性能测试用例。

-test.benchmem:在压测时输出内存情况。

-test.cpuprofile cpu.out:输出cpu性能分析文件。

-test.memprofile mem.out:输出内存性能分析文件。

-test.parallel n:压测的并行cpu数,默认等于GOMAXPROCS。

-test.timeout t:若用例运行时间超过t,则抛出panic。

Goconvey库

Testify库

testing标准库在进行断言和错误信息输出时需要自己编写各种条件判断,再根据结果决定输出对应的信息。而Testify提供了很多函数可以做断言和错误信息输出,核心内容有:

  • assert:断言
  • mock:测试替身
  • suite:测试套件

2.2 集成测试

单元测试多为数据驱动且详尽的,而集成测试侧重于一系列调用组合。Go静态类型使得构建模拟变得困难。解决方法可以有面向接口、mock依赖的解决方案。在敏捷软件开发中,测试驱动开发和行为驱动开发是常使用的方法和设计方法论。

测试驱动开发(TDD)是指开发先根据功能规范编写自动化测试,然后通过仅添加使测试通过的代码来实现功能。

行为驱动开发(BDD)是通过自然语言定义系统行为,从使用者角度编写需求场景,这些行为描述可以直接形成需求文档和测试标准。BDD更关注需求的功能而非实际结果。

Ginkgo是Go的BDD测试框架,集成了Go原生库。Ginkgo还和断言、mock套件testify、富测试集go-check兼容。Ginkgo的建议是和gomega库一起使用。

Ginkgo概览

Ginkgo常见功能如下图所示,其主要模块为Describe、Context、It、BeforeEach、AfterEach、JustBeforeEach、JustAfterEach 、BeforeSuite、AfterSuite、By、Fail。

Ginkgo实践

步骤1:配置Goland

步骤2:下载Ginkgo和Gomega

步骤3:安装Ginkgo

步骤4:使用Ginkgo

三、Python自动化测试

3.1测试框架

Unittest/PyUnit

Unittest是python标准库自带的单元测试框架,也被称为pyunit。

Nose/nose2

nose是第三方单元测试框架,完全兼容unittest。

Pytest

三者对比

四、自动化:Golang vs Python

要点

Golang

Python

自动发现用例

testing、goconvey支持

unittest、nose、pytest均支持

指定用例执行

testing、goconvey支持

unittest、nose、pytest均支持

支持assert断言

testing使用官方断言+条件判断;

goconvey使用内置断言;

ginkgo使用内置断言+gomega断言。

unittest < nose < pytest

支持fixture

ginkgo支持

unittest、nose、pytest均支持

fixture种类

ginkgo支持前置和清理

unittest、nose支持前置和清理;

pytest还支持自定义fixture。

fixture生效级别

ginkgo:suite、class、case

unittest、nose:case、class、module;

pytest:case、class、module、package、session。

支持用例跳过或预计失败

goconvey:通过skipConvey、SkipSo方法。

ginkgo:通过X、F、P前缀。

unittest、nose、pytest均支持

子测试

--

unittest、nose、pytest均支持

测试结果导出

testing默认在终端打印TXT报告,另需要依赖三方库goreporter、go-test-report生成测试报告;

goconvey同上,另外支持Web界面测试报告;

ginkgo一般生成Junit XML测试报告。

unittest、nose、pytest均可以,pytest更鲜明。

插件

一般常见的有,但是没有python丰富。

unittest、nose一般,pytest丰富。

钩子

--

pytest支持。

社区生态

--

unittest官方维护,nose活跃度低,pytest活跃度高。

针对go语言的单元测试,go具有自己的标准单元测试库testing进行功能测试和性能测试。目前,基于testing的自动化测试在断言和结果判断的处理上会很复杂。而testify库提供了丰富且编写简单的断言函数,可以在自动化测试中使用testify库;此外,testify库还提供了suite来构建测试套件、http来测试http服务器,也支持简单的mock来模拟测试数据。但是testify暂未形成一个明确的框架,在实际使用中仍多使用它的断言功能。goconvey库也提供了断言函数,并且提供了测试用例包裹函数,除了命令行方式,goconvey库还提供Web界面方式,比较友好。在简单实践时感觉goconvey整体仍然比较简单,没有提供相应的测试套件、测试脚手架(fixture),因此可以用做单元测试,但并不适合做集成测试。

针对go的集成测试自动化有ginkgo框架,该框架目前是k8s进行端到端测试使用。结合ginkgo和gomega库能够提供完整的测试例编写、断言、测试例标签(X\F\P)、测试结果导出(Junit的XML格式)。此外还调研了python的自动化框架,目前针对go自动化测试框架并没有像python一样拥有较为丰富的插件体系,测试结果的导出格式一般为Junit XML格式。

以上是基于go和python的自动化测试框架相关知识。

0条评论
0 / 1000
WhoFM
2文章数
0粉丝数
WhoFM
2 文章 | 0 粉丝
WhoFM
2文章数
0粉丝数
WhoFM
2 文章 | 0 粉丝
原创

自动化测试框架及简单实践

2023-06-16 07:09:18
127
0

一、自动化测试框架

1.1自动化测试与自动化测试框架

自动化测试是指通过自动化工具对软件应用程序进行各种测试。技术角度而言,自动化测试框架是一组定制的、用来执行脚本化测试和全面报告测试结果的交互式组件。

1.2测试级别

可以在不同的测试级别编写自动化测试,如单个函数或类、集成组件组、整个系统等。

单元测试(Unit Tests)是对单个功能或类进行测试,单元测试应该尽可能详尽并覆盖所有代码路径。单元测试通常是数据驱动的风格——定义多组输入参数和预期输出,再迭代测试每个输入/输出对。

集成测试(Integration Tests)是测试可独立工作的系统但愿与其他单元的代码交互。集成测试不用详尽测试输入输出,而是侧重于测试该单元如何通过事务流进行交互(单元间的依赖关系)。

系统测试(System Tests)是在类似生产环境中测试整个系统,用于发现仅在生产环境中才会出现的问题。

除此之外,还有性能测试/性能测试(Stress Tests)。

1.3自动化测试框架类型

二、Go自动化测试

2.1单元测试

testing标准库

Go语言提供了标准库testing用于单元测试和性能测试。在针对Go代码的单元测试中,主要有以下规则:

表 1 testing要点

名称

说明

依赖

import testing

命令

在待测脚本目录下执行go test命令

测试文件名

必须以_test.go结尾

功能测试用例函数

必须以Test开头,并且是大驼峰写法

性能测试用例函数

必须以Benchmark开头,并且是大驼峰写法

功能测试参数

*testing.T

性能测试参数

*testing.B

记录测试信息

命令go test默认情况不会记录,需要显式使用go test -v

测试控制

通过t.Error、t.Errorf、t.FailNow、t.Fatal、t.FatalIf等进行断言。

t.Log(“***”)、t.Logf(“***”):用于日志输出。

t.Fail():标记用例失败,但仍继续执行当前用例。

t.FailNow():标记用例失败并立即停止执行当前用例,执行下一个用例。

t.Error():等价于Log+Fail。

t.Errorf():等价于Logf+Fail。

t.SkipNow():标记跳过并停止执行该用例,继续执行下一用例。

t.Skip():等价于Log+SkipNow。

t.Skipf():等价于Logf+SkipNow。

t.Skipped():返回用例是否被跳过。

性能测试

命令go test默认情况不会进行性能测试,需要显式使用go test -test.bench

go test参数解读

go test [-c] [-i] [build/test flags] [packages] [build/test flags & test binary flags]

-c:编译go test为可执行二进制文件,但不测试。

-i:安装测试包依赖的package,但不测试。

build flags:编译运行过程中使用的参数,可以go help build查看。

packages:关于包管理,可以go help packages查看。

-test.v:输出全部单元用例测试记录。默认情况只输出失败的单元测试用例。

-test.run pattern:只跑哪些单元测试用例。

-test.bench pattern:只跑哪些性能测试用例。

-test.benchmem:在压测时输出内存情况。

-test.cpuprofile cpu.out:输出cpu性能分析文件。

-test.memprofile mem.out:输出内存性能分析文件。

-test.parallel n:压测的并行cpu数,默认等于GOMAXPROCS。

-test.timeout t:若用例运行时间超过t,则抛出panic。

Goconvey库

Testify库

testing标准库在进行断言和错误信息输出时需要自己编写各种条件判断,再根据结果决定输出对应的信息。而Testify提供了很多函数可以做断言和错误信息输出,核心内容有:

  • assert:断言
  • mock:测试替身
  • suite:测试套件

2.2 集成测试

单元测试多为数据驱动且详尽的,而集成测试侧重于一系列调用组合。Go静态类型使得构建模拟变得困难。解决方法可以有面向接口、mock依赖的解决方案。在敏捷软件开发中,测试驱动开发和行为驱动开发是常使用的方法和设计方法论。

测试驱动开发(TDD)是指开发先根据功能规范编写自动化测试,然后通过仅添加使测试通过的代码来实现功能。

行为驱动开发(BDD)是通过自然语言定义系统行为,从使用者角度编写需求场景,这些行为描述可以直接形成需求文档和测试标准。BDD更关注需求的功能而非实际结果。

Ginkgo是Go的BDD测试框架,集成了Go原生库。Ginkgo还和断言、mock套件testify、富测试集go-check兼容。Ginkgo的建议是和gomega库一起使用。

Ginkgo概览

Ginkgo常见功能如下图所示,其主要模块为Describe、Context、It、BeforeEach、AfterEach、JustBeforeEach、JustAfterEach 、BeforeSuite、AfterSuite、By、Fail。

Ginkgo实践

步骤1:配置Goland

步骤2:下载Ginkgo和Gomega

步骤3:安装Ginkgo

步骤4:使用Ginkgo

三、Python自动化测试

3.1测试框架

Unittest/PyUnit

Unittest是python标准库自带的单元测试框架,也被称为pyunit。

Nose/nose2

nose是第三方单元测试框架,完全兼容unittest。

Pytest

三者对比

四、自动化:Golang vs Python

要点

Golang

Python

自动发现用例

testing、goconvey支持

unittest、nose、pytest均支持

指定用例执行

testing、goconvey支持

unittest、nose、pytest均支持

支持assert断言

testing使用官方断言+条件判断;

goconvey使用内置断言;

ginkgo使用内置断言+gomega断言。

unittest < nose < pytest

支持fixture

ginkgo支持

unittest、nose、pytest均支持

fixture种类

ginkgo支持前置和清理

unittest、nose支持前置和清理;

pytest还支持自定义fixture。

fixture生效级别

ginkgo:suite、class、case

unittest、nose:case、class、module;

pytest:case、class、module、package、session。

支持用例跳过或预计失败

goconvey:通过skipConvey、SkipSo方法。

ginkgo:通过X、F、P前缀。

unittest、nose、pytest均支持

子测试

--

unittest、nose、pytest均支持

测试结果导出

testing默认在终端打印TXT报告,另需要依赖三方库goreporter、go-test-report生成测试报告;

goconvey同上,另外支持Web界面测试报告;

ginkgo一般生成Junit XML测试报告。

unittest、nose、pytest均可以,pytest更鲜明。

插件

一般常见的有,但是没有python丰富。

unittest、nose一般,pytest丰富。

钩子

--

pytest支持。

社区生态

--

unittest官方维护,nose活跃度低,pytest活跃度高。

针对go语言的单元测试,go具有自己的标准单元测试库testing进行功能测试和性能测试。目前,基于testing的自动化测试在断言和结果判断的处理上会很复杂。而testify库提供了丰富且编写简单的断言函数,可以在自动化测试中使用testify库;此外,testify库还提供了suite来构建测试套件、http来测试http服务器,也支持简单的mock来模拟测试数据。但是testify暂未形成一个明确的框架,在实际使用中仍多使用它的断言功能。goconvey库也提供了断言函数,并且提供了测试用例包裹函数,除了命令行方式,goconvey库还提供Web界面方式,比较友好。在简单实践时感觉goconvey整体仍然比较简单,没有提供相应的测试套件、测试脚手架(fixture),因此可以用做单元测试,但并不适合做集成测试。

针对go的集成测试自动化有ginkgo框架,该框架目前是k8s进行端到端测试使用。结合ginkgo和gomega库能够提供完整的测试例编写、断言、测试例标签(X\F\P)、测试结果导出(Junit的XML格式)。此外还调研了python的自动化框架,目前针对go自动化测试框架并没有像python一样拥有较为丰富的插件体系,测试结果的导出格式一般为Junit XML格式。

以上是基于go和python的自动化测试框架相关知识。

文章来自个人专栏
WhoFM
2 文章 | 1 订阅
0条评论
0 / 1000
请输入你的评论
1
0