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绘制人人网好友关系图示例
Apr 01 Python
PyMongo安装使用笔记
Apr 27 Python
Python中的字符串类型基本知识学习教程
Feb 04 Python
Python 基础教程之包和类的用法
Feb 23 Python
利用django如何解析用户上传的excel文件
Jul 24 Python
Python with语句上下文管理器两种实现方法分析
Feb 09 Python
浅谈python中真正关闭socket的方法
Dec 18 Python
在python中用url_for构造URL的方法
Jul 25 Python
djano一对一、多对多、分页实例代码
Aug 16 Python
python 实现将Numpy数组保存为图像
Jan 09 Python
Pytorch在dataloader类中设置shuffle的随机数种子方式
Jan 14 Python
Django CBV模型源码运行流程详解
Aug 17 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
海贼王动画变成“真人”后,凯多神还原,雷利太帅了!
2020/04/09 日漫
基于pear auth实现登录验证
2010/02/26 PHP
smarty模板中使用get、post、request、cookies、session变量的方法
2014/04/24 PHP
MySql数据库查询结果用表格输出PHP代码示例
2015/03/20 PHP
详解PHP变量传值赋值和引用赋值变量销毁
2019/03/23 PHP
利用JQuery动画制作滑动菜单项效果实现步骤及代码
2013/02/07 Javascript
jQuery动态地获取系统时间实现代码
2013/05/24 Javascript
js+css实现增加表单可用性之提示文字
2013/06/03 Javascript
浅析JavaScript中的隐式类型转换
2013/12/05 Javascript
xmlhttp缓存清除的2种解决方法
2013/12/13 Javascript
javascript将数字转换整数金额大写的方法
2015/01/27 Javascript
javascript时间排序算法实现活动秒杀倒计时效果
2021/01/28 Javascript
JavaScript计算值然后把值嵌入到html中的实现方法
2016/10/29 Javascript
详解vue嵌套路由-params传递参数
2017/05/23 Javascript
nodejs socket实现的服务端和客户端功能示例
2017/06/02 NodeJs
vue插件开发之使用pdf.js实现手机端在线预览pdf文档的方法
2018/07/12 Javascript
Vue-router的使用和出现空白页,路由对象属性详解
2018/09/03 Javascript
Angularjs之ngModel中的值验证绑定方法
2018/09/13 Javascript
vue+eslint+vscode配置教程
2019/08/09 Javascript
在vue项目实现一个ctrl+f的搜索功能
2020/02/28 Javascript
jQuery cookie的公共方法封装和使用示例
2020/06/01 jQuery
栈和队列数据结构的基本概念及其相关的Python实现
2015/08/24 Python
python基础之包的导入和__init__.py的介绍
2018/01/08 Python
局域网内python socket实现windows与linux间的消息传送
2019/04/19 Python
pytorch使用Variable实现线性回归
2019/05/21 Python
python matplotlib:plt.scatter() 大小和颜色参数详解
2020/04/14 Python
如何基于windows实现python定时爬虫
2020/05/01 Python
质检部职责
2013/12/28 职场文书
大学生2014全国两会学习心得体会
2014/03/10 职场文书
产品生产计划书
2014/05/07 职场文书
教师师德师风自我剖析材料
2014/09/29 职场文书
消防安全主题班会
2015/08/12 职场文书
情况说明书怎么写
2015/10/08 职场文书
小学语文教师研修感悟
2015/11/18 职场文书
2019垃圾分类宣传口号汇总
2019/08/16 职场文书
Redis高可用集群redis-cluster详解
2022/03/20 Redis