51Testing软件测试论坛

 找回密码
 (注-册)加入51Testing

QQ登录

只需一步,快速开始

微信登录,快人一步

手机号码,快捷登录

查看: 2216|回复: 0
打印 上一主题 下一主题

[原创] 接口测试—-工具篇,实现接口自动化

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2019-3-25 15:17:43 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
接口测试—-工具篇,实现接口自动化

今天来看下接口测试的两个工具方式,目前主流的做法有两种方式—-基于代码框架的用例编写和直接使用接口测试工具,那么本篇就这两种方式都来实现一下,为了说明情况,我们实现上一篇的前两个用例:直接请求readnotes接口数据和带上登录信息请求readnotes数据。

jmeter

首先看jmeter的实现方式:
首先创建线程组,然后在线程组添加http取样器,每一个取样器就是一条用例。
打开,配置url和相对应的参数。

请求完成之后针对结果做断言

最终的目录结构和自带的报告如下:

那么可以看到,jmeter入手非常快,然后校验的也比较简单,主要是针对返回码、返回内容进行校验。


代码


利用了requests库去负责请求响应,利用unitest做结果判断,利用htmlreportrunner生成报告。

项目的结构如下:


Reports目录是生成报告的存储目录

Testcases存放测试用例

Testtools是测试相关的封装,比如里面我疯撞了pymysql的调用

点击run.py执行运行并自动生成报告。


直接跳到测试用例看下实现的用例代码:

  1. import unittest
  2. from wsgiref import headers

  3. import requests
  4. import re

  5. from testtools.MySQLHelper import SqlHelper


  6. class readnote(unittest.TestCase):

  7.     mUrl = 'http://127.0.0.1:8000/note/readnotes';

  8.     def setUp(self):
  9.         pass

  10.     def tearDown(self):
  11.         pass

  12.     def test_readnote_null(self):
  13.         '''所有参数为空'''
  14.         resp = requests.get(self.mUrl).json();
  15.         self.assertTrue(resp['code'] == 0);
  16.         self.assertTrue(resp['data'] != []);
  17.         r = SqlHelper().query('SELECT * FROM account_note WHERE public=1');
  18.         self.assertTrue(len(r) == len(resp['data']));

  19.     def test_readnote_only_token(self):
  20.         '''只填写token,获取自己的列表'''
  21.         resp = requests.get(self.mUrl,headers={'TOKEN':'1'}).json();
  22.         self.assertTrue(resp['code'] == 0);
  23.         self.assertTrue(resp['data'] != []);
  24.         r = SqlHelper().query("SELECT * FROM account_user a JOIN account_note b ON a.uid = b.uuid WHERE TOKEN='1'");
  25.         self.assertTrue(len(r) == len(resp['data']));

  26.     def test_readnote_only_uid(self):
  27.         '''只填写uid,获取用户列表'''
  28.         pass

  29.     def test_readnote_all(self):
  30.         '''参数都填写'''
  31.         pass

  32.     def test_readnote_invalidataUID(self):
  33.         '''uid不存在'''
  34.         pass

  35.     def test_readnote_invalidataToken(self):
  36.         '''token不存在'''
  37.         pass

  38.     def test_readnote_no_content(self):
  39.         '''新注册用户,无内容返回'''
  40.         pass
复制代码

通过request请求获取数据后,解析json数据,首先判断code和data,然后解析data看下具体业务返回得对不对,作为断言的判断,是根据sql查询数据库的数据对比得到的。后面的断言,jmeter要实现起来会比较繁琐,更别说维护了。


区别和选择


那么工具和代码实现,各有各的优势。


使用工具,你可以很快速的上手,学习成本比较低,很多都是现成的。同时工具往往还提供额外的功能,比如jmeter我除了用来接口自动化集成,同时也用来压测部分重要接口,缺点非常明显啦,局限性会比较大,要实现一些复杂的功能需要通过自己定制的插件实现,既然都要写代码,为何不直接用代码来验证呢?


那么使用自己编写的框架,最大的好处是灵活,更容易针对项目定制化,虽然前期投入会比较大,但是一旦完善了那么会显得非常好用,可以完成一些工具无法完成的事情,比如接口加密,环境切换,用例维护管理等等,基于这个原因,很多有一定规模的项目肯定都是采用后者的。



本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?(注-册)加入51Testing

x
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏2
回复

使用道具 举报

本版积分规则

关闭

站长推荐上一条 /1 下一条

小黑屋|手机版|Archiver|51Testing软件测试网 ( 沪ICP备05003035号 关于我们

GMT+8, 2024-11-22 21:49 , Processed in 0.072648 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2024 Comsenz Inc.

快速回复 返回顶部 返回列表