背景:公司原架构使用的是ruby作为后台开发语言,数据库为pgsql,为适应大数据后台发展方向,后台重构向java语言转型,采用springboot微服务框架,数据库方面也需要迁移到mysql,其他组件包括zk+redis+nginx(反向代理静态资源+API),后台接口设计及实现;由于模块涉及接口比较多,如果每次改动或者迭代发版,需要大量手动回归测试----于是解放双手---走向自动化。
1、框架选型,工具类或者开发语言类,考虑因素不是某个人来负责这一块接口自动化的框架搭建及脚本编写、用例设计、及执行,需要测试团队乃至研发团队都能使用。
建议:优先采用工具类框架,适合大众,也是基于技能水平能力的考虑,同时方便大家共同维护和交流,后续或因为学习或不满足当前需求时,再向语言类框架转换,所以设计要比较灵活。
2、JMeter在做接口自动化测试方面,网络提供了比较多的解决方案,同时对于测试或者公司团队,都是应该熟练并且掌握的技能,除此外开源项目支持二次开发满足需求。
3、用例设计与脚本分离,使用csv数据文件管理用例,如果涉及一些配置文件或者其他参数,也可以通过txt来保存,或是使用工具本身的参数化原件来完善脚本。
接口自动化测试的根本:接口文档,目前公司项目采用swagger自动生成接口文档:对于下面的描述,第4点参数的描述严重缺失,只提供了参数类型:
(1)接口名称。标识各个接口的简单说明,如登录接口,获取项目 详情接口等。
(2)接口 URL。接口的调用地址,在测试环境下前面的域名可能不 一样,不过接口名是不会变的。
(3)调用方式。接口的调用方式:Post/Get 方式,决定了如何调用 接口及传递参数。
(4) 参数。接口需要传递的参数,参数需要增加些儿说明:
(a)参数值类型说明:参数值要说明一下,只支持字母,数 据,特殊字符或是字母数据混搭。
(b)参数长度说明:参数接收最大多少个的字符串,或是最 大是多少的数值等。
(c)参数取值范围:像枚举型的参数,只接收什么范围内的 数据,如 1-5 等。
(d)参数的配合说明:有些儿参数需要配合起作用的,如: offset 和 count 参数。
(e)参数是必需的还是非必需的。
(5)返回值。接口的返回值说明需要包含正确和错误的情况,正确 的情况下有哪儿数据,错误的情况下会有什么提示?
(6)其他的一些儿说明。上面的说明是通用的,还有其他的一些儿 说明,如必须是登录状态调用,或是版本号等说明,在某些儿 情况下也需要说明一下。
4、jmeter脚本+用例等数据文件,进行git代码仓库托管,最后与Jenkins集成,实现一键执行发送邮件报告等自动化操作。
5、其中会考虑maven或者是ant,初步意向maven,如此选择是不想在服务器另外部署jmeter及ant环境,如有外部jar包,mvn直接注册即可使用,毕竟maven是做项目管理,可以通过eclipse开发并打包jar处理。
tips:虽然ant的build文件会让脚本结构执行步骤更加清晰,但是maven的pom文件也同样可以实现。有一个ant的优势所有脚本的报告生成同一个html.
6、设计用例表头:用例id| 标题| 描述| 请求方法| 请求uri| 请求参数| 期望结果| 实际结果| sql1| sql2| 是否断言,isAssert考虑并不是所有接口都需要做断言。
case_id |
title |
desc |
method |
request_uri |
params |
expect |
actual |
sql1 |
sql2 |
isAssert |
7、有個問題,儅csv測試用例數據量遞增或者格式變化,每次打開編寫都需要調整格式,且保存的還不是正確的編碼,會導致jmeter讀取參數出現亂碼,想通過源碼二次開發,支持excel讀取。
已经解决,下载通用的excel版本,可以保存csv utf-8格式的csv数据文件
8、業務邏輯:支持在測試時,入參數據實時動態变化,但只限於正常用例,異常流暫時通過經驗或調試數據,給出一定的異常數據,確保一定異常,有一個問題可能會導致結果有失敗記錄。
tips:自动化测试用例的设计,高内聚低耦合,不建议硬编码.
9、準備測試數據,入參設計參數化,通過sql從數據庫撈取數據,替換入參,需要if條件判斷及beanshell脚本實現替換操作。
封装成通用方法,来减少脚本的大小.
10、斷言,後置數據處理,如果是数据寫入,斷言則需要獲取請求的參數拿去數據查詢對比,如果是接口獲取數據,則需要sql撈取數據與返回的數據對比。是否需要斷言,根據接口複雜度評估。
封装json提取器然后再做一个断言结果处理:jsonAssert通用类
11、報告輸出,通過jmeter的xsl模板將執行生成的xml報告生成html報告,概要或是詳細報告。方便集成jenkins报告展示,即对项目涉众发送报告邮件.
12、Jenkins集成實現一鍵托管,拉取脚本執行生成報告并發送郵件通知。
环境搭建详见:Jenkins集成maven+jmeter接口自动化测试框架