在说接口测试之前,我们先来探讨整个环境,而在不同的环境中会采用不同的方式进行接口测试。
我所待的公司测试分为如下几个环境
环境
|
适用人群
|
作用
|
开发环境
|
前端开发,后端开发
|
1.前后端用来联调适用
2.开发在开发环境进行冒烟测试
|
测试环境
|
功能测试人员
|
1.功能测试人员进行集成测试
2.系统演示
|
性能测试环境
|
性能测试人员
|
性能测试
|
预发布环境
|
PM
|
验收测试
|
生产环境
|
客户
|
适用
|
基本上QA介入最多的测试还是在测试环境中测试。自动化测试,接口测试报告基本上也是基于此得出。但是实际上对于整个测试来说,实际上是整个环,哪个环节少了都有极大的风险。那么对于生产环境的接口测试应该如何进行呢。
我们先来分析进行生产环境测试的目的
1. 保证线上的接口处于可用,接口没有报错
2. 知晓单个用户访问单个接口的耗时
3. 保证版本发布以后能够快速知晓测试结果
4. 保证能够时时知道接口情况,及时处理
基于此种目的,写了一个小的解决方案来解决达到以上目的。
首先,我们的测试是不能影响线上的数据,不能往生产环境添加脏数据,那么在此种情况下,采用post,put,delete方式的接口我们都不在程序里维护,只维护了采用get方式的接口,这样既不会影响线上的数据也能知晓某些接口的情况。整个解决方案使用的语言是PYTHON,使用到的工具有JENKINS,环境部署主要是在LINUX系统中。
整体思路为,读取csv里所维护的接口,得到url,通过python的requests框架,发送请求,得到返回码和接口耗时,接口返回500和耗时超过1s,判断此case失败。收集到所有的接口,将接口分为成功的和失败,失败的接口标红,成功的接口标蓝,将得到的测试结果给所有的测试组成员发送测试报告。将此程序集成到jenkins中,再在jenkins中设置为每隔一个小时跑一次脚本,每隔一小时可以得到结果。将此脚本写为htttp接口,供devops调用,devops部署脚本完成以后调用此接口,能够立马得到结果。
以下为每一部分的代码实现。
为了使整个程序具有可扩展性,接口的维护都放在了csv文件里,csv格式如下,假设有新的接口需要在生产环境中被检测,只需要往csv文件里添加数据即可。
读取csv文件,并得到url,desc,发送请求得到返回码和接口耗时,并判断接口测试是否通过。这里主要运用python的csv和request框架
得到了所有的返回列表,发送邮件。主要是python的smtplib框架
通过flask框架,将此作为一个http接口,供devops调用
将此脚本与jenkins集成,达到保证能够时时知道接口情况,及时处理目的。设置日程表
通过以上方式,就可完成达到目的。
在实际运用中发现了一个在测试和性能测试环境中未发现的问题,提前发现了一个在生产环境中未建立索引的问题。有三个接口在生产耗时超过了10s,接口直接返回了500.通过分析得出,在DEMO和性能测试环境中的数据量和生产环境的数据量不一致,导致在生产环境中的耗时直接超过了10s,
事实上,还可以通过对比每个版本的返回值,如果v1和v2的返回值不一致,这样就可以快速的判断是否版本问题导致的不一致。