全新的API测试方法

python-apitist的Python项目详细描述


Build Status

Python蜂师

全新的API测试方法

安装

实际上这个项目并没有在pypi上发布, 所以唯一的办法是:

pip install python-apitist

默认挂钩

  • 请求调试日志挂钩
  • 请求信息日志挂钩
  • 预请求调试挂钩
  • 预计算信息挂钩
  • 响应调试挂钩
  • 响应信息挂钩

示例用法

fromapitist.hooksimportPrepRequestInfoLoggingHook,ResponseInfoLoggingHookfromapitist.requestsimportsessions=session()PrepRequestInfoLoggingHook.formatter="Best formatter {req.method}{req.url}"s.add_prep_request_hook(PrepRequestInfoLoggingHook)s.add_response_hook(ResponseInfoLoggingHook)s.post("https://httpbin.org/post",params={"q":"test"})

自定义挂钩

fromrequestsimportRequest,PreparedRequest,Responsefromapitist.requestsimportsession,RequestHook,PreparedRequestHook,ResponseHooks=session()classReqHook(RequestHook):defrun(self,request:Request)->Request:print(request.url)returnrequestclassPrepReqHook(PreparedRequestHook):defrun(self,request:PreparedRequest)->PreparedRequest:print(request.url)returnrequestclassRespHook(ResponseHook):defrun(self,response:Response)->Response:print(response.url)returnresponses.add_request_hook(ReqHook)s.add_prep_request_hook(PrepReqHook)s.add_response_hook(RespHook)s.get("https://ya.ru",params={"q":"test"})

使用构造函数

importattrimporttypingfromapitist.constructorimportconverterfromapitist.hooksimportRequestConverterHook,ResponseConverterHookfromapitist.requestsimportsessionclassExampleType:test=None@attr.sclassExampleStructure:test:ExampleType=attr.ib()@attr.sclassTestResponse:args:typing.Dict=attr.ib()data:str=attr.ib()files:typing.Dict=attr.ib()form:typing.Dict=attr.ib()headers:typing.Dict=attr.ib()json:ExampleStructure=attr.ib()origin:str=attr.ib()url:str=attr.ib()s=session()s.add_hook(RequestConverterHook)s.add_hook(ResponseConverterHook)defstructure_example_type(data,type_):example=ExampleType()example.test=datareturnexampledefunstructure_example_type(data):returndata.testconverter.register_hooks(ExampleType,structure_example_type,unstructure_example_type)t=ExampleType()t.test="test"struc=ExampleStructure(t)res=s.post("https://httpbin.org/post",data=struc).structure(TestResponse)print(res.structured.json.test.test)# test

使用随机数据生成器

首先创建一个随机类的实例:

fromapitist.randomimportRandomerrand=Randomer()

现在,您可以为不同类型添加自定义挂钩:

rand.add_type(str,lambda:str(random.random()))rand.add_type(float,lambda:random.random())

或者使用add_types

types={str:lambda:str(random.random()),float:lambda:random.random()}rand.add_types(types)

现在可以为给定类型或任何attrs类创建随机对象 定义的类型:

importattrimporttypingrand.object(str)# '0.6147789314561384'rand.object(float)# 0.4664297665239271@attr.sclassData:value1:str=attr.ib()value2:typing.List[str]=attr.ib()value3:typing.Tuple[float]=attr.ib()print(rand.object(Data))# Data(#   value1='0.491058956716827',#   value2=['0.6568036485871975'],#   value3=(0.8603579349502298,)# )

最好和Faker一起使用。 只需为str定义不同的子类,并为它们添加不同的钩子。 这样,您就可以为不同的str字段创建不同的数据。

另外,与RequestConverterHookResponseConverterHook一起使用 您可以轻松地创建随机的json对象,并将其发送到服务器。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java错误:无法解析方法   如何用相同的父标记和子标记在Java中解析XML?   日期使用Java中的时区偏移将本地时间转换为UTC   java如何在多进程、多线程环境中读取文件   WebView中的java弹出式对话框不在当前显示范围内,但在chrome浏览器中运行良好   只有2个参数的java递归二进制搜索方法   无法在java中调用函数   java JavaMail在Tomcat服务器上运行时停止工作   反射通过java程序生成、编译和运行java类   java Android:如何使ListView即使在应用程序关闭后仍保持禁用状态   在JAVA中识别匿名类实例   java渲染一个由三角形组成的立方体,在旋转时会产生奇怪的角度   函数式编程如何基于比较连续的列表元素将Java流减少为布尔值   java如何替换列表中的多个项目?   java Android如何获取随机sqlite数据?   java我已经将useSSL设置为false,但仍然收到警告   java使用动态变量生成jlabel   apachespark:java。lang.NoClassDefFoundError v2TableWithV1回退