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实现计算倒数的方法
Jul 11 Python
以视频爬取实例讲解Python爬虫神器Beautiful Soup用法
Jan 20 Python
python中json格式数据输出的简单实现方法
Oct 31 Python
Python set常用操作函数集锦
Nov 15 Python
Python实现的选择排序算法示例
Nov 29 Python
python实现kNN算法
Dec 20 Python
python实现数据写入excel表格
Mar 25 Python
Ubuntu16.04/树莓派Python3+opencv配置教程(分享)
Apr 02 Python
解决Python下json.loads()中文字符出错的问题
Dec 19 Python
Django 实现图片上传和显示过程详解
Jul 18 Python
如何基于python操作json文件获取内容
Dec 24 Python
python实现3D地图可视化
Mar 25 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
thinkPHP数据查询常用方法总结【select,find,getField,query】
2017/03/15 PHP
php实现简单的守护进程创建、开启与关闭操作
2019/08/13 PHP
PHP getID3类的使用方法学习笔记【附getID3源码下载】
2019/10/18 PHP
通过JavaScript使Div居中并随网页大小改变而改变
2013/06/24 Javascript
JavaScript 中的日期和时间及表示标准介绍
2013/08/21 Javascript
Event altKey,ctrlKey,shiftKey属性解析
2013/12/18 Javascript
jQuery制作网页版选项卡
2016/07/28 Javascript
AngularJs 动态加载模块和依赖
2016/09/15 Javascript
JavaScript对象创建模式实例汇总
2016/10/03 Javascript
javascript对浅拷贝和深拷贝的详解
2016/10/14 Javascript
基于node搭建服务器,写接口,调接口,跨域的实例
2018/05/13 Javascript
jQuery基于闭包实现的显示与隐藏div功能示例
2018/06/09 jQuery
使用Angular-CLI构建NPM包的方法
2018/09/07 Javascript
微信小程序页面间值传递的两种方法
2018/11/26 Javascript
javascript面向对象三大特征之封装实例详解
2019/07/24 Javascript
详解基于原生JS验证表单组件xy-form
2019/08/20 Javascript
对layui初始化列表的CheckBox属性详解
2019/09/13 Javascript
在vue中动态添加class类进行显示隐藏实例
2019/11/09 Javascript
bootstrap-paginator服务器端分页使用方法详解
2020/02/13 Javascript
如何区分vue中的v-show 与 v-if
2020/09/08 Javascript
[38:23]2014 DOTA2国际邀请赛中国区预选赛 5 23 CIS VS LGD第一场
2014/05/24 DOTA
浅谈numpy数组中冒号和负号的含义
2018/04/18 Python
python斐波那契数列的计算方法
2018/09/27 Python
Python设计模式之观察者模式原理与用法详解
2019/01/16 Python
PyCharm使用之配置SSH Interpreter的方法步骤
2019/12/26 Python
一文了解python 3 字符串格式化 F-string 用法
2020/03/04 Python
python tkinter实现连连看游戏
2020/11/16 Python
python-地图可视化组件folium的操作
2020/12/14 Python
HTML5 drag和drop具体使用详解
2021/01/18 HTML / CSS
中海讯通笔试题
2015/09/15 面试题
会计电算化应届生自荐信
2014/02/25 职场文书
新闻发布会主持词
2014/03/28 职场文书
金榜题名主持词
2015/07/02 职场文书
《悬崖边的树》读后感2篇
2019/12/02 职场文书
《学会生存》读后感3篇
2019/12/09 职场文书
HTML实现仿Windows桌面主题特效的实现
2022/06/28 HTML / CSS