python 利用toapi库自动生成api


Posted in Python onOctober 19, 2020

在学习做接口测试自动化的时候,我们往往会自己动手写一些简单的API,比如写一个简单的TODO API之类。

不过自己写API的时候经常需要造一些假数据,以及处理分页逻辑,开始的时候还觉得比较有意思,但久而久之就显得比较乏味了。

这时候你可能会想,有没有什么工具可以自动将一个线上的网站转化成简单的API呢?

这样的工具确实是存在的,而且不少,其中python语言中比较受欢迎的实现是https://github.com/gaojiuli/toapi项目,项目名称是toapi。

我们来简单体验一下这个库。

安装

首先安装。

pip install toapi
pip install cssselect

将重定向科技的课程列表页转化成API

http://www.itest.info/courses,这是重定向科技的课程列表页面,里面包含了目前我们所开设的全部课程。

现在我们将这个页面转化成API,这个API 返回每门课程的名称以及url。

from flask import request
from htmlparsing import Attr, Text
from toapi import Api, Item

api = Api()

@api.site('http://www.itest.info')
@api.list('.col-md-3')
@api.route('/courses?page={page}', '/courses')
@api.route('/courses', '/courses')
class Course(Item):
  url = Attr('a', 'href')
  title = Text('h4')

api.run(debug=True, host='0.0.0.0', port=12306)

运行

python app.py

查看结果

curl localhost:12306/courses

返回结果

{
  "Course": [
    {
      "title": "全栈测试开发班",
      "url": "/courses/9"
    },
    {
      "title": "性能测试从入门到精通班",
      "url": "/courses/7"
    },
    {
      "title": "接口自动化测试开发--Python班",
      "url": "/courses/6"
    },
    {
      "title": "Selenium自动化测试--Python班",
      "url": "/courses/2"
    }
  ]
}

官方例子

将hacknews网站转成API

from flask import request
from htmlparsing import Attr, Text
from toapi import Api, Item

api = Api()


@api.site('https://news.ycombinator.com')
@api.list('.athing')
@api.route('/posts?page={page}', '/news?p={page}')
@api.route('/posts', '/news?p=1')
class Post(Item):
  url = Attr('.storylink', 'href')
  title = Text('.storylink')


@api.site('https://news.ycombinator.com')
@api.route('/posts?page={page}', '/news?p={page}')
@api.route('/posts', '/news?p=1')
class Page(Item):
  next_page = Attr('.morelink', 'href')

  def clean_next_page(self, value):
    return api.convert_string('/' + value, '/news?p={page}', request.host_url.strip('/') + '/posts?page={page}')


api.run(debug=True, host='0.0.0.0', port=5000)

结果

{
 "Page": {
  "next_page": "http://127.0.0.1:5000/posts?page=2"
 },
 "Post": [
  {
   "title": "Mathematicians Crack the Cursed Curve",
   "url": "https://www.quantamagazine.org/mathematicians-crack-the-cursed-curve-20171207/"
  },
  {
   "title": "Stuffing a Tesla Drivetrain into a 1981 Honda Accord",
   "url": "https://jalopnik.com/this-glorious-madman-stuffed-a-p85-tesla-drivetrain-int-1823461909"
  }
 ]
}

总结

  • toapi使用非常简单,实际上就是把api的创建和爬虫结合起来了
  • toapi提供了比较完备的缓存机制,非首次访问的速度会很快

有一定爬虫能力的测试同学可以用toapi来实现简单的mock server,但仅限于get接口

以上就是python 利用toapi库自动生成api的详细内容,更多关于python toapi库自动生成api的资料请关注三水点靠木其它相关文章!

Python 相关文章推荐
跟老齐学Python之编写类之四再论继承
Oct 11 Python
flask + pymysql操作Mysql数据库的实例
Nov 13 Python
TensorFlow入门使用 tf.train.Saver()保存模型
Apr 24 Python
Python3实现的字典、列表和json对象互转功能示例
May 22 Python
python实现周期方波信号频谱图
Jul 21 Python
Face++ API实现手势识别系统设计
Nov 21 Python
python调用百度地图WEB服务API获取地点对应坐标值
Jan 16 Python
新年快乐! python实现绚烂的烟花绽放效果
Jan 30 Python
Python多版本开发环境管理工具介绍
Jul 03 Python
Python3中urlencode和urldecode的用法详解
Jul 23 Python
Python使用ffmpy将amr格式的音频转化为mp3格式的例子
Aug 08 Python
python二维图制作的实例代码
Dec 03 Python
协程Python 中实现多任务耗资源最小的方式
Oct 19 #Python
python爬取音频下载的示例代码
Oct 19 #Python
Python爬虫教程知识点总结
Oct 19 #Python
自定义Django_rest_framework_jwt登陆错误返回的解决
Oct 18 #Python
如何利用python读取micaps文件详解
Oct 18 #Python
Python中Yield的基本用法
Oct 18 #Python
Anaconda+spyder+pycharm的pytorch配置详解(GPU)
Oct 18 #Python
You might like
PHP中的类-什么叫类
2006/11/20 PHP
PHP 文件上传源码分析(RFC1867)
2009/10/30 PHP
PHP获取POST数据的几种方法汇总
2015/03/03 PHP
Zend Framework动作助手Json用法实例分析
2016/03/05 PHP
PHP保存Base64图片base64_decode的问题整理
2019/11/04 PHP
关于Laravel参数验证的一些疑与惑
2019/11/19 PHP
window.location.hash 使用说明
2010/11/08 Javascript
基于jQuery实现表格数据的动态添加与统计的代码
2011/01/31 Javascript
JQuery操作tr和td内容的方法实例
2013/03/06 Javascript
js实现右下角可关闭最小化div(可用于展示推荐内容)
2013/06/24 Javascript
几种设置表单元素中文本输入框不可编辑的方法总结
2013/11/25 Javascript
js中哈希表的几种用法总结
2014/01/28 Javascript
jQuery图片特效插件Revealing实现拉伸放大
2015/04/22 Javascript
利用JQUERY实现多个AJAX请求等待的实例
2017/12/14 jQuery
微信小程序学习笔记之获取位置信息操作图文详解
2019/03/29 Javascript
微信小程序实现搜索功能并跳转搜索结果页面
2019/05/18 Javascript
Vue页面渲染中key的应用实例教程
2021/01/12 Vue.js
[02:07]2018DOTA2亚洲邀请赛主赛事第三日五佳镜头 fy极限反杀
2018/04/06 DOTA
[02:29]大剑、皮鞭、女装,这届DOTA2勇士令状里都有
2020/07/17 DOTA
Python StringIO模块实现在内存缓冲区中读写数据
2015/04/08 Python
Python的Flask框架标配模板引擎Jinja2的使用教程
2016/07/12 Python
Python中文编码知识点
2019/02/18 Python
使用python进行波形及频谱绘制的方法
2019/06/17 Python
python中列表的切片与修改知识点总结
2019/07/23 Python
python pygame实现球球大作战
2019/11/25 Python
Django框架配置mysql数据库实现过程
2020/04/22 Python
Django数据统计功能count()的使用
2020/11/30 Python
通往英国高街的商店橱窗:Down Your High Street
2020/07/19 全球购物
L’Artisan Parfumeur官网:法国香水品牌
2020/08/11 全球购物
个人简历自我评价
2014/01/06 职场文书
大四学生找工作的自荐信
2014/03/27 职场文书
团代会邀请函
2015/02/02 职场文书
回门宴新娘答谢词
2015/09/29 职场文书
缓存替换策略及应用(以Redis、InnoDB为例)
2021/07/25 Redis
SpringBoot实现quartz定时任务可视化管理功能
2021/08/30 Java/Android
vue使用element-ui按需引入
2022/05/20 Vue.js