接口测试—-工具篇,实现接口自动化
2017-08-11 16:58
417 查看
接口测试—-工具篇,实现接口自动化
今天来看下接口测试的两个工具方式,目前主流的做法有两种方式—-基于代码框架的用例编写和直接使用接口测试工具,那么本篇就这两种方式都来实现一下,为了说明情况,我们实现上一篇的前两个用例:直接请求readnotes接口数据和带上登录信息请求readnotes数据。
工具:使用的是jmeter
代码:使用的是python的unittest + requests + htmlreportrunner方式(https://github.com/CloudHuan/pyapitest)
首先创建线程组,然后在线程组添加http取样器,每一个取样器就是一条用例。
打开,配置url和相对应的参数。
请求完成之后针对结果做断言
最终的目录结构和自带的报告如下:
那么可以看到,jmeter入手非常快,然后校验的也比较简单,主要是针对返回码、返回内容进行校验。
项目的结构如下:
Reports目录是生成报告的存储目录
Testcases存放测试用例
Testtools是测试相关的封装,比如里面我疯撞了pymysql的调用
点击run.py执行运行并自动生成报告。
直接跳到测试用例看下实现的用例代码:
通过request请求获取数据后,解析json数据,首先判断code和data,然后解析data看下具体业务返回得对不对,作为断言的判断,是根据sql查询数据库的数据对比得到的。后面的断言,jmeter要实现起来会比较繁琐,更别说维护了。
使用工具,你可以很快速的上手,学习成本比较低,很多都是现成的。同时工具往往还提供额外的功能,比如jmeter我除了用来接口自动化集成,同时也用来压测部分重要接口,缺点非常明显啦,局限性会比较大,要实现一些复杂的功能需要通过自己定制的插件实现,既然都要写代码,为何不直接用代码来验证呢?
那么使用自己编写的框架,最大的好处是灵活,更容易针对项目定制化,虽然前期投入会比较大,但是一旦完善了那么会显得非常好用,可以完成一些工具无法完成的事情,比如接口加密,环境切换,用例维护管理等等,基于这个原因,很多有一定规模的项目肯定都是采用后者的。
今天来看下接口测试的两个工具方式,目前主流的做法有两种方式—-基于代码框架的用例编写和直接使用接口测试工具,那么本篇就这两种方式都来实现一下,为了说明情况,我们实现上一篇的前两个用例:直接请求readnotes接口数据和带上登录信息请求readnotes数据。
工具:使用的是jmeter
代码:使用的是python的unittest + requests + htmlreportrunner方式(https://github.com/CloudHuan/pyapitest)
jmeter
首先看jmeter的实现方式:首先创建线程组,然后在线程组添加http取样器,每一个取样器就是一条用例。
打开,配置url和相对应的参数。
请求完成之后针对结果做断言
最终的目录结构和自带的报告如下:
那么可以看到,jmeter入手非常快,然后校验的也比较简单,主要是针对返回码、返回内容进行校验。
代码
利用了requests库去负责请求响应,利用unitest做结果判断,利用htmlreportrunner生成报告。项目的结构如下:
Reports目录是生成报告的存储目录
Testcases存放测试用例
Testtools是测试相关的封装,比如里面我疯撞了pymysql的调用
点击run.py执行运行并自动生成报告。
直接跳到测试用例看下实现的用例代码:
import unittest from wsgiref import headers import requests import re from testtools.MySQLHelper import SqlHelper class readnote(unittest.TestCase): mUrl = 'http://127.0.0.1:8000/note/readnotes'; def setUp(self): pass def tearDown(self): pass def test_readnote_null(self): '''所有参数为空''' resp = requests.get(self.mUrl).json(); self.assertTrue(resp['code'] == 0); self.assertTrue(resp['data'] != []); r = SqlHelper().query('SELECT * FROM account_note WHERE public=1'); self.assertTrue(len(r) == len(resp['data'])); def test_readnote_only_token(self): '''只填写token,获取自己的列表''' resp = requests.get(self.mUrl,headers={'TOKEN':'1'}).json(); self.assertTrue(resp['code'] == 0); self.assertTrue(resp['data'] != []); r = SqlHelper().query("SELECT * FROM account_user a JOIN account_note b ON a.uid = b.uuid WHERE TOKEN='1'"); self.assertTrue(len(r) == len(resp['data'])); def test_readnote_only_uid(self): '''只填写uid,获取用户列表''' pass def test_readnote_all(self): '''参数都填写''' pass def test_readnote_invalidataUID(self): '''uid不存在''' pass def test_readnote_invalidataToken(self): '''token不存在''' pass def test_readnote_no_content(self): '''新注册用户,无内容返回''' pass
通过request请求获取数据后,解析json数据,首先判断code和data,然后解析data看下具体业务返回得对不对,作为断言的判断,是根据sql查询数据库的数据对比得到的。后面的断言,jmeter要实现起来会比较繁琐,更别说维护了。
区别和选择
那么工具和代码实现,各有各的优势。使用工具,你可以很快速的上手,学习成本比较低,很多都是现成的。同时工具往往还提供额外的功能,比如jmeter我除了用来接口自动化集成,同时也用来压测部分重要接口,缺点非常明显啦,局限性会比较大,要实现一些复杂的功能需要通过自己定制的插件实现,既然都要写代码,为何不直接用代码来验证呢?
那么使用自己编写的框架,最大的好处是灵活,更容易针对项目定制化,虽然前期投入会比较大,但是一旦完善了那么会显得非常好用,可以完成一些工具无法完成的事情,比如接口加密,环境切换,用例维护管理等等,基于这个原因,很多有一定规模的项目肯定都是采用后者的。
相关文章推荐
- java实现自动化测试接口访问(三)--查询书籍的api接口
- Ant+Jmeter+Jenkins实现接口测试自动化
- java实现自动化测试接口访问(四)--Postman参数化
- 接口自动化·分享·第三篇·单接口的批量测试如何实现
- 接口测试-自动化-Java实现-CommonClass
- Python 简易实现接口测试自动化
- Jmeter实现接口自动化测试
- 使用postMan实现接口测试以及接口自动化回归测试(http协议)
- Ant+Jmeter+Jenkins实现接口测试自动化
- Python 简易实现接口测试自动化
- Ant+Jmeter+Jenkins实现接口测试自动化
- 利用Fitnesse实现SOA架构的接口测试自动化
- java实现自动化测试接口访问(二)--Http登录授权接口实例
- java实现自动化测试接口访问(一)
- linux下使用ant+Jmeter+Jenkins实现接口测试自动化
- 接口测试-自动化-Java实现-TestMain
- 接口测试-自动化-Java实现-InterfaceTest
- 集成 Jenkins 和 TestNG 实现自助式自动化测试平台
- Jmeter实现WebSocket协议的接口和性能测试方法