前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >快速实现接口自动化

快速实现接口自动化

作者头像
赵云龙龙
发布2020-08-25 11:22:26
7920
发布2020-08-25 11:22:26
举报
文章被收录于专栏:python爱好部落python爱好部落

前面介绍了用postman+newman做接口自动化,其实这个工具不太适合做大型的自动化测试,主要是不太方便扩展和维护。 最灵活的当然是用python来写,可是python写起来比较需要时间。 有没有一种介于这两者之间的。 我认为是有的,我觉得用jmeter来做自动化完全胜任。 它可以用各种断言,各种参数化,各种条件机制。

首先我用fiddler连接手机,设置代理,用fiddler来录制mobile接口,为啥不直接用jmeter来录制,网上搜的都说可以录制,但是用的时候,发现已经不支持手机了。以前是支持的,我还用手机录制过。

fiddler 录制完成,可以过滤掉干扰的请求,然后Click on File > Export Sessions > All Sessions > HTTP Archive 1.2.

fiddler 过滤

.js .png .gif .css .html .ico .jpg

jmeter 过滤

.*\.(bmp|css|js|gif|icov|jpeg|png|swf|woff|woff2|htm|html).*

现在关键的一步就是要将fiddler的录制文件,转换成jmeter文件了。网上都说用fiddler插件,我尝试过,发现导入到jmeter里面会报错。

Covert HAR File to .jmx File With help of Blazemeter jmx converter. 后面发现一个好网站,可以直接转换。 http://converter.blazemeter.com

转换完了以后,就可以导入到jmeter里面了。为什么用录制,因为手工添加的话,比较费时间,你也可以一个一个添加。 成功导入以后,发现它默认加了好多manager, 每个请求都有一个http header manager,以及uniform random Timer, ,以及每个请求的名字都加了host, 可以用脚本,或者手工批量删除。 然后自己加manager.

能加上的都加上去。 Header manager, 用一个全局的,可以定义请求头,例如这边是:“content-type: Application/json” User defined manager, 可以自定义全局的参数,如: host等,这样就切环境就很方便了。

Request Defaults, 就是请求的样本,只要填一个,后面所有的请求都是这个模式,比如host, schema等

cookie manager, 作用就不多说了,就是传cookie值的,有了它,你就不用操心cookie了。 cookie, session的提取

需要在第一个请求后,添加“正则表达式提取器”, 提取token,session, 作为参数,传给后面的接口。 当然,如果想看参数是否正确,可以用查看结果数来提取,

用debug sampler来打印出来。 一般情况下,都可以用“.*?”提取得到。 然后将文件里面所有相关的地方都替换掉。类似:"${variable}"

然后可以每个接口加上Response Assertion来判断接口是否正确返回:

可以设置几个错误的值,跑一下看看。

如果想提取json作为参数传递,可以用json extractor

JSON提取器说明:

Apply to:应用范围

Names of created variables :接收值的变量名,自定义,多个变量用分号分隔

JSON Path expression:json path表达式,也是用分号分隔

Match No.(0 for Random):0表示随机;n取第几个匹配值;-1匹配所有。若只要获取到匹配的第一个值,则填写1

Compute concatenation var(suffix_ALL):如果找到许多结果,则插件将使用' , '分隔符将它们连接起来,并将其存储在名为<variable name> _ALL的var中

Default Values:缺省值,匹配不到值的时候取该值,可写error。

这样一个简单的接口测试框架差不多就有雏形了。 这个还不够,我只检查了接口的状态,万一它返回的值是错的呢?所以要加一些字段校验。 右键点开Add,Assertions,就可以看到加各种assertion. 这里以json Assersion为例

当然我们获取json assertion的时候,也可以像前面正则一样,在result tree里面测试一下。 然后加一个Assertion Result,运行一下就可以知道你的assertion起作用了没有。Jmeter也可以自由的编程,用的是java, 可以加一个BeanShell Assertion来实现

这样就能自由的准备数据,或者状态。 好了,if 和for, 以及其他的参数化,就不在这里讲了。 做成这样,基本上满足要求,还不需要耗费什么时间,比写python快多了。

一个环境,或者一种业务搞定以后,剩下来的事情就简单了。可以多录制几分,然后写个python,根据不同的场景,准备不同的数据和host,然后集成到jenkins上,可以daily run, 这样就省事很多。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-08-20,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 python粉丝团 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档