博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【AMAD】betamax -- 一个ruby-VCR的模仿品,只支持requests
阅读量:5244 次
发布时间:2019-06-14

本文共 1608 字,大约阅读时间需要 5 分钟。

简介

betamax会记录你的HTTP操作,可以让你在测试的时候不必重复进行真实的请求。

动机

如果你的代码需要和外部资源一起运作,那么测试这段代码的方法就叫做集成测试

但是,其实你并没有办法确保外部资源总是如你所愿,因为它并不在你的控制之下。而你的测试,其实只需要针对你处理这个资源的部分代码就好了。

一般测试外部的HTTP API有两个办法:

  1. 每次运行测试,都去请求这个资源。因为资源不在你的控制之下,访问外部资源有很多异常情况,而且访问很多接口会让你的测试运行非常的慢!
  2. 使用mock手段。mock是一个好办法,但是编写mock代码是非常啰嗦的。

为什么我们不能记录下第一次访问资源时的response,之后就使用这个response来测试就好了。

已经有人做过这件事了,就是Ruby的VCR库。

作用

记录下第一次请求返回的response,保存到文件中。之后的请求,都会直接返回这个response的值。

这个方式可以极大的加速测试案例的运行速度。

并且,这个库还提供了pytest插件等方便的功能.

但是,这个库只支持requests,如果你要记录其它的HTTP Client,请使用vcrpy

用法

from betamax import Betamaxfrom requests import Sessionfrom unittest import TestCase# 全局配置, 加入response记录的存放文件夹with Betamax.configure() as config:    config.cassette_library_dir = 'tests/fixtures/cassettes'class TestGitHubAPI(TestCase):    def setUp(self):        self.session = Session()        self.headers.update(...)    # 可以通过Betamax instance的上下文管理器    # 使用`.user_cassette()`方法来设置存放数据的名称    def test_user(self):        with Betamax(self.session) as vcr:            vcr.use_cassette('user')            resp = self.session.get('https://api.github.com/user',                                    auth=('user', 'pass'))            assert resp.json()['login'] is not None    # `.user_cassette()` 本身,也支持上下文管理器协议    def test_repo(self):        with Betamax(self.session).use_cassette('repo'):            resp = self.session.get(                'https://api.github.com/repos/sigmavirus24/github3.py'                )            assert resp.json()['owner'] != {}

个人评分

类型 评分
实用性 ⭐️⭐️⭐️⭐️
易用性 ⭐️⭐️⭐️
有趣性 ⭐️⭐️⭐️⭐️

  1.  

  2.  

  3.  

转载于:https://www.cnblogs.com/thomaszdxsn/p/AMADbetamax--yi-gerubyVCR-de-mo-fang-pin-dan-shi-z.html

你可能感兴趣的文章
label标签作用
查看>>
Selenium2之Web自动化编写配置(Java)
查看>>
windown快速安装xgboost
查看>>
tarjan(缩点)
查看>>
Lombok插件
查看>>
Linux上安装Libssh2
查看>>
自定义EL函数
查看>>
stm32的电源
查看>>
splice的多种用法
查看>>
20162304 2017-2018-1 《程序设计与数据结构》第二周学习总结
查看>>
九.python面向对象(双下方法内置方法)
查看>>
2018-09-12
查看>>
go:channel(未完)
查看>>
[JS]递归对象或数组
查看>>
CSS与Theme的作用——Asp.Net
查看>>
LeetCode(17) - Letter Combinations of a Phone Number
查看>>
20165115 2017-2018-2 《Java程序设计》第四周学习总结
查看>>
Linux查找命令对比(find、locate、whereis、which、type、grep)
查看>>
WPF自定义集合控件概述与遇到的问题
查看>>
路由器外接硬盘做nas可行吗?
查看>>