接口测试—-工具篇,实现接口自动化
今天来看下接口测试的两个工具方式,目前主流的做法有两种方式—-基于代码框架的用例编写和直接使用接口测试工具,那么本篇就这两种方式都来实现一下,为了说明情况,我们实现上一篇的前两个用例:直接请求readnotes接口数据和带上登录信息请求readnotes数据。
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我除了用来接口自动化集成,同时也用来压测部分重要接口,缺点非常明显啦,局限性会比较大,要实现一些复杂的功能需要通过自己定制的插件实现,既然都要写代码,为何不直接用代码来验证呢?
那么使用自己编写的框架,最大的好处是灵活,更容易针对项目定制化,虽然前期投入会比较大,但是一旦完善了那么会显得非常好用,可以完成一些工具无法完成的事情,比如接口加密,环境切换,用例维护管理等等,基于这个原因,很多有一定规模的项目肯定都是采用后者的。
|