Java知识分享网 - 轻松学习从此开始!    

Java知识分享网

Java1234官方群25:java1234官方群17
Java1234官方群25:838462530
        
SpringBoot+SpringSecurity+Vue+ElementPlus权限系统实战课程 震撼发布        

最新Java全栈就业实战课程(免费)

springcloud分布式电商秒杀实战课程

IDEA永久激活

66套java实战课程无套路领取

锋哥开始收Java学员啦!

Python学习路线图

锋哥开始收Java学员啦!
当前位置: 主页 > Java文档 > Java基础相关 >

基于pytest和JMeter的自动化测试系统设计和实现


分享到:
时间:2020-04-14 17:35来源:http://www.java1234.com 作者:小锋  侵权举报
基于pytest和JMeter的自动化测试系统设计和实现 PDF 下载
失效链接处理
基于pytest和JMeter的自动化测试系统设计和实现  PDF 下载

本站整理下载:
 
相关截图:
 
主要内容:
0 引 言
自动化测试是软件测试未来的发展方向,自动
化测试中往往会遇到测试脚本管理困难、测试效率
低等问题[1-4]。如何选用合适的测试工具和搭建有
效的测试框架是测试工程师一直在研究的问题。
JMeter 作为一种功能丰富的测试工具受到了广泛关
注和研究[2-5]。Apache JMeter 是一个基于 Java 语言
的开源工具,可以用于软件的功能测试和性能测试。
在被测系统功能越来越多,结构越来越复杂的今天,
测试用例往往非常庞大,一个回归测试就需要几十
或上百 个 JMeter 脚本组成的测试集。单 纯 使 用
JMeter 时会存在以下问题。 ( 1) 测试用例的管理。JMeter 本身不提供测试
集的管理功能,多个 JMeter 脚本的执行一般需要测
试人员手动整理出测试计划中应该包含的测试用
例。手动在命令行启动 JMeter 命令,并在发生错误
时进行人工排查,达不到一键执行和无人值守。 ( 2) 大量脚本的执行效率问题。JMeter 自带远
程执行功能只是针对一个脚本中的多个步骤并行,
不支持多个 JMeter 脚本的并行执行。需要实现多
个测试用例的并行执行时,需要自行编写复杂的调
度程序或者测试人员人工介入。前者成本较高,后
者无法实现完全的自动化。
本文设计并实现了一种基于 pytest 的自动化测
试系统,具有如下特点: ( 1) 充分利用 pytest 本身的功能和丰富的插件,
只需编写少量代码、简单轻量、可以快速部署。 ( 2) 实现了多 JMeter 脚本的管理,可以一键执
行测试集,并在脚本执行中自动进行异常重试,实现
了无人值守。 ( 3) 进行远程分布式执行,使得在遇到测试资
源瓶颈时,快速进行测试执行机的横向扩展来提高
测试计划的执行效率。 ( 4) 自动生成 JUnit 格式报告,可以方便的与持
续集成系统进行集成,生成各种测试报告和图表。 1 基于 pytest 的自动化测试系统
1.1 pytest
pytest 是基于 Python 语言的一种自动化测试框
架,本身具有 Python 语言的良好的跨平台性和简单
易上手的优点[6-9]。pytest 可以用于单元测试或功
能测试,相比其它测试框架,具有以下优点: ( 1) 简单灵活,容易上手。 ( 2) 支持测试用例的参数化。 ( 3) 能支持简单的单元测试和复杂的功能测试。 ( 4) 具有较多第三方插件,并可以自定义扩展。 ( 5) 执行测试过程中可将某些测试跳过,或对
某些预期失败的用例标记成失败。 ( 6) 支持多种格式的测试报告,可很好地与持
续系统集成。
基于上述优点,pytest 已经成为 Python 中最流
行的测试框架之一。
1.2 系统结构介绍
该框架主要分为 4 个模块,自动化测试系统结
构如图 1 所示。
!"#$ %& ’() *+,- ./#$ 0123
!"#45
6( 78 9:;<
’()=>
$%&’#()#
* + ,-#()#
,-=>
./? 0123
=> ./?
./? 图 1 分布式自动化测试系统结构图
Fig. 1 Structure diagram of distributed automated testing system
( 1) 初始化模块。用于读取配置文件,获取测
试要执行的各种参数; 从 Git 仓库拉取最新的 JMeter
脚本文件,转换脚本文件为 pytest 的测试用例参数;
建立与测试执行机的 SSH 连 接,同 步 要 执 行 的
JMeter 脚本到各个测试执行机; 在测试执行机上创
建子进程等待测试任务的分配。 ( 2) 任务调度模块。根据调度算法,分配测试
脚本到不同的执行机上的子进程。 ( 3) 测试执行模块。在子进程中执行测试脚
本,通过解析 JMeter 生成的 xml 格式的报告,判断测
试执行是否成功。 ( 4) 报告收集模块。将所有测试执行机生成的
多个测试脚本的报告收集回调度机,生成整个测试
计划的报告。
1.3 基于 pytest 的自动化测试流程
本文的自动化测试系统工作流程如图 2 所示。 ( 1) 调用入口程序触发一次测试计划的执行,
进行测试计划配置文件的读取,得到要执行的脚本
Git 仓库地址和测试用例目录、测试环境等参数,并
启动 pytest 主程序。
!"#$ %&’(
)* +,-.*
/012
3456
%&78 9:-.4;
9:<=>?
@$AB
!"#!$%&’
()* #$*-.
+,"!"-CD
E-.*/FG
HI#$012
J()*KL
+."!"-CD’#
$*
M.(/’)!"#!
0NOPQRST
UVWBX
YZ 1 2 2 1 图 2 自动化测试流程图
Fig. 2 Flow chart of automated testing
( 2) conftest.py 作为 pytest 主程序的默认参数化
文件。本系统在其中实现了测试用例的获取和转
换。包括遍历测试目录、得到测试脚本的名称和路
径、排除不执行的用例 ( skip case 和 known error
case) 、组成 pytest 需要的参数化变量。 ( 3) pytest 主进程开始执行,首先从调度机同步
需要执行的测试脚本文件到各个执行机,进行测试
任务的调度和分发。 ( 4) 测试执行机启动 JMeter 进程,执行 JMeter
脚本,并通过解析 xml 判断是否执行成功。为了排
除测试环境不稳定造成的测试失败,本系统实现了
失败重跑机制,即每个测试有一个最大重试次数,当
测试失败时,会判断是否已经达到最大的重试次数。
当没有达到时,会对测试用例进行重复执行,取成功
的一次执行作为最终结果,直到达到最大重试次数。
实践表明,这种机制可以降低测试环境不稳定时测
试结果的误报率。另外,为了防止单个测试用例执
行时间过长导致整个测试计划执行时间过长,本系
统实现了超时结束机制,即设置单个测试用例执行
时间的最大值,当某个测试用例的执行时间超过这
个最大值时,杀掉当前测试用例的子进程,并标记测
试结果为失败。 ( 5) 所有用例执行完成时,由调度机收集在测
试执行机上生成的测试用例报告,并合并多个测试
用例报告为整个测试计划的汇总报告。
1.4 自动化测试系统的主要技术
1.4.1 用例的管理
通过使用 pytest 的参数化用例方法实现 JMeter
脚本到 pytest 测试用例的转变。由 pytest 实现测试

 

------分隔线----------------------------

锋哥公众号


锋哥微信


关注公众号
【Java资料站】
回复 666
获取 
66套java
从菜鸡到大神
项目实战课程

锋哥推荐