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 09 Python
Python程序员开发中常犯的10个错误
Jul 07 Python
python写xml文件的操作实例
Oct 05 Python
Python模仿POST提交HTTP数据及使用Cookie值的方法
Nov 10 Python
python得到单词模式的示例
Oct 15 Python
解决python3 pika之连接断开的问题
Dec 18 Python
python画图--输出指定像素点的颜色值方法
Jul 03 Python
python实现电子书翻页小程序
Jul 23 Python
利用python计算时间差(返回天数)
Sep 07 Python
python的scipy实现插值的示例代码
Nov 12 Python
Python语言编写智力问答小游戏功能
Oct 13 Python
Python如何使用ConfigParser读取配置文件
Nov 12 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
15种PHP Encoder的比较
2007/04/17 PHP
由php的call_user_func传reference引发的思考
2010/07/23 PHP
ThinkPHP做文字水印时提示call an undefined function exif_imagetype()解决方法
2014/10/30 PHP
php使用fopen创建utf8编码文件的方法
2014/10/31 PHP
PHP读取PPT文件的方法
2015/12/10 PHP
PHP版本常用的排序算法汇总
2015/12/20 PHP
javascript 在网页中的运用(asp.net)
2009/11/23 Javascript
JQuery文本框高亮显示插件代码
2011/04/02 Javascript
JavaScript 判断日期格式是否正确的实现代码
2011/07/04 Javascript
一个级联菜单代码学习及removeClass与addClass的应用
2013/01/24 Javascript
JQuery对表单元素的基本操作使用总结
2014/07/18 Javascript
JSON.stringify转换JSON时日期时间不准确的解决方法
2014/08/08 Javascript
js实现同一页面多个不同运动效果的方法
2015/04/10 Javascript
Radio 单选JS动态添加的选项onchange事件无效的解决方法
2016/12/12 Javascript
基于Marquee.js插件实现的跑马灯效果示例
2017/01/25 Javascript
JavaScript实现二分查找实例代码
2017/02/22 Javascript
微信小程序 ecshop地址三级联动实现实例代码
2017/02/28 Javascript
详解Vue2 无限级分类(添加,删除,修改)
2017/03/07 Javascript
Avalonjs双向数据绑定与监听的实例代码
2017/06/23 Javascript
基于node.js的fs核心模块读写文件操作(实例讲解)
2017/09/10 Javascript
JS实现点击按钮可实现编辑功能
2018/07/03 Javascript
关于vue的列表图片选中打钩操作
2020/09/09 Javascript
js删除对象中的某一个字段的方法实现
2021/01/11 Javascript
详解Python中映射类型(字典)操作符的概念和使用
2015/08/19 Python
python实现字符串连接的三种方法及其效率、适用场景详解
2017/01/13 Python
python自动发邮件库yagmail的示例代码
2018/02/23 Python
TensorFlow通过文件名/文件夹名获取标签,并加入队列的实现
2020/02/17 Python
加拿大时尚少女服装品牌:Garage
2016/10/10 全球购物
Expedia丹麦:全球领先的旅游网站
2018/03/18 全球购物
加拿大时装零售商:Influence U
2018/12/22 全球购物
了解AppleTalk协议吗
2014/04/01 面试题
军训鉴定表自我鉴定
2014/02/13 职场文书
国际贸易毕业生求职信范文
2014/02/21 职场文书
公务员平时考核实施方案
2014/03/11 职场文书
2014党员批评和自我批评思想汇报
2014/09/21 职场文书
SpringBoot整合minio快速入门教程(代码示例)
2022/04/03 Java/Android