Loading

实践Jmeter + ant + jenkins自动化框架

什么是自动化

通过一些自动化测试工具或自己造轮子实现模拟之前人工点点/写写的工作并验证其结果完成整个测试过程,这样的测试过程,便是自动化测试。

但其实每一个自动化测试的case都是从手工测试做起的,如果没有手工测试的基础,是没法进行自动化测试。(艺术源于生活)

为什么要做接口自动化

#1 自动测试的收益和手工测试的成本

接口自动化主要不是为了发现bug,而是为了节省成本和提高效率

1、回归和冒烟

2、持续集成

3、尽早发现bug

4、保证版本的稳定性

#2 不足之处

1、维护成本比较高

2、还是得依赖手工测试,很多问题无法发现

3、不是所有系统功能都适合做自动化

 

什么是框架 

定义:为解决某些特定问题而约束边界,支撑整个问题解决方案,配套了一些解决问题的组件而构成的工具。(一位叫老_张博主的见解)

特定问题:什么问题?——自动化测试

约束边界:为什么约束?——明确测试范围和目的

解决方案:用什么方案解决问题?——编程语言+工具+其他

构成工具的组件:哪些组件?—— 用例、脚本、数据、日志、报告、通知

工具:特点是什么?—— 灵活性、可扩展性、高内聚低耦合

 

接口自动化需要的功能

1、校验(验证接口返回结果的正确性)

2、数据隔离(参数化、解耦)

3、数据传递(数据依赖)

4、可配置(多个环境下运行,好切换)

5、执行日志(帮助定位解决问题)

6、可视化报告(展示结果)

7、持续集成(可以每日构建,提前发现问题)

 

推荐常见框架对比

①、python + request + pytest + jenkins + mysql——数据驱动,比较灵活,很好封装,但是需要掌握python和pytest(很推荐)

②、Robot Framework + python——关键字驱动,上手难度较高(python,开发关键字)

③、Jmeter + ant/maven + jenkins——上手相对上面两个简单,可视化界面(完全支持java,不友好)

 框架都有共通点:编程语言/接口工具+扫描编译工具+持续集成工具+数据库+项目管理工具

编程语言/接口工具:编写测试脚本,要么工具,要么代码;

扫描编译工具:要测试的文件扫描编译,一般配合集成工具使用;

持续集成工具:jenkins;

数据库:测试数据管理;

项目管理工具:测试结果统计管理;

 

搭建Jmeter + ant + jenkins框架(基于linux)

原理逻辑:jenkins驱动ant执行,ant驱动jmeter执行

 

 

 

①、 环境准备
linux上安装jmeter、ant、jenkins
ant安装:
jenkins安装:
jmeter安装:
②、ant调用jmeter脚本(通过ant命令)
1)在linux服务器上创建好目录和文件,这里以119为例:
uncleyong
    --jmeter_script
    --result
        --html
        --jtl
    --build.xml
build.xml是ant的核心文件,html放html结果,jtl放jtl结果

 

 

2)将Jmeter安装目录下extras子目录里的ant-jmeter-1.1.1.jar复制到ant的lib目录下,这样ant到时运行才能调用到jmeter。
3)配置ant编译文件build.xml
 
具体修改如下内容:

 

 

 

 

 

 

4)下载优化测试报告模板:jmeter.results.shanhe.me.xsl
5)修改jmeter的配置文件jmeter.propeties。设置需要输出的内容为true。
 

 

 

6)在bulid.xml目录,执行ant命令,如图就说明成功。

 

 

7)查看测试报告

 

 

③、 ant调用jmeter脚本(通过jenkins)

1)系统设置——全局工具配置:ant

 

 

2)安装ant插件:

 

 3)新建任务,配置

 

 

4)构建

 

Jmeter脚本设计编写

主要思路:

通用配置:数据库连接,常用信息配到全局变量,

测试脚本:一个接口一个线程组一个csv测试数据文件一个邮件通知

测试数据:csv文件

断言:json断言(需要站我jsonPath语法)、beanshell断言(掌握java)、响应断言

 

 

 

 

 

 实践碰到的问题:

1、一个接口读取csv文件参数化时,读取csv文件出错
原因:必定是csv文件编码或内容有问题,仔细检查
 
2、jmeter批量执行脚本实现方案
》一个一个脚本编写好,所有接口想用一个csv文件数据分离;
》一个脚本编写好,【一个接口用一个csv文件数据分离 】,还是或者一个模块一个csv文件数据分离
 
3、读取csv文件,请求参数中文内容乱码;但是直接取样器上请求参数中文(不读取csv)不会乱码
excel编辑好保存为csv文件(是ISO-8859),需要转下编码;csv文件只要一改动,就会又变回以前的编码
 
 
4、批量执行脚本数据关联怎么做?
 
5、多重断言,请求后查询数据库字段比较
 
6、执行接口前做些前置操作(清空表数据)
目前先执行下JDBC Request,做下truncate【一个JDBC,只能执行一个SQL】
 
7、用例是否执行,加入逻辑控制器判断
  
8、beanshell断言
json的话,需要下载json.jar包放到lib目录下,
多个请求响应body里分别获取不同的字段,断言——beanshell断言脚本已实现
 
 
9、编写csv文件,先在excel里编写好,然后另存为csv文件,然后再把内容复制到新建的一个csv文件里(处理编码)
 
10、有用例失败时发出邮件通知,附上测试结果报告,成功时不发(目前)
 
邮件内容:执行了什么接口,用例成功多少,失败多少,本次的测试结果报告
 
 

目前可见待优化问题和挑战:

框架优化:

1、邮件发送的实现

2、数据关联

 

项目:

1、接口文档变动及时通知

总结

核心:要做就要让接口自动化落地实施,这是最重要的。(做了才会有问题,坑,才能优化解决)
posted @ 2020-07-09 20:48  doro测试笔记  阅读(359)  评论(0)    收藏  举报